--- +++ @@ -136,6 +136,11 @@ # is created. For job running in the background, the log # # file is always created. Default is "yes" # ############################################################################## +# remove all Mentat paths from LD_LIBRARY_PATH +LD_LIBRARY_PATH=:$LD_LIBRARY_PATH: +LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([!(:)])mentat2023.2+([!(:)])/:} +LD_LIBRARY_PATH=${LD_LIBRARY_PATH//+([(:)])/:} +LD_LIBRARY_PATH=${LD_LIBRARY_PATH#:}; LD_LIBRARY_PATH=${LD_LIBRARY_PATH%:} # set DIR to the directory in which this script is REALCOM="`/bin/ls -l $0 |awk '{ print $NF; }'`" DIR=`dirname $REALCOM` @@ -303,7 +308,23 @@ . "$DIR/getarch" + +# getting user subroutine file name +found=0 +for i in "$@"; do + if test $found = 1; then + DAMASK_USER=$i + found=0 + fi + case $i in + -u* | -U*) + found=1 + ;; + esac +done +# sourcing include_linux64 (needs DAMASK_USER to be set) . $MARC_INCLUDE + # # @@ -406,7 +427,7 @@ did= vid= user= -usersubname= +usernoext= objs= qid=background cpu= @@ -677,50 +698,19 @@ esac ;; -u* | -U*) - user=`dirname $value`/`$BASENAME $value .f` - usersubname=$user - basefile=`$BASENAME $value` - if test ${basefile##*.} = f - then - user=`dirname $value`/`$BASENAME $value .f` - usersubname=$user.f - elif test ${basefile##*.} = F - then - user=`dirname $value`/`$BASENAME $value .F` - usersubname=$user.F - elif test ${basefile##*.} = f90 - then - user=`dirname $value`/`$BASENAME $value .f90` - usersubname=$user.f90 - elif test ${basefile##*.} = F90 - then - user=`dirname $value`/`$BASENAME $value .F90` - usersubname=$user.F90 - fi + user=$value case $user in \/*) ;; *) user=`pwd`/$user - usersubname=`pwd`/$usersubname ;; esac - if test ! -f $usersubname - then - if test -f $usersubname.f - then - usersubname=$usersubname.f - elif test -f $usersubname.F - then - usersubname=$usersubname.F - elif test -f $usersubname.f90 - then - usersubname=$usersubname.f90 - elif test -f $usersubname.F90 - then - usersubname=$usersubname.F90 - fi - fi + usernoext=$user + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90` ;; -obj | -OBJ) objs="$value" @@ -1208,12 +1198,12 @@ fi fi fi - if test "$usersubname" + if test "$user" then - if test ! -f $usersubname + if test ! -f $user then error="$error -user subroutine file $usersubname not accessible" +user subroutine file $user not accessible" fi fi if test "$objs" @@ -1532,7 +1522,7 @@ Marc shared lib : $progdll Version type : $mode Job ID : $DIRJID/$jid$extra_job_info -User subroutine name : $usersubname +User subroutine name : $user User objects/libs : $objs Restart file job ID : $rid Substructure file ID : $sid @@ -1565,7 +1555,7 @@ Marc shared lib : $progdll Version type : $mode Job ID : $DIRJID/$jid$extra_job_info -User subroutine name : $usersubname +User subroutine name : $user User objects/libs : $objs Restart file job ID : $rid Substructure file ID : $sid @@ -1688,7 +1678,7 @@ ;; esac fi - $ECHO "User subroutine name ($usersubname)? $ECHOTXT" + $ECHO "User subroutine name ($user)? $ECHOTXT" read value if test "$value" then @@ -1697,50 +1687,19 @@ user= ;; *) - user=`dirname $value`/`$BASENAME $value .f` - usersubname=$user - basefile=`$BASENAME $value` - if test ${basefile##*.} = f - then - user=`dirname $value`/`$BASENAME $value .f` - usersubname=$user.f - elif test ${basefile##*.} = F - then - user=`dirname $value`/`$BASENAME $value .F` - usersubname=$user.F - elif test ${basefile##*.} = f90 - then - user=`dirname $value`/`$BASENAME $value .f90` - usersubname=$user.f90 - elif test ${basefile##*.} = F90 - then - user=`dirname $value`/`$BASENAME $value .F90` - usersubname=$user.F90 - fi + user=$value case $user in \/*) ;; *) user=`pwd`/$user - usersubname=`pwd`/$usersubname ;; esac - if test ! -f $usersubname - then - if test -f $usersubname.f - then - usersubname=$usersubname.f - elif test -f $usersubname.F - then - usersubname=$usersubname.F - elif test -f $usersubname.f90 - then - usersubname=$usersubname.f90 - elif test -f $usersubname.F90 - then - usersubname=$usersubname.F90 - fi - fi + usernoext=$user + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .F` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .for` + usernoext=`dirname $usernoext`/`$BASENAME $usernoext .f90` ;; esac fi @@ -2275,11 +2234,12 @@ # # user subroutine used # +# add DAMASK options for linking + DAMASK="-lstdc++" if test "$user" then -# program=$user.marc - program=$DIRJOB/`$BASENAME $user .f`.marc + program=$usernoext.marc case $program in \/* | \.\/*) bd= @@ -2392,7 +2352,7 @@ fi if test "$user" then - execpath=$DIRJOB/`$BASENAME $user .f`.marc + execpath=$usernoext.marc usersub=1 fi export execpath @@ -3275,33 +3235,16 @@ echo if test "$user" then - userobj=$DIRJOB/`$BASENAME $user .f`.o - basefile=`$BASENAME $usersubname` - if test ${basefile##*.} = f - then - usersub=$DIRJOB/`$BASENAME $user .f`.F - ln -sf "$user.f" "$usersub" - else - usersub=$usersubname - fi - + userobj=$usernoext.o fi cat > $jid.runmarcscript << END4 if test "$user" then - if test ${basefile##*.} = f - then - ln -sf "$user.f" "$usersub" - fi - $FORTRAN $usersub -o $userobj || \ + $DFORTRANMP $user -o $userobj || \ { - echo "$0: compile failed for $usersubname" + echo "$0: compile failed for $user" exit 1 } /bin/rm $program 2>/dev/null - if test ${basefile##*.} = f - then - /bin/rm -f "$usersub" - fi fi @@ -3323,6 +3266,7 @@ $TKLIBS \ $MRCLIBS \ $METISLIBS \ + $DAMASK \ $SFLIB \ $OPENSSL_LIB \ $SYSLIBS \ @@ -3336,6 +3280,9 @@ prgsav=yes fi /bin/rm $userobj 2>/dev/null +/bin/rm $DIRJOB/*.mod 2>/dev/null +/bin/rm $DIRJOB/*.smod 2>/dev/null +/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null # # run marc @@ -3383,7 +3330,7 @@ fi else if test $cpdll = yes; then - filename=`basename $usersubname .f` + filename=$usernoext /bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null fi if test $rmdll = yes @@ -3549,7 +3496,7 @@ # first copy over the user sub if local directories if test ${dirstatus[$counter]} = "local" then - $RCP $user.f $i:$DIR1/ + $RCP $user $i:$DIR1/ fi # do the compilation on the other machine if test ${dirstatus[$counter]} = "shared" @@ -3562,21 +3509,21 @@ remoteuser=$DIR1/`$BASENAME $user` $RSH $i /bin/rm $remoteprog 2> /dev/null echo - $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog + $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog # check if successful, the new executable should be there line=`$RSH $i /bin/ls $remoteprog 2> /dev/null` if test "$line" then echo compilation and linking successful on host $i else - echo "$0: compile failed for $usersubname on host $i" + echo "$0: compile failed for $user on host $i" echo " $PRODUCT Exit number 3" exit 1 fi # remove the user subroutine on remote machine if test ${dirstatus[$counter]} = "local" then - $RSH $i /bin/rm $remoteuser.f 2> /dev/null + $RSH $i /bin/rm $remoteuser 2> /dev/null fi fi fi @@ -3586,27 +3533,15 @@ if test "$userhost" then echo - echo "Compiling and linking user subroutine $user.f on host `hostname`" - fi - userobj=$DIRJOB/`$BASENAME $user .f`.o - basefile=`$BASENAME $usersubname` - if test ${basefile##*.} = f - then - usersub=$DIRJOB/`$BASENAME $user .f`.F - ln -sf "$user.f" "$usersub" - else - usersub=$usersubname + echo "Compiling and linking user subroutine $user on host `hostname`" fi + userobj=$usernoext.o - $FORTRAN $usersub -o $userobj || \ + $DFORTRANMP $user -o $userobj || \ { - echo "$0: compile failed for $usersubname" + echo "$0: compile failed for $user" echo " $PRODUCT Exit number 3" exit 1 } /bin/rm $program 2>/dev/null - if test ${basefile##*.} = f - then - /bin/rm -f "$usersub" - fi fi # if test $user @@ -3628,6 +3563,7 @@ $TKLIBS \ $MRCLIBS \ $METISLIBS \ + $DAMASK \ $SFLIB \ $OPENSSL_LIB \ $SYSLIBS \ @@ -3669,6 +3605,9 @@ prgsav=yes fi # if test $link /bin/rm $userobj 2>/dev/null +/bin/rm $DIRJOB/*.mod 2>/dev/null +/bin/rm $DIRJOB/*.smod 2>/dev/null +/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null # # run marc @@ -3763,7 +3702,7 @@ else #dllrun >0 if test $cpdll = yes; then - filename=`basename $usersubname .f` + filename=$usernoext /bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null fi if test $rmdll = yes;then @@ -3888,7 +3827,7 @@ # first copy over the user sub if local directories if test ${dirstatus[$counter]} = "local" then - $RCP $user.f $i:$DIR1/ + $RCP $user $i:$DIR1/ fi # do the compilation on the other machine if test ${dirstatus[$counter]} = "shared" @@ -3901,20 +3840,20 @@ remoteuser=$DIR1/`$BASENAME $user` $RSH $i /bin/rm $remoteprog 2> /dev/null echo - $RSH $i $DIR2/tools/comp_user $DIR2 $DIR1 $remoteuser $remoteprog + $RSH $i $DIR2/tools/comp_damask_mp $DIR2 $DIR1 $remoteuser $remoteprog # check if successful, the new executable should be there line=`$RSH $i /bin/ls $remoteprog 2> /dev/null` if test "$line" then echo compilation and linking successful on host $i else - echo "$0: compile failed for $usersubname on host $i" + echo "$0: compile failed for $user on host $i" exit 1 fi # remove the user subroutine on remote machine if test ${dirstatus[$counter]} = "local" then - $RSH $i /bin/rm $remoteuser.f 2> /dev/null + $RSH $i /bin/rm $remoteuser 2> /dev/null fi fi fi @@ -3924,26 +3863,14 @@ if test "$userhost" then echo - echo "Compiling and linking user subroutine $user.f on host `hostname`" - fi - userobj=$DIRJOB/`$BASENAME $user .f`.o - basefile=`$BASENAME $usersubname` - if test ${basefile##*.} = f - then - usersub=$DIRJOB/`$BASENAME $user .f`.F - ln -sf "$user.f" "$usersub" - else - usersub=$usersubname + echo "Compiling and linking user subroutine $user on host `hostname`" fi + userobj=$usernoext.o - $FORTRAN $usersub -o $userobj || \ + $DFORTRANMP $user -o $userobj || \ { - echo "$0: compile failed for $usersubname" + echo "$0: compile failed for $user" exit 1 } /bin/rm $program 2>/dev/null - if test ${basefile##*.} = f - then - /bin/rm -f "$usersub" - fi fi # if test $user @@ -3965,6 +3892,7 @@ $TKLIBS \ $MRCLIBS \ $METISLIBS \ + $DAMASK \ $SFLIB \ $OPENSSL_LIB \ $SYSLIBS \ @@ -4005,7 +3933,9 @@ prgsav=yes fi # if test $link /bin/rm $userobj 2>/dev/null - +/bin/rm $DIRJOB/*.mod 2>/dev/null +/bin/rm $DIRJOB/*.smod 2>/dev/null +/bin/rm $DIRJOB/*_genmod.f90 2>/dev/null # done if no job id given if test -z "$jid" then @@ -4125,7 +4055,7 @@ else #dllrun >0 if test $cpdll = yes; then - filename=`basename $usersubname .f` + filename=$usernoext /bin/cp $DIRJOB/$marcdll $DIRJOB/${filename}_$marcdll 2>/dev/null fi if test $rmdll = yes;then