#!/bin/sh
if test $# -eq 0 -o $# -ge 10 -o "$1" = "-help"
then
	echo "usage: $0 <applicationname> <dim_x> [<dim_y>] [<dim_z>]";
	echo "purpose: start ug application on parallel machine";
	exit 1;
fi

if test "x$UGROOT" = "x"
then 
	echo "$0: to use $0 set shell environment variable UGROOT!";
	exit 1;
fi

# determine MODEL
MODEL=`grep '^MODEL[ \t]' $UGROOT/ug.conf | awk '{ print $3 }' -`
ARCH=`grep '^ARCH[ \t]' $UGROOT/ug.conf | awk '{ print $3 }' -` 

# determine processor topology
if test $# -eq 1
then
	PROC=1
fi
if test $# -ge 2
then
	PROC=$2
fi

case $MODEL in
	PVM)
		echo $1 -sz $PROC 1 $3 $4 $5 $6 $7 $8 $9;
		$1 -sz $PROC 1 $3 $4 $5 $6 $7 $8 $9;
		;;
	MPI)
	    case $ARCH in
		NEC)
			echo mpisx -p $PROC -e ./$1 $3 $4 $5 $6 $7 $8 $9;
			mpisx -p $PROC -e ./$1 $4 $5 $6 $7 $8 $9;
			;;
	    SP2)
			echo poe $1 $3 $4 $5 $6 $7 $8 $9 -procs $PROC -rmpool 0;
			poe $1 $3 $4 $5 $6 $7 $8 $9 -procs $PROC -rmpool 0
			;;
		*)
			echo mpirun -np $PROC	./$1 $3 $4 $5 $6 $7 $8 $9;
			mpirun -np $PROC ./$1 $3 $4 $5 $6 $7 $8 $9;
			;;
		esac;
        ;;
	NX)
		echo isub -sz $PROC   $1 $3 $4 $5 $6 $7 $8 $9;
		isub -sz $PROC   $1 $3 $4 $5 $6 $7 $8 $9;
        ;;
	PARIX)
		echo px3 run -a ccall $PROC $1;
		px3 run -a ccall $PROC $1;
        ;;
	SHMEM)
		echo mpprun -n $PROC $1 $3 $4 $5 $6 $7 $8 $9;
		mpprun -n $PROC $1 $3 $4 $5 $6 $7 $8 $9;
		;;
	SHMEMT3D)
		if test -f $1$2
		then
			if test `find . -newer $1 -name $1$2 | wc -l` -ge 1
			then
				echo mppexec $1$2 $3 $4 $5 $6 $7 $8 $9;
	 		    mppexec $1$2 $3 $4 $5 $6 $7 $8 $9;
				exit 0;
			fi
		fi
		echo fixing executable...
		mppfixpe -o $1$2 -X $2 $1;
		echo mppexec $1$2 $3 $4 $5 $6 $7 $8 $9;
		mppexec $1$2 $3 $4 $5 $6 $7 $8 $9;
		;;
	SEQ)
		$1 $3 $4 $5 $6 $7 $8 $9;
        ;;
    *)
        echo "MODEL $MODEL not supported";
        exit 1;
        ;;
    esac;


