next up previous contents
Next: Some notes on HDF5 Up: NEMO on HECToR A Previous: Acknowledgements   Contents


NEMO output comparison scripts

This appendix contains the scripts used to compare the NEMO output files following any changes to the code. The scripts are called test_output.sh and get_parameters.sh. Their functionality is as follows:-

The usage is as follows:

./test_output.sh

However, this would normally be run within a serial batch script to avoid using excessive resources on the login nodes.

Source for test_output.sh

##
## Copyright (c) The University of Edinburgh 2009. All Rights Reserved.
##
#!/bin/bash
#
# Script to test the NEMO output against the vanilla output to ensure that
# changes have not damaged the numerical output 
#
# This script will generally be run via the serial queues as it could 
# potentially take a number of minutes. 

export PATH=$PATH:~/scripts
# Give list of files to be processed/created:
filelist="votemper vozocrtx vomecrty vovecrtz isssalin"

# VANILLA_OUTPUT_DIR = directory containing original NEMO 3.0 output
# created with netCDF 3.6.2 in Classic mode. 
export VANILLA_OUTPUT_DIR=/work/n01/n01/fionanem/NEMO_V3.0/ORCA025/EXP_V3.0_005

# TEST_OUTPUT_DIR = directory containing test dataset
export TEST_OUTPUT_DIR=/work/n01/n01/fionanem/NEMO_V3.0/ORCA025/EXP_V3.0_015

# Check whether vanilla output exists and if not create it - we need one 
# condition per file as different input data are involved for each test

cd $VANILLA_OUTPUT_DIR
for file in $filelist
do

  if [ ! -e ${file}_ncdf3.nc ]
  then 

    echo "Creating file ${file}_ncdf3.nc"

    if [ $file = "votemper" ]
    then
#      echo "RUNNING get_parameters.sh O25-V3_CU30_19580101_19580101_grid_T_0000.nc 3 votemper"
      get_parameters.sh O25-V3_CU30_19580101_19580101_grid_T_0000.nc 3 votemper
    fi

    if [ $file = "vozocrtx" ]
    then
      echo "Running..."
#      echo "RUNNING get_parameters.sh O25-V3_CU30_19580101_19580101_grid_U_0000.nc 3 vozocrtx"
      get_parameters.sh O25-V3_CU30_19580101_19580101_grid_U_0000.nc 3 vozocrtx
    fi

    if [ $file = "vomecrty" ]
    then
      echo "Running..."
#      echo "RUNNING get_parameters.sh O25-V3_CU30_19580101_19580101_grid_V_0000.nc 3 vomecrty"
      get_parameters.sh O25-V3_CU30_19580101_19580101_grid_V_0000.nc 3 vomecrty
    fi

    if [ $file = "vovecrtz" ]
    then
      echo "Running..."
#      echo "RUNNING get_parameters.sh O25-V3_CU30_19580101_19580101_grid_W_0000.nc 3 vovecrtz"
      get_parameters.sh O25-V3_CU30_19580101_19580101_grid_W_0000.nc 3 vovecrtz
    fi

    if [ $file = "isssalin" ]
    then
      echo "Running..."
#      echo "RUNNING get_parameters.sh O25-V3_CU30_19580101_19580101_icemod_0000.nc 3 isssalin"
     get_parameters.sh O25-V3_CU30_19580101_19580101_icemod_0000.nc 3 isssalin
    fi

  else 
    echo "The file ${file}_ncdf3.nc already exists"
  fi
done

# Combine .nc files and create test datasets: 
cd $TEST_OUTPUT_DIR
for file in $filelist
do 
  echo "About to remove file ${file}_ncdf4.nc before new run"
# Uncomment when running in batch/new tests
#  rm ${file}_ncdf4.nc
done

# Uncomment for new run. All 5 files need to be created for each new test
get_parameters.sh O25-V3_CU30_19580101_19580101_grid_T_0000.nc 4 votemper
get_parameters.sh O25-V3_CU30_19580101_19580101_grid_U_0000.nc 4 vozocrtx
get_parameters.sh O25-V3_CU30_19580101_19580101_grid_V_0000.nc 4 vomecrty
get_parameters.sh O25-V3_CU30_19580101_19580101_grid_W_0000.nc 4 vovecrtz
get_parameters.sh O25-V3_CU30_19580101_19580101_icemod_0000.nc 4 isssalin

# Now we've extracted a dataset from each type of output file need to compare with 
# The corresponding vanilla output and ensure the numerical values match up. 

testoutputfile="test.output"        # Contains output from the comparison
rm $TEST_OUTPUT_DIR/$testoutputfile # Remove old file before comparison

for file in $filelist
do 
  rm tmpfile # Ensure the tmpfile is removed prior to any comparison of the output
  echo "Testing file = ${file}_ncdf3.txt" >> $testoutputfile
  diff $VANILLA_OUTPUT_DIR/${file}_ncdf3.txt $TEST_OUTPUT_DIR/${file}_ncdf4.txt >> $testoutputfile
  diff $VANILLA_OUTPUT_DIR/${file}_ncdf3.txt $TEST_OUTPUT_DIR/${file}_ncdf4.txt >> tmpfile
  if [ -s tmpfile ]
  then
    echo "There is a difference between the test files" >> $testoutputfile
  else
    echo "No differences" >> $testoutputfile  
  fi
  echo " " >> $testoutputfile
done
echo "*** All tests completed ***" >> $testoutputfile

# Tidy up - could remove tmpfile here to ensure it doesn't exist between tests. 
# rm tmpfile

Source for get_parameters.sh

##
## Copyright (c) The University of Edinburgh 2009. All Rights Reserved.
##
#!/bin/bash 
# 
# Script to extract parameters from NEMO netCDF output so that 
# output can be verified and compared etc
#
# $1 = name of the file series to be combined and tested
# e.g.  ORCA025-N200_5d_19580101_19580101_grid_T_0000.nc

EXPECTED_ARGS=3

if [ $# -ne $EXPECTED_ARGS ]
then
  echo " "
  echo "Script for extracting parameters from NEMO netCDF output" 
  echo "so that output can be compared between runs"
  echo " "
  echo "Usage: `basename $0` {filename.nc netCDF_version(3 or 4), variable (e.g. votemper)}"
  exit $E_BADARGS
fi

if [ $2 -ne 3 -a $2 -ne 4 ]
then 
  echo "You must specify whether the file is netCDF3 of netCDF4 format"
  exit
fi

# Set paths to different versions of nocscombine/cdftools - need different 
# versions for Classic and netCDF4 files - control selection with input $2

if [ $2 -eq 3 ]
then 
  export NOCSCOMB_EXE=/home/n01/n01/fionanem/NOCSCOMBINE/nocscombine
  export CDFTOOLS_DIR=/home/n01/n01/fionanem/CDFTOOLS/bin
else
  export NOCSCOMB_EXE=/home/n01/n01/fionanem/NOCSCOMBINE/nocscombine4_release_nozlib
  export CDFTOOLS_DIR=/home/n01/n01/fionanem/CDFTOOLS/bin_nc4_release
fi

# Give the output netCDF file a name - name is based on variable being 
# extracted $MYVAR and netCDF version (3 or 4)
export MYVAR=$3
export OUTFILE_NC=${MYVAR}_ncdf${2}.nc
export OUTFILE_TXT=${MYVAR}_ncdf${2}.txt

# Run NOCSCOMBINE to create large .nc file 
echo "Running NOCSCOMBINE on $1 with $NOCSCOMB_EXE"
echo "DEBUG: RUNNING: $NOCSCOMB_EXE -f $1 -d $MYVAR -o $OUTFILE_NC"
$NOCSCOMB_EXE -f $1 -d $MYVAR -o $OUTFILE_NC

# Extract mean of variable using cdfmeanvar
echo "Running cdfmeanvar on $OUTFILE_NC, creating output $OUTFILE_TXT"
echo "DEBUG: RUNNING: $CDFTOOLS_DIR/cdfmeanvar $OUTFILE_NC $MYVAR T > $OUTFILE_TXT"
$CDFTOOLS_DIR/cdfmeanvar $OUTFILE_NC $MYVAR T > $OUTFILE_TXT