#!/bin/sh
#
# This script downloads data (mostly meshes) needed run demos
# Anders Logg, 2013-03-21

download_mesh()
{
    OS=$(uname -s)

    DEMO=$1
    MESH=$2

    echo "Downloading $MESH to $DEMO"

    # Use zsync if available, otherwise use curl/wget
    if hash zsync 2>/dev/null; then
        zsync -q -o $DEMO/$MESH http://fenicsproject.org/pub/data/meshes/$MESH.zsync
    else
        if [ "$OS" = "Darwin" ]; then
            output=`curl --output $MESH http://fenicsproject.org/pub/data/meshes/$MESH 2>&1`
        else
            output=`wget http://fenicsproject.org/pub/data/meshes/$MESH 2>&1`
        fi

	    # If download fails
	    if [ $? -ne 0 ]; then
            echo "$output" 1>&2
	        exit 1
	    fi

        mv $MESH $DEMO
    fi
}

download_mesh demo/documented/eigenvalue                     box_with_dent.xml.gz
download_mesh demo/undocumented/mixed-poisson-sphere         sphere_16.xml.gz
download_mesh demo/undocumented/advection-diffusion          dolfin_fine.xml.gz
download_mesh demo/undocumented/advection-diffusion          dolfin_fine_velocity.xml.gz
download_mesh demo/undocumented/advection-diffusion          dolfin_fine_subdomains.xml.gz
download_mesh demo/undocumented/contact-vi-snes              circle_yplane.xml.gz
download_mesh demo/undocumented/contact-vi-tao               circle_yplane.xml.gz
download_mesh demo/undocumented/multistage-solver            dolfin_fine.xml.gz
download_mesh demo/undocumented/multistage-solver            dolfin_fine_velocity.xml.gz
download_mesh demo/undocumented/multistage-solver            dolfin_fine_subdomains.xml.gz
download_mesh demo/undocumented/elasticity                   gear.xml.gz
download_mesh demo/undocumented/lift-drag                    dolfin_fine.xml.gz
download_mesh demo/undocumented/lift-drag                    dolfin_fine_pressure.xml.gz
download_mesh demo/documented/tensor-weighted-poisson        unitsquare_32_32.xml.gz
download_mesh demo/documented/tensor-weighted-poisson        unitsquare_32_32_c01.xml.gz
download_mesh demo/documented/tensor-weighted-poisson        unitsquare_32_32_c00.xml.gz
download_mesh demo/documented/tensor-weighted-poisson        unitsquare_32_32_c11.xml.gz
download_mesh demo/documented/stokes-taylor-hood/            dolfin_fine.xml.gz
download_mesh demo/documented/stokes-taylor-hood             dolfin_fine_subdomains.xml.gz
download_mesh demo/undocumented/elastodynamics               dolfin_fine.xml.gz
download_mesh demo/undocumented/auto-adaptive-navier-stokes  channel_with_flap.xml.gz
download_mesh demo/documented/stokes-mini                    dolfin_fine.xml.gz
download_mesh demo/documented/stokes-mini                    dolfin_fine_subdomains.xml.gz
download_mesh demo/documented/subdomains                     dolfin_fine.xml.gz
download_mesh demo/documented/stokes-stabilized              dolfin_fine.xml.gz
download_mesh demo/documented/stokes-stabilized              dolfin_fine_subdomains.xml.gz
download_mesh demo/undocumented/plot                         dolfin_fine.xml.gz
download_mesh demo/undocumented/dg-advection-diffusion       unitsquare_64_64.xml.gz
download_mesh demo/undocumented/dg-advection-diffusion       unitsquare_64_64_velocity.xml.gz
download_mesh demo/documented/bcs                            aneurysm.xml.gz
download_mesh demo/documented/navier-stokes                  lshape.xml.gz
download_mesh demo/undocumented/mesh-quality                 dolfin_fine.xml.gz
download_mesh test/unit/fem/python                           aneurysm.xml.gz
download_mesh test/unit/io                                   snake.xml.gz
download_mesh test/unit/nls/python                           doughnut.xml.gz
download_mesh test/unit/mesh                                 boxes.xml.gz
