NWChem/QA/runtests.unix
Edoardo Apra 5a8a0b1e58 got rid of /msrc reference for default excutable
used $NWCHEM_TOP/bin/$NWCHEM_TARGET, instead
2006-02-10 21:59:44 +00:00

404 lines
9.4 KiB
Tcsh
Executable file

#!/bin/csh -f
#
# THIS assumes ./tests/
#
# 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 = $NWCHEM_TOP/bin/$NWCHEM_TARGET
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
if ($NPROC == 1) then
@ NPROC = 0
endif
#
# 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 TEST = tests/$TEST
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
#
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) 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
cp $TESTDIR/$OUTPUTFILE $TESTOUTPUTS/$STUB.ok.out
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.q
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 ($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
#
if ($runstatus) then
echo " NWChem execution failed"
set overall_status = 1
continue
endif
set time=(60 "$x")
cd $TESTOUTPUTS
#
if($md_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
cp $SCRATCHDIR/$ESPFILE $TESTOUTPUTS/.
# echo "doing ls -l " $STUB.ok.q $STUB.q
# echo `ls -l $STUB.ok.q $STUB.q`
diff -w $STUB.ok.q $STUB.q >& /dev/null
if($status) then
echo "ESP comparison failed"
set overall_status = 1
continue
else
echo "ESP charges match"
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
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