NWChem/QA/runtests.tcg5.unix
Edoardo Apra fb37c34619 scripts for platforms using tcgmsg ipcv5:
MACX, INTERIX, etc ...
2004-05-21 15:38:30 +00:00

321 lines
7.1 KiB
Tcsh
Executable file

#!/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