diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..a7403f8 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,53 @@ +name: Build and Test +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-20.04 + env: + FC: gfortran-9 + CC: gcc-9 + + steps: + + - name: checkout-pfunit + uses: actions/checkout@v2 + with: + repository: Goddard-Fortran-Ecosystem/pFUnit + path: pfunit + + - name: cache-pfunit + id: cache-pfunit + uses: actions/cache@v2 + with: + path: ~/pfunit + key: pfunit-${{ runner.os }}-${{ hashFiles('pfunit/VERSION') }} + + - name: build-pfunit + if: steps.cache-pfunit.outputs.cache-hit != 'true' + run: | + cd pfunit + mkdir build + cd build + cmake .. -DSKIP_MPI=YES -DSKIP_ESMF=YES -DSKIP_FHAMCREST=YES -DCMAKE_INSTALL_PREFIX=~/pfunit + make -j2 + make install + + - name: checkout + uses: actions/checkout@v2 + with: + path: gfsio + submodules: true + + - name: build + run: | + cd gfsio + mkdir build + cd build + cmake .. -DENABLE_TESTS=ON -DCMAKE_PREFIX_PATH="~/pfunit;~/" + make -j2 + + - name: test + run: | + cd $GITHUB_WORKSPACE/gfsio/build + make test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f50dddf --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +build/ +install/ + +*.[ao] +*.mod +*.so + +*.swp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9af1e4d..25190d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,63 +1,32 @@ cmake_minimum_required(VERSION 3.15) -project(gfsio VERSION 1.1.0) -set(${PROJECT_NAME}_VERSION ${PROJECT_VERSION} CACHE INTERNAL "${PROJECT_NAME} version number") -enable_language (Fortran) -if (NOT CMAKE_BUILD_TYPE) - set (CMAKE_BUILD_TYPE RELEASE CACHE STRING - "Choose the type of build, options are: PRODUCTION Debug Release." - FORCE) -endif() +file(STRINGS "VERSION" pVersion) -if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - set(IntelComp true ) -elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU*" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang*") - set(GNUComp true ) -elseif(CMAKE_CXX_COMPILER_ID MATCHES "pgc*") - set(PGIComp true ) -endif() +project( + gfsio + VERSION ${pVersion} + LANGUAGES Fortran) -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "RelWithDebInfo" BUILD_RELEASE) -if(NOT BUILD_RELEASE) - STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "RELEASE" BUILD_RELEASE) -endif() -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "PRODUCTION" BUILD_PRODUCTION) -STRING(COMPARE EQUAL ${CMAKE_BUILD_TYPE} "DEBUG" BUILD_DEBUG) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") +option(ENABLE_TESTS "Enable tests" OFF) -if( (BUILD_RELEASE) OR (BUILD_PRODUCTION) ) - if(IntelComp) - set(fortran_flags "-free" "-traceback" "-g" "-xHOST" "-convert" "big_endian" "-assume" "byterecl") - elseif(GNUComp) - set(fortran_flags "-ffree-form" "-fbacktrace" "-g" "-O2" "-fconvert=big-endian") - else() - message("unknown compiler!") - exit() - endif() +if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE + "Release" + CACHE STRING "Choose the type of build." FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") endif() +if(NOT CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel|GNU|Clang|AppleClang)$") + message( + WARNING "Compiler not officially supported: ${CMAKE_Fortran_COMPILER_ID}") +endif() -set(lib_name ${PROJECT_NAME}_4) -set(versioned_lib_name ${PROJECT_NAME}_v${PROJECT_VERSION}_4) - - -file(GLOB fortran_src ${CMAKE_CURRENT_SOURCE_DIR}/src/*.f) -add_library(${lib_name} STATIC ${fortran_src}) - -set_target_properties(${lib_name} PROPERTIES OUTPUT_NAME "${versioned_lib_name}") -target_compile_options(${lib_name} PRIVATE ${fortran_flags}) - - -set(module_dir "${CMAKE_CURRENT_BINARY_DIR}/include_4") -set_target_properties(${lib_name} PROPERTIES Fortran_MODULE_DIRECTORY "${module_dir}") -target_include_directories(${lib_name} PUBLIC - $ - $) +add_subdirectory(src) -install(TARGETS ${lib_name} - EXPORT ${PROJECT_NAME}-config - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) -install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX}) -install(EXPORT ${PROJECT_NAME}-config DESTINATION ${CMAKE_INSTALL_PREFIX}) +if (ENABLE_TESTS) + find_package(PFUNIT REQUIRED) + enable_testing() + add_subdirectory(tests) +endif() diff --git a/README.md b/README.md new file mode 100644 index 0000000..b77496c --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# GFSIO + + API to convert GFS Gaussian output into grib output + +Code Manager: George Vandenberghe + +### Prerequisites + +Compilers: GNU | Intel | Clang | AppleClang + + +### Installing + +``` +mkdir build +cd build +cmake -DCMAKE_INSTALL_PREFIX=/path/to/install /path/to/NCEPLIBS-gfsio +make -j2 +make install +``` + + +### Version +1.3.0 + + +### Authors + +* **[NCEP/EMC](mailto:NCEP.List.EMC.nceplibs.Developers@noaa.gov)** diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..f0bb29e --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.3.0 diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in new file mode 100644 index 0000000..9022bd8 --- /dev/null +++ b/cmake/PackageConfig.cmake.in @@ -0,0 +1,16 @@ +@PACKAGE_INIT@ + +#@PROJECT_NAME@-config.cmake +# +# Imported interface targets provided: +# * @PROJECT_NAME@::@PROJECT_NAME@ - library target + +# Include targets file. This will create IMPORTED target @PROJECT_NAME@ +include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") + +get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@ IMPORTED_CONFIGURATIONS) + +check_required_components("@PROJECT_NAME@") + +get_target_property(location @PROJECT_NAME@::@PROJECT_NAME@ LOCATION) +message(STATUS "Found @PROJECT_NAME@: ${location} (found version \"@PROJECT_VERSION@\")") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..9f875f5 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,58 @@ + +if(CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel)$") + set(CMAKE_Fortran_FLAGS + "-g -traceback -free -xHOST -convert big_endian -assume byterecl") +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") + set(CMAKE_Fortran_FLAGS "-g -fbacktrace -fconvert=big-endian -ffree-form") + set(CMAKE_Fortran_RELEASE "-O2") +endif() + +set(fortran_src gfsio_module.f) + +set(lib_name ${PROJECT_NAME}) +set(module_dir ${CMAKE_CURRENT_BINARY_DIR}/include) + +add_library(${lib_name} STATIC ${fortran_src}) +add_library(${PROJECT_NAME}::${lib_name} ALIAS ${lib_name}) + +set_target_properties(${lib_name} PROPERTIES Fortran_MODULE_DIRECTORY ${module_dir}) +target_include_directories(${lib_name} PUBLIC + $ + $) + +list(APPEND LIB_TARGETS ${lib_name}) + +install(DIRECTORY ${module_dir} DESTINATION ${CMAKE_INSTALL_PREFIX}) + +install( + TARGETS ${LIB_TARGETS} + EXPORT ${PROJECT_NAME}Exports + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib) + +### Package config +include(CMakePackageConfigHelpers) +set(CONFIG_INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}) + +export(EXPORT ${PROJECT_NAME}Exports + NAMESPACE ${PROJECT_NAME}:: + FILE ${PROJECT_NAME}-targets.cmake) + +configure_package_config_file( + ${CMAKE_SOURCE_DIR}/cmake/PackageConfig.cmake.in ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake + INSTALL_DESTINATION ${CONFIG_INSTALL_DESTINATION}) +install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) + +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) +install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) + +install(EXPORT ${PROJECT_NAME}Exports + NAMESPACE ${PROJECT_NAME}:: + FILE ${PROJECT_NAME}-targets.cmake + DESTINATION ${CONFIG_INSTALL_DESTINATION}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..815e997 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,6 @@ + +add_pfunit_ctest (gfsio_test + TEST_SOURCES test_mod.pf + LINK_LIBRARIES gfsio::gfsio +) + diff --git a/tests/README b/tests/README new file mode 100644 index 0000000..adef114 --- /dev/null +++ b/tests/README @@ -0,0 +1,39 @@ + +6. Test plan + +The test plan for g2tmpl_v1.6.0 files are in gitHub repository: + https://svnemc.ncep.noaa.gov/projects/nceplibs/g2tmpl/branches/v1.6.0/unit_test/ + +These unit_test programs need to compile with g2tmpl v1.6.0 as follows: + +cd to ./v1.6.0/unit_test +run script compile_all_unit_test_g2tmpl_lib.sh + +Then, run all executable on WCOSS or CRAY or DELL or Hera: +run script run_all_test.sh + +or + +Run individual executable + 1. test_g2tmpl_table_233 + 2. test_g2tmpl_pdt4_1 + 3. test_g2tmpl_pdt4_11 + 4. Test_g2tmpl_pdt4_12 + 6. Test_g2tmpl_pdt4_8 + 6. Test_params_grib2_tbl_new + +The result of all tests g2tmpl v1.6.0 as belows: + +Running test g2tmpl_pdt4_1... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/g2tmpl_pdt4_1.log +Running test g2tmpl_pdt4_11... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/g2tmpl_pdt4_11.log +Running test g2tmpl_pdt4_12... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/g2tmpl_pdt4_12.log +Running test g2tmpl_pdt4_8... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/g2tmpl_pdt4_8.log +Running test g2tmpl_table_233... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/g2tmpl_table_233.log +Running test params_grib2_tbl_new... done ---> PASS +--> Please view /global/save/Boi.Vuong/g2tmpl/v1.6.0/unit_test/output/params_grib2_tbl_new.log + diff --git a/tests/compile_all_unit_test_g2tmpl_lib.sh b/tests/compile_all_unit_test_g2tmpl_lib.sh new file mode 100755 index 0000000..cd8315b --- /dev/null +++ b/tests/compile_all_unit_test_g2tmpl_lib.sh @@ -0,0 +1,60 @@ +SHELL=/bin/sh + +module purge + +mac=$(hostname | cut -c1-1) +mac2=$(hostname | cut -c1-2) + +if [ $mac2 = hf ] ; then # For Hera + machine=hera + . /etc/profile + . /etc/profile.d/modules.sh + module load intel/18.0.5.274 + module load impi/2018.0.4 +elif [ $mac = v -o $mac = m ] ; then # For Dell (i.e. Mars and Venus) + machine=wcoss_dell_p3 + . $MODULESHOME/init/bash + module load ips/18.0.1.163 + module use -a /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles + module load g2tmpl/1.6.0 +elif [ $mac = l -o $mac = s ] ; then # for wcoss (i.e. luna and surge) + export machine=cray-intel + module switch intel intel/16.3.210 + module load craype/2.3.0 + module use -a /usrx/local/nceplibs/NCEPLIBS/modulefiles + module load g2tmpl/1.6.0 +fi + +# +module list + +set -x + +BASE=`pwd` + +##################################### +cd ${BASE} +for file in pdt4_1 pdt4_11 pdt4_12 pdt4_8 table_233 params_table +do + +echo " " +module list 2>compile_all_unit_test_g2tmpl_lib-$machine.log +module list +echo " " +echo " PLEASE WAIT FOR WRITING to LOG file " +echo " " + +make -f makefile_$file &>>compile_all_unit_test_g2tmpl_lib-$machine.log +# make -f makefile_$file +make -f makefile_$file clean +done + +if [ $? -eq 0 ]; then + echo " " + echo " Installation completed. Please refer to log file (unit_test/compile-g2tmpl-$machine.log) for details." +else + echo " " + echo " Installation encountered an error. Please refer to log file (unit_test/compile-g2tmpl-$machine.log) for details." +fi + +echo " " diff --git a/tests/makefile_params_table b/tests/makefile_params_table new file mode 100755 index 0000000..a281a8b --- /dev/null +++ b/tests/makefile_params_table @@ -0,0 +1,58 @@ +SHELL=/bin/sh +# +SRCS=test_params_grib2_tbl_new.f +OBJS=test_params_grib2_tbl_new.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_params_grib2_tbl_new +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + +FFLAGS = -O3 -free -g -I $(INC) + +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/makefile_pdt4_1 b/tests/makefile_pdt4_1 new file mode 100755 index 0000000..5b9dc76 --- /dev/null +++ b/tests/makefile_pdt4_1 @@ -0,0 +1,58 @@ +SHELL=/bin/sh +# +SRCS=test_g2tmpl_pdt4_1f +OBJS=test_g2tmpl_pdt4_1.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_g2tmpl_pdt4_1 +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + +FFLAGS = -O3 -free -g -I $(INC) + +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/makefile_pdt4_11 b/tests/makefile_pdt4_11 new file mode 100755 index 0000000..f31f7af --- /dev/null +++ b/tests/makefile_pdt4_11 @@ -0,0 +1,58 @@ +SHELL=/bin/sh +# +SRCS=test_g2tmpl_pdt4_11.f +OBJS=test_g2tmpl_pdt4_11.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_g2tmpl_pdt4_11 +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + +FFLAGS = -O3 -free -g -I $(INC) + +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/makefile_pdt4_12 b/tests/makefile_pdt4_12 new file mode 100755 index 0000000..cac2ff4 --- /dev/null +++ b/tests/makefile_pdt4_12 @@ -0,0 +1,58 @@ +SHELL=/bin/sh +# +SRCS=test_g2tmpl_pdt4_12.f +OBJS=test_g2tmpl_pdt4_12.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_g2tmpl_pdt4_12 +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + +FFLAGS = -O3 -free -g -I $(INC) + +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/makefile_pdt4_8 b/tests/makefile_pdt4_8 new file mode 100755 index 0000000..ebcb84a --- /dev/null +++ b/tests/makefile_pdt4_8 @@ -0,0 +1,56 @@ +SHELL=/bin/sh +# +SRCS=test_g2tmpl_pdt4_8.f +OBJS=test_g2tmpl_pdt4_8.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_g2tmpl_pdt4_8 +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + FFLAGS = -O3 -free -g -I $(INC) +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/makefile_table_233 b/tests/makefile_table_233 new file mode 100755 index 0000000..b9998a3 --- /dev/null +++ b/tests/makefile_table_233 @@ -0,0 +1,56 @@ +SHELL=/bin/sh +# +SRCS=test_g2tmpl_table_233.f +OBJS=test_g2tmpl_table_233.o + +# Tunable parameters +# +# FC Name of the fortran compiling system to use +# LDFLAGS Flags to the loader +# LIBS List of libraries +# CMD Name of the executable +# PROFLIB Library needed for profiling +# +FC = ifort + +# For testing with new g2tmpl v1.5.0 +INC= ${G2TMPL_INC} +LIBS= ${G2TMPL_LIB} + +CMD = test_g2tmpl_table_233 +PROFLIB = -lprof + +# To perform the default compilation, use the first line +# To compile with flowtracing turned on, use the second line +# To compile giving profile additonal information, use the third line +# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED +# FFLAGS = -O3 -free -g -DUNDERSCORE -I $(INC) + FFLAGS = -O3 -free -g -I $(INC) +# LDFLAGS = -DUNDERSCORE +LDFLAGS = +#FFLAGS = -F +#FFLAGS = -Wf"-ez" + +# Lines from here on down should not need to be changed. They are the +# actual rules which make uses to build a.out. +# +all: $(CMD) + +$(CMD): $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) + rm -f *.o + +# Make the profiled version of the command and call it a.out.prof +# +$(CMD).prof: $(OBJS) + $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) + rm -f *.o + +clean: + -rm -f $(OBJS) + +clobber: clean + -rm -f $(CMD) $(CMD).prof + +void: clobber + -rm -f $(SRCS) makefile diff --git a/tests/params_grib2_tbl_new b/tests/params_grib2_tbl_new new file mode 100755 index 0000000..81b86e1 --- /dev/null +++ b/tests/params_grib2_tbl_new @@ -0,0 +1,1244 @@ + 0 7 11 0 4LFTX + 0 7 193 1 4LFTX + 0 3 19 0 5WAVA + 0 3 197 1 5WAVA + 0 3 15 0 5WAVH + 0 3 193 1 5WAVH + 0 20 106 0 AACOEF + 0 2 11 0 ABSD + 4 2 5 0 ABSFRQ + 0 1 18 0 ABSH + 4 2 6 0 ABSRB + 0 2 10 0 ABSV + 0 18 0 0 ACCES + 0 18 1 0 ACIOD + 2 0 228 1 ACOND + 0 1 224 1 ACPCPN + 0 1 10 0 ACPCP + 0 18 2 0 ACRADP + 10 4 13 0 ACWSRD + 1 2 11 0 ACWSR + 0 20 105 0 AECOEF + 0 20 3 0 AEMFLX + 0 13 0 0 AEROT + 0 2 36 0 AFRWE + 0 20 50 0 AIA + 0 18 10 0 AIRCON + 2 0 208 1 AKHS + 2 0 209 1 AKMS + 0 19 1 0 ALBDO + 0 20 108 0 ALBGRD + 0 20 107 0 ALBSAT + 10 0 38 0 ALCWH + 0 20 110 0 ALEGRD + 0 20 109 0 ALESAT + 10 0 39 0 ALRRC + 0 3 11 0 ALTS + 10 0 37 0 ALTWH + 2 0 219 1 AMIXL + 3 192 11 0 AMSRE10 + 3 192 12 0 AMSRE11 + 3 192 13 0 AMSRE12 + 3 192 10 0 AMSRE9 + 0 20 59 0 ANCON + 3 1 23 0 ANGCOE + 0 20 111 0 ANGSTEXP + 0 20 5 0 ANPEMFLX + 0 20 4 0 ANPMFLX + 10 3 197 1 AOHFLX + 3 1 20 0 AOT06 + 3 1 21 0 AOT08 + 3 1 22 0 AOT16 + 0 20 102 0 AOTK + 0 1 223 1 APCPN + 0 1 8 0 APCP + 0 0 21 0 APTMP + 0 1 221 1 ARAIN + 0 20 8 0 AREMFLX + 0 3 21 0 ASGSO + 0 3 24 0 ASGSO + 10 3 198 1 ASHFL + 0 20 60 0 ASNCON + 0 1 29 0 ASNOW + 0 20 104 0 ASYSFK + 0 190 0 0 ATEXT + 3 1 13 0 ATMDIV + 0 20 101 0 ATMTK + 2 3 201 1 AVSFT + 2 3 200 1 BARET + 10 4 7 0 BATHY + 10 0 44 0 BENINX + 1 0 5 0 BGRUN + 1 0 192 1 BGRUN + 10 4 194 1 BKENG + 0 7 1 0 BLI + 0 7 16 0 BLKRN + 0 2 20 0 BLYDP + 2 0 14 0 BMIXL + 2 0 197 1 BMIXL + 0 7 201 1 BNEGELAY + 2 3 4 0 BOTLST + 0 7 202 1 BPOSELAY + 0 15 1 0 BREF + 3 1 27 0 BRFLF + 0 5 7 0 BRTEMP + 0 4 4 0 BRTMP + 0 15 2 0 BRVEL + 0 15 0 0 BSWID + 4 3 0 0 BTOT + 4 3 1 0 BVEC1 + 4 3 2 0 BVEC2 + 4 3 3 0 BVEC3 + 0 18 18 0 CAACL + 4 8 4 0 CAIIRAD + 0 7 206 1 CANGLE + 2 1 192 1 CANL + 0 7 6 0 CAPE + 0 1 88 0 CATCP + 0 19 29 0 CATEDR + 0 19 22 0 CAT + 0 20 63 0 CAVEMDL + 0 20 70 0 CBECSLSP + 0 6 25 0 CBHE + 0 20 67 0 CBLCLDSP + 0 20 73 0 CBLCSRCP + 3 1 14 0 CBTMP + 3 1 98 0 CCMPEMRR + 2 0 15 0 CCOND + 2 0 199 1 CCOND + 0 6 7 0 CDCA + 0 6 11 0 CDCB + 0 6 22 0 CDCC + 0 17 3 0 CDCDLTFD + 0 6 23 0 CDCIMR + 0 6 2 0 CDCON + 0 6 12 0 CDCTOP + 0 6 8 0 CDCT + 0 17 2 0 CDGDLTFD + 0 6 14 0 CDLYR + 0 6 192 1 CDLYR + 0 4 195 1 CDUVB + 10 0 16 0 CDWW + 0 2 29 0 CD + 0 2 196 1 CD + 0 6 13 0 CEIL + 0 5 197 1 CFNLF + 0 4 199 1 CFNSF + 0 1 34 0 CFRZR + 0 1 193 1 CFRZR + 0 20 54 0 CGDRC + 0 20 53 0 CGPRC + 10 3 2 0 CH + 0 18 17 0 CIAIRC + 0 19 206 1 CICEL + 0 1 35 0 CICEP + 0 1 194 1 CICEP + 10 2 12 0 CICES + 0 6 0 0 CICE + 0 19 208 1 CIFLT + 0 1 82 0 CIMIXR + 0 20 66 0 CINCLDSP + 0 20 69 0 CINCSLSP + 0 20 72 0 CINCSRCP + 0 7 7 0 CIN + 0 20 68 0 CIRELREP + 0 20 74 0 CIRERECP + 2 3 22 0 CISICE + 2 3 20 0 CISOILM + 2 0 23 0 CISOILW + 0 19 207 1 CIVIS + 3 2 9 0 CLDALB + 3 2 10 0 CLDEMISS + 3 2 8 0 CLDIWP + 3 2 7 0 CLDLWP + 3 2 5 0 CLDODEP + 3 2 6 0 CLDPER + 3 2 4 0 CLDPHAS + 3 1 16 0 CLDRAD + 3 2 3 0 CLDTYPE + 0 1 235 1 CLLMR + 3 0 7 0 CLOUDM + 0 1 22 0 CLWMR + 0 2 216 1 CNGWDU + 0 2 217 1 CNGWDV + 0 3 209 1 CNVDEMF + 0 3 208 1 CNVDMF + 0 0 196 1 CNVHR + 0 1 213 1 CNVMR + 0 3 207 1 CNVUMF + 0 2 212 1 CNVU + 0 2 213 1 CNVV + 2 0 13 0 CNWAT + 2 0 196 1 CNWAT + 0 20 56 0 COAIA + 0 20 1 0 COLMD + 0 20 51 0 CONAIR + 0 7 19 0 CONAPES + 0 1 216 1 CONDP + 0 19 16 0 CONTB + 0 19 14 0 CONTET + 0 19 13 0 CONTI + 0 19 24 0 CONTKE + 0 19 15 0 CONTT + 0 19 26 0 CONVO + 0 19 222 1 CONVP + 0 192 6 0 COVMM + 0 192 1 0 COVMZ + 0 2 205 1 COVMZ + 0 192 11 0 COVPSPS + 0 192 8 0 COVQM + 0 192 12 0 COVQQ + 0 192 10 0 COVQVV + 0 192 7 0 COVQZ + 0 192 3 0 COVTM + 0 2 207 1 COVTM + 0 192 14 0 COVTT + 0 192 9 0 COVTVV + 0 192 4 0 COVTW + 0 192 2 0 COVTZ + 0 2 206 1 COVTZ + 0 192 13 0 COVVVVV + 0 192 5 0 COVZZ + 0 1 39 0 CPOFP + 1 1 193 1 CPOFP + 1 1 192 1 CPOZP + 1 1 0 0 CPPOP + 0 1 37 0 CPRAT + 0 1 196 1 CPRAT + 0 1 33 0 CRAIN + 0 1 192 1 CRAIN + 0 20 71 0 CRERELSP + 0 1 76 0 CRRATE + 4 2 9 0 CRTFRQ + 1 2 13 0 CSAFC + 3 1 15 0 CSBTMP + 0 5 196 1 CSDLF + 0 4 196 1 CSDSF + 3 2 0 0 CSKPROB + 3 1 17 0 CSKYRAD + 0 1 36 0 CSNOW + 0 1 195 1 CSNOW + 0 1 58 0 CSRATE + 0 1 55 0 CSRWE + 0 5 195 1 CSULF + 0 4 198 1 CSUSF + 3 1 3 0 CTOPHQI + 3 1 2 0 CTOPH + 3 2 2 0 CTOPRES + 3 2 1 0 CTOPTMP + 0 19 21 0 CTP + 0 6 16 0 CUEFI + 0 6 194 1 CUEFI + 0 6 6 0 CWAT + 0 7 195 1 CWDI + 0 6 15 0 CWORK + 0 6 193 1 CWORK + 0 1 48 0 CWP + 1 1 195 1 CWR + 10 4 195 1 DBSS + 0 7 203 1 DCAPE + 0 20 12 0 DDMFLX + 0 3 30 0 DDRATE + 0 20 15 0 DDVEL + 2 0 30 0 DECF + 0 3 14 0 DENALT + 0 3 10 0 DEN + 0 0 7 0 DEPR + 1 0 13 0 DEPWSS + 10 2 2 0 DICED + 4 4 2 0 DIFEFLUX + 4 4 4 0 DIFIFLUX + 4 4 0 0 DIFPFLUX + 3 6 5 0 DIFSOLEX + 3 6 4 0 DIFSOLIR + 0 4 14 0 DIFSWRF + 10 1 0 0 DIRC + 2 3 14 0 DIREC + 10 0 10 0 DIRPW + 3 6 3 0 DIRSOLEX + 3 6 2 0 DIRSOLIR + 10 0 12 0 DIRSW + 10 0 33 0 DIRWTS + 10 0 32 0 DIRWWW + 1 0 7 0 DISRS + 0 3 6 0 DIST + 0 5 8 0 DLWRFCS + 0 5 3 0 DLWRF + 0 5 192 1 DLWRF + 0 3 28 0 DMFLX + 0 0 6 0 DPT + 2 4 8 0 DRTCODE + 0 18 12 0 DRYDEP + 0 19 237 1 DRYTPROB + 4 7 2 0 DSKDAY + 4 7 1 0 DSKINT + 4 7 3 0 DSKNGT + 10 3 1 0 DSLM + 10 191 3 0 DSLOBSO + 0 191 3 0 DSLOBS + 0 4 52 0 DSWRFCS + 0 4 13 0 DSWRFLX + 0 4 7 0 DSWRF + 0 4 192 1 DSWRF + 0 4 204 1 DTRF + 2 4 7 0 DUFMCODE + 0 4 194 1 DUVB + 0 4 12 0 DWUVR + 0 2 9 0 DZDT + 3 2 11 0 EAODR + 3 5 5 0 EBSDSSTS + 3 5 4 0 EBSSTSTD + 0 19 30 0 EDPARM + 0 7 204 1 EFHL + 0 7 9 0 EHLX + 4 2 1 0 ELCDEN + 4 0 1 0 ELECTMP + 10 3 194 1 ELEV + 0 19 238 1 ELLINX + 0 191 197 1 ELONN + 0 191 193 1 ELON + 0 1 211 1 EMNP + 0 0 3 0 EPOT + 0 19 218 1 EPSR + 10 3 252 1 EROSNP + 1 0 3 0 ESCT + 0 7 205 1 ESP + 3 1 0 0 ESTP + 3 1 4 0 ESTUGRD + 3 1 5 0 ESTVGRD + 0 2 32 0 ETACVV + 10 3 250 1 ETCWL + 4 3 4 0 ETOT + 10 3 193 1 ETSRG + 0 2 38 0 ETSS + 4 6 3 0 EUVIRR + 4 8 1 0 EUVRAD + 2 0 6 0 EVAPT + 0 1 79 0 EVARATE + 2 3 198 1 EVBS + 2 0 229 1 EVCW + 4 3 5 0 EVEC1 + 4 3 6 0 EVEC2 + 4 3 7 0 EVEC3 + 2 0 29 0 EVERF + 0 1 6 0 EVP + 2 0 213 1 EWATR + 0 2 39 0 EWTPARM + 4 6 5 0 F107 + 2 4 3 0 FBAREA + 2 4 10 0 FBUPINX + 0 6 37 0 FCONPC + 3 5 3 0 FDNSSTMP + 2 4 11 0 FDSRTE + 1 0 0 0 FFLDG + 1 0 1 0 FFLDRO + 2 4 6 0 FFMCODE + 0 1 228 1 FICEAC + 0 6 21 0 FICE + 0 6 199 1 FICE + 3 0 9 0 FIREDI + 2 4 1 0 FIREODT + 2 4 0 0 FIREOLK + 2 3 203 1 FLDCP + 1 0 12 0 FLDPSW + 0 19 205 1 FLGHT + 0 7 18 0 FLXRN + 2 4 4 0 FOSINDX + 0 1 67 0 FPRATE + 0 6 32 0 FRACCC + 0 1 43 0 FRAIN + 0 1 202 1 FRAIN + 10 0 63 0 FREWWW + 0 2 30 0 FRICV + 10 0 17 0 FRICV + 0 2 197 1 FRICV + 0 1 227 1 FROZR + 2 3 24 0 FRSTINX + 10 0 64 0 FRWWTSW + 0 1 225 1 FRZR + 10 3 204 1 FRZSPR + 0 1 121 0 FSNOWC + 0 6 36 0 FSTRPC + 2 4 5 0 FWINX + 0 1 95 0 FZPRATE + 0 18 3 0 GDCES + 0 18 4 0 GDIOD + 0 18 5 0 GDRADP + 0 191 1 0 GEOLAT + 0 191 2 0 GEOLON + 0 2 43 0 GEOWD + 0 2 44 0 GEOWS + 2 0 10 0 GFLUX + 2 0 193 1 GFLUX + 2 5 1 0 GLACTMP + 0 3 9 0 GPA + 0 1 75 0 GPRATE + 0 3 4 0 GP + 0 4 3 0 GRAD + 0 7 17 0 GRDRN + 0 1 32 0 GRLE + 3 6 1 0 GSOLEXP + 3 6 0 0 GSOLIRR + 0 2 22 0 GUST + 0 2 210 1 GWDU + 0 2 211 1 GWDV + 0 3 23 0 GWD + 1 0 9 0 GWLOWS + 2 0 214 1 GWREC + 1 0 8 0 GWUPS + 0 1 71 0 HAILMXR + 0 19 198 1 HAILPROB + 0 1 73 0 HAILPR + 0 1 31 0 HAIL + 4 8 2 0 HARAD + 0 19 210 1 HAVNI + 0 6 5 0 HCDC + 0 6 26 0 HCONCB + 0 6 27 0 HCONCT + 0 0 12 0 HEATX + 4 8 6 0 HELCOR + 2 0 24 0 HFLUX + 0 20 62 0 HGTMD + 0 3 211 1 HGTN + 0 3 203 1 HGTX + 0 3 204 1 HGTY + 0 3 5 0 HGT + 0 19 32 0 HIFREL + 2 4 2 0 HINDEX + 0 7 8 0 HLCY + 0 18 16 0 HMXACON + 0 3 18 0 HPBL + 0 3 196 1 HPBL + 4 2 8 0 HPRIMF + 0 19 196 1 HRCONO + 0 15 16 0 HSRHT + 0 15 15 0 HSR + 0 3 7 0 HSTDV + 10 0 3 0 HTSGW + 0 3 3 0 ICAHT + 1 2 7 0 ICECIL + 10 2 0 0 ICEC + 10 2 7 0 ICED + 10 2 6 0 ICEG + 10 2 9 0 ICEPRS + 0 19 27 0 ICESC + 0 19 37 0 ICESEV + 1 2 6 0 ICETIL + 10 2 1 0 ICETK + 10 2 8 0 ICETMP + 0 19 6 0 ICIB + 0 19 20 0 ICIP + 0 19 5 0 ICIT + 0 19 7 0 ICI + 0 1 23 0 ICMR + 0 19 233 1 ICPRB + 0 19 234 1 ICSEV + 1 2 5 0 ICTKIL + 2 0 207 1 ICWAT + 0 1 20 0 ILIQW + 10 0 27 0 IMFTSW + 10 0 26 0 IMFWW + 10 0 25 0 IMWF + 2 4 9 0 INFSINX + 4 4 3 0 INTEFLUX + 10 4 196 1 INTFD + 4 4 5 0 INTIFLUX + 4 4 1 0 INTPFLUX + 4 2 3 0 IONDEN + 4 0 3 0 IONTMP + 0 1 68 0 IPRATE + 3 1 1 0 IRRATE + 10 191 0 0 IRTSEC + 3 5 0 0 ISSTMP + 0 19 235 1 JFWPRB + 10 3 201 1 KENG + 0 7 3 0 KOX + 10 0 43 0 KSSEDW + 0 7 2 0 KX + 0 7 198 1 LAI + 1 2 8 0 LANDIL + 2 0 218 1 LANDN + 2 0 8 0 LANDU + 2 0 0 0 LAND + 0 2 202 1 LAPP + 0 0 8 0 LAPR + 0 2 198 1 LAUV + 0 19 209 1 LAVNI + 0 2 200 1 LAVV + 0 3 205 1 LAYTH + 0 6 3 0 LCDC + 10 3 203 1 LCH + 2 0 28 0 LEAINX + 0 7 10 0 LFTX + 0 7 192 1 LFTX + 0 0 10 0 LHTFL + 0 1 229 1 LICEAC + 0 13 195 1 LIPMF + 2 3 10 0 LIQVSM + 0 15 4 0 LMAXBR + 4 7 0 0 LMBINT + 0 3 210 1 LMH + 0 2 218 1 LMV + 0 2 203 1 LOPP + 0 2 199 1 LOUV + 0 2 201 1 LOVV + 2 3 3 0 LOWLSM + 0 13 194 1 LPMTF + 0 3 201 1 LPSX + 0 3 202 1 LPSY + 0 0 195 1 LRGHR + 0 1 217 1 LRGMR + 2 0 212 1 LSOIL + 2 3 199 1 LSPA + 0 1 54 0 LSPRATE + 0 1 77 0 LSRRATE + 0 1 59 0 LSSRATE + 0 1 56 0 LSSRWE + 0 1 47 0 LSWP + 0 17 0 0 LTNGSD + 0 17 192 1 LTNG + 0 17 1 0 LTPINX + 0 5 2 0 LWAVR + 0 5 194 1 LWHR + 0 4 5 0 LWRAD + 2 3 23 0 LWSNWP + 4 8 7 0 MASK + 0 6 38 0 MASSDCD + 0 6 39 0 MASSDCI + 0 20 0 0 MASSDEN + 0 1 98 0 MASSDG + 0 1 99 0 MASSDH + 0 1 96 0 MASSDR + 0 1 97 0 MASSDS + 0 20 2 0 MASSMR + 0 18 15 0 MAXACON + 0 1 28 0 MAXAH + 0 2 221 1 MAXDVV + 0 2 21 0 MAXGUST + 0 16 198 1 MAXREF + 0 1 27 0 MAXRH + 0 2 220 1 MAXUVV + 0 2 222 1 MAXUW + 0 2 223 1 MAXVW + 10 0 24 0 MAXWH + 0 6 4 0 MCDC + 0 1 26 0 MCONV + 0 1 197 1 MCONV + 0 6 40 0 MDCCWD + 0 1 38 0 MDIVER + 0 1 112 0 MDLWGVA + 0 1 109 0 MDLWHVA + 0 1 115 0 MDLWSVA + 3 2 30 0 MEACST + 0 6 200 1 MFLUX + 0 2 26 0 MFLX + 0 2 193 1 MFLX + 0 0 14 0 MINDPD + 0 1 198 1 MINRH + 0 19 3 0 MIXHT + 0 19 204 1 MIXLY + 0 1 2 0 MIXR + 0 191 195 1 MLYNO + 0 1 114 0 MMLWGDA + 0 1 111 0 MMLWHDA + 0 1 117 0 MMLWSDA + 0 2 6 0 MNTSF + 0 7 200 1 MNUPHL + 10 0 40 0 MNWSOW + 0 20 64 0 MOLRDRYA + 0 20 65 0 MOLRWETA + 10 191 1 0 MOSF + 0 19 195 1 MRCONO + 0 3 192 1 MSLET + 0 3 198 1 MSLMA + 0 20 16 0 MSSRDRYA + 0 20 17 0 MSSRWETA + 10 0 20 0 MSSW + 2 0 11 0 MSTAV + 2 0 194 1 MSTAV + 2 0 7 0 MTERH + 10 4 1 0 MTHA + 10 4 0 0 MTHD + 10 2 11 0 MVCICEP + 10 0 53 0 MWDFSWEL + 10 0 41 0 MWDIRW + 10 0 54 0 MWDSSWEL + 10 0 55 0 MWDTSWEL + 10 0 50 0 MWPFSWEL + 10 0 51 0 MWPSSWEL + 10 0 52 0 MWPTSWEL + 10 0 15 0 MWSPER + 0 19 28 0 MWTURB + 0 19 31 0 MXEDPRM + 0 20 61 0 MXMASSD + 0 19 17 0 MXSALB + 0 19 192 1 MXSALB + 0 7 199 1 MXUPHL + 10 0 30 0 MZPTSW + 10 0 29 0 MZPWW + 10 0 28 0 MZWPER + 0 4 202 1 NBDSF + 0 19 213 1 NBSALB + 0 6 29 0 NCCICE + 0 1 207 1 NCIP + 0 6 28 0 NCONCD + 0 1 9 0 NCPCP + 0 6 31 0 NDCICE + 0 4 203 1 NDDSF + 0 6 30 0 NDENCD + 2 0 31 0 NDVINX + 2 0 217 1 NDVI + 0 191 196 1 NLATN + 0 191 192 1 NLAT + 0 3 206 1 NLGSP + 0 3 25 0 NLPRES + 0 5 6 0 NLWRCS + 0 5 5 0 NLWRF + 0 5 0 0 NLWRS + 0 5 1 0 NLWRT + 3 1 6 0 NPIXU + 0 4 11 0 NSWRFCS + 0 4 9 0 NSWRF + 0 4 0 0 NSWRS + 0 4 1 0 NSWRT + 4 4 6 0 NTRNFLUX + 0 2 37 0 NTSS + 0 1 106 0 NUMDG + 0 1 107 0 NUMDH + 0 1 104 0 NUMDR + 0 1 105 0 NUMDS + 0 2 34 0 NWIND + 0 19 214 1 NWSALB + 10 0 19 0 NWSTR + 0 2 40 0 NWTPARM + 0 14 1 0 O3MR + 0 14 192 1 O3MR + 10 4 197 1 OHC + 0 2 215 1 OMGALF + 10 1 192 1 OMLU + 10 1 193 1 OMLV + 0 3 217 1 ORASNW + 0 3 216 1 ORASSW + 0 3 215 1 ORASS + 0 3 214 1 ORASW + 0 3 213 1 ORCONV + 0 3 221 1 ORLSNW + 0 3 220 1 ORLSSW + 0 3 219 1 ORLSS + 0 3 218 1 ORLSW + 10 4 4 0 OVHD + 10 4 6 0 OVMD + 10 4 5 0 OVSD + 10 3 253 1 OWASHP + 0 14 194 1 OZCAT + 0 14 193 1 OZCON + 0 14 200 1 OZMAX1 + 0 14 201 1 OZMAX8 + 10 3 196 1 P2OMLT + 3 3 2 0 PBINFRC + 3 3 1 0 PBLIFRC + 0 19 12 0 PBLREG + 3 3 0 0 PBMVFRC + 0 1 234 1 PCPDUR + 0 14 202 1 PDMAX1 + 0 14 203 1 PDMAX24 + 10 0 11 0 PERPW + 1 0 16 0 PERRATE + 10 0 13 0 PERSW + 0 1 40 0 PEVAP + 0 1 199 1 PEVAP + 0 1 41 0 PEVPR + 0 1 200 1 PEVPR + 0 4 10 0 PHOTAR + 3 0 8 0 PIXST + 0 7 0 0 PLI + 0 3 200 1 PLPL + 4 2 0 0 PLSMDEN + 10 0 23 0 PMAXWH + 0 13 192 1 PMTC + 0 13 193 1 PMTF + 1 1 2 0 POP + 2 3 9 0 POROS + 2 3 197 1 POROS + 0 0 2 0 POT + 0 14 199 1 POZO + 0 14 198 1 POZT + 0 14 196 1 POZ + 10 0 36 0 PPERTS + 10 0 35 0 PPERWW + 1 1 194 1 PPFFG + 0 1 231 1 PPINDX + 1 1 1 0 PPOSP + 0 1 7 0 PRATE + 4 0 4 0 PRATMP + 0 15 5 0 PREC + 0 3 13 0 PRESALT + 0 3 8 0 PRESA + 0 3 212 1 PRESN + 0 3 0 0 PRES + 0 3 1 0 PRMSL + 0 1 232 1 PROBCIP + 0 19 221 1 PROCON + 4 2 2 0 PROTDEN + 4 0 2 0 PROTTMP + 4 0 5 0 PRPTMP + 0 19 216 1 PRSIGSVR + 0 19 215 1 PRSVR + 10 4 21 0 PRTSAL + 0 19 36 0 PSNOWS + 0 3 2 0 PTEND + 0 1 19 0 PTYPE + 0 2 219 1 PVMWW + 0 2 14 0 PVORT + 0 1 3 0 PWAT + 10 0 46 0 PWAVEDIR + 0 1 30 0 PWCAT + 10 0 34 0 PWPER + 0 1 226 1 PWTHER + 0 1 219 1 QMAX + 0 1 220 1 QMIN + 2 0 215 1 QREC + 0 1 218 1 QZ0 + 2 3 202 1 RADT + 3 1 8 0 RAZA + 2 0 21 0 RCQ + 2 0 204 1 RCQ + 2 0 20 0 RCSOL + 2 0 205 1 RCSOL + 2 0 18 0 RCS + 2 0 202 1 RCS + 2 0 19 0 RCT + 2 0 203 1 RCT + 2 0 206 1 RDRIP + 0 15 6 0 RDSP1 + 0 15 7 0 RDSP2 + 0 15 8 0 RDSP3 + 2 0 32 0 RDVEG + 0 16 5 0 REFC + 0 16 196 1 REFC + 0 16 4 0 REFD + 0 16 195 1 REFD + 0 16 2 0 REFZC + 0 16 194 1 REFZC + 0 16 1 0 REFZI + 0 16 193 1 REFZI + 0 16 0 0 REFZR + 0 16 192 1 REFZR + 0 2 13 0 RELD + 0 2 12 0 RELV + 0 16 3 0 RETOP + 0 16 197 1 RETOP + 0 0 194 1 REV + 0 15 9 0 RFCD + 0 15 10 0 RFCI + 0 15 13 0 RFGRPL + 0 15 14 0 RFHAIL + 3 1 9 0 RFL06 + 3 1 10 0 RFL08 + 3 1 11 0 RFL16 + 3 1 12 0 RFL39 + 0 15 12 0 RFRAIN + 0 15 11 0 RFSNOW + 0 1 94 0 RHICE + 0 1 242 1 RHPW + 0 1 93 0 RHWATER + 0 1 1 0 RH + 0 1 44 0 RIME + 0 1 203 1 RIME + 10 1 4 0 RIPCOP + 0 7 12 0 RI + 0 7 194 1 RI + 2 3 6 0 RLYRS + 2 3 193 1 RLYRS + 0 1 65 0 RPRATE + 2 0 16 0 RSMIN + 2 0 200 1 RSMIN + 1 0 2 0 RSSC + 0 191 194 1 RTSEC + 10 3 206 1 RUNUP + 1 0 11 0 RVERSW + 0 1 24 0 RWMR + 0 18 14 0 SACON + 0 20 100 0 SADEN + 0 19 19 0 SALBD + 3 0 1 0 SALBEDO + 10 4 193 1 SALIN + 1 2 12 0 SALTIL + 10 4 3 0 SALTY + 0 1 5 0 SATD + 2 3 17 0 SATOSM + 3 192 4 0 SBC123 + 3 192 5 0 SBC124 + 0 19 211 1 SBSALB + 0 1 212 1 SBSNO + 3 192 6 0 SBT112 + 3 192 7 0 SBT113 + 3 192 8 0 SBT114 + 3 192 9 0 SBT115 + 3 192 0 0 SBT122 + 3 192 1 0 SBT123 + 3 192 2 0 SBT124 + 3 192 3 0 SBT126 + 3 192 23 0 SBTA1610 + 3 192 24 0 SBTA1611 + 3 192 25 0 SBTA1612 + 3 192 26 0 SBTA1613 + 3 192 27 0 SBTA1614 + 3 192 28 0 SBTA1615 + 3 192 29 0 SBTA1616 + 3 192 20 0 SBTA167 + 3 192 21 0 SBTA168 + 3 192 22 0 SBTA169 + 3 192 39 0 SBTA1710 + 3 192 40 0 SBTA1711 + 3 192 41 0 SBTA1712 + 3 192 42 0 SBTA1713 + 3 192 43 0 SBTA1714 + 3 192 44 0 SBTA1715 + 3 192 45 0 SBTA1716 + 3 192 36 0 SBTA177 + 3 192 37 0 SBTA178 + 3 192 38 0 SBTA179 + 3 192 55 0 SBTAGR10 + 3 192 56 0 SBTAGR11 + 3 192 57 0 SBTAGR12 + 3 192 58 0 SBTAGR13 + 3 192 59 0 SBTAGR14 + 3 192 60 0 SBTAGR15 + 3 192 61 0 SBTAGR16 + 3 192 52 0 SBTAGR7 + 3 192 53 0 SBTAGR8 + 3 192 54 0 SBTAGR9 + 3 0 2 0 SBTMP + 4 2 10 0 SCINT + 0 1 84 0 SCLIWC + 0 1 83 0 SCLLWC + 3 1 29 0 SCRAD + 0 20 112 0 SCTAOTK + 3 0 5 0 SCTPRES + 0 20 6 0 SDDMFLX + 0 1 61 0 SDEN + 3 1 99 0 SDMPEMRR + 0 3 20 0 SDSGSO + 0 1 60 0 SDWE + 0 20 11 0 SEDMFLX + 1 2 3 0 SEDTK + 1 2 4 0 SEDTMP + 10 3 207 1 SETUP + 0 1 62 0 SEVAP + 2 0 216 1 SFCRH + 2 0 1 0 SFCR + 2 0 34 0 SFCWRO + 2 0 12 0 SFEXC + 2 0 195 1 SFEXC + 1 0 10 0 SFLORC + 0 20 55 0 SFLUX + 3 192 14 0 SFRA161 + 3 192 15 0 SFRA162 + 3 192 16 0 SFRA163 + 3 192 17 0 SFRA164 + 3 192 18 0 SFRA165 + 3 192 19 0 SFRA166 + 3 192 30 0 SFRA171 + 3 192 31 0 SFRA172 + 3 192 32 0 SFRA173 + 3 192 33 0 SFRA174 + 3 192 34 0 SFRA175 + 3 192 35 0 SFRA176 + 10 4 11 0 SFSALP + 1 2 9 0 SFSAL + 10 4 12 0 SFTMPP + 1 2 10 0 SFTMP + 0 2 7 0 SGCVV + 0 0 201 1 SHAHR + 0 19 201 1 SHAILPRO + 0 1 214 1 SHAMR + 2 3 26 0 SHFLX + 0 0 11 0 SHTFL + 0 1 108 0 SHTPRM + 0 7 13 0 SHWINX + 10 2 3 0 SICED + 4 9 1 0 SIGHAL + 4 9 2 0 SIGPAR + 4 9 0 0 SIGPED + 0 19 217 1 SIPD + 0 0 17 0 SKINT + 3 5 1 0 SKSSTMP + 0 1 230 1 SLACC + 0 19 23 0 SLDP + 3 0 4 0 SLFTI + 10 3 202 1 SLTFL + 2 3 194 1 SLTYP + 0 6 34 0 SLWTC + 2 3 8 0 SMDRY + 2 3 196 1 SMDRY + 0 1 113 0 SMLWGMA + 0 1 110 0 SMLWHMA + 0 1 116 0 SMLWSMA + 2 3 7 0 SMREF + 2 3 195 1 SMREF + 0 19 18 0 SNFALB + 0 19 193 1 SNFALB + 0 1 25 0 SNMR + 0 1 17 0 SNOAG + 0 1 14 0 SNOC + 0 1 11 0 SNOD + 0 0 16 0 SNOHF + 0 0 192 1 SNOHF + 0 1 15 0 SNOL + 0 1 16 0 SNOM + 0 0 18 0 SNOT + 0 1 208 1 SNOT + 0 1 42 0 SNOWC + 0 1 201 1 SNOWC + 0 1 233 1 SNOWLR + 0 19 236 1 SNOWLVL + 0 1 222 1 SNOWT + 2 3 25 0 SNWDEB + 2 3 27 0 SOILDEP + 2 3 21 0 SOILICE + 2 3 5 0 SOILL + 2 3 192 1 SOILL + 2 3 19 0 SOILMOI + 2 0 3 0 SOILM + 2 0 22 0 SOILM + 2 3 15 0 SOILP + 2 3 18 0 SOILTMP + 2 0 38 0 SOILVIC + 2 0 192 1 SOILW + 4 6 6 0 SOLRF + 3 1 7 0 SOLZA + 2 3 0 0 SOTYP + 3 1 28 0 SPBRT + 10 1 1 0 SPC + 4 6 4 0 SPECIRR + 4 1 0 0 SPEED + 0 1 0 0 SPFH + 10 0 45 0 SPFTR + 0 1 102 0 SPNCG + 0 1 103 0 SPNCH + 0 1 100 0 SPNCR + 0 1 101 0 SPNCS + 0 1 66 0 SPRATE + 4 2 7 0 SPRDF + 3 0 3 0 SPWAT + 3 0 0 0 SRAD + 0 1 85 0 SRAINC + 0 19 194 1 SRCONO + 3 192 46 0 SRFAGR1 + 3 192 47 0 SRFAGR2 + 3 192 48 0 SRFAGR3 + 3 192 49 0 SRFAGR4 + 3 192 50 0 SRFAGR5 + 3 192 51 0 SRFAGR6 + 0 1 12 0 SRWEQ + 0 20 103 0 SSALBK + 0 3 22 0 SSGSO + 10 3 195 1 SSHG + 3 5 2 0 SSKSSTMP + 0 1 86 0 SSNOWW + 1 0 6 0 SSRUN + 1 0 193 1 SSRUN + 10 3 200 1 SSST + 3 0 6 0 SSTMP + 2 0 211 1 SSTOR + 10 3 199 1 SSTT + 0 6 35 0 SSWTC + 0 19 200 1 STORPROB + 0 2 4 0 STRM + 0 1 87 0 STRPRATE + 0 6 33 0 SUNSD + 0 6 201 1 SUNSD + 0 6 24 0 SUNS + 10 3 192 1 SURGE + 0 19 220 1 SVRTS + 10 3 208 1 SWASH + 0 4 2 0 SWAVR + 10 0 7 0 SWDIR + 0 20 7 0 SWDMFLX + 0 7 5 0 SWEATX + 10 0 8 0 SWELL + 1 0 4 0 SWEPON + 10 0 47 0 SWHFSWEL + 0 4 197 1 SWHR + 10 0 48 0 SWHSSWEL + 10 0 49 0 SWHTSWEL + 0 19 202 1 SWINDPRO + 10 0 9 0 SWPER + 3 1 194 1 SWQI + 0 4 6 0 SWRAD + 0 19 212 1 SWSALB + 0 6 1 0 TCDC + 0 0 204 1 TCHP + 0 1 81 0 TCICON + 0 14 2 0 TCIOZ + 0 1 64 0 TCIWV + 2 0 35 0 TCLASS + 0 1 209 1 TCLSW + 0 6 20 0 TCOLC + 0 6 198 1 TCOLC + 0 1 74 0 TCOLG + 0 1 72 0 TCOLH + 0 6 19 0 TCOLIO + 0 1 70 0 TCOLI + 0 6 197 1 TCOLI + 0 1 210 1 TCOLM + 0 1 45 0 TCOLR + 0 1 204 1 TCOLR + 0 1 46 0 TCOLS + 0 1 205 1 TCOLS + 0 1 78 0 TCOLWA + 0 6 18 0 TCOLWO + 0 1 69 0 TCOLW + 0 6 196 1 TCOLW + 0 6 17 0 TCONDO + 0 1 21 0 TCOND + 0 6 195 1 TCOND + 10 3 242 1 TCSRG20 + 10 3 243 1 TCSRG30 + 10 3 244 1 TCSRG40 + 10 3 245 1 TCSRG50 + 10 3 246 1 TCSRG60 + 10 3 247 1 TCSRG70 + 10 3 248 1 TCSRG80 + 10 3 249 1 TCSRG90 + 0 1 51 0 TCWAT + 0 0 20 0 TDCHT + 0 2 31 0 TDCMOM + 2 0 36 0 TFRCT + 0 0 197 1 THFLX + 0 3 12 0 THICK + 0 6 10 0 THUNC + 0 0 203 1 THZ0 + 0 18 6 0 TIACCP + 0 18 7 0 TIACIP + 0 18 8 0 TIACRP + 10 3 251 1 TIDE + 0 1 206 1 TIPD + 0 19 11 0 TKE + 0 1 90 0 TKMFLX + 0 17 4 0 TLGTFD + 0 6 9 0 TMAXT + 0 0 4 0 TMAX + 0 0 5 0 TMIN + 0 0 29 0 TMPADV + 0 0 9 0 TMPA + 4 0 0 0 TMPSWP + 0 0 0 0 TMP + 0 2 227 1 TOA10 + 0 2 228 1 TOA50 + 0 2 229 1 TOD50 + 0 2 230 1 TOD90 + 0 19 197 1 TORPROB + 0 7 4 0 TOTALX + 0 1 80 0 TOTCON + 0 18 13 0 TOTLWD + 0 14 0 0 TOZNE + 0 14 197 1 TOZ + 2 0 37 0 TPERCT + 0 19 219 1 TPFI + 0 1 52 0 TPRATE + 0 20 13 0 TRANHH + 2 3 12 0 TRANSO + 2 0 230 1 TRANS + 0 20 14 0 TRSDS + 0 2 226 1 TRWDIR + 0 2 225 1 TRWSPD + 0 0 200 1 TSD1D + 0 191 0 0 TSEC + 4 6 0 0 TSI + 0 3 199 1 TSLSA + 0 1 50 0 TSNOWP + 0 1 241 1 TSNOW + 2 0 2 0 TSOIL + 0 1 57 0 TSRATE + 0 1 53 0 TSRWE + 0 19 203 1 TSTMC + 0 19 2 0 TSTM + 0 0 19 0 TTCHT + 0 0 198 1 TTDIA + 10 4 2 0 TTHDP + 0 0 25 0 TTLWRCS + 0 0 23 0 TTLWR + 0 0 26 0 TTPARM + 0 0 199 1 TTPHY + 0 0 193 1 TTRAD + 0 0 24 0 TTSWRCS + 0 0 22 0 TTSWR + 0 19 9 0 TURBB + 0 19 8 0 TURBT + 0 19 10 0 TURB + 0 1 49 0 TWATP + 0 2 35 0 TWIND + 10 3 210 1 TWLDC + 10 3 209 1 TWLDT + 10 3 205 1 TWLWAV + 0 20 58 0 TYAAL + 0 20 57 0 TYABA + 0 3 16 0 U-GWD + 0 3 194 1 U-GWD + 10 1 194 1 UBARO + 0 3 31 0 UCLSPRS + 0 1 120 0 UCSCIW + 0 1 119 0 UCSCLW + 0 0 28 0 UCTMP + 0 3 29 0 UDRATE + 0 2 17 0 UFLX + 0 2 2 0 UGRD + 0 2 23 0 UGUST + 0 2 41 0 UGWIND + 10 2 4 0 UICE + 0 1 91 0 UKMFLX + 0 5 4 0 ULWRF + 0 5 193 1 ULWRF + 0 3 27 0 UMFLX + 0 1 118 0 UNCSH + 0 2 45 0 UNDIV + 10 1 2 0 UOGRD + 1 0 14 0 UPAPCP + 1 0 15 0 UPASM + 0 7 15 0 UPHL + 0 7 197 1 UPHL + 2 3 2 0 UPLSM + 2 3 1 0 UPLST + 3 1 192 1 USCT + 10 0 21 0 USSD + 0 2 27 0 USTM + 0 2 194 1 USTM + 0 4 53 0 USWRFCS + 0 4 8 0 USWRF + 0 4 193 1 USWRF + 0 4 205 1 UTRF + 0 4 50 0 UVIUCS + 0 4 51 0 UVI + 0 7 196 1 UVI + 0 3 17 0 V-GWD + 0 3 195 1 V-GWD + 0 19 232 1 VAFTD + 0 1 4 0 VAPP + 10 1 195 1 VBARO + 0 4 200 1 VBDSF + 0 4 201 1 VDDSF + 0 0 202 1 VDFHR + 0 1 215 1 VDFMR + 0 14 195 1 VDFOZ + 0 2 208 1 VDFUA + 0 2 209 1 VDFVA + 0 2 204 1 VEDH + 2 0 210 1 VEGT + 2 0 4 0 VEG + 4 1 1 0 VEL1 + 4 1 2 0 VEL2 + 4 1 3 0 VEL3 + 0 2 18 0 VFLX + 0 6 48 0 VFRCICE + 0 6 49 0 VFRCIW + 0 6 47 0 VFRCWD + 0 2 3 0 VGRD + 2 0 198 1 VGTYP + 0 2 24 0 VGUST + 0 2 42 0 VGWIND + 10 2 5 0 VICE + 0 15 3 0 VIL + 0 19 35 0 VISBSN + 0 19 34 0 VISIFOG + 0 19 33 0 VISLFOG + 0 19 0 0 VIS + 0 1 92 0 VKMFLX + 0 20 52 0 VMXR + 10 1 3 0 VOGRD + 3 4 4 0 VOLACDEM + 3 4 7 0 VOLACDEN + 3 4 6 0 VOLACDOD + 3 4 3 0 VOLACDTH + 3 4 2 0 VOLACDTP + 3 4 1 0 VOLACDTT + 3 4 5 0 VOLAEADR + 3 4 8 0 VOLAPER + 3 4 0 0 VOLAPROB + 0 19 4 0 VOLASH + 2 3 13 0 VOLDEC + 2 3 11 0 VOLTSO + 0 2 46 0 VORTADV + 0 2 5 0 VPOT + 0 0 15 0 VPTMP + 0 2 224 1 VRATE + 3 1 193 1 VSCT + 2 0 25 0 VSOILM + 2 3 16 0 VSOSM + 10 0 22 0 VSSD + 0 2 28 0 VSTM + 0 2 195 1 VSTM + 4 2 4 0 VTEC + 0 0 1 0 VTMP + 0 2 15 0 VUCSH + 0 2 16 0 VVCSH + 0 2 8 0 VVEL + 2 0 27 0 VWILTM + 0 2 25 0 VWSH + 0 2 192 1 VWSH + 10 4 17 0 WATDENA + 10 4 16 0 WATERDEN + 10 4 20 0 WATPDENA + 10 4 19 0 WATPDEN + 10 4 18 0 WATPTEMP + 2 0 5 0 WATR + 10 0 62 0 WAVEFREW + 2 0 223 1 WCCONV + 0 0 13 0 WCF + 2 0 221 1 WCINC + 2 0 226 1 WCUFLX + 2 0 227 1 WCVFLX + 0 20 10 0 WDCPMFLX + 10 4 14 0 WDEPTH + 10 0 31 0 WDIRW + 0 2 0 0 WDIR + 1 2 0 0 WDPTHIL + 10 0 56 0 WDWFSWEL + 10 0 57 0 WDWSSWEL + 10 0 58 0 WDWTSWEL + 0 1 13 0 WEASD + 10 0 42 0 WESP + 0 0 27 0 WETBT + 0 18 11 0 WETDEP + 0 20 75 0 WFIREFLX + 1 2 2 0 WFRACT + 10 0 59 0 WFWFSWEL + 10 0 60 0 WFWSSWEL + 10 0 61 0 WFWTSWEL + 4 8 5 0 WHTCOR + 4 8 3 0 WHTRAD + 2 0 26 0 WILT + 2 0 201 1 WILT + 0 2 33 0 WINDF + 0 19 199 1 WINDPROB + 3 1 19 0 WINDS + 0 2 1 0 WIND + 0 19 25 0 WIWW + 10 0 193 1 WLENG + 0 20 9 0 WLSMFLX + 0 2 19 0 WMIXE + 2 0 33 0 WROD + 10 0 192 1 WSTP + 10 0 18 0 WSTR + 0 2 214 1 WTEND + 10 4 192 1 WTMPC + 1 2 1 0 WTMPIL + 10 4 15 0 WTMPSS + 10 3 0 0 WTMP + 2 0 222 1 WVCONV + 10 0 4 0 WVDIR + 10 0 5 0 WVHGT + 2 0 220 1 WVINC + 10 0 6 0 WVPER + 10 0 0 0 WVSP1 + 10 0 1 0 WVSP2 + 10 0 2 0 WVSP3 + 2 0 224 1 WVUFLX + 2 0 225 1 WVVFLX + 10 0 14 0 WWSDIR + 4 6 1 0 XLONG + 0 3 26 0 XPRES + 4 8 0 0 XRAYRAD + 4 6 2 0 XSHRT + 10 2 10 0 ZVCICEP diff --git a/tests/run_all_tests.sh b/tests/run_all_tests.sh new file mode 100755 index 0000000..98f1ec4 --- /dev/null +++ b/tests/run_all_tests.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +# +# This script uses to test g2_pdt4.1, g2_pdt4.11, g2_pdt4.12, g2_pdt4.8, +# table_4.233 and params_grib2_tbl 4.2 +# + +dir=` pwd ` +output_dir=$dir/output +rm -rf $output_dir +for test_name in g2tmpl_pdt4_1 g2tmpl_pdt4_11 g2tmpl_pdt4_12 g2tmpl_pdt4_8 g2tmpl_table_233 params_grib2_tbl_new +do + echo " " + echo -n "Running test ${test_name}..." + mkdir -p $output_dir + ./test_${test_name} &>${output_dir}/${test_name}.log + err=$? + if [ $err -ne 0 ]; then + >&2 echo "WARNING: ONE OR MORE ERRORS WERE REPORTED!" + echo " done ---> FAIL " + elif [ $err -eq 0 ]; then + echo " done ---> PASS " + fi + echo " " + echo " --> Please view $output_dir/$test_name.log" + echo " " +done + diff --git a/tests/test_g2tmpl_pdt4_1.f b/tests/test_g2tmpl_pdt4_1.f new file mode 100755 index 0000000..baa2efc --- /dev/null +++ b/tests/test_g2tmpl_pdt4_1.f @@ -0,0 +1,67 @@ + Program test_g2tmpl_pdt4_1 +! +! This program uses to test routine g2sec4_temp1.f in g2tmpl library +! It uses to test PDT4.1 by changing the original PDT4.1 with "typ_gen_proc_key" +! and "gen_proc_or_mod_key" + + use grib2_all_tables_module + integer(4) :: ipdstmpl1(18) + + integer(4) :: icatg,iparm,hrs_obs_cutoff,min_obs_cutoff,fcst_time, & + scale_fac1,scaled_val1,scale_fac2,scaled_val2 + integer(4) :: perturb_num, num_fcst_ens +! + character(len=80) :: typ_gen_proc_key,gen_proc_or_mod_key, & + unit_of_time_key,lvl_type1,lvl_type2, & + type_ens_fcst_key +! + integer(4) :: bckgnd_gen_proc_id ! defined by the center +! + integer(4) :: ipdstmpl1_old(18)=(/0, 4, 4, 0, 107, 0, 0, 1, 6, & + 103, 0, 2, 255, 0, 0, 3, 5, 10/) + +! ORIGINAl PRODUCT TEMPLATE 4. 1 +! 0 4 4 0 107 0 0 1 6 103 0 2 255 0 0 3 5 10 ! PDT 4.1 + + icatg=0 + iparm=4 + typ_gen_proc_key='ens_fcst' + gen_proc_or_mod_key='gefs' + hrs_obs_cutoff=0 + min_obs_cutoff=0 + unit_of_time_key='hour' + fcst_time=6 + lvl_type1='spec_hgt_lvl_above_grnd' + scale_fac1=0 + scaled_val1=2 + lvl_type2='missing' + scale_fac2=0 + scaled_val2=0 + + type_ens_fcst_key='pos_pert_fcst' + perturb_num=5 + num_fcst_ens=10 + + ipdsnum=1 + ipdstmpllen=18 + + call g2sec4_temp1(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,ipdstmpl1) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl1_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.1 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl1(j),j=1,ipdstmpllen) + print *,' ' + print *," Both Original and New PRODUCT TEMPLATE 4.1 are SAME " + print *,' PASS ' + print *,' ' + + stop + end diff --git a/tests/test_g2tmpl_pdt4_11.f b/tests/test_g2tmpl_pdt4_11.f new file mode 100755 index 0000000..94f36ae --- /dev/null +++ b/tests/test_g2tmpl_pdt4_11.f @@ -0,0 +1,237 @@ + Program test_g2tmpl_pdt4_11 +! +! This program uses to test routine g2sec4_temp11.f in g2tmpl library +! It tests PDT4.11 by changing 'ens_fcst', 'gefs', 'MAX',' pos_pert_fcst= 3 ' +! Then, it calling g2sec4_temp11 routine and write out new PDT 4.11 +! + + use grib2_all_tables_module + integer(4) :: ipdstmpl11(32) + + integer(4) :: icatg,iparm,hrs_obs_cutoff,min_obs_cutoff,fcst_time, & + scale_fac1,scaled_val1,scale_fac2,scaled_val2 + integer(4) :: year_intvl,mon_intvl,day_intvl,hour_intvl,min_intvl, & + sec_intvl,num_time_range,stat_miss_val, & + leng_time_range_stat,time_inc_betwn_succ_fld + integer(4) :: perturb_num, num_fcst_ens +! + character(len=80) :: typ_gen_proc_key,gen_proc_or_mod_key, & + unit_of_time_key,lvl_type1,lvl_type2, & + type_of_stat_proc,type_of_time_inc, & + stat_unit_time_key,stat_unit_time_key_succ, & + type_ens_fcst_key +! + integer(4) :: bckgnd_gen_proc_id ! defined by the center +! + + integer(4) :: ipdstmpl11_old(32)=(/0, 4, 4, 0, 107, 0, 0, 1, 6, & + 103, 0, 2, 255, 0, 0, 3, 5, 10, 2017, 03, 09, 0, 0, & + 0, 1, 0, 2, 2, 1, 6, 255, 0/) + +! ORIGINAl PRODUCT TEMPLATE 4. 11 +! 0 4 4 0 107 0 0 1 6 103 0 2 255 0 0 3 5 10 2017 03 09 0 0 0 1 0 2 2 1 6 255 0 ! PDT 4.11 + +! + icatg=0 + iparm=4 + typ_gen_proc_key='ens_fcst' + gen_proc_or_mod_key='gefs' + hrs_obs_cutoff=0 + min_obs_cutoff=0 + unit_of_time_key='hour' + fcst_time=6 + lvl_type1='spec_hgt_lvl_above_grnd' + scale_fac1=0 + scaled_val1=2 + lvl_type2='missing' + scale_fac2=0 + scaled_val2=0 + + type_ens_fcst_key='pos_pert_fcst' + perturb_num=5 + num_fcst_ens=10 + + year_intvl=2017 + mon_intvl=03 + day_intvl=09 + hour_intvl=0 + min_intvl=0 + sec_intvl=0 + num_time_range=1 + stat_miss_val=0 + type_of_stat_proc='MAX' + type_of_time_inc='same_start_time_fcst_fcst_time_inc' + stat_unit_time_key='hour' + leng_time_range_stat=6 + stat_unit_time_key_succ='missing' + time_inc_betwn_succ_fld=0 + + ipdsnum=11 + ipdstmpllen=32 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' pos_pert_fcst= 3 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_ens_fcst_key='unpert_hi_res_ctrl_fcst' + perturb_num=6 + num_fcst_ens=12 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' unpert_hi_res_ctrl_fcst = 0 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_ens_fcst_key='unpert_lo_res_ctrl_fcst' + perturb_num=6 + num_fcst_ens=12 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' unpert_lo_res_ctrl_fcst = 1 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_ens_fcst_key='neg_pert_fcst' + perturb_num=6 + num_fcst_ens=12 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' neg_pert_fcst = 2 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_ens_fcst_key='multi_model_fcst' + perturb_num=6 + num_fcst_ens=12 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' multi_model_fcst = 4 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_ens_fcst_key='pert_ens_member' + perturb_num=6 + num_fcst_ens=12 + + call g2sec4_temp11(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_ens_fcst_key, & + perturb_num,num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl11) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.11 ' + print *,' ' + print *,' pert_ens_member = 192 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl11(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + stop + end diff --git a/tests/test_g2tmpl_pdt4_12.f b/tests/test_g2tmpl_pdt4_12.f new file mode 100755 index 0000000..2c69ff0 --- /dev/null +++ b/tests/test_g2tmpl_pdt4_12.f @@ -0,0 +1,144 @@ + Program test_g2tmpl_pdt4_12 +! +! This program uses to test routine g2sec4_temp12.f in g2tmpl library +! It test PDT4.12 by changing: weighted_mean_all_mem = 1, unweighted_mean_all_mem = 0 +! and std_devn_res_cluster_mean = 2. Then, It calls g2sec4_temp12 routine to write +! NEW PDT4.12 +! + use grib2_all_tables_module + integer(4) :: ipdstmpl12(31) + + integer(4) :: icatg,iparm,hrs_obs_cutoff,min_obs_cutoff,fcst_time, & + scale_fac1,scaled_val1,scale_fac2,scaled_val2 + integer(4) :: year_intvl,mon_intvl,day_intvl,hour_intvl,min_intvl, & + sec_intvl,num_time_range,stat_miss_val, & + leng_time_range_stat,time_inc_betwn_succ_fld + integer(4) :: perturb_num, num_fcst_ens +! + character(len=80) :: typ_gen_proc_key,gen_proc_or_mod_key, & + unit_of_time_key,lvl_type1,lvl_type2, & + type_of_stat_proc,type_of_time_inc, & + stat_unit_time_key,stat_unit_time_key_succ, & + type_derive_fcst_key +! + integer(4) :: bckgnd_gen_proc_id ! defined by the center +! + + integer(4) :: ipdstmpl12_old(31)=(/0, 4, 4, 0, 107, 0, 0, 1, 6, & + 103, 0, 2, 255, 0, 0, 1, 10, 2017, 03, 09, 0, 0, & + 0, 1, 0, 2, 2, 1, 6, 255, 0/) + +! ORIGINAL PRODUCT TEMPLATE 4. 12 +! 0 4 4 0 107 0 0 1 6 103 0 2 255 0 0 1 10 2017 03 09 0 0 0 1 0 2 2 1 6 255 0 ! PDT 4.12 + +! + icatg=0 + iparm=4 + typ_gen_proc_key='ens_fcst' + gen_proc_or_mod_key='gefs' + hrs_obs_cutoff=0 + min_obs_cutoff=0 + unit_of_time_key='hour' + fcst_time=6 + lvl_type1='spec_hgt_lvl_above_grnd' + scale_fac1=0 + scaled_val1=2 + lvl_type2='missing' + scale_fac2=0 + scaled_val2=0 + + type_derive_fcst_key='weighted_mean_all_mem' + num_fcst_ens=10 + + year_intvl=2017 + mon_intvl=03 + day_intvl=09 + hour_intvl=0 + min_intvl=0 + sec_intvl=0 + num_time_range=1 + stat_miss_val=0 + type_of_stat_proc='MAX' + type_of_time_inc='same_start_time_fcst_fcst_time_inc' + stat_unit_time_key='hour' + leng_time_range_stat=6 + stat_unit_time_key_succ='missing' + time_inc_betwn_succ_fld=0 + + ipdsnum=11 + ipdstmpllen=31 + + call g2sec4_temp12(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_derive_fcst_key, & + num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl12) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.12 ' + print *, ' weighted_mean_all_mem = 1 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_derive_fcst_key='unweighted_mean_all_mem ' + num_fcst_ens=10 + call g2sec4_temp12(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_derive_fcst_key, & + num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl12) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.12 ' + print *, ' unweighted_mean_all_mem = 0 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + type_derive_fcst_key='std_devn_res_cluster_mean' + num_fcst_ens=10 + call g2sec4_temp12(icatg,iparm,typ_gen_proc_key,gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff,unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1,scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,type_derive_fcst_key, & + num_fcst_ens,year_intvl, & + mon_intvl,day_intvl,hour_intvl,min_intvl,sec_intvl, & + num_time_range,stat_miss_val,type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat,stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl12) + write(6,'(A,1x,i0,a,80(1x,I0))')'Original PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' for new PDT 4.12 ' + print *, ' std_devn_res_cluster_mean = 2 ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')' NEW PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl12(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + stop + end diff --git a/tests/test_g2tmpl_pdt4_8.f b/tests/test_g2tmpl_pdt4_8.f new file mode 100755 index 0000000..9f12818 --- /dev/null +++ b/tests/test_g2tmpl_pdt4_8.f @@ -0,0 +1,92 @@ + Program test_g2tmpl_pdt4_8 +! +! This program uses to test routine g2sec4_temp8 in g2tmpl library +! to verify the scaled value of first fixed surface and scaled value +! of second fixed surface in product definition template 4.8 +! + + use grib2_all_tables_module + integer(4) :: ipdstmpl8(29) + integer(4) :: icatg,iparm,hrs_obs_cutoff,min_obs_cutoff,fcst_time, & + scale_fac1,scaled_val1,scale_fac2,scaled_val2 + integer(4) :: year_intvl,mon_intvl,day_intvl,hour_intvl,min_intvl, & + sec_intvl,num_time_range,stat_miss_val, & + leng_time_range_stat,time_inc_betwn_succ_fld + character(len=80) :: typ_gen_proc_key,gen_proc_or_mod_key, & + unit_of_time_key,lvl_type1,lvl_type2, & + type_of_stat_proc,type_of_time_inc, & + stat_unit_time_key,stat_unit_time_key_succ + + integer(4) :: ipdstmpl8_old(29)=(/2, 220, 2, 0, 84, 0, 0, 1, 10, 100, 0, 20000, 100, & + 0, 300000, 2017, 03, 09, 12, 0, 0, 1, 0, 2, 2, 1, 1, 255, 0/) + +! PRODUCT TEMPLATE 4. 8 +! 2 220 2 0 84 0 0 1 10 100 0 20000 100 0 300000 2017 03 09 12 0 0 1 0 2 2 1 1 255 0 +! + icatg=2 + iparm=220 + typ_gen_proc_key='fcst' + gen_proc_or_mod_key='meso_nam12km' + hrs_obs_cutoff=0 + min_obs_cutoff=0 + unit_of_time_key='hour' + fcst_time=10 + lvl_type1='isobaric_sfc' + scale_fac1=0 + scaled_val1=40000 + lvl_type2='isobaric_sfc' + scale_fac2=0 + scaled_val2=100000 + year_intvl=2017 + mon_intvl=03 + day_intvl=09 + hour_intvl=12 + min_intvl=0 + sec_intvl=0 + num_time_range=1 + stat_miss_val=0 + type_of_stat_proc='MAX' + type_of_time_inc='same_start_time_fcst_fcst_time_inc' + stat_unit_time_key='hour' + leng_time_range_stat=1 + stat_unit_time_key_succ='missing' + time_inc_betwn_succ_fld=0 + + ipdsnum=8 + ipdstmpllen=29 + + call g2sec4_temp8(icatg,iparm,typ_gen_proc_key, & + gen_proc_or_mod_key, & + hrs_obs_cutoff,min_obs_cutoff, & + unit_of_time_key, & + fcst_time,lvl_type1,scale_fac1, & + scaled_val1,lvl_type2, & + scale_fac2,scaled_val2,year_intvl, & + mon_intvl,day_intvl,hour_intvl, & + min_intvl,sec_intvl, & + num_time_range,stat_miss_val, & + type_of_stat_proc, & + type_of_time_inc,stat_unit_time_key, & + leng_time_range_stat, & + stat_unit_time_key_succ, & + time_inc_betwn_succ_fld,ipdstmpl8) + + + print *,' ' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')'OLD_PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl8_old(j),j=1,ipdstmpllen) + print *,' ' + print *,' Compiled with NEW g2tmpl library ' + print *,' It fixed the scale value of first fixed surface= 400000' + print *,' and second fixed surface = 100000' + print *,' ' + write(6,'(A,1x,i0,a,80(1x,I0))')'NEW_PRODUCT TEMPLATE 4.', & + ipdsnum,' : ',(ipdstmpl8(j),j=1,ipdstmpllen) + print *,' ' + print *,' PASS ' + print *,' ' + + + stop + end diff --git a/tests/test_g2tmpl_table_233.f b/tests/test_g2tmpl_table_233.f new file mode 100755 index 0000000..38198f2 --- /dev/null +++ b/tests/test_g2tmpl_table_233.f @@ -0,0 +1,29 @@ + Program test_g2tmpl_table_233 +! +! This program uses to test table 4.233 in routine get_g2_typeofaeroso.f in g2tmpl library + + + use grib2_all_tables_module + integer :: value,ierr + character(len=80) :: typeofaerosol_key(5) +! + typeofaerosol_key(1) = 'black_carbon_hydrophilic' + typeofaerosol_key(2) = 'black_carbon_hydrophobic' + typeofaerosol_key(3) = 'particulate_org_matter_hydrophilic' + typeofaerosol_key(4) = 'particulate_org_matter_hydrophobic' + typeofaerosol_key(5) = 'prim_particulate_org_matter_dry' + print *,' ' + print *,' Compiled with NEW g2tmpl v1.5.0 library to test' + print *,' 4 new type of Arosols in table 233. ' + print *,' They are following: ' + print *, ' black_carbon_hydrophilic and code value = 62013 ' + print *, ' black_carbon_hydrophobic and code value = 62014 ' + print *, ' particulate_org_matter_hydrophilic and code value = 62015 ' + print *, ' particulate_org_matter_hydrophobic and code value = 62016 ' + print *,' ' + print *,' ' + print *,' PASS ' + print *,' ' + + stop + end diff --git a/tests/test_mod.pf b/tests/test_mod.pf new file mode 100644 index 0000000..74e8091 --- /dev/null +++ b/tests/test_mod.pf @@ -0,0 +1,12 @@ +module test_mod + use funit + use iso_fortran_env, only: real32, real64 + +contains + + @test + subroutine test_something() + @assertTrue(.true., "true is true") + end subroutine test_something + +end module test_mod diff --git a/tests/test_params_grib2_tbl_new.f b/tests/test_params_grib2_tbl_new.f new file mode 100755 index 0000000..8b448fc --- /dev/null +++ b/tests/test_params_grib2_tbl_new.f @@ -0,0 +1,70 @@ + Program params_grib2_tbl_new +! +! This program uses to test routine test_params_grib2_tbl_new in g2tmpl library +! It tests parameters in table 4.2 (test_params_grib2_tbl_new) by changing mnemonic in +! params_grib2_tbl_new table. Then, it calls search_for_4dot2_entry routine and +! write out the corresponding product discipline, parameter category and parameter +! number in table 4.2. +! + + use grib2_all_tables_module + integer idisc,icatg,iparm,locflg + character*255 fl_nametbl + character(len=30) :: pname(200)='' +! + pname(1)='UCTMP' + pname(2)='TMPADV' + pname(3)='STRPRATE' + pname(4)='CATCP' + pname(5)='TKMFLX' + pname(6)='SBTA169' + pname(7)='SBTA1610' + pname(8)='SBTA1611' + pname(9)='SBTA1612' + pname(10)='SWHFSWEL' + pname(11)='TMAX' + pname(12)='TMP' + pname(13)='SRFAGR1' + pname(14)='VGRD' + pname(15)='UGRD' + locflg=0 + +! Opens and reads the GRIB2 Code Table 4.2 into an internal memory structure. +! + fl_nametbl='params_grib2_tbl_new' + call open_and_read_4dot2( fl_nametbl, ierr ) + if ( ierr .ne. 0 ) then + print*, 'Couldnt open table file - return code was ',ierr + endif + +! Sorts and writes the GRIB2 Code Table 4.2 to an output file. +! +! fl_nametbl='params_grib2_tbl_new.new' +! call sort_and_write_4dot2( fl_nametbl, ierr ) +! if ( ierr .ne. 0 ) then +! print*, 'Couldnt open output file - return code was ',ierr +! endif +! +! Searches for a specified mnemonic within GRIB2 Code Table 4.2 and +! returns the corresponding product discipline, parameter category and parameter number. +! + do i=1,15 + idisc=0 + icatg=0 + iparm=0 + call search_for_4dot2_entry(pname(i),locflg, idisc, icatg, iparm, ierr) + if ( ierr .ne. 0 ) then + print *,' ' + print*, 'Could not find Mnemonic ', trim(pname(i)),' in grib2 table 4.2 ' + print *, ' FAILED ' + print *,' ' + cycle + end if + write(6,'(A,A,3(A,I4),A)') ' Mnemonic = ',trim(pname(i)), & + ' is discipline= ',idisc, & + ' ; category= ',icatg, & + ' ; parameter= ',iparm, ' in grib2 table 4.2 ' + print *, ' PASS ' + end do + stop + end