From a70d75daddd6ea21ffba013fcc88ab930f7b91bd Mon Sep 17 00:00:00 2001 From: James Edwards Date: Thu, 23 Nov 2023 09:58:54 -0700 Subject: [PATCH 1/3] remove cprnc to new repo --- Externals_cime.cfg | 9 + tools/cprnc/CMakeLists.txt | 61 -- tools/cprnc/Depends | 6 - tools/cprnc/Makefile | 90 --- tools/cprnc/README | 183 ----- tools/cprnc/compare_vars_mod.F90.in | 633 ------------------ tools/cprnc/cprnc.F90 | 209 ------ tools/cprnc/filestruct.F90 | 481 ------------- tools/cprnc/prec.F90 | 8 - tools/cprnc/run_tests | 106 --- tools/cprnc/summarize_cprnc_diffs | 573 ---------------- tools/cprnc/test.csh | 55 -- tools/cprnc/test_inputs/README | 135 ---- .../test_inputs/clm2.h0.subset.control.nc | Bin 120088 -> 0 bytes .../cprnc/test_inputs/clm2.h0.subset.test.nc | Bin 120048 -> 0 bytes .../test_inputs/clm2.h1.subset.control.nc | Bin 321552 -> 0 bytes .../cprnc/test_inputs/clm2.h1.subset.test.nc | Bin 321512 -> 0 bytes tools/cprnc/test_inputs/control.nc | Bin 808 -> 0 bytes tools/cprnc/test_inputs/control_0d.nc | Bin 616 -> 0 bytes .../control_multipleTimes_someTimeless.nc | Bin 1616 -> 0 bytes tools/cprnc/test_inputs/control_noTime.nc | Bin 940 -> 0 bytes tools/cprnc/test_inputs/copy.nc | Bin 808 -> 0 bytes .../test_inputs/cpl.hi.subset.control.nc | Bin 27876 -> 0 bytes tools/cprnc/test_inputs/cpl.hi.subset.test.nc | Bin 27872 -> 0 bytes tools/cprnc/test_inputs/diffs_0d.nc | Bin 952 -> 0 bytes tools/cprnc/test_inputs/diffs_in_fill.nc | Bin 808 -> 0 bytes tools/cprnc/test_inputs/diffs_in_vals.nc | Bin 808 -> 0 bytes .../diffs_in_vals_and_diffs_in_fill.nc | Bin 808 -> 0 bytes .../test_inputs/diffs_in_vals_and_fill.nc | Bin 808 -> 0 bytes tools/cprnc/test_inputs/lon_differs.nc | Bin 884 -> 0 bytes ...mes_someTimeless_diffs_in_vals_and_fill.nc | Bin 1156 -> 0 bytes .../noTime_diffs_in_vals_and_fill.nc | Bin 716 -> 0 bytes tools/cprnc/test_inputs/vals_differ_by_1.1.nc | Bin 808 -> 0 bytes .../vals_differ_by_1.1_somewhere.nc | Bin 808 -> 0 bytes .../vals_differ_by_varying_amounts.nc | Bin 808 -> 0 bytes .../vals_differ_by_varying_amounts2.nc | Bin 808 -> 0 bytes tools/cprnc/utils.F90 | 85 --- 37 files changed, 9 insertions(+), 2625 deletions(-) create mode 100644 Externals_cime.cfg delete mode 100644 tools/cprnc/CMakeLists.txt delete mode 100644 tools/cprnc/Depends delete mode 100644 tools/cprnc/Makefile delete mode 100644 tools/cprnc/README delete mode 100644 tools/cprnc/compare_vars_mod.F90.in delete mode 100644 tools/cprnc/cprnc.F90 delete mode 100644 tools/cprnc/filestruct.F90 delete mode 100644 tools/cprnc/prec.F90 delete mode 100755 tools/cprnc/run_tests delete mode 100755 tools/cprnc/summarize_cprnc_diffs delete mode 100755 tools/cprnc/test.csh delete mode 100644 tools/cprnc/test_inputs/README delete mode 100644 tools/cprnc/test_inputs/clm2.h0.subset.control.nc delete mode 100644 tools/cprnc/test_inputs/clm2.h0.subset.test.nc delete mode 100644 tools/cprnc/test_inputs/clm2.h1.subset.control.nc delete mode 100644 tools/cprnc/test_inputs/clm2.h1.subset.test.nc delete mode 100644 tools/cprnc/test_inputs/control.nc delete mode 100644 tools/cprnc/test_inputs/control_0d.nc delete mode 100644 tools/cprnc/test_inputs/control_multipleTimes_someTimeless.nc delete mode 100644 tools/cprnc/test_inputs/control_noTime.nc delete mode 100644 tools/cprnc/test_inputs/copy.nc delete mode 100644 tools/cprnc/test_inputs/cpl.hi.subset.control.nc delete mode 100644 tools/cprnc/test_inputs/cpl.hi.subset.test.nc delete mode 100644 tools/cprnc/test_inputs/diffs_0d.nc delete mode 100644 tools/cprnc/test_inputs/diffs_in_fill.nc delete mode 100644 tools/cprnc/test_inputs/diffs_in_vals.nc delete mode 100644 tools/cprnc/test_inputs/diffs_in_vals_and_diffs_in_fill.nc delete mode 100644 tools/cprnc/test_inputs/diffs_in_vals_and_fill.nc delete mode 100644 tools/cprnc/test_inputs/lon_differs.nc delete mode 100644 tools/cprnc/test_inputs/multipleTimes_someTimeless_diffs_in_vals_and_fill.nc delete mode 100644 tools/cprnc/test_inputs/noTime_diffs_in_vals_and_fill.nc delete mode 100644 tools/cprnc/test_inputs/vals_differ_by_1.1.nc delete mode 100644 tools/cprnc/test_inputs/vals_differ_by_1.1_somewhere.nc delete mode 100644 tools/cprnc/test_inputs/vals_differ_by_varying_amounts.nc delete mode 100644 tools/cprnc/test_inputs/vals_differ_by_varying_amounts2.nc delete mode 100644 tools/cprnc/utils.F90 diff --git a/Externals_cime.cfg b/Externals_cime.cfg new file mode 100644 index 00000000000..4fcaa443a9f --- /dev/null +++ b/Externals_cime.cfg @@ -0,0 +1,9 @@ +[cprnc] +tag = v1.0.1 +protocol = git +repo_url = https://github.com/ESMCI/cprnc +local_path = tools/cprnc +required = True + +[externals_description] +schema_version = 1.0.01 diff --git a/tools/cprnc/CMakeLists.txt b/tools/cprnc/CMakeLists.txt deleted file mode 100644 index d63292ac961..00000000000 --- a/tools/cprnc/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -PROJECT(CPRNC C Fortran) - - -execute_process(COMMAND ../configure --macros-format=CMake WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "$ENV{CIMEROOT}/src/CMake") - -INCLUDE(Macros.cmake) - -ENABLE_LANGUAGE(Fortran) - -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} $ENV{CIMEROOT}/src/externals/pio2/cmake) - -# Defining NETCDF_LIBRARIES and NETCDF_INCLUDE_DIR enables bypassing -# the search for Netcdf -IF (NOT DEFINED NETCDF_LIBRARIES OR NOT DEFINED NETCDF_INCLUDE_DIR) - SET(NETCDF_INCLUDE_DIR ${NETCDF_PATH}/include) - SET(NETCDF_LIBRARIES ${NETCDF_PATH}/lib/libnetcdff.a) -ENDIF () - -ADD_CUSTOM_COMMAND( - OUTPUT ${PROJECT_BINARY_DIR}/compare_vars_mod.F90 - COMMAND perl ${PROJECT_SOURCE_DIR}/../../src/externals/genf90/genf90.pl - ${PROJECT_SOURCE_DIR}/compare_vars_mod.F90.in > ${PROJECT_BINARY_DIR}/compare_vars_mod.F90 -) - -ADD_CUSTOM_TARGET(COMPARE_VARS DEPENDS ${PROJECT_BINARY_DIR}/compare_vars_mod.F90) - -# Support extended line lengths -IF (${CMAKE_Fortran_COMPILER_ID} STREQUAL GNU) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -ffree-line-length-none") -ELSEIF (CMAKE_COMPILER_ID STREQUAL PGI) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Mextend") -ELSEIF (CMAKE_COMPILER_ID STREQUAL PathScale) - SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -extend-source") -ENDIF () - -INCLUDE_DIRECTORIES( - ${NETCDF_INCLUDE_DIR} - ${PROJECT_SOURCE_DIR} - ${PROJECT_BINARY_DIR} -) - -SET (CPRNC_SRCS - ${PROJECT_BINARY_DIR}/compare_vars_mod.F90 - filestruct.F90 - utils.F90 - prec.F90 - cprnc.F90 -) - -ADD_EXECUTABLE(cprnc ${CPRNC_SRCS}) -ADD_DEPENDENCIES(cprnc COMPARE_VARS) - -TARGET_LINK_LIBRARIES(cprnc ${NETCDF_LIBRARIES}) - -INSTALL(TARGETS cprnc - RUNTIME DESTINATION bin) - -execute_process(COMMAND ../configure --clean WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) diff --git a/tools/cprnc/Depends b/tools/cprnc/Depends deleted file mode 100644 index 582f9ee1794..00000000000 --- a/tools/cprnc/Depends +++ /dev/null @@ -1,6 +0,0 @@ -cprnc.o: cprnc.F90 filestruct.o compare_vars_mod.o utils.o -filestruct.o: filestruct.F90 prec.o -prec.o : prec.F90 -compare_vars_mod.o: compare_vars_mod.F90 prec.o utils.o filestruct.o -compare_vars_mod.F90 : compare_vars_mod.F90.in -utils.o : utils.F90 filestruct.o prec.o diff --git a/tools/cprnc/Makefile b/tools/cprnc/Makefile deleted file mode 100644 index 465ce4709b8..00000000000 --- a/tools/cprnc/Makefile +++ /dev/null @@ -1,90 +0,0 @@ -#----------------------------------------------------------------------- -# This Makefile is for building cprnc on AIX, Compaq, Linux (with pgf90, -# lf95, ifort, or gfortran compilers), IRIX or SUN platforms. -# -# These macros can be changed by setting environment variables: -# -# Set the path to netcdf: -# -# gmake NETCDF=pathToNetcdf -# -# This sets LIB_NETCDF=$NETCDF/lib and INC_NETCDF=$NETCDF/include -# -# LIB_NETCDF --- Library directory location of netcdf. -# INC_NETCDF --- Include directory location of netcdf. This directory needs to contain -# the NetCDF .mod files, i.e., netcdf.mod and typesizes.mod. -# -# If the include and library files don't have a common root directory then set them -# independently in the commandline: -# -# gmake LIB_NETCDF=pathToLIBFiles INC_NETCDF=pathToINCFiles -# -# You also can set the environment variables: -# -# USER_FC ------ User defined Fortran compiler (for Linux can be pgf90, lf95, ifort, gfortran) -# EXEDIR ------- Directory to build executable in. (Defaults to .) -# VPATH -------- GNU make path. (Defaults to current directory) -# -#------------------------------------------------------------------------ -include Macros.make -# Set up special characters -null := - -EXENAME = cprnc -RM = rm - -NETCDF_PATH ?= $(NETCDF_FORTRAN_PATH) - -# Default for the netcdf library and include directories -LIB_NETCDF := $(NETCDF_PATH)/lib -INC_NETCDF := $(NETCDF_PATH)/include -LDFLAGS = -L$(LIB_NETCDF) -lnetcdff - -# Determine platform -UNAMES := $(shell uname -s) -SNAME := $(shell uname -n | cut -c1-2) - -GENF90 = ../../src/externals/genf90/genf90.pl - -FC := $(SFC) -FFLAGS += -I$(INC_NETCDF) -I. -#------------------------------------------------------------------------ -# Default rules and macros -#------------------------------------------------------------------------ - -# If path to source code not given -ifeq ($(VPATH),$(null)) - VPATH:= . -endif - -OBJS := compare_vars_mod.o cprnc.o filestruct.o prec.o utils.o - -# If executable directory not given -ifeq ($(EXEDIR),$(null)) - EXEDIR := . -endif - -.SUFFIXES: -.SUFFIXES: .F90 .f90 .o .in - -.F90.o: - $(FC) -c $(FFLAGS) $< - -.f90.o: - $(FC) -c $(FFLAGS) $< - -$(EXEDIR)/$(EXENAME): $(OBJS) - $(FC) -o $@ $(OBJS) $(LDFLAGS) $(SLIBS) - -compare_vars_mod.F90 : compare_vars_mod.F90.in - perl $(GENF90) $< > $@ - -clean: - $(RM) -f $(OBJS) *.mod $(EXEDIR)/$(EXENAME) - -# remove generated file during clean -realclean: - $(RM) -f $(OBJS) *.mod $(EXEDIR)/$(EXENAME) compare_vars_mod.F90 core - -include $(CURDIR)/Depends - diff --git a/tools/cprnc/README b/tools/cprnc/README deleted file mode 100644 index 25b7784e1e6..00000000000 --- a/tools/cprnc/README +++ /dev/null @@ -1,183 +0,0 @@ -cprnc README ------------- - -cprnc is a generic tool for analyzing a netcdf file or comparing -two netcdf files. - -If you are trying to debug an installed cprnc tool make sure that you -are looking at the correct one by comparing the path to the one in -your case directory. - - -Quick Start Guide: ------------------- - -On cime supported systems you can generate a Macros file using the following -(assuming you are running the command from the directory cime/tools/cprnc): - -CIMEROOT=../.. ../configure --macros-format=Makefile --mpilib=mpi-serial - -To change the compiler or MPI library used, or to enable debugging options, -set the COMPILER, MPILIB, or DEBUG environment variables prior to running -configure. - -Next, run make to build cprnc. For instance, using sh/bash as a login shell: - -CIMEROOT=../.. source ./.env_mach_specific.sh && make - -Finally, put the resulting executable in CCSM_CPRNC as defined in -config_machines.xml. - -You can also build cprnc using cmake: -export CIMEROOT=../.. -MPILIB=mpi-serial source ./.env_mach_specific.sh -../configure --macros-format=CMake --mpilib=mpi-serial - -Next run cmake . to build the Makefile and then -make to build cprnc. - - - Usage: cprnc [-v] [-d dimname:start[:count]] file1 [file2] - -m: Compare each time sample. Default is false, i.e. match "time" - coordinate values before comparing - -v: Verbose output - -d dimname:start[:count] - Print variable values for the specified dimname index subrange. - - -Users Guide: ------------- - -cprnc is a Fortran-90 application. It relies on netcdf version 3 or -later and uses the f90 netcdf interfaces. It requires a netcdf include -file and a netcdf library. - -cprnc generates an ascii output file via standard out. It initially -summarizes some characteristics of the input file[s]. A compare file is -generally 132 characters wide and an analyze file is less than 80 -characters wide. - -In analyze mode, the output for a field looks like - - ( lon, lat, time, -----) - 259200 ( 587, 134, 1) ( 269, 59, 1) - FX1 96369 8.273160400390625E+02 0.000000000000000E+00 - avg abs field values: 9.052845920820910E+01 - -and a guide to this information is printed at the top of the file - - ( dim1, dim2, dim3, dim4) - ARRSIZ1 ( indx1, indx2, indx3) file 1 - FIELD NVALID MAX MIN - - -The first 10 characters of the field name are identified in the first - dozen columns of the third line. -The first line summarizes the names of the dimensions of the field -The second line summarizes the indices of the maximum and minimum value - of the field for the first three dimensions. If the fourth dimension - exists, it's always assumed to be time. Time is handled separately. -The third line summarizes the number of valid values in the array - and the maximum and minimum value over those valid values. Invalid - values are values that are identified to be "fill" value. -The last line summarizes some overall statistics including the average - absolute value of the valid values of the field. - -In comparison mode, the output (132 chars wide) for a field looks like - - 96369 ( lon, lat, time) - 259200 ( 422, 198, 1) ( 203, 186, 1) ( 47, 169, 1) ( 224, 171, 1) - FIRA 96369 1.466549530029297E+02 -3.922052764892578E+01 1.4E+02 -3.037954139709473E+01 1.0E+00 -3.979958057403564E+00 - 96369 1.321966247558594E+02 -1.603044700622559E+01 1.084177169799805E+02 3.982142448425293E+00 - 259200 ( 156, 31, 1) ( 573, 178, 1) ( - avg abs field values: 6.778244097051392E+01 rms diff: 1.4E+01 avg rel diff(npos): 4.6E-02 - 5.960437961084186E+01 avg decimal digits(ndif): 1.2 worst: 0.0 - -and a guide to this information is printed at the top of the file - - NDIFFS ( dim1, dim2, dim3, dim4, ... ) - ARRSIZ1 ( indx1, indx2, indx3, ... ) file 1 - FIELD NVALID1 MAX1 MIN1 DIFFMAX VALUES RDIFMAX VALUES - NVALID2 MAX2 MIN2 - ARRSIZ2 ( indx1, indx2, indx3, ...) file 2 - -The information content is identical to the information in analyze -mode with the following additions. Two additional lines are added -in the main body. Lines 4 and 5 are identical to line 3 and 2 -respectively but are associated with file 2 instead of file 1. -In addition, the right hand side of lines 2, 3, and 4 contain -information about the maximum difference, the location and values -of the maximum difference, the relative difference and the location -and values of the maximum relative difference. The last two line -summarize some overall statistics including average absolute values -of the field on the two files, rms difference, average relative -difference, average number of digits that match, and the worst -case for the number of digits that match. - -"avg rel diff" gives the average relative difference (sum of relative -differences normalized by the number of indices where both variables -have valid values). The denominator for each relative difference is -the MAX of the two values. - -"avg decimal digits" is determined by: For each diff, determine the -number of digits that match (as -log10(rdiff(i)); add this to a -running sum; then normalize by the number of diffs (ignoring places -where the two variables are the same). For example, if there are 10 -values, 8 of which match, one has a relative difference of 1e-3 and -one has a relative difference of 1e-5, then the avg decimal digits -will be 4. - -"worst decimal digits" is simply log10(1/rdmax), where rdmax is the -max relative difference (in the above example, this would give 3). - -At the end of the output file, a summary is presented that looks like - -SUMMARY of cprnc: - A total number of 119 fields were compared - of which 83 had non-zero differences - and 17 had differences in fill patterns - A total number of 10 fields could not be analyzed - A total number of 0 fields on file 1 were not found on file2 - diff_test: the two files seem to be DIFFERENT - - -This summarizes: -- the number of fields that were compared -- the number of fields that differed (not counting fields that differed - only in the fill pattern) -- the number of fields with differences in fill patterns -- the number of fields that could not be analyzed -- the number of fields that could not be found on the second file -- whether the files are IDENTICAL or DIFFERENT - Files are considered DIFFERENT if there are differences either in the - values or in the fill patterns of any variable. - - -Developers Guide: ------------------ - -The tool works as follows. - -Fields can be analyzed if they are int, float or double and -have between 0 and n dimensions - -In general, fields that appear on both files are -compared. If they are sizes, no difference -statistics are computed and only a summary of the fields on -the files are presented. If fields only appear -on one file, those fields are analyzed. - -The unlimited dimension is treated uniquely. In general, for files -that have a dimension named "time", the time axes are compared -and matching time values on the two files are compared one -timestep at a time. Time values that don't match are skipped. -To override the matching behaviour, use cprnc -m. In this mode, -timestamps are compared in indexical space. In analyze mode, -the fields are analyzed one timestamp at a time. In general, -if there is a "time" axis, it will be the outer-most loop in -the output analysis. In compare mode, fields with a time axis -and a timestamp that are not common between the two files are -ignored. - -It is also possible to compare files that don't have an unlimited -dimension; in this case, the '-m' flag must be given. diff --git a/tools/cprnc/compare_vars_mod.F90.in b/tools/cprnc/compare_vars_mod.F90.in deleted file mode 100644 index dd2014ec924..00000000000 --- a/tools/cprnc/compare_vars_mod.F90.in +++ /dev/null @@ -1,633 +0,0 @@ -module compare_vars_mod - use filestruct, only : file_t, var_t, vdimsize, dim_t, verbose - use prec, only : r4, r8, i4 - use netcdf, only : nf90_char, nf90_int, nf90_double, nf90_float, nf90_get_var, nf90_max_dims, & - nf90_inq_varid, nf90_get_att, nf90_noerr - use utils, only : checknf90, get_dim_str, get_dimname_str - implicit none - logical :: ignoretime - - interface compute_var_stats -! TYPE real,double,int - module procedure compute_var_stats_{TYPE} - end interface - - interface get_rdiff_stats - ! TYPE real,double - module procedure get_rdiff_stats_{TYPE} - end interface - -contains - - subroutine compare_vars(n,file, vtotal, ndiffs, nfilldiffs, vsizes_differ, & - vnot_analyzed, vnotfound ) - integer, intent(in) :: n ! number of files to analyze (1 or 2) - integer, intent(out) :: vtotal - integer, intent(out) :: ndiffs ! number of fields with differences (not counting fields that differ only in the fill pattern) - integer, intent(out) :: nfilldiffs ! number of fields with differences in fill pattern - integer, intent(out) :: vsizes_differ - integer, intent(out) :: vnot_analyzed - integer, intent(out) :: vnotfound - - - type(file_t) :: file(n) - double precision, pointer :: time(:,:) - double precision :: tdiff - ! start by making sure that times match - integer :: ierr, ns1, ns2, vid1 - type(var_t), pointer :: v1 - integer :: i, t, nvars, t1, t2, nt - integer :: vidnsteph - integer, allocatable :: nsteph(:) - character(len=132) :: dimstr - type(dim_t), pointer :: udim - logical :: file_has_unlimited_dim - real(r8), parameter :: timeepsilon = 1.e-9 ! time diff less than this considered insignificant - - - vtotal = 0 - vsizes_differ = 0 - vnot_analyzed = 0 - vnotfound=0 - if(n==2 .and. .not.ignoretime) then - call checknf90(nf90_inq_varid(file(1)%fh, 'time', vid1), & - err_str='These files don''t have a time dimension, use cprnc with -m') - - ns1 = file(1)%dim(file(1)%unlimdimid)%dimsize - if(n==2) then - ns2 = file(2)%dim(file(2)%unlimdimid)%dimsize - else - ns2=1 - end if - allocate(time(max(ns1,ns2),2)) - - call checknf90(nf90_get_var(file(1)%fh, vid1, time(1:ns1,1))) - if(n==2) then - call checknf90(nf90_get_var(file(2)%fh, file(1)%var(vid1)%matchid, time(1:ns2,2))) - end if - if(verbose) then - print *,'File 1 time: ', time(1:ns1,1) - print *,'File 2 time: ', time(1:ns2,2) - end if - end if - - nvars = size(file(1)%var) - if (file(1)%unlimdimid == -1) then - file_has_unlimited_dim = .false. - if (.not. ignoretime) then - write(6,*) 'ERROR: For files without an unlimited dimension,' - write(6,*) 'ignore_time needs to be true (via setting the -m flag to cprnc)' - stop - end if - else - file_has_unlimited_dim = .true. - udim => file(1)%dim(file(1)%unlimdimid) - endif - - ndiffs = 0 - nfilldiffs = 0 - -! First look at variables which do not have unlimdim - do i=1,nvars - v1 => file(1)%var(i) - - if (.not. is_time_varying(v1, file_has_unlimited_dim, file(1)%unlimdimid)) then - call get_dimname_str(v1%ndims,v1%dimids,file(1)%dim,dimstr) - write(6,140) trim(v1%name),trim(dimstr) - vtotal = vtotal+1 - - call compare_one_var(v1=v1, numcases=n, file=file, varnum=i, & - vnotfound=vnotfound, vsizes_differ=vsizes_differ, & - vnot_analyzed=vnot_analyzed, & - ndiffs=ndiffs, nfilldiffs=nfilldiffs) - - end if - end do - -! Now look at variables that DO have unlimdim - if (file_has_unlimited_dim) then - - ierr = nf90_inq_varid(file(1)%fh, 'nsteph', vidnsteph) - if(ierr == NF90_NOERR) then - allocate(nsteph(udim%kount)) - call checknf90(nf90_get_var(file(1)%fh, vidnsteph, nsteph)) - end if - - - do t=1,udim%dimsize,udim%kount - t1 = t ! need to find mathing times - assumed for now - t2 = t - if(.not. ignoretime) then - do while(t1<=ns1 .and. t2<= ns2) - tdiff = abs(time(t1,1) - time(t2,2)) - if (tdiff < timeepsilon) exit - if(time(t1,1) < time(t2,2)) then - Write(6,*) 'Skipping a time sample on file 1' - t1=t1+1 - else if(time(t1,1) > time(t2,2)) then - Write(6,*) 'Skipping a time sample on file 2' - t2=t2+1 - end if - end do - if(verbose) print *,__FILE__,__LINE__,tdiff,timeepsilon, t1, t2 - if(tdiff< timeepsilon .and. t1/=t2) then - Write(6,*) 'Found common timesteps:', t1, t2 - else if(tdiff > timeepsilon) then - Write(6,*) 'No matching time found.' - vnot_analyzed = nvars - return - end if - if(verbose) print *,__FILE__,__LINE__,time(t1,1),time(t2,2), t1, t2, time(:,:) - end if - - - if(allocated(nsteph)) then - print *,'NSTEPH: ',nsteph(t) - deallocate(nsteph) - end if - - do i=1,nvars - v1 => file(1)%var(i) - if (is_time_varying(v1, file_has_unlimited_dim, file(1)%unlimdimid)) then - call get_dimname_str(v1%ndims,v1%dimids,file(1)%dim,dimstr) - vtotal = vtotal+1 - write(6,145) trim(v1%name),trim(dimstr), t1, t2 - - call compare_one_var(v1=v1, numcases=n, file=file, varnum=i, & - vnotfound=vnotfound, vsizes_differ=vsizes_differ, & - vnot_analyzed=vnot_analyzed, & - ndiffs=ndiffs, nfilldiffs=nfilldiffs, & - tindex=(/t1, t2/)) - - end if - end do - end do - end if ! if (file_has_unlimited_dim) - -140 format(1x,a,3x,a) -145 format(1x,a,3x,a,' t_index = ',2i6) - - end subroutine compare_vars - - - ! Compare a single variable, and update counts - ! For variables with multiple time slices, this just does comparisons for a single time slice - subroutine compare_one_var(v1, numcases, file, varnum, & - vnotfound, vsizes_differ, vnot_analyzed, ndiffs, nfilldiffs, & - tindex) - type(var_t) , intent(in) :: v1 ! variable info for the variable in file 1 - integer , intent(in) :: numcases - type(file_t), intent(in) :: file(numcases) - integer , intent(in) :: varnum - integer , intent(inout) :: vnotfound - integer , intent(inout) :: vsizes_differ - integer , intent(inout) :: vnot_analyzed - integer , intent(inout) :: ndiffs - integer , intent(inout) :: nfilldiffs - integer , intent(in), optional :: tindex(numcases) - - integer :: idiff, ifilldiff, isizes_differ, inotfound, inot_analyzed - - ! initialize output arguments of compare_var in case compare_var doesn't get called - idiff = 0 - ifilldiff = 0 - isizes_differ = 0 - inotfound = 0 - inot_analyzed = 0 - - select case(v1%xtype) - case(nf90_int) - call compare_var_int(numcases,file,(/varnum,v1%matchid/), & - idiff, ifilldiff, isizes_differ, inotfound, & - tindex) - case(nf90_float) - call compare_var_real(numcases,file,(/varnum,v1%matchid/), & - idiff, ifilldiff, isizes_differ, inotfound, & - tindex) - case(nf90_double) - call compare_var_double(numcases,file,(/varnum,v1%matchid/), & - idiff, ifilldiff, isizes_differ, inotfound, & - tindex) - case(nf90_char) - inot_analyzed = 1 - ! call compare_var_char(file1,file2,i,v1%matchid) - case default - print *,'Type not recognized for variable: ', v1%name - end select - - vnotfound = vnotfound+inotfound - vsizes_differ = vsizes_differ+isizes_differ - vnot_analyzed = vnot_analyzed+inot_analyzed - ndiffs = ndiffs+idiff - nfilldiffs = nfilldiffs + ifilldiff - end subroutine compare_one_var - - - ! TYPE real,int,double - subroutine compare_var_{TYPE}(n,file, vid, idiff, ifilldiff, ifail, inotfound, tindex) - integer, intent(in) :: n - type(file_t) :: file(2) - integer, intent(in) :: vid(2) - integer, intent(out) :: idiff ! 1 if diffs in field, 0 otherwise (0 if only diffs are in fill pattern) - integer, intent(out) :: ifilldiff ! 1 if diffs in fill pattern, 0 otherwise - ! (idiff & ifilldiff are both 1 if there are diffs in both the fill pattern and the valid values) - integer, intent(out) :: ifail ! 1 if variable sizes differ, 0 otherwise - integer, intent(out) :: inotfound ! 1 if variable on file 1 not found on file 2, 0 otherwise - integer, optional :: tindex(2) - - integer :: s1, s2, l1(1), i, ierr - - {VTYPE}, pointer :: buf(:,:), vdiff(:) - {VTYPE} :: fv1, fv2, rms, min_val(2), max_val(2), avgval(2), m1, rdmax - {VTYPE} :: rms_normalized ! rms normalized by absolute values - {VTYPE} :: rms_normalized_denom ! denominator for computing rms_normalized - {VTYPE} :: rdsum ! sum of relative differences - {VTYPE} :: rdlogsum ! sum of negative log10 of relative differences - {VTYPE} :: rdbar ! average of relative differences - {VTYPE} :: rdlogbar ! rdlogsum normalized by number of non-zero differences - integer :: t(2), n1, n2, min_loc(2), max_loc(2), spacelen - integer :: start(NF90_MAX_DIMS,2), kount(NF90_MAX_DIMS,2), dsizes(NF90_MAX_DIMS,2) - logical, pointer :: mask(:,:) - integer :: diffcnt, rdmaxloc - character(len=80) :: min_str(2), max_str(2), dmax_str, rdmax_str, space - logical :: compare2 - - min_str = '' - max_str = '' - dmax_str = '' - rdmax_str = '' - space = '' - - if(present(tindex)) then - t = tindex - else - t = 1 - end if - - compare2 = (n==2 .and. vid(2)>0) - inotfound = 0 - ifail = 0 - ifilldiff = 0 - idiff = 0 - s1 = vdimsize(file(1)%dim, file(1)%var(vid(1))%dimids) - - if(verbose) print *,__FILE__,__LINE__,s1,file(1)%var(vid(1))%name - - if(compare2) then - s2 = vdimsize(file(2)%dim, file(2)%var(vid(2))%dimids) - - if(s1 /= s2) then - write(6,*) 'WARNING: Variable ',trim(file(1)%var(vid(1))%name),' sizes differ' - write(6,'(a,a32)') ' DIMSIZEDIFF ', file(1)%var(vid(1))%name - ifail = 1 - return - end if - end if - n1 = size(file(1)%var(vid(1))%dimids) - - do i=1,n1 - start(i,1) = file(1)%dim(file(1)%var(vid(1))%dimids(i))%start - kount(i,1) = file(1)%dim(file(1)%var(vid(1))%dimids(i))%kount - dsizes(i,1) = file(1)%dim(file(1)%var(vid(1))%dimids(i))%dimsize - if(file(1)%var(vid(1))%dimids(i) == file(1)%unlimdimid) then - start(i,1)=t(1) - dsizes(i,1) = kount(i,1) - end if - end do - - allocate(buf(s1,n)) - - call checknf90(nf90_get_var(file(1)%fh, vid(1), buf(:,1), start(1:n1,1), kount(1:n1,1))) - - - allocate(mask(s1,n)) - ierr = nf90_get_att(file(1)%fh, vid(1), '_FillValue', fv1) - if(ierr == NF90_NOERR) then - mask(:,1) = (buf(:,1)/=fv1) - else - mask(:,1) = .true. - end if - if(n1>0) then - call compute_var_stats(buf(:,1), s2, mask(:,1), min_loc(1), max_loc(1), min_val(1), max_val(1), avgval(1)) - call get_dim_str(n1,translate_loc(n1,min_loc(1),start(1:n1,1),kount(1:n1,1),dsizes(1:n1,1)),min_str(1)) - call get_dim_str(n1,translate_loc(n1,max_loc(1),start(1:n1,1),kount(1:n1,1),dsizes(1:n1,1)),max_str(1)) - end if - space = ' ' - spacelen=1 - if(n1>3) spacelen=(n1-3)*8 ! adjusts the output format - - if(compare2) then - n2 = size(file(2)%var(vid(2))%dimids) - if(n2/=n1) then - print *,'WARNING variable ',trim(file(1)%var(vid(1))%name),& - ' dims differ but total size is the same, will try to compare anyway' - endif - - - do i=1,n2 - start(i,2) = file(2)%dim(file(2)%var(vid(2))%dimids(i))%start - kount(i,2) = file(2)%dim(file(2)%var(vid(2))%dimids(i))%kount - dsizes(i,2) = file(2)%dim(file(2)%var(vid(2))%dimids(i))%dimsize - if(file(2)%var(vid(2))%dimids(i) == file(2)%unlimdimid) then - start(i,2)=t(2) - dsizes(i,2) = kount(i,2) - end if - end do - - call checknf90(nf90_get_var(file(2)%fh, vid(2), buf(:,2), start(1:n2,2), kount(1:n2,2))) - ierr = nf90_get_att(file(2)%fh, vid(2), '_FillValue', fv2) - if(ierr == NF90_NOERR) then - mask(:,2) = (buf(:,2)/=fv2) - else - mask(:,2) = .true. - end if - if(n2>0) then - call compute_var_stats(buf(:,2), s2, mask(:,2), min_loc(2), max_loc(2), min_val(2), max_val(2), avgval(2)) - call get_dim_str(n2,translate_loc(n2,min_loc(2),start(1:n2,2),kount(1:n2,2),dsizes(1:n2,2)),min_str(2)) - call get_dim_str(n2,translate_loc(n2,max_loc(2),start(1:n2,2),kount(1:n2,2),dsizes(1:n2,2)),max_str(2)) - end if - diffcnt=0 - if(any(buf(:,1) /= buf(:,2))) then - allocate(vdiff(s1)) - -! Use the union of mask1 and mask2 - if(any(mask(:,1) .neqv. mask(:,2))) then - write(6,*) 'WARNING: Fill patterns differ between files' - write(6,'(a,a32)') ' FILLDIFF ', file(1)%var(vid(1))%name - ifilldiff = 1 - mask(:,1) = (mask(:,1) .and. mask(:,2)) - end if - - s2 = count(mask(:,1)) - vdiff = abs(buf(:,1)-buf(:,2)) - rms = sqrt(sum(vdiff**2,mask(:,1))/real(s2)) - diffcnt = count((vdiff>0) .and. mask(:,1)) - - ! Compute normalized rms difference; normalize using the avg abs field - ! values. Note that this differs from the definition of normalized rms - ! difference found in some references (e.g., normalizing by [max - min], which - ! can be sensitive to outliers). - if (n1 > 0 .and. n2 > 0 .and. rms > 0) then - rms_normalized_denom = (avgval(1) + avgval(2)) / 2.0 - rms_normalized = rms / rms_normalized_denom - else - ! don't try to compute rms_normalized in any of the following conditions: - ! n1 = 0 -- then we won't have avgval(1) - ! n2 = 0 -- then we won't have avgval(2) - ! rms = 0 -- then rms_normalized should be 0... but don't try to compute it - ! above in case we have a 0/0 condition - rms_normalized = 0 - end if - - -! diffcnt==0 implies only diffs are in missing values - if(diffcnt>0) then - idiff = 1 - m1 = maxval(vdiff, mask=mask(:,1)) - l1 = maxloc(vdiff, mask=mask(:,1)) - - - if (n1>0) then - call get_dim_str(n1,translate_loc(n1,l1(1),start(1:n1,1),kount(1:n1,1),dsizes(1:n1,1)),dmax_str) - else - dmax_str = ' ' - end if - -#if ({ITYPE} != TYPEINT) - call get_rdiff_stats(s1,buf(:,1),buf(:,2),vdiff,mask(:,1),rdsum, rdlogsum, rdmax, rdmaxloc) - if (n1>0) then - call get_dim_str(n1,translate_loc(n1,rdmaxloc,start(1:n1,1),kount(1:n1,1),dsizes(1:n1,1)),rdmax_str) - else - rdmax_str = ' ' - end if -#endif - - deallocate(vdiff) - - rdbar = rdsum / real(s2) - rdlogbar = rdlogsum / real(diffcnt) - - if(n1==0) then - ! Note that NORMALIZED RMS is NOT computed in this case, so we simply - ! print 0 for that. -#if ({ITYPE} == TYPEINT) - write(6,903) s2, buf(1,1), buf(2,1) - write(6,811) ' RMS ', file(1)%var(vid(1))%name, rms, ' NORMALIZED ', 0 -#else - write(6,803) s2, buf(1,1), buf(2,1) - write(6,812) ' RMS ', file(1)%var(vid(1))%name, rms, ' NORMALIZED ', 0. -#endif - - else - write(6,800) diffcnt, s1, trim(max_str(1)),trim(min_str(1)), trim(dmax_str), trim(rdmax_str) -#if ({ITYPE} == TYPEINT) - ! Note that rdmaxloc is NOT computed in this case, so we print 0 in place - ! of buf(rdmaxloc,1) and buf(rdmaxloc,2) - write(6,903) s2, max_val(1), space(1:spacelen),min_val(1), m1, buf(l1(1),1), rdbar, 0, & - count(mask(:,2)), max_val(2), space(1:spacelen),min_val(2), buf(l1(1),2), 0 - write(6,810) s1, trim(max_str(2)), trim(min_str(2)) - ! write(6,905) avgval(1), rms, rdbar, avgval(2), rdlogbar, log10(1./rdmax) - write(6,811) ' RMS ', file(1)%var(vid(1))%name, rms, ' NORMALIZED ', rms_normalized -#else - write(6,803) s2, max_val(1), space(1:spacelen),min_val(1), m1, buf(l1(1),1), rdbar, buf(rdmaxloc,1), & - count(mask(:,2)), max_val(2), space(1:spacelen),min_val(2), buf(l1(1),2), buf(rdmaxloc,2) - write(6,810) s1, trim(max_str(2)), trim(min_str(2)) - write(6,805) avgval(1), rms, rdbar, avgval(2), rdlogbar, log10(1./rdmax) - write(6,812) ' RMS ', file(1)%var(vid(1))%name, rms, ' NORMALIZED ', rms_normalized -#endif - endif - endif - end if - if(diffcnt==0) then ! no differences found - if(n1>0) then - write(6,810) s1, trim(max_str(1)),trim(min_str(1)) -#if ({ITYPE} == TYPEINT) - write(6,914) s2, max_val(1), space(1:spacelen),min_val(1), count(mask(:,2)),& - max_val(2),space(1:spacelen),min_val(2) - write(6,810) s1, trim(max_str(2)), trim(min_str(2)) - write(6,915) avgval(1), avgval(2) -#else - write(6,814) s2, max_val(1), space(1:spacelen),min_val(1), count(mask(:,2)),& - max_val(2),space(1:spacelen),min_val(2) - write(6,810) s1, trim(max_str(2)), trim(min_str(2)) - write(6,815) avgval(1), avgval(2) -#endif - endif - end if - else ! Single file analysis output - if(n==2 ) then - inotfound=1 - write(6,*) 'Variable on file1: ',trim(file(1)%var(vid(1))%name),' not found on file2' - end if - - write(6,810 ) s1, trim(max_str(1)),trim(min_str(1)) -#if ({ITYPE} == TYPEINT) - write(6, 820) s2, max_val(1),min_val(1) - write(6, 821) avgval(1) - -#else - write(6, 825) s2, max_val(1),min_val(1) - write(6, 826) avgval(1) -#endif - end if - - deallocate(buf, mask) -800 format(3x,i8,1x,i8,2x,a,1x,a,1x,a,1x,a) -803 format(12x, i8,1x,1pe23.15,a,e23.15,e8.1,e23.15,e8.1,e23.15,/, & - 12x, i8,1x, e23.15,a,e23.15,8x, e23.15,8x, e23.15) - - -805 format(10x,'avg abs field values: ',1pe23.15,4x,'rms diff:',e8.1, & - 3x,'avg rel diff(npos): ',e8.1,/, & - 10x,' ', e23.15,24x, & - 'avg decimal digits(ndif): ',0p,f4.1,' worst: ',f4.1) - -810 format(12x,i8,2x,a,1x,a) - -! RMS for int -811 format(a,a32,i10,11x,a,i10,/) - -! RMS for real -812 format(a,a32,1pe11.4,11x,a,1pe11.4,/) - -814 format(12x, i8,1x,e23.15,a,e23.15,/, & - 12x, i8,1x,e23.15,a,e23.15) -815 format(10x,'avg abs field values: ',1pe23.15,/, & - 10x,' ', e23.15) -820 format(12x,i8,1x,2i12) -821 format(12x,'avg abs field values: ',i12,/) -825 format(12x,i8,1x,1p2e23.15) -826 format(12x,'avg abs field values: ',1pe23.15,/) -903 format(12x, i8,1x,i8,a,5i8,/, & - 12x, i8,1x, i8,a,i8,8x, i8,8x, i8) - - -905 format(10x,'avg abs field values: ',i8,4x,'rms diff:',i8, & - 3x,'avg rel diff(npos): ',i8,/, & - 10x,' ', i8,24x, & - 'avg decimal digits(ndif): ',i8,' worst: ',i8) -914 format(12x, i8,1x,i8,a,i8,/, & - 12x, i8,1x,i8,a,i8) -915 format(10x,'avg abs field values: ',i8,/, & - 10x,' ', i8) - - end subroutine compare_var_{TYPE} - - ! TYPE real,double - subroutine get_rdiff_stats_{TYPE} (s1, v1, v2, vdiff, mask, rdsum, rdlogsum, rdmax, loc) - integer, intent(in) :: s1 - {VTYPE}, intent(in) :: v1(:), v2(:), vdiff(:) - logical, intent(in) :: mask(:) - {VTYPE}, intent(out) :: rdsum, rdlogsum, rdmax - integer, intent(out) :: loc - {VTYPE} :: denom, rdiff(s1) - - integer :: i, iloc(1) - - rdiff=0 - rdsum=0 - rdlogsum=0 - do i=1,s1 - if(vdiff(i)>0) then - denom = max(abs(v1(i)), abs(v2(i))) - rdiff(i) = vdiff(i)/denom - rdsum = rdsum+rdiff(i) - rdlogsum = rdlogsum - log10(rdiff(i)) - end if - end do - rdmax = maxval(rdiff) - iloc = maxloc(rdiff) - - loc = iloc(1) - - end subroutine get_rdiff_stats_{TYPE} - - ! TYPE real,int,double - subroutine compute_var_stats_{TYPE} (buf, nvalid, mask, min_loc, max_loc, min_val, max_val, avgval) - {VTYPE}, intent(in) :: buf(:) - logical, intent(in) :: mask(:) - integer, intent(out) :: nvalid, min_loc, max_loc - {VTYPE}, intent(out) :: min_val, max_val, avgval - - integer :: loc(2) - - nvalid = count(mask) - if(nvalid>0) then - loc(1:1) = maxloc(buf, mask=mask) - loc(2:2) = minloc(buf, mask=mask) - max_loc = loc(1) - min_loc = loc(2) - max_val = maxval(buf, mask=mask) - min_val = minval(buf, mask=mask) - avgval = sum(abs(buf),mask=mask)/real(nvalid) - else - max_loc=0 - min_loc=0 - max_val=0 - min_val=0 - avgval=0 - end if - - - - end subroutine compute_var_stats_{TYPE} - - - - - - function translate_loc(ndims, loc, start, kount, dsize) - integer, intent(in) :: ndims, loc, start(:), kount(:), dsize(:) - integer :: translate_loc(ndims) - - integer :: i, tloc, tprod - - tprod = product(kount) - if(loc>tprod) then - write(6,*) 'ERROR in translate_loc: location ',loc,' exceeds array size',tprod - stop - end if - if(ndims<1) then - stop '0D array in translate_loc' - endif - translate_loc = 1 - if(ndims==1) then - translate_loc = loc - else if(loc<=dsize(1)) then - translate_loc(1) = loc - else - tloc = loc - - if(verbose) print *,__LINE__,loc,ndims,dsize(1:ndims) - do i=ndims,1,-1 - tprod = tprod/dsize(i) - if(tloc>=tprod) then - translate_loc(i) = tloc/tprod + start(i) - tloc = tloc - (tloc/tprod)*tprod - end if - end do - translate_loc(1) = translate_loc(1)-1 - - if(verbose) print *,__LINE__,translate_loc(1:ndims) - end if - - end function translate_loc - - - function is_time_varying(var, file_has_unlimited_dim, unlimdimid) - type(var_t), intent(in) :: var ! variable of interest - logical , intent(in) :: file_has_unlimited_dim ! true if the file has an unlimited dimension - integer , intent(in) :: unlimdimid ! the file's unlimited dim id (if it has one) - - logical :: is_time_varying ! true if the given variable is time-varying - - if (file_has_unlimited_dim) then - is_time_varying = any(var%dimids == unlimdimid) - else - is_time_varying = .false. - end if - end function is_time_varying - - - -end module compare_vars_mod diff --git a/tools/cprnc/cprnc.F90 b/tools/cprnc/cprnc.F90 deleted file mode 100644 index ad2b66245a1..00000000000 --- a/tools/cprnc/cprnc.F90 +++ /dev/null @@ -1,209 +0,0 @@ -program piocprnc - use netcdf - use filestruct - use compare_vars_mod -#ifdef NAGFOR - use f90_unix -#endif - implicit none - - integer :: nargs, n - character(len=1024) :: arg = '' ! cmd-line argument - character(len=1024) :: fname(2) = ' ' ! input filenames - integer :: nchars - integer :: numcases=1 - integer :: ierr -! integer, external :: iargc - type(file_t) :: file(2) - type(dim_t) :: dimoptions(12) - integer :: dimoptioncnt - integer :: nvars, ndiffs, nfilldiffs, numnotfound - integer :: num_sizes_differ - integer :: num_not_analyzed - -! -! Parse arg list -! - - - nargs = command_argument_count () - dimoptioncnt=0 - ignoretime=.false. - n = 1 - do while (n <= nargs) - arg = ' ' - call getarg (n, arg) - n = n + 1 - select case (arg) - case ('-v') - verbose = .true. - case ('-d') - call getarg(n, arg) - n=n+1 - dimoptioncnt=dimoptioncnt+1 - call parsearg(arg, dimoptions(dimoptioncnt)%name, dimoptions(dimoptioncnt)%start, dimoptions(dimoptioncnt)%kount) - - case ('-m') - ignoretime=.true. - case default - if (fname(1) == ' ') then - fname(1) = arg(1:len_trim(arg)) - nchars = len_trim (fname(1)) - write (6,*) 'file 1=',fname(1)(1:nchars) - else if (fname(2)==' ') then - fname(2) = arg(1:len_trim(arg)) - nchars = len_trim (fname(2)) - write (6,*) 'file 2=',fname(2)(1:nchars) - numcases = 2 - else - call usage_exit (' ') - end if - end select - end do -! -! Must have at least 1 file input -! - if (fname(1) == ' ') then - call usage_exit ('You must enter at least 1 input file') - end if - -! -! Read the files and initialize file_t -! - do n=1, numcases - ierr = nf90_open(fname(n),NF90_NOWRITE, file(n)%fh) - if(ierr /= NF90_NOERR) then - stop 'Failed to open file ' - endif - if(dimoptioncnt>0) then - call init_file_struct( file(n), dimoptions(1:dimoptioncnt) ) - else - call init_file_struct( file(n)) - end if - end do - - if(numcases==2) then - call compare_metadata(file(1), file(2)) - - call compare_dimensions( file(1)%dim, file(2)%dim) - - call match_vars( file(1), file(2) ) - end if - call compare_vars(numcases, file, nvars, ndiffs, nfilldiffs, & - num_sizes_differ, num_not_analyzed, numnotfound) - - -! -! Summarize results -! - write(6,806) - write(6,*) ' ' - write(6,700) 'SUMMARY of cprnc:' - if(numcases==1) then - write(6,700) ' A total number of ',nvars,' fields in file 1 were analyzed (non-compare mode)' - write(6,700) ' A total number of ',num_not_analyzed, & - ' fields in file 1 could not be analyzed' - else - write(6,700) ' A total number of ',nvars,' fields were compared' - write(6,700) ' of which ',ndiffs,' had non-zero differences' - write(6,700) ' and ',nfilldiffs,' had differences in fill patterns' - write(6,700) ' and ',num_sizes_differ,' had different dimension sizes' - write(6,700) ' A total number of ',num_sizes_differ + num_not_analyzed, & - ' fields could not be analyzed' - write(6,700) ' A total number of ',numnotfound,' fields on file 1 were not found on file2.' - if (nvars > 0 .and. ndiffs == 0 .and. nfilldiffs == 0 .and. & - num_sizes_differ == 0 .and. num_not_analyzed= '0' .and. arg(j:j) <= '9' .and. arg(j:j) /= ':') - j = j + 1 - end do - read (arg(i:j-1), '(i5)') v1 - ! - ! Next, if ":" comes after the number, look for the next number - ! - i=j - - if (arg(i:i) == ':') then - j = i + 1 - do while (j < len(arg) .and. scan(arg(j:j),"-0123456789")>0) - j = j + 1 - end do - read (arg(i+1:j-1), '(i5)', iostat=ierr) v2 - ! - ! On unexpected input set v2 = -1, e.g. "-d lon:2:blah" will mean get all lons > 1 - ! - if (ierr /= 0) then - v2 = -1 - end if - else - ! - ! ":" not present. Interpret for example '-d lon:2' to mean '-d lon:2:1' - ! - v2 = 1 - end if - if(verbose) print *,__FILE__,__LINE__,trim(dimname),v1,v2 - return - end subroutine parsearg - - end program piocprnc diff --git a/tools/cprnc/filestruct.F90 b/tools/cprnc/filestruct.F90 deleted file mode 100644 index 5246807c224..00000000000 --- a/tools/cprnc/filestruct.F90 +++ /dev/null @@ -1,481 +0,0 @@ -module filestruct - use netcdf - implicit none - type dim_t - integer :: dimsize - integer :: start, kount ! used for user requested dimension subsetting - character(len=nf90_MAX_NAME) ::name = '' - end type dim_t - - type var_t - integer :: matchid - integer :: ndims - integer :: natts - integer, pointer :: dimids(:) - integer :: xtype - character(len=nf90_MAX_NAME) ::name = '' - end type var_t - - type file_t - integer :: fh - integer :: natts - type(dim_t), pointer :: dim(:) - type(var_t), pointer :: var(:) - integer :: unlimdimid - end type file_t - - logical :: verbose - -contains - subroutine init_file_struct( file, dimoptions ) - - type(file_t) :: file - type(dim_t), optional :: dimoptions(:) - integer :: ndims, nvars - integer :: dimids(NF90_MAX_DIMS) - integer :: i, ierr, docnt, n1, n2 - integer :: j, start, kount - character(len=NF90_MAX_NAME) :: name, dname - ierr= nf90_inquire(file%fh, ndims, nvars, file%natts, file%unlimdimid) - - allocate(file%dim(ndims)) - allocate(file%var(nvars)) - - - do i=1,ndims - ierr = nf90_inquire_dimension(file%fh, i, file%dim(i)%name, file%dim(i)%dimsize) - file%dim(i)%start=1 - if(i==file%unlimdimid) then - file%dim(i)%kount=1 - else - file%dim(i)%kount=file%dim(i)%dimsize - end if - end do - - if(present(dimoptions)) then - docnt = size(dimoptions) - do j=1,docnt - start = dimoptions(j)%start - kount = dimoptions(j)%kount - name = dimoptions(j)%name - n1 = len_trim(name) - do i=1,ndims - dname = file%dim(i)%name - n2 = len_trim(dname) - if(name(1:n1).eq.dname(1:n2) ) then - - - if((start > 0) .and. (start < file%dim(i)%dimsize)) then - file%dim(i)%start = start - else - write(6,*) 'Command line start value for dim ',name(1:n1),& - ' out of bounds, expected 1-',file%dim(i)%dimsize,' got: ',start - stop - end if - if(kount > 0 .and. start+kount <= file%dim(i)%dimsize) then - file%dim(i)%kount = kount - else if(kount == -1) then - file%dim(i)%kount = file%dim(i)%dimsize-file%dim(i)%start+1 - else - write(6,*) 'Command line count value for dim ',name(1:n1),& - ' out of bounds, expected 1-',file%dim(i)%dimsize-file%dim(i)%start+1,' got: ',kount - stop - - endif - write(6,*) 'Setting dimension bounds for dim ',name(1:n1),file%dim(i)%start,file%dim(i)%kount - - exit - end if - end do - end do - end if - - do i=1,nvars - file%var(i)%matchid=-1 - ierr = nf90_inquire_variable(file%fh, i, file%var(i)%name, file%var(i)%xtype, file%var(i)%ndims, dimids, & - file%var(i)%natts) - allocate(file%var(i)%dimids(file%var(i)%ndims)) - file%var(i)%dimids = dimids(1:file%var(i)%ndims) - end do - - - end subroutine init_file_struct - - - subroutine compare_metadata(file1, file2, vid) - type(file_t) :: file1, file2 - integer, optional, intent(in) :: vid - - integer :: id1, id2, natts1, natts2 - - integer :: i, ierr - character(len=NF90_MAX_NAME) :: attname - integer :: atttype, attlen - - real, pointer :: attreal1(:), attreal2(:) - double precision, pointer :: attdouble1(:),attdouble2(:) - integer, pointer :: attint1(:),attint2(:) - character(len=8192) :: attchar1, attchar2 - logical :: found - - - if(present(vid)) then - id1 = vid - id2 = file1%var(id1)%matchid - ierr = nf90_inquire_variable(file1%fh, id1, nAtts=natts1) - ierr = nf90_inquire_variable(file2%fh, id2, nAtts=natts2) - else - id1 = NF90_GLOBAL - id2 = NF90_GLOBAL - natts1 = file1%natts - natts2 = file2%natts - end if - - do i=1,natts1 - found = .true. - attname = '' - ierr = nf90_inq_attname(file1%fh, id1, i, attname) - ierr = nf90_inquire_attribute(file1%fh, id1, trim(attname), atttype, attlen) - select case(atttype) - case(nf90_char) - attchar1=' ' - attchar2=' ' - - ierr = nf90_get_att(file1%fh,id1, trim(attname), attchar1) - ierr = nf90_get_att(file2%fh,id2, trim(attname), attchar2) - if(ierr==NF90_NOERR) then - if(trim(attname).ne.'case' .and. attchar1(1:attlen) .ne. attchar2(1:attlen)) then - print *, 'Attribute ',trim(attname),' from file1: ',attchar1(1:attlen),& - ' does not match that found on file2: ',attchar2(1:attlen) - end if - else - print *, 'Attribute ',trim(attname),' from file1: ',attchar1(1:attlen),& - ' not found on file2' - end if - if(id1==NF90_GLOBAL .and. trim(attname) .eq. 'case') then - print *, 'CASE 1 : ',trim(attchar1) - print *, 'CASE 2 : ',trim(attchar2) - endif - if(id1==NF90_GLOBAL .and. trim(attname) .eq. 'title') then - print *, 'TITLE 1 : ',trim(attchar1) - print *, 'TITLE 2 : ',trim(attchar2) - end if - case(nf90_int) - allocate(attint1(attlen),attint2(attlen)) - ierr = nf90_get_att(file1%fh,id1, trim(attname), attint1) - ierr = nf90_get_att(file2%fh,id2, trim(attname), attint2) - - if(ierr==NF90_NOERR) then - if(any(attint1 /= attint2)) then - print *, 'Attribute ',trim(attname),' from file1: ',attint1,' does not match that found on file2 ',attint2 - end if - else - print *, 'Attribute ',trim(attname),' from file1: ',attint1,' not found on file2' - end if - deallocate(attint1, attint2) - - - case(nf90_float) - allocate(attreal1(attlen),attreal2(attlen)) - ierr = nf90_get_att(file1%fh,id1, trim(attname), attreal1) - ierr = nf90_get_att(file2%fh,id2, trim(attname), attreal2) - if(ierr==NF90_NOERR) then - if(any(attreal1 /= attreal2)) then - print *, 'Attribute ',trim(attname),' from file1: ',attreal1,' does not match that found on file2 ',attreal2 - end if - else - print *, 'Attribute ',trim(attname),' from file1: ',attreal1,' not found on file2' - end if - deallocate(attreal1, attreal2) - case(nf90_double) - allocate(attdouble1(attlen), attdouble2(attlen)) - ierr = nf90_get_att(file1%fh,id1, trim(attname), attdouble1) - ierr = nf90_get_att(file2%fh,id2, trim(attname), attdouble2) - if(ierr==NF90_NOERR) then - if(any(attdouble1 /= attdouble2)) then - print *, 'Attribute ',trim(attname),' from file1: ',attdouble1,' does not match that found on file2 ',attdouble2 - end if - else - print *, 'Attribute ',trim(attname),' from file1: ',attdouble1,' not found on file2' - end if - deallocate(attdouble1, attdouble2) - case default - print *,' Did not recognize attribute type ',atttype, trim(attname), attlen - end select - end do - - end subroutine compare_metadata - - - - - - - - - subroutine compare_dimensions( dimfile1, dimfile2) - type(dim_t), intent(in) :: dimfile1(:), dimfile2(:) - - integer :: ds1, ds2 - integer :: i, j - logical,pointer :: found(:,:) - - ds1 = size(dimfile1) - ds2 = size(dimfile2) - - allocate(found(2,max(ds1,ds2))) - - found = .false. - do i=1,ds1 - do j=1,ds2 - if(dimfile1(i)%name .eq. dimfile2(j)%name) then - if(dimfile1(i)%dimsize == dimfile2(j)%dimsize) then - print *, 'Dimension ',trim(dimfile1(i)%name), ' matches' - else - print *, 'Dimension ',trim(dimfile1(i)%name), ' differs ', dimfile1(i)%dimsize, ' /= ',dimfile2(j)%dimsize - end if - found(1,i) = .true. - found(2,j) = .true. - end if - end do - end do - do i=1,ds1 - if(.not. found(1,i)) then - print *, 'Could not find match for file 1 dimension ',trim(dimfile1(i)%name) - end if - end do - do i=1,ds2 - if(.not. found(2,i)) then - print *, 'Could not find match for file 2 dimension ',trim(dimfile2(i)%name) - end if - end do - deallocate(found) - end subroutine compare_dimensions - - - subroutine match_vars( file1, file2 ) - type(file_t), intent(inout) :: file1, file2 - - type(var_t), pointer :: varfile1(:),varfile2(:) - - integer :: vs1, vs2, i, j - - - - varfile1 => file1%var - varfile2 => file2%var - - vs1 = size(varfile1) - vs2 = size(varfile2) - - do i=1,vs1 - do j=1,vs2 - if(varfile1(i)%name .eq. varfile2(j)%name) then - varfile1(i)%matchid=j - varfile2(j)%matchid=i - end if - end do - end do - do i=1,vs1 - if(varfile1(i)%matchid<0) then - print *, 'Could not find match for file1 variable ',trim(varfile1(i)%name), ' in file2' - end if - end do - do i=1,vs2 - if(varfile2(i)%matchid<0) then - print *, 'Could not find match for file2 variable ',trim(varfile2(i)%name), ' in file1' - end if - end do - end subroutine match_vars - - - function vdimsize(dims, dimids) - type(dim_t), intent(in) :: dims(:) - integer, intent(in) :: dimids(:) - - integer :: vdimsize - integer :: i - - vdimsize=1 - do i=1,size(dimids) - if(verbose) print *,__FILE__,__LINE__,i,dimids(i),size(dims),size(dimids) - vdimsize = vdimsize*dims(dimids(i))%kount - end do - - end function vdimsize - - - - - - subroutine compare_var_int(f1, f2, i1, i2, t) - type(file_t) :: f1,f2 - integer, intent(in) :: i1, i2 - integer, optional :: t - - - integer :: s1, s2, m1, m2, l1(1), l2(1), i, ierr - integer, pointer :: v1(:), v2(:), vdiff(:) - integer :: t1, n1 - integer :: start(NF90_MAX_DIMS), count(NF90_MAX_DIMS) - - if(present(t)) then - t1 = t - else - t1 = 1 - end if - - s1 = vdimsize(f1%dim, f1%var(i1)%dimids) - s2 = vdimsize(f2%dim, f2%var(i2)%dimids) - - if(s1 /= s2) then - print *, 'Variable ',f1%var(i)%name,' sizes differ' - end if - - n1 = size(f1%var(i1)%dimids) - start = 1 - do i=1,n1 - count(i) = f1%dim(f1%var(i1)%dimids(i))%dimsize - if(f1%var(i1)%dimids(i) == f1%unlimdimid) then - count(i)=1 - start(i)=t1 - end if - end do - - allocate(v1(s1), v2(s2)) - - ierr = nf90_get_var(f1%fh, i1, v1, start(1:n1), count(1:n1)) - ierr = nf90_get_var(f2%fh, i2, v2, start(1:n1), count(1:n1)) - - if(any(v1 /= v2)) then - allocate(vdiff(s1)) - vdiff = abs(v1-v2) - m1 = maxval(vdiff) - m2 = minval(vdiff) - l1 = maxloc(vdiff) - l2 = minloc(vdiff) - - print *,__FILE__,__LINE__,m1,m2,l1,l2 - deallocate(vdiff) - end if - - deallocate(v1,v2) - end subroutine compare_var_int - - subroutine compare_var_float(f1, f2, i1, i2, t) - type(file_t) :: f1,f2 - integer, intent(in) :: i1, i2 - integer, optional :: t - - - integer :: s1, s2, m1, m2, l1(1), l2(1), i, ierr - real, pointer :: v1(:), v2(:), vdiff(:) - integer :: t1, n1 - integer :: start(NF90_MAX_DIMS), count(NF90_MAX_DIMS) - - if(present(t)) then - t1 = t - else - t1 = 1 - end if - - s1 = vdimsize(f1%dim, f1%var(i1)%dimids) - s2 = vdimsize(f2%dim, f2%var(i2)%dimids) - - if(s1 /= s2) then - print *, 'Variable ',f1%var(i)%name,' sizes differ' - end if - - n1 = size(f1%var(i1)%dimids) - start = 1 - do i=1,n1 - count(i) = f1%dim(f1%var(i1)%dimids(i))%dimsize - if(f1%var(i1)%dimids(i) == f1%unlimdimid) then - count(i)=1 - start(i)=t1 - end if - end do - - allocate(v1(s1), v2(s2)) - - ierr = nf90_get_var(f1%fh, i1, v1, start(1:n1), count(1:n1)) - ierr = nf90_get_var(f2%fh, i2, v2, start(1:n1), count(1:n1)) - - if(any(v1 /= v2)) then - allocate(vdiff(s1)) - vdiff = abs(v1-v2) - m1 = maxval(vdiff) - m2 = minval(vdiff) - l1 = maxloc(vdiff) - l2 = minloc(vdiff) - - print *,__FILE__,__LINE__,m1,m2,l1,l2 - deallocate(vdiff) - end if - - deallocate(v1,v2) - end subroutine compare_var_float - - subroutine compare_var_double(f1, f2, i1, i2, t) - type(file_t) :: f1,f2 - integer, intent(in) :: i1, i2 - integer, optional :: t - - - integer :: s1, s2, m1, m2, l1(1), l2(1), i, ierr - double precision, pointer :: v1(:), v2(:), vdiff(:) - integer :: t1, n1 - integer :: start(NF90_MAX_DIMS), count(NF90_MAX_DIMS) - - if(present(t)) then - t1 = t - else - t1 = 1 - end if - - s1 = vdimsize(f1%dim, f1%var(i1)%dimids) - s2 = vdimsize(f2%dim, f2%var(i2)%dimids) - - if(s1 /= s2) then - print *, 'Variable ',f1%var(i)%name,' sizes differ' - end if - - n1 = size(f1%var(i1)%dimids) - start = 1 - do i=1,n1 - count(i) = f1%dim(f1%var(i1)%dimids(i))%dimsize - if(f1%var(i1)%dimids(i) == f1%unlimdimid) then - count(i)=1 - start(i)=t1 - end if - end do - - allocate(v1(s1), v2(s2)) - - ierr = nf90_get_var(f1%fh, i1, v1, start(1:n1), count(1:n1)) - ierr = nf90_get_var(f2%fh, i2, v2, start(1:n1), count(1:n1)) - - if(any(v1 /= v2)) then - allocate(vdiff(s1)) - vdiff = abs(v1-v2) - m1 = maxval(vdiff) - m2 = minval(vdiff) - l1 = maxloc(vdiff) - l2 = minloc(vdiff) - - print *,__FILE__,__LINE__,m1,m2,l1,l2 - deallocate(vdiff) - end if - - deallocate(v1,v2) - end subroutine compare_var_double - - - - - - - - - -end module filestruct diff --git a/tools/cprnc/prec.F90 b/tools/cprnc/prec.F90 deleted file mode 100644 index abbaba26ea7..00000000000 --- a/tools/cprnc/prec.F90 +++ /dev/null @@ -1,8 +0,0 @@ -module prec -! -! Constants for setting precision -! - integer, parameter :: r4 = selected_real_kind (6) - integer, parameter :: r8 = selected_real_kind (12) - integer, parameter :: i4 = selected_int_kind (6) -end module prec diff --git a/tools/cprnc/run_tests b/tools/cprnc/run_tests deleted file mode 100755 index 3d69303c3b5..00000000000 --- a/tools/cprnc/run_tests +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env perl -# -# Run all cprnc tests -# See usage message for details -# -# Bill Sacks -# 5-28-13 - -use strict; -use Getopt::Long; - -#---------------------------------------------------------------------- -# Define parameters -#---------------------------------------------------------------------- - -# Hash giving info about each test. Key is the test file; value is a -# hash reference containing at least the associated control file (key: -# control), and possibly extra arguments to cprnc (key: extra_args) -my %tests = ('copy.nc' => {control => 'control.nc'}, - 'diffs_in_vals.nc' => {control => 'control.nc'}, - 'diffs_in_fill.nc' => {control => 'control.nc'}, - 'diffs_in_vals_and_diffs_in_fill.nc' => {control => 'control.nc'}, - 'diffs_in_vals_and_fill.nc' => {control => 'control.nc'}, - 'lon_differs.nc' => {control => 'control.nc'}, - 'vals_differ_by_1.1.nc' => {control => 'control.nc'}, - 'vals_differ_by_1.1_somewhere.nc' => {control => 'control.nc'}, - 'vals_differ_by_varying_amounts.nc' => {control => 'control.nc'}, - 'vals_differ_by_varying_amounts2.nc' => {control => 'control.nc'}, - - 'multipleTimes_someTimeless_diffs_in_vals_and_fill.nc' => {control => 'control_multipleTimes_someTimeless.nc'}, - - 'noTime_diffs_in_vals_and_fill.nc' => {control => 'control_noTime.nc', - extra_args => '-m'}, - - 'diffs_0d.nc' => {control => 'control_0d.nc', - extra_args => '-m'}, - - 'cpl.hi.subset.test.nc' => {control => 'cpl.hi.subset.control.nc'}, - 'clm2.h0.subset.test.nc' => {control => 'clm2.h0.subset.control.nc'}, - 'clm2.h1.subset.test.nc' => {control => 'clm2.h1.subset.control.nc'}, - ); - -#---------------------------------------------------------------------- -# Get arguments and check them -#---------------------------------------------------------------------- - -my %opts; -GetOptions( - "outdir=s" => \$opts{'outdir'}, - "h|help" => \$opts{'help'}, -) or usage(); - -usage() if $opts{'help'}; - -if (@ARGV) { - print "ERROR: unrecognized arguments: @ARGV\n"; - usage(); -} - -if (!$opts{'outdir'}) { - print "ERROR: -outdir must be provided\n"; - usage(); -} - - -#---------------------------------------------------------------------- -# Main script -#---------------------------------------------------------------------- - -mkdir $opts{'outdir'} or die "ERROR creating directory $opts{'outdir'}; -note that this directory should NOT exist before running this script\n"; - -my $num_tests = keys %tests; -print "Running $num_tests tests...\n"; - -foreach my $test (keys %tests) { - print "$test\n"; - my $test_file = $test; - my $control_file = $tests{$test}{'control'}; - my $outfile = "$opts{'outdir'}/${test}.out"; - - my $extra_args = $tests{$test}{'extra_args'}; - - open (my $file, ">", "$outfile") or die "ERROR opening $outfile"; - print $file `./cprnc $extra_args test_inputs/$control_file test_inputs/$test_file`; - close $file; -} - -#---------------------------------------------------------------------- -# Subroutines -#---------------------------------------------------------------------- - -sub usage { - die < [OPTIONS] - - Run all cprnc tests, putting output in directory given by . - should NOT exist before running this script. - - -OPTIONS - -help [or -h] Display this help - -EOF -} diff --git a/tools/cprnc/summarize_cprnc_diffs b/tools/cprnc/summarize_cprnc_diffs deleted file mode 100755 index 84933192cc6..00000000000 --- a/tools/cprnc/summarize_cprnc_diffs +++ /dev/null @@ -1,573 +0,0 @@ -#!/usr/bin/env perl -# -# Summarize cprnc output from all tests in a CESM test suite. -# See usage message for details. -# -# Bill Sacks -# 4-10-13 - -use strict; -use Getopt::Long; -use File::Basename; -use List::Util qw(max sum); - -#---------------------------------------------------------------------- -# Get arguments and check them -#---------------------------------------------------------------------- - -my %opts; -# set defaults -$opts{'output_suffix'} = ''; -# set up options -GetOptions( - "basedir=s" => \$opts{'basedir'}, - "testid=s" => \$opts{'testid'}, - "output_suffix=s" => \$opts{'output_suffix'}, - "narrow" => \$opts{'narrow'}, - "h|help" => \$opts{'help'}, -) or usage(); - -usage() if $opts{'help'}; - -if (@ARGV) { - print "ERROR: unrecognized arguments: @ARGV\n"; - usage(); -} - -if (!$opts{'basedir'}) { - print "ERROR: -basedir must be provided\n"; - usage(); -} -if (!$opts{'testid'}) { - print "ERROR: -testid must be provided\n"; - usage(); -} - -#---------------------------------------------------------------------- -# Main script -#---------------------------------------------------------------------- - -# Create hash containing summary of cprnc differences. This is a reference to a hash, with: -# Keys: "Directory Filename Variable" -# Values: Reference to a hash containing: -# Dir => directory (gives test name) -# Filename => cprnc filename -# Variable => variable -# RMS => rms value [may or may not be present] -# RMS_NORM => normalized rms value [may or may not be present] -# FILLDIFF => ' ' [may or may not be present] -# DIMSIZEDIFF => ' ' [may or may not be present] -my ($summary_hash) = - process_cprnc_output($opts{'basedir'}, $opts{'testid'}, $opts{'output_suffix'}); - -my $outbase="cprnc.summary.$opts{'testid'}"; -if ($opts{'output_suffix'}) { - $outbase = "$outbase.$opts{'output_suffix'}"; -} - -# set widths of output strings -my $widths_hash; -if ($opts{'narrow'}) { - $widths_hash = { Dir => 40, Filename => 40, Variable => 40 }; -} -else { - $widths_hash = max_widths($summary_hash); -} - - -print_results_by_test("${outbase}.by_test", $summary_hash, $widths_hash); -print_results_by_varname("${outbase}.by_varname", $summary_hash, $widths_hash); -print_results_by_rms("${outbase}.by_rms", $summary_hash, $widths_hash); - - - -#---------------------------------------------------------------------- -# Subroutines -#---------------------------------------------------------------------- - -sub usage { - die < -testid [OPTIONS] - - is the base directory in which test directories can be found - - is the testid of the tests to summarize - (can contain shell wildcards) - - This script can be used to post-process and summarize baseline comparison - output from one or more CESM test suites. - - The script finds all directories in basedir whose name ends with the given - testid; these are the test directories of interest. It then examines the - 'run' subdirectory of each test directory of interest, looking for files of - the form *.nc.cprnc.out. Or, if the -output_suffix argument is given, then - it looks for files of the form *.nc.cprnc.out.SUFFIX. (With this naming - convention [i.e., looking for files of the form *.nc.cprnc.out], note that - it only looks at output for baseline comparisons - NOT output from the test - itself, such as cprnc output files from the exact restart test.) (Actually, - we also allow for files of the form *.nc_[0-9][0-9][0-9][0-9].cprnc.out, - such as *.nc_0001.cprnc.out and *.nc_0002.cprnc.out, to pick up - multi-instance files.) - - Summaries of cprnc differences (RMS and normalized RMS differences, FILLDIFFs and DIMSIZEDIFFs) - are placed in three output files beginning with the name 'cprnc.summary', in - the current directory. These files contain the same information, but one is - sorted by test name, one is sorted by variable name, and is one sorted from - largest to smallest normalized RMS differences. - - -OPTIONS - -output_suffix If provided, look for files of the form *.nc.cprnc.out.SUFFIX - rather than just *.nc.cprnc.out - - -narrow Use generally-narrower output field widths to aid readability, - at the expense of truncated strings - - -help [or -h] Display this help - -EOF -} - - -# process_cprnc_output -# Read through all cprnc files, and build hashes of instances of RMS, normalized RMS, FILLDIFF and DIMSIZEDIFF -# Inputs: -# - basedir -# - testid -# - output_suffix -# Output: hash reference -# Dies with an error if no cprnc output files are found -sub process_cprnc_output { - my ($basedir, $testid, $output_suffix) = @_; - - my %diffs; - my $num_files = 0; - - my @test_dirs = glob "${basedir}/*${testid}"; - - foreach my $test_dir (@test_dirs) { - my $test_dir_base = basename($test_dir); - - my @cprnc_files; - if ($output_suffix) { - @cprnc_files = glob "${test_dir}/run/*.nc.cprnc.out.${output_suffix} ${test_dir}/run/*.nc_[0-9][0-9][0-9][0-9].cprnc.out.${output_suffix}"; - } - else { - @cprnc_files = glob "${test_dir}/run/*.nc.cprnc.out ${test_dir}/run/*.nc_[0-9][0-9][0-9][0-9].cprnc.out"; - } - - foreach my $cprnc_file (@cprnc_files) { - my $cprnc_file_base = basename($cprnc_file); - $num_files++; - - open IN, "<", $cprnc_file or die "ERROR opening ${cprnc_file}"; - - while (my $line = ) { - chomp $line; - - process_line($line, $test_dir_base, $cprnc_file_base, \%diffs); - } # while - - close IN; - } # foreach cprnc_file - - } # foreach test_dir - - if ($num_files == 0) { - die "ERROR: no cprnc.out files found\n"; - } - - return \%diffs; -} - - -# process_line: Process one line from one file -# Inputs: -# - line -# - test_dir -# - cprnc_file -# - diffs hash reference (MODIFIED) -sub process_line { - my ($line, $test_dir, $cprnc_file, $diffs) = @_; - - my $diff_type; - my $varname; - my $rms; - my $ignore; - my $rms_normalized; - - if ($line =~ /^ *RMS /) { - ($diff_type, $varname, $rms, $ignore, $rms_normalized) = split " ", $line; - } elsif ($line =~ /^ *FILLDIFF /) { - ($diff_type, $varname) = split " ", $line; - $rms = ""; - $rms_normalized = ""; - } elsif ($line =~ /^ *DIMSIZEDIFF /) { - ($diff_type, $varname) = split " ", $line; - $rms = ""; - $rms_normalized = ""; - } else { - $diff_type = ""; - } - - if ($diff_type eq 'RMS' || $diff_type eq 'FILLDIFF' || $diff_type eq 'DIMSIZEDIFF') { - # We have found a cprnc difference - - my $key = "$test_dir $cprnc_file $varname"; - - # For RMS errors, keep the highest error found - if ($diff_type eq "RMS") { - if (exists $diffs->{$key} && exists $diffs->{$key}{'RMS_NORM'}) { - if ($diffs->{$key}{'RMS_NORM'} > $rms_normalized) { - warn "WARNING: Ignoring lower RMS value: $key : $rms_normalized < $diffs->{$key}{'RMS_NORM'}\n"; - return; - } - else { - warn "WARNING: Replacing RMS with higher value: $key : $rms_normalized > $diffs->{$key}{'RMS_NORM'}\n"; - } - } - } - - # If the diffs hash doesn't already contain information about this - # directory/filename/variable combo, then we need to create a hash - # reference with the appropriate basic metadata. - if (!exists $diffs->{$key}) { - $diffs->{$key} = { - Dir => $test_dir, - Filename => $cprnc_file, - Variable => $varname, - }; - } - - # Whether or not the hash already contained the given key, we need to add - # the value of interest -- either the RMS and normalized RMS errors, or - # the fact that there is a FILLDIFF or DIMSIZEDIFF. - if ($diff_type eq "RMS") { - $diffs->{$key}{'RMS'} = $rms; - $diffs->{$key}{'RMS_NORM'} = $rms_normalized; - } else { - # No meaningful value here - just record the fact that we saw a - # FILLDIFF or DIMSIZEDIFF - $diffs->{$key}{$diff_type} = ""; - } - } elsif ($diff_type ne '') { - die "Unexpected diff_type: $diff_type"; - } -} - - -# max_widths -# Inputs: -# - summary_hash (hash reference) -# Output: reference to a hash containing the maximum width of each of -# the following in the summary hash: -# - Dir -# - Filename -# - Variable -sub max_widths { - my $summary_hash = shift; - - my %maxes; - - foreach my $var ('Dir','Filename','Variable') { - $maxes{$var} = max (map { length($summary_hash->{$_}{$var}) } keys %$summary_hash); - } - - return \%maxes; -} - - -# print_results_by_test: Print sorted hash entries to a file, sorted by test name -# Inputs: -# - outfile: name of output file -# - summary_hash: hash reference containing results to print -# - widths: hash reference giving widths of output strings -sub print_results_by_test { - my ($outfile, $summary_hash, $widths) = @_; - - open OUT, ">", "$outfile" or die "ERROR opening $outfile"; - - my @sorted_keys = sort{ $summary_hash->{$a}{'Dir'} cmp $summary_hash->{$b}{'Dir'} - or $summary_hash->{$a}{'Filename'} cmp $summary_hash->{$b}{'Filename'} - or $summary_hash->{$a}{'Variable'} cmp $summary_hash->{$b}{'Variable'} } - keys %$summary_hash; - - my $last_dir; - my $last_filename; - - my $separator_width = sum(values %$widths) + 57; - - for my $key (@sorted_keys) { - - # Print a separator line between different files - if ($summary_hash->{$key}{'Dir'} ne $last_dir || - $summary_hash->{$key}{'Filename'} ne $last_filename) { - if ($last_dir && $last_filename) { - print OUT "=" x $separator_width . "\n"; - } - $last_dir = $summary_hash->{$key}{'Dir'}; - $last_filename = $summary_hash->{$key}{'Filename'}; - } - - my $line = format_line($summary_hash->{$key}, $widths); - - print OUT "$line\n"; - } - - close OUT; -} - - -# print_results_by_varname: Print sorted hash entries to a file, sorted by variable name -# Inputs: -# - outfile: name of output file -# - summary_hash: hash reference containing results to print -# - widths: hash reference giving widths of output strings -sub print_results_by_varname { - my ($outfile, $summary_hash, $widths) = @_; - - open OUT, ">", "$outfile" or die "ERROR opening $outfile"; - - my @sorted_keys = sort{ $summary_hash->{$a}{'Variable'} cmp $summary_hash->{$b}{'Variable'} - or $summary_hash->{$a}{'Dir'} cmp $summary_hash->{$b}{'Dir'} - or $summary_hash->{$a}{'Filename'} cmp $summary_hash->{$b}{'Filename'} } - keys %$summary_hash; - - my $last_variable; - - my $separator_width = sum(values %$widths) + 57; - - for my $key (@sorted_keys) { - - # Print a separator line between different variables - if ($summary_hash->{$key}{'Variable'} ne $last_variable) { - if ($last_variable) { - print OUT "=" x $separator_width . "\n"; - } - $last_variable = $summary_hash->{$key}{'Variable'}; - } - - my $line = format_line($summary_hash->{$key}, $widths); - - print OUT "$line\n"; - } - - close OUT; -} - - - -# print_results_by_rms: Print sorted hash entries to a file, sorted by RMS_NORM -# Inputs: -# - outfile: name of output file -# - summary_hash: hash reference containing results to print -# - widths: hash reference giving widths of output strings -sub print_results_by_rms { - my ($outfile, $summary_hash, $widths) = @_; - - open OUT, ">", "$outfile" or die "ERROR opening $outfile"; - - my @sorted_keys = sort {$summary_hash->{$b}{'RMS_NORM'} <=> $summary_hash->{$a}{'RMS_NORM'} - or $summary_hash->{$a}{'Dir'} cmp $summary_hash->{$b}{'Dir'} - or $summary_hash->{$a}{'Filename'} cmp $summary_hash->{$b}{'Filename'} - or $summary_hash->{$a}{'Variable'} cmp $summary_hash->{$b}{'Variable'} } - keys %$summary_hash; - - for my $key (@sorted_keys) { - my $line = format_line($summary_hash->{$key}, $widths); - - print OUT "$line\n"; - } - - close OUT; -} - - -# Inputs: -# - reference to a hash containing: -# - Dir -# - Filename -# - Variable -# - RMS (optional) -# - RMS_NORM (optional) -# - FILLDIFF (optional) -# - DIMSIZEDIFF (optional) -# - widths: hash reference giving widths of output strings -# Return a formatted line for printing -sub format_line { - my ($hash_ref, $widths) = @_; - - my $dir = $hash_ref->{'Dir'}; - my $filename = $hash_ref->{'Filename'}; - my $variable = $hash_ref->{'Variable'}; - my $rms = ""; - my $rms_normalized = ""; - my $filldiff = ""; - my $dimsizediff = ""; - if (exists $hash_ref->{'RMS'}) { - $rms = sprintf(" : RMS %-16g", $hash_ref->{'RMS'}); - } - if (exists $hash_ref->{'RMS_NORM'}) { - $rms_normalized = sprintf(" : RMS_NORM %-16g", $hash_ref->{'RMS_NORM'}); - } - if (exists $hash_ref->{'FILLDIFF'}) { - $filldiff = " : FILLDIFF"; - } - if (exists $hash_ref->{'DIMSIZEDIFF'}) { - $dimsizediff = " : DIMSIZEDIFF"; - } - - # for width=40, the format string will contain '%-40.40s' - my $format = '%-' . $widths->{'Dir'} . '.' . $widths->{'Dir'} . 's : ' . - '%-' . $widths->{'Filename'} . '.' . $widths->{'Filename'} . 's : ' . - '%-' . $widths->{'Variable'} . '.' . $widths->{'Variable'} . 's' . - '%s%s%s%s'; - - sprintf($format, $dir, $filename, $variable, $filldiff, $dimsizediff, $rms, $rms_normalized); -} - -#======================================================================= -# Notes about testing: unit tests -#======================================================================= - -#----------------------------------------------------------------------- -# Testing process_line -#----------------------------------------------------------------------- - -# use Data::Dumper; - -# my %diffs; - -# # shouldn't do anything -# process_line("hello", "test_dir1", "file_a", \%diffs); - -# # test basic filldiff -# process_line("FILLDIFF var1", "test_dir1", "file_b", \%diffs); - -# # add an RMS to existing filldiff -# process_line("RMS var1 4200 NORMALIZED 42", "test_dir1", "file_b", \%diffs); - -# # test basic rms error -# process_line("RMS var17 0.314 NORMALIZED 3.14", "test_dir1", "file_b", \%diffs); - -# # add a filldiff to existing rms error -# process_line("FILLDIFF var17", "test_dir1", "file_b", \%diffs); - -# # add a filldiff without RMS -# process_line("FILLDIFF var42", "test_dir2", "file_c", \%diffs); - -# # add a dimsizediff -# process_line("DIMSIZEDIFF var43", "test_dir2", "file_c", \%diffs); - -# # add an RMS error without filldiff -# process_line("RMS var100 99 NORMALIZED 100", "test_dir2", "file_d", \%diffs); - -# # test a warning: should issue a warning and replace the above setting -# process_line("RMS var100 9 NORMALIZED 200", "test_dir2", "file_d", \%diffs); - -# # test a warning: should issue a warning but NOT replace the above setting -# # (normalized RMS is smaller even though standard RMS is bigger: the normalized -# # one should be considered in deciding whether to replace the previous setting) -# process_line("RMS var100 999 NORMALIZED 50", "test_dir2", "file_d", \%diffs); - -# print Dumper(\%diffs); - - -# THE ABOVE SHOULD PRINT SOMETHING LIKE THIS (though the output from Dumper will -# likely appear in a different order): - -# WARNING: Replacing RMS with higher value: test_dir2 file_d var100 : 200 > 100 -# WARNING: Ignoring lower RMS value: test_dir2 file_d var100 : 50 < 200 -# $VAR1 = { -# 'test_dir1 file_b var17' => { -# 'RMS' => '0.314', -# 'Variable' => 'var17', -# 'Filename' => 'file_b', -# 'FILLDIFF' => '', -# 'Dir' => 'test_dir1', -# 'RMS_NORM' => '3.14' -# }, -# 'test_dir2 file_d var100' => { -# 'Dir' => 'test_dir2', -# 'RMS_NORM' => 200, -# 'Filename' => 'file_d', -# 'Variable' => 'var100', -# 'RMS' => '9' -# }, -# 'test_dir1 file_b var1' => { -# 'Filename' => 'file_b', -# 'RMS_NORM' => '42', -# 'FILLDIFF' => '', -# 'Dir' => 'test_dir1', -# 'RMS' => '4200', -# 'Variable' => 'var1' -# }, -# 'test_dir2 file_c var43' => { -# 'Variable' => 'var43', -# 'DIMSIZEDIFF' => '', -# 'Dir' => 'test_dir2', -# 'Filename' => 'file_c' -# }, -# 'test_dir2 file_c var42' => { -# 'Filename' => 'file_c', -# 'Dir' => 'test_dir2', -# 'FILLDIFF' => '', -# 'Variable' => 'var42' -# } -# }; - - -#----------------------------------------------------------------------- -# Testing the print routines -#----------------------------------------------------------------------- - -# Add the following to the above test code: - -# my $widths_hash = { Dir => 40, Filename => 40, Variable => 40 }; -# print_results_by_test("testout.by_test", \%diffs, $widths_hash); -# print_results_by_rms("testout.by_rms", \%diffs, $widths_hash); - -# This should give: - -# $ cat testout.by_rms -# test_dir2 : file_d : var100 : RMS 9 : RMS_NORM 200 -# test_dir1 : file_b : var1 : FILLDIFF : RMS 4200 : RMS_NORM 42 -# test_dir1 : file_b : var17 : FILLDIFF : RMS 0.314 : RMS_NORM 3.14 -# test_dir2 : file_c : var42 : FILLDIFF -# test_dir2 : file_c : var43 : DIMSIZEDIFF -# $ cat testout.by_test -# test_dir1 : file_b : var1 : FILLDIFF : RMS 4200 : RMS_NORM 42 -# test_dir1 : file_b : var17 : FILLDIFF : RMS 0.314 : RMS_NORM 3.14 -# ================================================================================================================================================================================= -# test_dir2 : file_c : var42 : FILLDIFF -# test_dir2 : file_c : var43 : DIMSIZEDIFF -# ================================================================================================================================================================================= -# test_dir2 : file_d : var100 : RMS 9 : RMS_NORM 200 - - - -#======================================================================= -# Notes about testing: integration tests -#======================================================================= - -# Test the following - -# Note: can do these tests by running the cprnc tests and organizing -# outputs into particular directories. -# -# For each of these tests, sort the different output files and compare -# the sorted files to make sure the same info is in all output files; -# then look at one of the output files. -# -# - no RMS or FILLDIFFs at all (testid that just contains output from -# comparing control & copy) -# -# - some RMS and some FILLDIFFs, split across 2 directories, each with -# 2 cprnc files (this can be done by comparing the control file with -# diffs_in_fill.nc, diffs_in_vals.nc, diffs_in_vals_and_diffs_in_fill.nc -# and diffs_in_vals_and_fill.nc) -# -# - multiple RMS errors to test RMS sorting, split across 2 directories -# (this can be done by comparing the control file with four of the -# vals_differ_by_* files) diff --git a/tools/cprnc/test.csh b/tools/cprnc/test.csh deleted file mode 100755 index 2f5064de2df..00000000000 --- a/tools/cprnc/test.csh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/csh -f - -gmake - -set exefile = ./cprnc - -#-- testdata is on bluevista /ptmp -set histdir = /ptmp/tcraig/cprnc.testdata -set fh1 = $histdir/fm.clmhalf.fmi.base.clm2.h0.1998-01-02-00000.nc -set fh2 = $histdir/fm.clmhalf.fmi.clm2.h0.1998-01-02-00000.nc -set fh3 = $histdir/fm.clmhalf.fmi.clm2.h0.1998-01-01-43200.nc -set fr1 = $histdir/fm.clmhalf.fmi.base.clm2.r.1998-01-02-00000.nc -set fr2 = $histdir/fm.clmhalf.fmi.clm2.r.1998-01-02-00000.nc -set fts = $histdir/fm.clmhalf.fmi.clm2.h0.2ts.nc - -rm -f hist.out -echo "create hist.out, compare two identical clm history files" -$exefile $fh1 $fh2 >&! hist.out - -rm -f difh.out -echo "create difh.out, compare two different clm history files" -$exefile -m $fh3 $fh2 >&! difh.out - -rm -f rest.out -echo "create rest.out, compare two identical clm restart files" -$exefile $fr1 $fr2 >&! rest.out - -rm -f bigd.out -echo "create bigd.out, compare a history and restart file" -$exefile $fh2 $fr2 >&! bigd.out - -rm -f f2ts.out -echo "create f2ts.out, analyze a two timestep history file" -$exefile $fts >& f2ts.out - -echo "===============================" -echo " " -tail -10 hist.out -echo " " -echo "===============================" -echo " " -tail -10 difh.out -echo " " -echo "===============================" -echo " " -tail -10 rest.out -echo " " -echo "===============================" -echo " " -tail -10 bigd.out -echo " " -echo "===============================" -echo " " -tail -10 f2ts.out - diff --git a/tools/cprnc/test_inputs/README b/tools/cprnc/test_inputs/README deleted file mode 100644 index a84d89cf5f7..00000000000 --- a/tools/cprnc/test_inputs/README +++ /dev/null @@ -1,135 +0,0 @@ -This directory contains simple test inputs to test cprnc. - -All comparisons can be run by running the run_tests script in the -parent directory. Suggestion: run this once from the baseline -directory, then once from the new directory; compare against baselines -with, e.g.: - - baseline_out=/PATH/TO/BASELINE/OUTPUT - new_out=/PATH/TO/NEW/OUTPUT - for fl in $baseline_out/*; do echo $fl; diff -a $fl $new_out/`basename $fl`; done > diff_report - -The files here are: - ---- FILES COMPARED AGAINST control.nc --- - -- copy.nc: copy of control file (i.e., no diffs) - -- diffs_in_vals.nc: one variable has differences in values - -- diffs_in_fill.nc: one variable has differences in fill pattern - -- diffs_in_vals_and_diffs_in_fill.nc: one variable has differences in - values, another has differences in fill pattern - -- diffs_in_vals_and_fill.nc: a single variable has differences in both - values and fill pattern - -- lon_differs.nc: number of longitude points differs - -- vals_differ_by_1.1.nc: testvar has values equal to 1.1 times those - in the control file. This is useful for testing the relative - difference calculation. - - True values are the following (note that relative difference is - defined using a denominator of max(v1,v2)): - - - RMS diff: 0.6204837 (printed as 6.2e-1) - - avg rel diff: 0.0909091 (printed as 9.1e-2) - - avg decimal digits: 1.041393 (printed as 1.0) - - worst decimal digits: 1.041393 (printed as 1.0) - -- vals_differ_by_1.1_somewhere.nc: similar to vals_differ_by_1.1.nc, - but now only a single value differs by a factor of 1.1 - - True values are the following (note that relative difference is - defined using a denominator of max(v1,v2)): - - - RMS diff: 0.3162278 (printed as 3.2e-1) - - avg rel diff: 0.009090909 (printed as 9.1e-3) - - avg decimal digits: 1.041393 (printed as 1.0) [note that the - average here ignores the indices with no difference] - - worst decimal digits: 1.041393 (printed as 1.0) - -- vals_differ_by_varying_amounts.nc: testvar has values equal to 1, - 1.01, 1.02, ..., 1.09 times those in the control file. This is - useful for testing the relative difference calculation using more - complex differences. - - True values are the following (note that relative difference is - defined using a denominator of max(v1,v2)): - - - RMS diff: 0.4434862 (printed as 4.4e-1) - - avg rel diff: 0.04233828 (printed as 4.2e-2) - - avg decimal digits: 1.403306 (printed as 1.4) [note that the - average here normalizes by 9 rather than 10, since the first index - has a relative difference of 0] - - worst decimal digits: 1.083184 (printed as 1.1) - -- vals_differ_by_varying_amounts2.nc: First 8 values of testvar are - identical to control; 9th is control * (1-1e-3), 10th is control * - (1-1e-5). This is the same as the example given in ../README. - - True values are the following: - - - RMS diff: 0.002846226 (printed as 2.8e-3) - - avg rel diff: 0.000101 (printed as 1.0e-4) - - avg decimal digits: 4.0 - - worst decimal digits: 3.0 - - ---- FILES COMPARED AGAINST control_multipleTimes_someTimeless.nc --- - -Note: This file has some variables with a time dimension, some -without. The time dimension has multiple times, in order to make sure -that the variables with vs. without the time dimension really are -treated differently. Also, a variable without time appears first, in -order to make sure that cprnc doesn't rely on there being a variable -with time first. - -- multipleTimes_someTimeless_diffs_in_vals_and_fill.nc: one variable - with a time dimension has differences in both values and fill - pattern (in time 2); and one variable without a time dimension has - differences in both values and fill pattern. The differences are the - same for both variables (e.g., RMS errors should be the same for - both). - ---- FILES COMPARED AGAINST control_noTime.nc --- - -Note: This file has no time (unlimited) dimension. - -- noTime_diffs_in_vals_and_fill.nc: a single variable has differences - in both values and fill pattern - ---- FILES COMPARED AGAINST control_0d.nc --- - -Note: This file has two 0-d variables - -- diffs_0d.nc: diffs in both 0-d variables (int & real) - - ---- FILES COMPARED AGAINST cpl.hi.subset.control.nc --- - -Note: This file is a subset of a standard cpl hist file (as of May, 2013). - -- cpl.hi.subset.test.nc: some variables are the same, some differ - - ---- FILES COMPARED AGAINST clm2.h0.subset.control.nc --- - -Note: This file is a subset of a standard clm hist file (as of May, 2013). - -- clm2.h0.subset.test.nc: some variables are the same, some differ - - ---- FILES COMPARED AGAINST clm2.h1.subset.control.nc --- - -Note: This file is a subset of a standard clm 1-d hist file -(dov2xy=false) (as of May, 2013). Note that it also includes two -times. - -- clm2.h1.subset.test.nc: some variables are the same, some - differ. Note that this includes identical & different integer - variables, identical & different real-valued variables, and - variables with different spatial dimensions (e.g., landunit, pft, - and lat x lon). diff --git a/tools/cprnc/test_inputs/clm2.h0.subset.control.nc b/tools/cprnc/test_inputs/clm2.h0.subset.control.nc deleted file mode 100644 index 1ffd6474f60d69be643e9346b6458c019e407ab1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120088 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%0D5dpbvU+a6ZYX0NpkcXEA^Fo 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 b(HQ*@(T9#P|GOd1+0}^a>}uctir@bM8eqQa diff --git a/tools/cprnc/test_inputs/clm2.h0.subset.test.nc b/tools/cprnc/test_inputs/clm2.h0.subset.test.nc deleted file mode 100644 index 41a08ce7bf7eff43396f5cd974c7464d7a188373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120048 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 F{|^=xv~2(Y diff --git a/tools/cprnc/test_inputs/clm2.h1.subset.control.nc b/tools/cprnc/test_inputs/clm2.h1.subset.control.nc deleted file mode 100644 index 2d96f1fdc740bf6914330cc56295614f6db104e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321552 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 VI>74yuLHae@H)Wjz_-wW{{yE?CY}HQ diff --git a/tools/cprnc/test_inputs/clm2.h1.subset.test.nc b/tools/cprnc/test_inputs/clm2.h1.subset.test.nc deleted file mode 100644 index db606c4b1353bffaa0564c44c7332f922910a823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321512 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

+V_x-0jmay_A6Z-|IzyhIAbPE|?siXn-<_VSr# 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 F_&<1SMs@%I diff --git a/tools/cprnc/test_inputs/control.nc b/tools/cprnc/test_inputs/control.nc deleted file mode 100644 index d9c0ce6a5c40e1ecdd7ff21469de814b81289ae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqK~4fO6#WRJh>*D804~|82VfcuM{qlivB4%~Fw?@C1F&%60a&{92pq$uNAL)~ zS6VY6VM~+O|N4Lb`~81r@-S_Q2+;%Dgk4lHau#^$$upqi&0O=)SXbcZK+2&GS05nH zmX-02p1ofGMbB!jU7<@y;SSJ6Xan1}`&#Ke$20~>qgvGd6^U5X8A9iSJie1U?BSSB zy2tnP4WFAXR2ATD(x~3i8E_GPezxpy<%#tef$qL zW8@>$|AOtt`gh>0b;|nRjr#Yeug`YFtW(dlbn@F~`7L&=@meH@&9UX=TVMzLh$sQB ofg7B`Lwpzg@F_Ue6R-x}fi3R9$NZ27uHIq{e}keQQ&GPnf5k;-d;kCd diff --git a/tools/cprnc/test_inputs/control_0d.nc b/tools/cprnc/test_inputs/control_0d.nc deleted file mode 100644 index d48586f228227df9b602bbf078ef71c2666df522..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmZ`$OHRWu5OrEqP(fnLaxRc4b`n%9RV-SugKoM+GA6auipGu-x25;spd5j5rKB;0 zQC=qVdmiV_=1&3f?FPdk;&Q#It*MT#Iv^zYTJ99gRSqnLIOE9!rwmw36An6;C4;aA zt7^NKm55iOQgS<`Q4G1!wlZ7HMLHkW(#yqOEOBMBw{Wi35LejyhCX=w#y8pzBXgEg diff --git a/tools/cprnc/test_inputs/control_multipleTimes_someTimeless.nc b/tools/cprnc/test_inputs/control_multipleTimes_someTimeless.nc deleted file mode 100644 index 9ebf4579c9260ace2849df3ad681ae04d94bac46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1616 zcmcgs!EVz)5Z$zKQ$kyM-~;y91C0`=(AJka3aYpOmx!w|Vbxk}?8>`|)LTD+V~_oY zegPlCfluJbk@p<0l>`!UKw0T|W@mQi&FoCle|=dKLTm%gQf}+mLKPnOI!mc<0d<>< z6gOCV0Bw!y#Mmsqr49Sq<6x}h+xS-cXR`A$Xtx9ZmGs-4ZXna)7bA~*@^~VxGIkQ@ zFG}glVV2rF)6r4pmV;o=6_`1&lbIq&0Lw_=>*-=Ii9M_syt`E@p-kapV0iXLnV!e(V zs@MTAE8ab%^D#fpP|;7wtq`B^4)`WS4|-1mA@C8n1HJ+eLR>%(1%OX+{$YA2`~g4g hy+c5*e=fwGwRkz{SnKkKIJ-_kqw4UX^54{y1)cBF0*83KRK4Qy+!##5@bI;s6bgz0T7Oet88p!yrCM9clAc>P+q&<+EdP)c33e@N? zgN5MN?uuJ2UcYGL(`a$)yxwSYIeJjM`oybCuDzMyqd@8~@U5C0CESt004XSiKXt77 zuFj*&t9@Q|f7JO_hDy?fu*z~2IKf=V+1%07P`G19E@nd!B6k2#zl6+9w~t_YIBeFe zT7!0s9RpGC(HxTbQ2)fU3+ZVEf<<#Fjm0DsLZOpTPmOGRPGM2THseP#Onm>VQ%vdz zSJ4B|UGq48hM3br>7`387*C2+FL{&SccOf0<|*aLiL-S5g&-yBD>dv^j=&2}&-4A; zU6OiEa>Og}ZX)JmZws9IrL_<5JNP8t^fdeQevW%2Px{Z(TbTJErZ3lwbwE1!>JZ-m uTi}B+n*k>P#~$3|x3Lb*hG^ddYv2{w;5X3dyg3JM&*R)1BI)nICu3i)vX;XD diff --git a/tools/cprnc/test_inputs/copy.nc b/tools/cprnc/test_inputs/copy.nc deleted file mode 100644 index d9c0ce6a5c40e1ecdd7ff21469de814b81289ae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqK~4fO6#WRJh>*D804~|82VfcuM{qlivB4%~Fw?@C1F&%60a&{92pq$uNAL)~ zS6VY6VM~+O|N4Lb`~81r@-S_Q2+;%Dgk4lHau#^$$upqi&0O=)SXbcZK+2&GS05nH zmX-02p1ofGMbB!jU7<@y;SSJ6Xan1}`&#Ke$20~>qgvGd6^U5X8A9iSJie1U?BSSB zy2tnP4WFAXR2ATD(x~3i8E_GPezxpy<%#tef$qL zW8@>$|AOtt`gh>0b;|nRjr#Yeug`YFtW(dlbn@F~`7L&=@meH@&9UX=TVMzLh$sQB ofg7B`Lwpzg@F_Ue6R-x}fi3R9$NZ27uHIq{e}keQQ&GPnf5k;-d;kCd diff --git a/tools/cprnc/test_inputs/cpl.hi.subset.control.nc b/tools/cprnc/test_inputs/cpl.hi.subset.control.nc deleted file mode 100644 index c83d8cc499df198fd10f94ca398e8310a4182876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27876 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 M=bo1||KGa&KZms_P5=M^ diff --git a/tools/cprnc/test_inputs/cpl.hi.subset.test.nc b/tools/cprnc/test_inputs/cpl.hi.subset.test.nc deleted file mode 100644 index 3fdd331ba42bcac6182f193cd80cc209671b74d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27872 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 diff --git a/tools/cprnc/test_inputs/diffs_in_fill.nc b/tools/cprnc/test_inputs/diffs_in_fill.nc deleted file mode 100644 index 07b62e33948df317c245f350ba1352f79d43d3ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqJ5B>J5S@HBBq5O~H~?i@$N^$2C`X`O7GVWT&IYZW)Hy&33J#Exk|XRfC^-U0 z;JwWnt&q}Yq_^`tW54l?cYeQUi3l+SI)q#2aMG@L7RVEz8|=z((XdPK9uUt^hc*Jp zlTB`eXXL0idN#|#7@wNVQ@9KCk=ny|+_6@?&nb;@)X3LGc)>v!b*`cFPF~-WI_%+; zPTa@)^9~>I7s2?j%?i+J7ChhViSzm26Zei+)_a>T({1K9^^iET*3*14fFGs{>)gX% zvY8{Fp#CR(zpj4=&RXZJ|JA5JJ%4?+Tg^K5OwS^w4eVo>F#izdY|UAc$H+!YDwBzYdRjCV*BwV&9eKy zU^6B@qW&kgSJl6UtJWdwe>Ljg9KOEBEq7hdEGwtJZ8y5&$+0iSMA%z47OlYsY{54% q1J1!E@9;9dt^D{bPWu4X;0XZ}|6dWKWB}ecvC^-U0 z;C;tN7E;=*^gVxPcK+fq9&zzOQ|us~rdf9X z7i`DG$JGDC_UroBaMe0w{jXO2o5R;vyVb0lo@M3K+XmqkUsm*DOo+W@V&MjCK?%Nz r8E_6R*~6=NS^M$nEushZ8}J6UoC!e*R~|fi28!`FMDjD0=*O5})8l8w diff --git a/tools/cprnc/test_inputs/diffs_in_vals_and_fill.nc b/tools/cprnc/test_inputs/diffs_in_vals_and_fill.nc deleted file mode 100644 index 6db4782e6ae6a0614e3e9754a26b8150b76ca6fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqJ8r^25FG+efPj>O15nZuF5nFjM@Z`!v4WKr6L}YEmnl-D$N?x*<_I}P${Zm_ z$a}UovLewk((^p;?7aEd^ZP|hM2J4nChRVQlZ%q4o;(6N-fT5r8g>nS34|Q#&;|f` zw9kxpJgM{sE4|LOc8N|Mg*!kOp%?hJt!jmSPH7B-Mz+iS28l50jG*&IUiV2I&TvX6 z+++Xj;T`_UYv&JX4qEPl`OTTQpZ_!Q?r>|IGub*hq;_8~i92g8=aU|MKUo-SAO3>P z82JSCKj6D{{abL>I%oZ_M*Z3O>vP<4*I{OQ9`f5p@f1&(dKQV{@367B0FJ;X@GZh! rs~g-I<6VHFiYah424dh5D1cYsh&axeU*>_Ur#gneLGc`0Q9mNT^+RX{ diff --git a/tools/cprnc/test_inputs/lon_differs.nc b/tools/cprnc/test_inputs/lon_differs.nc deleted file mode 100644 index bb42924691291b34b3f8bd7cf774543dfd5b67df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmc(cJx;?w5QR55h7b~of&-+Wpya2aK*A;{6*a9f!U~og2gOe69D$ND1qDZ-^f4$o z0wo0n-?P`qLeRoU&+qNdyxH;Y@O;!V#t2>D2+1^stPXQ&7qs(u5^2$hE%Z95J?f+A z0cm%h#(Ab4W7a_LCK}J8C<~%6Q{%SwNIk$#Qk_-L^IMO8-6NgO@>`6A`s~o>QQFR_ zKINJ4PqWl@n!iKoGrW;US-uEo$nyW?msg>AbU)w!sm}K&ahApDI9P{*em~toQ|ql=?|?6Hx-`av z{e2kWvG$+f6)4c}@GESLIopM|!2o^1K6_=oyhT+buRj1D!0TUurS;yUSJq3u^x!Rf UvM#-MulRsckrrj3%wC$@*zY?;q;FqGp&^(3}DP zSER708h8^)U?)RB0k=R6JOeKxm#|g*{-KnQ#~J^R`h;Hq{PtvsxG!uV%XsK!JZr4S aE5_6Se81Ia9A#S`3b9+|#SfwUHQ#T?6`a@r diff --git a/tools/cprnc/test_inputs/noTime_diffs_in_vals_and_fill.nc b/tools/cprnc/test_inputs/noTime_diffs_in_vals_and_fill.nc deleted file mode 100644 index c3006345ed7044a027f10b5a09c0a14e8dc0cd30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 716 zcmcgqJ8r^25FIcUKO?2c0a8*!L&sV~oFJlg9A!l;Ee3fPDhiH}BT%HsF*rcdr_2#@ zguG{a5sH+Sk)G%I&FmYG?b-djAyxE{nm}OIIhBg1jy&Y0jy^K)eV;!cK_d^hdFCt# zf*#ScUKU#0M5mT!Eue$a1UWF3KhF{Wc?`TqzAoGg8WHrlg^xmRJ8j)AEkMhem(LVH z`}<7n8>}*GvwWHCQnS@ms=XRdvtbv!m&`L`7Uv>&_BHY$Mm->R>e(Z3?t87-`-|D* zE6;wb_w@Ug{|YpIlW=+vQPIbzQpn^-5x!IPEfNcG1KdFeFYBjThZaMOAAtk#3LMb` UO`X7b4m{ofti1!&zknZ+UlHbCq5uE@ diff --git a/tools/cprnc/test_inputs/vals_differ_by_1.1.nc b/tools/cprnc/test_inputs/vals_differ_by_1.1.nc deleted file mode 100644 index ddc52582461243dc558e51d8a3bb8432647ba19a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqJ5Iwu6x@)Qgy2XN)QB=A-~+I$pj-fn))=t~D{UO)-K5R|Qc!RJN=lB913*Q? zF{n~A<9H(rDQ#97zwvu-=Y8zK&9EVaAi6-4u+tny9F#oso{e7osKZ7yy}xW zoMD$v$YcNP;T^W^we$0=04;aH`}LW)pZ_y4w>L4)nS7kiGdru6#GN%B2K^)0ZaOs9 z-fe^R7o7Ado&2_uyu=gddinV!W8gMPBssPw zzroj|k%C{H!Ct_JT)6;NLMU)`4oKi0SO71;8{+VlIVX4rSI<=pe}h^9*oyiU;tz|N BaNYm_ diff --git a/tools/cprnc/test_inputs/vals_differ_by_1.1_somewhere.nc b/tools/cprnc/test_inputs/vals_differ_by_1.1_somewhere.nc deleted file mode 100644 index 703507681b5f8cb41328675947a1dfac19489707..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqF-`+95ZsU)gpf!SJb*G~fCq3^P@X`0T!fWaaxUoXq|O5H&~6H?k(8t-`5JL}!M@x!DgB18{p6Lwj_$VuR(C(nS6Hw(=}V_krs0x5?&Tz!B% zTUEw8diHw#XFaR6c7-k-g*!kOp;y?p-PcO*IixX28r8D)b0lI>=L$OS(Z{`kT|o}bUZwV?G+Pa?c-mt z86zK}{wHiV*1rX3tz*{zYSh0wetotZW}SMbrIX(_%Wtq_-ETy4*c@9F%|VA@(ap!XN&*< diff --git a/tools/cprnc/test_inputs/vals_differ_by_varying_amounts.nc b/tools/cprnc/test_inputs/vals_differ_by_varying_amounts.nc deleted file mode 100644 index f42d2952af261692b0e30de3ebfbe4062755cba5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmcgqy-LGS7`?HL#@K>`n}d#>1oZ*Dmq>jB*BJ4(2GX?T-gYjCn}dUkP7WfS#78J} z>J#Wo2rllPlO_^`uKnQTJGtL?&-arAr)@_FLHIz8Nct(9Sj%~2$z7ms9u5>rk+JrhX6s`jvLU-`BWKpZ^XPHK`)JXf8y~aftb#|ch zKwk7o9nP>!r_5vj>|p}GVYRWNCCu_W%yxeQvH z@P62iljQs_SdEdlQ2!m?E9xJCv(_r>e^%-ruf9IV&39eSOwU7pTUQ?92|F1JA)T`~ z8GQKi26*js0) then - dimname_str(1:1) = '(' - dlen=2 - - do j=1,ndims - dimname_str(dlen:) = trim(dims(dimids(j))%name)//',' - dlen=dlen+ len_trim(dims(dimids(j))%name) + 1 - end do - dimname_str(dlen-1:dlen-1) = ')' - end if - - -end subroutine get_dimname_str - -subroutine get_dim_str(ndims,loc,dim_str) - integer, intent(in) :: ndims - integer, intent(in) :: loc(:) - character(len=*),intent(out) :: dim_str - - integer :: dlen - integer :: j - - dim_str = ' ' - - if(ndims>0) then - dim_str(1:1) = '(' - dlen=2 - - do j=1,ndims - write(dim_str(dlen:),'(i6,a)') loc(j),',' - - dlen=len_trim(dim_str)+1 - end do - dim_str(dlen-1:dlen-1) = ')' - end if - - -end subroutine get_dim_str - - - -subroutine checknf90(ierr,returnflag,err_str) - use netcdf, only : nf90_noerr, nf90_strerror - integer, intent(in) :: ierr - logical, optional, intent(in) :: returnflag - character(len=*), optional, intent(in) :: err_str - - if(ierr/=NF90_NOERR) then - print *, trim(nf90_strerror(ierr)) - if(present(err_str)) then - print *, trim(err_str) - end if - if(present(returnflag)) then - if(returnflag) return - end if -#ifdef AIX - call xl__trbk() -#endif - stop - - end if - - - -end subroutine checknf90 - - - - -end module utils From 776ec267dac9a48b746f3a22d1bf4031e0da8b80 Mon Sep 17 00:00:00 2001 From: James Edwards Date: Mon, 27 Nov 2023 11:12:13 -0700 Subject: [PATCH 2/3] remove python2 from github workflow tests --- .github/workflows/srt.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/srt.yml b/.github/workflows/srt.yml index 4cdd5665a89..6faf1d19050 100644 --- a/.github/workflows/srt.yml +++ b/.github/workflows/srt.yml @@ -18,7 +18,8 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [2.7, 3.8] + # python 2.7 has been removed + python-version: [3.8, 3.10] env: CC: mpicc FC: mpifort From dd8f77c65cb462032f976db3c071ad04247f307f Mon Sep 17 00:00:00 2001 From: James Edwards Date: Mon, 27 Nov 2023 13:14:53 -0700 Subject: [PATCH 3/3] use strings --- .github/workflows/srt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/srt.yml b/.github/workflows/srt.yml index 6faf1d19050..778ad346dee 100644 --- a/.github/workflows/srt.yml +++ b/.github/workflows/srt.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: # python 2.7 has been removed - python-version: [3.8, 3.10] + python-version: ["3.8", "3.10"] env: CC: mpicc FC: mpifort