From 0663d2ee40df8238eca2c77024bd51bb9ba0b4a7 Mon Sep 17 00:00:00 2001 From: Hang-Lei-NOAA <44901908+Hang-Lei-NOAA@users.noreply.github.com> Date: Tue, 25 Feb 2020 11:00:58 -0500 Subject: [PATCH 1/8] Create LICENSE.md --- LICENSE.md | 157 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..0927556 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,157 @@ +### GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + +#### 0. Additional Definitions. + +As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the +GNU General Public License. + +"The Library" refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + +The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +#### 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +#### 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +- a) under this License, provided that you make a good faith effort + to ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or +- b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + +#### 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +- a) Give prominent notice with each copy of the object code that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the object code with a copy of the GNU GPL and this + license document. + +#### 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + +- a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. +- c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. +- d) Do one of the following: + - 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + - 1) Use a suitable shared library mechanism for linking with + the Library. A suitable mechanism is one that (a) uses at run + time a copy of the Library already present on the user's + computer system, and (b) will operate properly with a modified + version of the Library that is interface-compatible with the + Linked Version. +- e) Provide Installation Information, but only if you would + otherwise be required to provide such information under section 6 + of the GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the Application + with a modified version of the Linked Version. (If you use option + 4d0, the Installation Information must accompany the Minimal + Corresponding Source and Corresponding Application Code. If you + use option 4d1, you must provide the Installation Information in + the manner specified by section 6 of the GNU GPL for conveying + Corresponding Source.) + +#### 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +- a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities, conveyed under the terms of this License. +- b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +#### 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +as you received it specifies that a certain numbered version of the +GNU Lesser General Public License "or any later version" applies to +it, you have the option of following the terms and conditions either +of that published version or of any later version published by the +Free Software Foundation. If the Library as you received it does not +specify a version number of the GNU Lesser General Public License, you +may choose any version of the GNU Lesser General Public License ever +published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. From 8af48df6ad279b9d05c044aa781cd8343d9bc0b8 Mon Sep 17 00:00:00 2001 From: Hang-Lei-NOAA <44901908+Hang-Lei-NOAA@users.noreply.github.com> Date: Tue, 3 Mar 2020 19:46:46 -0500 Subject: [PATCH 2/8] Update LICENSE.md --- LICENSE.md | 167 ++++------------------------------------------------- 1 file changed, 10 insertions(+), 157 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 0927556..f674711 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,157 +1,10 @@ -### GNU LESSER GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. - - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates the -terms and conditions of version 3 of the GNU General Public License, -supplemented by the additional permissions listed below. - -#### 0. Additional Definitions. - -As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the -GNU General Public License. - -"The Library" refers to a covered work governed by this License, other -than an Application or a Combined Work as defined below. - -An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - -A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - -The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - -The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - -#### 1. Exception to Section 3 of the GNU GPL. - -You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - -#### 2. Conveying Modified Versions. - -If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - -- a) under this License, provided that you make a good faith effort - to ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or -- b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - -#### 3. Object Code Incorporating Material from Library Header Files. - -The object code form of an Application may incorporate material from a -header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - -- a) Give prominent notice with each copy of the object code that - the Library is used in it and that the Library and its use are - covered by this License. -- b) Accompany the object code with a copy of the GNU GPL and this - license document. - -#### 4. Combined Works. - -You may convey a Combined Work under terms of your choice that, taken -together, effectively do not restrict modification of the portions of -the Library contained in the Combined Work and reverse engineering for -debugging such modifications, if you also do each of the following: - -- a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. -- b) Accompany the Combined Work with a copy of the GNU GPL and this - license document. -- c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. -- d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of - this License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with - the Library. A suitable mechanism is one that (a) uses at run - time a copy of the Library already present on the user's - computer system, and (b) will operate properly with a modified - version of the Library that is interface-compatible with the - Linked Version. -- e) Provide Installation Information, but only if you would - otherwise be required to provide such information under section 6 - of the GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the Application - with a modified version of the Linked Version. (If you use option - 4d0, the Installation Information must accompany the Minimal - Corresponding Source and Corresponding Application Code. If you - use option 4d1, you must provide the Installation Information in - the manner specified by section 6 of the GNU GPL for conveying - Corresponding Source.) - -#### 5. Combined Libraries. - -You may place library facilities that are a work based on the Library -side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - -- a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities, conveyed under the terms of this License. -- b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - -#### 6. Revised Versions of the GNU Lesser General Public License. - -The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -as you received it specifies that a certain numbered version of the -GNU Lesser General Public License "or any later version" applies to -it, you have the option of following the terms and conditions either -of that published version or of any later version published by the -Free Software Foundation. If the Library as you received it does not -specify a version number of the GNU Lesser General Public License, you -may choose any version of the GNU Lesser General Public License ever -published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +Copyright 2020 National Oceanic and Atmospheric Administration (by assignment from I. M. Systems Group) + +The [NCEPLIBS-gfsio] code incorporated in the Unified Forecast System (UFS) was jointly developed by the National Oceanic and Atmospheric Administration and the I. M. Systems Group. The gold standard copy of the Code will be maintained by NOAA at [https://github.com/NOAA-EMC/NCEPLIBS-gfsio]. + +The National Oceanic and Atmospheric Administration is releasing this code under the GNU Lesser General Public License v3.0 (the "License"); you may not use this code except in compliance with the License. + +You may obtain a copy of the License at + https://www.gnu.org/licenses/lgpl-3.0.en.html + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License From 5dd5ccf42a42801f1b9ced6bde614f0024e04f78 Mon Sep 17 00:00:00 2001 From: Kyle Gerheiser <3209794+kgerheiser@users.noreply.github.com> Date: Tue, 16 Jun 2020 13:17:36 -0400 Subject: [PATCH 3/8] CMake, CI, Tests (#9) Merge release/public-v1 into develop Add tests, CI and CMake --- .github/workflows/main.yml | 53 + .gitignore | 8 + CMakeLists.txt | 77 +- README.md | 29 + VERSION | 1 + cmake/PackageConfig.cmake.in | 13 + src/CMakeLists.txt | 58 + tests/CMakeLists.txt | 6 + tests/README | 39 + tests/compile_all_unit_test_g2tmpl_lib.sh | 60 + tests/makefile_params_table | 58 + tests/makefile_pdt4_1 | 58 + tests/makefile_pdt4_11 | 58 + tests/makefile_pdt4_12 | 58 + tests/makefile_pdt4_8 | 56 + tests/makefile_table_233 | 56 + tests/params_grib2_tbl_new | 1244 +++++++++++++++++++++ tests/run_all_tests.sh | 28 + tests/test_g2tmpl_pdt4_1.f | 67 ++ tests/test_g2tmpl_pdt4_11.f | 237 ++++ tests/test_g2tmpl_pdt4_12.f | 144 +++ tests/test_g2tmpl_pdt4_8.f | 92 ++ tests/test_g2tmpl_table_233.f | 29 + tests/test_mod.pf | 12 + tests/test_params_grib2_tbl_new.f | 70 ++ 25 files changed, 2557 insertions(+), 54 deletions(-) create mode 100644 .github/workflows/main.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 VERSION create mode 100644 cmake/PackageConfig.cmake.in create mode 100644 src/CMakeLists.txt create mode 100644 tests/CMakeLists.txt create mode 100644 tests/README create mode 100755 tests/compile_all_unit_test_g2tmpl_lib.sh create mode 100755 tests/makefile_params_table create mode 100755 tests/makefile_pdt4_1 create mode 100755 tests/makefile_pdt4_11 create mode 100755 tests/makefile_pdt4_12 create mode 100755 tests/makefile_pdt4_8 create mode 100755 tests/makefile_table_233 create mode 100755 tests/params_grib2_tbl_new create mode 100755 tests/run_all_tests.sh create mode 100755 tests/test_g2tmpl_pdt4_1.f create mode 100755 tests/test_g2tmpl_pdt4_11.f create mode 100755 tests/test_g2tmpl_pdt4_12.f create mode 100755 tests/test_g2tmpl_pdt4_8.f create mode 100755 tests/test_g2tmpl_table_233.f create mode 100644 tests/test_mod.pf create mode 100755 tests/test_params_grib2_tbl_new.f 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..1b77341 --- /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.2.0 + + +### Authors + +* **[NCEP/EMC](mailto:NCEP.List.EMC.nceplibs.Developers@noaa.gov)** diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.2.0 diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in new file mode 100644 index 0000000..d18f44b --- /dev/null +++ b/cmake/PackageConfig.cmake.in @@ -0,0 +1,13 @@ +@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@") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..e6856e7 --- /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 From 3e669722ef07ad03bae7866ffb350de6c545cb9f Mon Sep 17 00:00:00 2001 From: Kyle Gerheiser <3209794+kgerheiser@users.noreply.github.com> Date: Mon, 22 Jun 2020 13:09:07 -0400 Subject: [PATCH 4/8] Add message to PackageConfig when library is found --- cmake/PackageConfig.cmake.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in index d18f44b..81ce6f9 100644 --- a/cmake/PackageConfig.cmake.in +++ b/cmake/PackageConfig.cmake.in @@ -11,3 +11,6 @@ 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@)") From fc1b396bc8da9aecd209f278e97ce5956fb07861 Mon Sep 17 00:00:00 2001 From: Kyle Gerheiser <3209794+kgerheiser@users.noreply.github.com> Date: Tue, 23 Jun 2020 12:33:02 -0400 Subject: [PATCH 5/8] Add quotes to version --- cmake/PackageConfig.cmake.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in index 81ce6f9..9022bd8 100644 --- a/cmake/PackageConfig.cmake.in +++ b/cmake/PackageConfig.cmake.in @@ -13,4 +13,4 @@ get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@ IM check_required_components("@PROJECT_NAME@") get_target_property(location @PROJECT_NAME@::@PROJECT_NAME@ LOCATION) -message(STATUS "Found @PROJECT_NAME@: ${location} (found version @PROJECT_VERSION@)") +message(STATUS "Found @PROJECT_NAME@: ${location} (found version \"@PROJECT_VERSION@\")") From 286e9f0b2c710ac409fe7e9e2d58fd5651c9ea3c Mon Sep 17 00:00:00 2001 From: Kyle Gerheiser <3209794+kgerheiser@users.noreply.github.com> Date: Tue, 23 Jun 2020 13:56:05 -0400 Subject: [PATCH 6/8] Make install relocatable --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e6856e7..9f875f5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -18,7 +18,7 @@ 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}) From 167d372d4f6cb70c8b2710b8c4983c62c055368d Mon Sep 17 00:00:00 2001 From: Kyle Gerheiser <3209794+kgerheiser@users.noreply.github.com> Date: Thu, 25 Jun 2020 22:41:53 -0400 Subject: [PATCH 7/8] Update VERSION to 1.3.0 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 26aaba0..f0bb29e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.0 +1.3.0 From 5625a60b474160429232dee919c98709c089c4af Mon Sep 17 00:00:00 2001 From: kgerheiser Date: Fri, 26 Jun 2020 11:18:26 -0400 Subject: [PATCH 8/8] Update version in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b77341..b77496c 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ make install ### Version -1.2.0 +1.3.0 ### Authors