mirror of
https://github.com/nwchemgit/nwchem.git
synced 2026-07-21 14:35:21 -04:00
322 lines
7.1 KiB
Text
322 lines
7.1 KiB
Text
|
|
#!/bin/csh -f
|
||
|
|
#
|
||
|
|
# THIS assumes ./tests/
|
||
|
|
#
|
||
|
|
# UNIX workstation parallel and sequential execution of test jobs
|
||
|
|
|
||
|
|
# Usage:
|
||
|
|
# runtest.mpi.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 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
|
||
|
|
|
||
|
|
# 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
|
||
|
|
#
|
||
|
|
set esp_test_run = 0
|
||
|
|
if( -f $TESTDIR/$ESPFILE) then
|
||
|
|
set esp_test_run = 1
|
||
|
|
endif
|
||
|
|
#
|
||
|
|
|
||
|
|
if (! -f $TESTDIR/$INPUTFILE) then
|
||
|
|
echo cannot access $TESTDIR/$INPUTFILE
|
||
|
|
set overall_status = 1
|
||
|
|
continue
|
||
|
|
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 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 ($NPROC) then
|
||
|
|
#echo "launching"
|
||
|
|
#echo "nwchem exex is" $NWCHEM
|
||
|
|
cp $INPUTFILE nwchem.nw
|
||
|
|
$NWCHEM -np $NPROC >& $TESTOUTPUTS/$OUTPUTFILE
|
||
|
|
@ runstatus = $status
|
||
|
|
else
|
||
|
|
$NWCHEM >& $TESTOUTPUTS/$OUTPUTFILE
|
||
|
|
@ runstatus = $status
|
||
|
|
endif
|
||
|
|
#
|
||
|
|
#
|
||
|
|
|
||
|
|
if ($runstatus) then
|
||
|
|
echo " NWChem execution failed"
|
||
|
|
set overall_status = 1
|
||
|
|
continue
|
||
|
|
endif
|
||
|
|
|
||
|
|
set time=(60 "$x")
|
||
|
|
|
||
|
|
cd $TESTOUTPUTS
|
||
|
|
|
||
|
|
# 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
|
||
|
|
#
|
||
|
|
#
|
||
|
|
|
||
|
|
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
|