mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-21 06:25:21 -04:00
414 lines
9.8 KiB
Tcsh
Executable file
414 lines
9.8 KiB
Tcsh
Executable file
#!/bin/csh
|
|
|
|
# UNIX workstation parallel and sequential execution of test jobs
|
|
|
|
# Usage:
|
|
# runtest.unix [-procs nproc] testdir1 [testdir2 ...]
|
|
#
|
|
# Return 0 if all jobs complete successfully and outputs compare OK
|
|
# with the correct output
|
|
# Return 1 otherwise.
|
|
#
|
|
|
|
# Gets executable from environment variable NWCHEM_EXECUTABLE or
|
|
# uses the daily NWChem release build
|
|
# Gets parallel executable from environment variable PARALLEL_PATH or
|
|
# assumes it is in your path.
|
|
# Gets nwparse.pl from enironement varialle NWPARSE or looks in your
|
|
# nwchem tree for $NWCHEM_TOP/QA/nwparse.pl
|
|
|
|
# A test is specified by the path to the directory containing
|
|
# the test inputs and outputs. The input file is assumed to
|
|
# begin with the same name as the directory.
|
|
#
|
|
# E.g., if the test is specified as ./small/o3grad then
|
|
# - the input file will be ./small/o3grad/o3grad.nw
|
|
# - the verified output will be ./small/o3grad/o3grad.out
|
|
|
|
# A subdirectory of the current directory named scratchdir is deleted
|
|
# and remade for each calculation, and deleted at job end.
|
|
|
|
# A subdirectory of the current directory name testoutputs is made
|
|
# if necessary and all outputs are routed there. Existing outputs
|
|
# are overwritten. The name of the output file is formed by replacing
|
|
# the trailing .nw with .out. In this directory is also put the
|
|
# output of nwparse for the verified and the test outputs.
|
|
|
|
set NWCHEM_PROJ_PATH = /msrc/proj/nwchem/bind
|
|
|
|
if ($#argv == 0) then
|
|
goto USAGE
|
|
endif
|
|
@ NPROC = 0
|
|
@ argv_set_nproc = 0
|
|
@ get_nproc = 0
|
|
set args_2_use = removeme
|
|
foreach argument ($argv)
|
|
if ($get_nproc) then
|
|
@ NPROC = $argument
|
|
@ argv_set_nproc++
|
|
@ get_nproc = 0
|
|
else if ($argument == "procs") then
|
|
@ get_nproc = 1
|
|
else
|
|
set args_2_use = ($args_2_use $argument)
|
|
endif
|
|
end
|
|
#
|
|
# now remove first dummy argument from args_2_use
|
|
set args_2_use = ($args_2_use[2-])
|
|
|
|
|
|
set CURDIR = $cwd
|
|
|
|
# Figure out where the executable is.
|
|
|
|
if ($?NWCHEM_EXECUTABLE) then
|
|
set NWCHEM = $NWCHEM_EXECUTABLE
|
|
else
|
|
set NWCHEM = $NWCHEM_PROJ_PATH/nwchem
|
|
endif
|
|
|
|
if (! -x $NWCHEM) then
|
|
echo cannot execute $NWCHEM
|
|
exit 1
|
|
endif
|
|
|
|
# Figure out where the nwparse.pl script is.
|
|
|
|
if (! $?NWPARSE) then
|
|
if (-f nwparse.pl) then
|
|
set NWPARSE = $CURDIR/nwparse.pl
|
|
else if ($?NWCHEM_TOP) then
|
|
set NWPARSE = $NWCHEM_TOP/QA/nwparse.pl
|
|
else
|
|
echo Cannot find nwparse.pl. Set NWPARSE or NWCHEM_TOP appropriately.
|
|
exit 1
|
|
endif
|
|
endif
|
|
|
|
if ($NPROC) then
|
|
# find parallel
|
|
if ($?PARALLEL_PATH) then
|
|
set PARALLEL = $PARALLEL_PATH
|
|
else if (-e $NWCHEM_PROJ_PATH/parallel) then
|
|
set PARALLEL = $NWCHEM_PROJ_PATH/parallel
|
|
else
|
|
echo " parallel assumed in your current path"
|
|
echo " if this is not the case then :"
|
|
echo " setenv PARALLEL_PATH /msrc/proj/nwchem/bin{d}/parallel.8k "
|
|
echo " make sure you have the right parallel for your sgi system"
|
|
set PARALLEL = parallel
|
|
endif
|
|
endif
|
|
# Run the tests one at a time
|
|
|
|
set SCRATCHDIR = $CURDIR/scratchdir
|
|
set TESTOUTPUTS = $CURDIR/testoutputs
|
|
|
|
if (! -d $TESTOUTPUTS) then
|
|
mkdir $TESTOUTPUTS
|
|
if ($status) then
|
|
echo cannot make directory $TESTOUTPUTS
|
|
exit 1
|
|
endif
|
|
endif
|
|
|
|
set overall_status = 0
|
|
|
|
foreach TEST ($args_2_use)
|
|
|
|
cd $CURDIR
|
|
|
|
set TESTDIR = $TEST
|
|
set STUB = `basename $TEST`
|
|
#
|
|
# if $TEST is not a directory try use as root of filenames
|
|
#
|
|
if(! -d $TEST) then
|
|
set TESTDIR = `echo $TEST | sed 's+/[^/]*$++'`
|
|
endif
|
|
#
|
|
# if $TESTDIR not directory skip
|
|
#
|
|
if(! -d $TESTDIR) then
|
|
echo could not find job in $TEST
|
|
echo ignoring this failure
|
|
continue
|
|
endif
|
|
|
|
echo " "
|
|
echo " Running $TESTDIR/$STUB "
|
|
echo " "
|
|
|
|
# Clean the scratch directory and copy the input and verified output
|
|
# files to the scratch and test output directories
|
|
|
|
echo " cleaning scratch"
|
|
|
|
/bin/rm -rf $SCRATCHDIR
|
|
mkdir $SCRATCHDIR
|
|
if ($status) then
|
|
echo failed to make $SCRATCHDIR
|
|
exit 1
|
|
endif
|
|
|
|
echo " copying input and verified output files"
|
|
|
|
set OUTPUTFILE = $STUB.out
|
|
set INPUTFILE = $STUB.nw
|
|
|
|
#
|
|
# MD input files
|
|
#
|
|
set TESTFILE = $STUB.tst
|
|
set RESTARTFILE = $STUB.rst
|
|
set RDFINPUTFILE = $STUB.rdi
|
|
set MRINPUTFILE = $STUB.mri
|
|
set TOPOLOGYFILE = (`echo $STUB.top | sed 's/_.*\././'`)
|
|
set PDBFILE = (`echo $STUB.pdb | sed 's/_.*\././'`)
|
|
#
|
|
# ESP file
|
|
#
|
|
set ESPFILE = $STUB.q
|
|
#
|
|
set md_test_run = 0
|
|
if( -f $TESTDIR/$TOPOLOGYFILE) then
|
|
set md_test_run = 1
|
|
endif
|
|
if( -f $TESTDIR/$PDBFILE) then
|
|
set md_test_run = 1
|
|
endif
|
|
if( -f $TESTDIR/$TESTFILE) then
|
|
set md_test_run = 1
|
|
endif
|
|
#
|
|
set esp_test_run = 0
|
|
if( -f $TESTDIR/$ESPFILE) then
|
|
set esp_test_run = 1
|
|
endif
|
|
#
|
|
#MV
|
|
# qmmm will be signified by the presence of
|
|
# empty file named "qmmm"
|
|
set qmmm_test_run = 0
|
|
if( -f $TESTDIR/qmmm) then
|
|
set qmmm_test_run = 1
|
|
# if qmmm run md is off
|
|
set md_test_run = 0
|
|
endif
|
|
#MV
|
|
|
|
|
|
if (! -f $TESTDIR/$INPUTFILE) then
|
|
echo cannot access $TESTDIR/$INPUTFILE
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
if(! $md_test_run && ! $esp_test_run) then
|
|
if (! -f $TESTDIR/$OUTPUTFILE) then
|
|
echo Could not find verified output file $TESTDIR/$OUTPUTFILE
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
endif
|
|
|
|
cp $TESTDIR/$INPUTFILE $SCRATCHDIR
|
|
if (-f $TESTOUTPUTS/$STUB.ok.out) /bin/rm -f $TESTOUTPUTS/$STUB.ok.out
|
|
if($md_test_run) then
|
|
if(-f $TESTDIR/$OUTPUTFILE) cp $TESTDIR/$OUTPUTFILE $TESTOUTPUTS/$STUB.ok.out
|
|
else
|
|
if(! $esp_test_run) then
|
|
cp $TESTDIR/$OUTPUTFILE $TESTOUTPUTS/$STUB.ok.out
|
|
endif
|
|
endif
|
|
|
|
#
|
|
# copy the MD files
|
|
#
|
|
if($md_test_run) then
|
|
cp $TESTDIR/$TESTFILE $TESTOUTPUTS/$STUB.ok.tst
|
|
if(-f $TESTDIR/$TOPOLOGYFILE) cp $TESTDIR/$TOPOLOGYFILE $SCRATCHDIR
|
|
if(-f $TESTDIR/$RESTARTFILE) cp $TESTDIR/$RESTARTFILE $SCRATCHDIR
|
|
if(-f $TESTDIR/$RDFINPUTFILE) cp $TESTDIR/$RDFINPUTFILE $SCRATCHDIR
|
|
if(-f $TESTDIR/$PDBFILE) cp $TESTDIR/$PDBFILE $SCRATCHDIR
|
|
if(-f $TESTDIR/$MRINPUTFILE) cp $TESTDIR/$MRINPUTFILE $SCRATCHDIR
|
|
endif
|
|
|
|
if($qmmm_test_run) then
|
|
cp $TESTDIR/*rst $SCRATCHDIR
|
|
cp $TESTDIR/*top $SCRATCHDIR
|
|
endif
|
|
|
|
#
|
|
# copy the ESP file
|
|
#
|
|
if($esp_test_run) then
|
|
cp $TESTDIR/$ESPFILE $TESTOUTPUTS/$STUB.ok.tst
|
|
endif
|
|
|
|
# Run the calculation in the scratch directory
|
|
|
|
cd $SCRATCHDIR
|
|
|
|
if (-f $TESTOUTPUTS/$STUB.out) /bin/rm -f $TESTOUTPUTS/$STUB.out
|
|
|
|
echo " running nwchem ($NWCHEM)"
|
|
|
|
set x="%Uu %Ss %E %P (%Xt+%Dds+%Kavg+%Mmax)k %Ii+%Oo %Fpf %Wswaps"
|
|
set time=(1 "$x")
|
|
|
|
echo -n " "
|
|
|
|
#
|
|
# MD creates it own $STUB.out
|
|
#
|
|
if($md_test_run) then
|
|
if ($NPROC) then
|
|
echo "$USER `hostname` $NPROC $NWCHEM $SCRATCHDIR" > nwchem.p
|
|
$PARALLEL nwchem $INPUTFILE >& $STUB.nwout
|
|
@ runstatus = $status
|
|
else
|
|
$NWCHEM $INPUTFILE >& $STUB.nwout
|
|
@ runstatus = $status
|
|
endif
|
|
if(-f $OUTPUTFILE) cp $OUTPUTFILE $TESTOUTPUTS/$OUTPUTFILE
|
|
if(-f $TESTFILE) then
|
|
cp $TESTFILE $TESTOUTPUTS/$TESTFILE
|
|
else
|
|
cp $TOPOLOGYFILE $TESTOUTPUTS/$TOPOLOGYFILE
|
|
endif
|
|
else
|
|
#
|
|
if($esp_test_run) then
|
|
if ($NPROC) then
|
|
echo "$USER `hostname` $NPROC $NWCHEM $SCRATCHDIR" > nwchem.p
|
|
$PARALLEL nwchem $INPUTFILE >& $STUB.nwout
|
|
@ runstatus = $status
|
|
else
|
|
$NWCHEM $INPUTFILE >& $STUB.nwout
|
|
@ runstatus = $status
|
|
endif
|
|
cp $ESPFILE $TESTOUTPUTS/$ESPFILE
|
|
else
|
|
if ($NPROC) then
|
|
echo "$USER `hostname` $NPROC $NWCHEM $SCRATCHDIR" > nwchem.p
|
|
$PARALLEL nwchem $INPUTFILE >& $TESTOUTPUTS/$OUTPUTFILE
|
|
@ runstatus = $status
|
|
else
|
|
$NWCHEM $INPUTFILE >& $TESTOUTPUTS/$OUTPUTFILE
|
|
@ runstatus = $status
|
|
endif
|
|
endif
|
|
#
|
|
endif
|
|
#
|
|
|
|
if ($runstatus) then
|
|
echo " NWChem execution failed"
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
|
|
set time=(60 "$x")
|
|
|
|
cd $TESTOUTPUTS
|
|
|
|
#
|
|
if($md_test_run || $esp_test_run) then
|
|
echo -n " verifying nwout ...... "
|
|
# verify $STUB.nwout here for QMD & QM/MM
|
|
echo "skipped"
|
|
set diff1status=0
|
|
else
|
|
|
|
# Now verify the output
|
|
|
|
echo -n " verifying output ... "
|
|
|
|
perl $NWPARSE $STUB.out >& /dev/null
|
|
if ($status) then
|
|
echo nwparse.pl failed on test output $STUB.out
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
perl $NWPARSE $STUB.ok.out >& /dev/null
|
|
if ($status) then
|
|
echo nwparse.pl failed on verified output $STUB.ok.out
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
|
|
diff -w $STUB.ok.out.nwparse $STUB.out.nwparse >& /dev/null
|
|
@ diff1status = $status
|
|
#
|
|
endif
|
|
#
|
|
|
|
if ($diff1status) then
|
|
echo "failed"
|
|
set overall_status = 1
|
|
continue
|
|
else
|
|
#
|
|
# diff MD test files
|
|
#
|
|
if(!($md_test_run) && !($esp_test_run)) then # Now verify the output
|
|
echo "OK"
|
|
else
|
|
if($esp_test_run) then
|
|
echo -n " verifying charges ....... "
|
|
set ttt = (`diff -w $STUB.ok.tst $ESPFILE | wc -l`)
|
|
if($ttt == 0) then
|
|
echo "completed "
|
|
else
|
|
echo "failed"
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
else
|
|
echo -n " verifying test ....... "
|
|
#
|
|
if(-f $STUB.tst) then
|
|
diff -w $STUB.ok.tst $STUB.tst >& /dev/null
|
|
if($status) then
|
|
echo "failed"
|
|
set overall_status = 1
|
|
continue
|
|
else
|
|
echo "completed"
|
|
endif
|
|
else
|
|
echo "skipped"
|
|
echo -n " verifying topology ... "
|
|
set ttt = (`diff -w $STUB.ok.tst $TOPOLOGYFILE | wc -l`)
|
|
if($ttt == 4) then
|
|
echo "completed "
|
|
else
|
|
echo "failed"
|
|
set overall_status = 1
|
|
continue
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
end
|
|
|
|
cd $CURDIR
|
|
/bin/rm -rf $SCRATCHDIR
|
|
|
|
echo " "
|
|
if ($overall_status) then
|
|
echo Failed
|
|
else
|
|
echo OK
|
|
endif
|
|
|
|
exit $overall_status
|
|
|
|
|
|
USAGE:
|
|
echo "runtest.unix [-procs nproc] testdir1 [testdir2 ...]"
|
|
echo " -procs nproc sets the number of processors to use"
|
|
exit 0
|