diff --git a/ci/hera.sh b/ci/hera.sh index ec3858370..8a9518f8b 100644 --- a/ci/hera.sh +++ b/ci/hera.sh @@ -6,3 +6,4 @@ export SALLOC_ACCOUNT=$SLURM_ACCOUNT export SBATCH_ACCOUNT=$SLURM_ACCOUNT export SLURM_QOS=debug export PATH=$PATH:/home/role.jedipara/bin +export NTASKS_TESTS=12 diff --git a/ci/orion.sh b/ci/orion.sh index 1232d2828..8c2cf9a5f 100644 --- a/ci/orion.sh +++ b/ci/orion.sh @@ -8,3 +8,4 @@ export SLURM_QOS=debug export SLURM_EXCLUSIVE=user export OMP_NUM_THREADS=1 ulimit -s unlimited +export NTASKS_TESTS=12 diff --git a/ci/run_ci.sh b/ci/run_ci.sh index 1b5f27231..917f70e90 100755 --- a/ci/run_ci.sh +++ b/ci/run_ci.sh @@ -61,7 +61,7 @@ module use $GDAS_MODULE_USE module load GDAS/$TARGET echo "---------------------------------------------------" >> $outfile rm -rf log.ctest -ctest -R gdasapp --output-on-failure &>> log.ctest +ctest -j${NTASKS_TESTS} -R gdasapp --output-on-failure &>> log.ctest ctest_status=$? npassed=$(cat log.ctest | grep "tests passed") if [ $ctest_status -eq 0 ]; then diff --git a/ci/run_gw_ci.sh b/ci/run_gw_ci.sh index ba1874107..d3b7de9d0 100755 --- a/ci/run_gw_ci.sh +++ b/ci/run_gw_ci.sh @@ -62,7 +62,7 @@ module use $repodir/sorc/gdas.cd/modulefiles module load GDAS/$TARGET echo "---------------------------------------------------" >> $outfile rm -rf log.ctest -ctest -R gdasapp --output-on-failure &>> log.ctest +ctest -j${NTASKS_TESTS} -R gdasapp --output-on-failure &>> log.ctest ctest_status=$? npassed=$(cat log.ctest | grep "tests passed") if [ $ctest_status -eq 0 ]; then diff --git a/parm/atm/jcb-base.yaml.j2 b/parm/atm/jcb-base.yaml.j2 index d7e1e5907..39c626a84 100644 --- a/parm/atm/jcb-base.yaml.j2 +++ b/parm/atm/jcb-base.yaml.j2 @@ -27,6 +27,11 @@ final_prints_frequency: PT3H number_of_outer_loops: 2 analysis_variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] +# Testing +# ------- + +do_testing: {{ DO_TEST_MODE | default(false, true) }} + # Model things # ------------ # Geometry diff --git a/parm/atm/jcb-prototype_3dvar-fv3inc.yaml.j2 b/parm/atm/jcb-prototype_3dvar-fv3inc.yaml.j2 new file mode 100644 index 000000000..f7f6db57a --- /dev/null +++ b/parm/atm/jcb-prototype_3dvar-fv3inc.yaml.j2 @@ -0,0 +1,10 @@ +# Algorithm +# --------- +algorithm: fv3jedi_fv3inc_variational + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_3dvar-fv3inc.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_3dvar-fv3inc.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/atm/jcb-prototype_3dvar.yaml.j2 b/parm/atm/jcb-prototype_3dvar.yaml.j2 index 4330a87bd..b89b65105 100644 --- a/parm/atm/jcb-prototype_3dvar.yaml.j2 +++ b/parm/atm/jcb-prototype_3dvar.yaml.j2 @@ -30,3 +30,10 @@ observations: # - scatwind_ascat_metop-a # - snowcvr # - abi_g16 + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_3dvar.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_3dvar.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/atm/jcb-prototype_lgetkf-fv3inc.yaml.j2 b/parm/atm/jcb-prototype_lgetkf-fv3inc.yaml.j2 new file mode 100644 index 000000000..9845103df --- /dev/null +++ b/parm/atm/jcb-prototype_lgetkf-fv3inc.yaml.j2 @@ -0,0 +1,10 @@ +# Algorithm +# --------- +algorithm: fv3jedi_fv3inc_lgetkf + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_lgetkf-fv3inc.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_lgetkf-fv3inc.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/atm/jcb-prototype_lgetkf.yaml.j2 b/parm/atm/jcb-prototype_lgetkf.yaml.j2 index 2ed04df3b..04f9faafd 100644 --- a/parm/atm/jcb-prototype_lgetkf.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf.yaml.j2 @@ -38,3 +38,10 @@ observations: - satwnd.viirs_npp # - scatwind_ascat_metop-a # - snowcvr + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_lgetkf.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_lgetkf.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 b/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 index 4b800ac8f..39e682415 100644 --- a/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf_observer.yaml.j2 @@ -44,3 +44,10 @@ atmosphere_obsdataout_prefix: diag_lobs_ # Distribution type distribution_type: RoundRobin + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_lgetkf_observer.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_lgetkf_observer.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 b/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 index b5123dde9..7abccdd6e 100644 --- a/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 +++ b/parm/atm/jcb-prototype_lgetkf_solver.yaml.j2 @@ -47,3 +47,10 @@ atmosphere_obsdataout_prefix: diag_solv_ # Distribution type distribution_type: Halo + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/C96C48_ufs_hybatmDA_lgetkf_solver.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/C96C48_ufs_hybatmDA_lgetkf_solver.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/jcb-algorithms b/parm/jcb-algorithms index 43d8ff6ba..0f4423943 160000 --- a/parm/jcb-algorithms +++ b/parm/jcb-algorithms @@ -1 +1 @@ -Subproject commit 43d8ff6ba14baf9402ee58d0f3351a143c21211b +Subproject commit 0f4423943e1c2bdd4b9d0a4218e30df83c5e2c66 diff --git a/parm/soca/marine-jcb-3dfgat.yaml.j2 b/parm/soca/marine-jcb-3dfgat.yaml.j2 index acdfa002d..59d0b9ff5 100644 --- a/parm/soca/marine-jcb-3dfgat.yaml.j2 +++ b/parm/soca/marine-jcb-3dfgat.yaml.j2 @@ -3,3 +3,10 @@ algorithm: 3dfgat # Observations observations: !INC ${OBS_LIST_SHORT} + +# Testing things +# -------------- +test_reference_filename: '{{HOMEgfs}}/sorc/gdas.cd/test/testreference/C48mx500_3DVarAOWCDA_3dfgat.ref' +test_output_filename: '{{HOMEgfs}}/sorc/gdas.cd/build/gdas/test/testoutput/C48mx500_3DVarAOWCDA_3dfgat.test.out' +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/parm/soca/marine-jcb-base.yaml b/parm/soca/marine-jcb-base.yaml index 3a9d40223..1b55dc7d2 100644 --- a/parm/soca/marine-jcb-base.yaml +++ b/parm/soca/marine-jcb-base.yaml @@ -26,6 +26,10 @@ final_prints_frequency: PT3H number_of_outer_loops: 1 analysis_variables: [sea_ice_area_fraction, sea_ice_thickness, sea_ice_snow_thickness, sea_water_salinity, sea_water_potential_temperature, eastward_sea_water_velocity, northward_sea_water_velocity, sea_surface_height_above_geoid] +# Testing +# ------- + +do_testing: '{{ DO_TEST_MODE | default(false, true) }}' # Model things # ------------ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index cae0d55ec..a31f5443e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -24,7 +24,6 @@ file(ARCHIVE_EXTRACT INPUT ${CMAKE_CURRENT_BINARY_DIR}/${TAR} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # list of test binary/data files to install list(APPEND test_data - ${CMAKE_CURRENT_BINARY_DIR}/testdata/atminc_compress.nc4 ${CMAKE_CURRENT_BINARY_DIR}/testdata/adt.nc ${CMAKE_CURRENT_BINARY_DIR}/testdata/sst.nc ${CMAKE_CURRENT_BINARY_DIR}/testdata/sss.nc @@ -120,11 +119,6 @@ add_test(NAME test_gdasapp_check_yaml_keys # WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/) # commented out above test because it does not really do as advertised with all these templates which are not valid yaml -# test for ush/jediinc2fv3.py -add_test(NAME test_gdasapp_jedi_increment_to_fv3 - COMMAND ${Python3_EXECUTABLE} ${PROJECT_SOURCE_DIR}/ush/jediinc2fv3.py ${PROJECT_BINARY_DIR}/test/testdata/atmges_compress.nc4 ${PROJECT_BINARY_DIR}/test/testdata/atminc_compress.nc4 ${PROJECT_BINARY_DIR}/test/testoutput/fv_increment.nc - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/) - # high level tests that require the global-workflow # TODO(AFE) see GDASApp issue #1213 #if (WORKFLOW_TESTS) @@ -136,7 +130,6 @@ add_test(NAME test_gdasapp_jedi_increment_to_fv3 #endif() if (${BUILD_GDASBUNDLE}) - add_subdirectory(fv3jedi) # fv3jedi tests add_subdirectory(snow) # snow da tests add_subdirectory(gw-ci) # subset of the global-workflow ci tests endif() diff --git a/test/atm/global-workflow/CMakeLists.txt b/test/atm/global-workflow/CMakeLists.txt index 925a73677..daa5b8edf 100644 --- a/test/atm/global-workflow/CMakeLists.txt +++ b/test/atm/global-workflow/CMakeLists.txt @@ -1,63 +1,86 @@ # test for creating an experiment directory within the global-workflow file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) -add_test(NAME test_gdasapp_setup_atm_cycled_exp - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/setup_workflow_exp.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_var_init - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_init.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_var_run - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_run.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_var_inc - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_inc.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_var_final - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_final.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_init - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_init.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_letkf - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_letkf.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_init_split - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_init_split.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_obs - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_obs.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_sol - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_sol.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) +ecbuild_add_test(TARGET test_gdasapp_setup_atm_cycled_exp + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/setup_workflow_exp.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_var_init + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_init.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_setup_atm_cycled_exp) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_var_run + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_run.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_var_init) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_var_inc + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_inc.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_var_run) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_var_final + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_var_final.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_var_inc) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_init + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_init.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_setup_atm_cycled_exp) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_letkf + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_letkf.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_init) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_init_split + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_init_split.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_letkf) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_obs + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_obs.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_init_split) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_sol + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_sol.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_obs) -add_test(NAME test_gdasapp_atm_jjob_ens_inc - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_inc.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) - -add_test(NAME test_gdasapp_atm_jjob_ens_final - COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_final.sh - ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun) +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_inc + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_inc.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_sol) + +ecbuild_add_test(TARGET test_gdasapp_atm_jjob_ens_final + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/atm/global-workflow/jjob_ens_final.sh + ARGS ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/atm/global-workflow/testrun + TEST_DEPENDS test_gdasapp_atm_jjob_ens_inc) diff --git a/test/atm/global-workflow/config.yaml b/test/atm/global-workflow/config.yaml index d8bf2e4c2..d6d4b0343 100644 --- a/test/atm/global-workflow/config.yaml +++ b/test/atm/global-workflow/config.yaml @@ -8,9 +8,11 @@ base: DUMPDIR: "@dumpdir@" STMP: "@bindir@/test/atm/global-workflow/testrun" PTMP: "@bindir@/test/atm/global-workflow/testrun" + DO_TEST_MODE: "YES" atmanl: JCB_ALGO_YAML_VAR: "@srcdir@/test/atm/global-workflow/jcb-prototype_3dvar.yaml.j2" + JCB_ALGO_YAML_FV3INC: "@srcdir@/test/atm/global-workflow/jcb-prototype_3dvar-fv3inc.yaml.j2" STATICB_TYPE: "identity" ATMRES_ANL: "C48" LAYOUT_X_ATMANL: 1 @@ -20,5 +22,6 @@ atmensanl: JCB_ALGO_YAML_LETKF: "@srcdir@/test/atm/global-workflow/jcb-prototype_lgetkf.yaml.j2" JCB_ALGO_YAML_OBS: "@srcdir@/test/atm/global-workflow/jcb-prototype_lgetkf_observer.yaml.j2" JCB_ALGO_YAML_SOL: "@srcdir@/test/atm/global-workflow/jcb-prototype_lgetkf_solver.yaml.j2" + JCB_ALGO_YAML_FV3INC: "@srcdir@/test/atm/global-workflow/jcb-prototype_lgetkf-fv3inc.yaml.j2" LAYOUT_X_ATMENSANL: 1 LAYOUT_Y_ATMENSANL: 1 diff --git a/test/atm/global-workflow/jcb-prototype_3dvar-fv3inc.yaml.j2 b/test/atm/global-workflow/jcb-prototype_3dvar-fv3inc.yaml.j2 new file mode 100644 index 000000000..9686fbbce --- /dev/null +++ b/test/atm/global-workflow/jcb-prototype_3dvar-fv3inc.yaml.j2 @@ -0,0 +1,10 @@ +# Algorithm +# --------- +algorithm: fv3jedi_fv3inc_variational + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_3dvar-fv3inc.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_3dvar-fv3inc.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/test/atm/global-workflow/jcb-prototype_3dvar.yaml.j2 b/test/atm/global-workflow/jcb-prototype_3dvar.yaml.j2 index e16f86ecc..7465a4274 100644 --- a/test/atm/global-workflow/jcb-prototype_3dvar.yaml.j2 +++ b/test/atm/global-workflow/jcb-prototype_3dvar.yaml.j2 @@ -17,7 +17,7 @@ atmosphere_obsdatain_suffix: ".{{ current_cycle | to_YMDH }}.nc" # Testing things # -------------- -test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/atm/global-workflow/3dvar.ref -test_output_filename: ./3dvar.out +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_3dvar.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_3dvar.test.out test_float_relative_tolerance: 1.0e-3 test_float_absolute_tolerance: 1.0e-5 diff --git a/test/atm/global-workflow/jcb-prototype_lgetkf-fv3inc.yaml.j2 b/test/atm/global-workflow/jcb-prototype_lgetkf-fv3inc.yaml.j2 new file mode 100644 index 000000000..cd11e771d --- /dev/null +++ b/test/atm/global-workflow/jcb-prototype_lgetkf-fv3inc.yaml.j2 @@ -0,0 +1,10 @@ +# Algorithm +# --------- +algorithm: fv3jedi_fv3inc_lgetkf + +# Testing things +# -------------- +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_lgetkf-fv3inc.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_lgetkf-fv3inc.test.out +test_float_relative_tolerance: 1.0e-3 +test_float_absolute_tolerance: 1.0e-5 diff --git a/test/atm/global-workflow/jcb-prototype_lgetkf.yaml.j2 b/test/atm/global-workflow/jcb-prototype_lgetkf.yaml.j2 index b83b7d695..e6b1f9593 100644 --- a/test/atm/global-workflow/jcb-prototype_lgetkf.yaml.j2 +++ b/test/atm/global-workflow/jcb-prototype_lgetkf.yaml.j2 @@ -22,7 +22,7 @@ atmosphere_obsdatain_suffix: ".{{ current_cycle | to_YMDH }}.nc" # Testing things # -------------- -test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/atm/global-workflow/lgetkf.ref -test_output_filename: ./lgetkf.out +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_lgetkf.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_lgetkf.test.out test_float_relative_tolerance: 1.0e-3 test_float_absolute_tolerance: 1.0e-5 diff --git a/test/atm/global-workflow/jcb-prototype_lgetkf_observer.yaml.j2 b/test/atm/global-workflow/jcb-prototype_lgetkf_observer.yaml.j2 index ec1182019..ac0fcd7dd 100644 --- a/test/atm/global-workflow/jcb-prototype_lgetkf_observer.yaml.j2 +++ b/test/atm/global-workflow/jcb-prototype_lgetkf_observer.yaml.j2 @@ -28,7 +28,7 @@ distribution_type: RoundRobin # Testing things # -------------- -test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/atm/global-workflow/lgetkf_observer.ref -test_output_filename: ./lgetkf_observer.out +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_lgetkf_observer.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_lgetkf_observer.test.out test_float_relative_tolerance: 1.0e-3 test_float_absolute_tolerance: 1.0e-5 diff --git a/test/atm/global-workflow/jcb-prototype_lgetkf_solver.yaml.j2 b/test/atm/global-workflow/jcb-prototype_lgetkf_solver.yaml.j2 index a6ad34751..2c3bd2aae 100644 --- a/test/atm/global-workflow/jcb-prototype_lgetkf_solver.yaml.j2 +++ b/test/atm/global-workflow/jcb-prototype_lgetkf_solver.yaml.j2 @@ -28,7 +28,7 @@ distribution_type: Halo # Testing things # -------------- -test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/atm/global-workflow/lgetkf_solver.ref -test_output_filename: ./lgetkf_solver.out +test_reference_filename: {{ HOMEgfs }}/sorc/gdas.cd/test/testreference/atm_jjob_lgetkf_solver.ref +test_output_filename: {{ HOMEgfs }}/sorc/gdas.cd/build/gdas/test/testoutput/atm_jjob_lgetkf_solver.test.out test_float_relative_tolerance: 1.0e-3 test_float_absolute_tolerance: 1.0e-5 diff --git a/test/fv3jedi/CMakeLists.txt b/test/fv3jedi/CMakeLists.txt deleted file mode 100644 index 9b75510b9..000000000 --- a/test/fv3jedi/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -# Subdirectories -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/test/fv3jedi/testinput) -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/test/fv3jedi/testoutput) -file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi) - -# Test YAMLs -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml ${PROJECT_BINARY_DIR}/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml SYMBOLIC) - -# Test reference files -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/test/fv3jedi/testoutput/gdasapp_fv3jedi_fv3inc.ref ${PROJECT_BINARY_DIR}/test/fv3jedi/testoutput/gdasapp_fv3jedi_fv3inc.ref SYMBOLIC) - -# FV3 files -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/parm/io/fv3jedi_fieldmetadata_fv3inc.yaml ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi/fv3jedi_fieldmetadata_fv3inc.yaml SYMBOLIC) -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/parm/io/fv3jedi_fieldmetadata_history.yaml ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi/fv3jedi_fieldmetadata_history.yaml SYMBOLIC) -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/sorc/fv3-jedi/test/Data/fv3files/akbk127.nc4 ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi/akbk127.nc4 SYMBOLIC) -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/sorc/fv3-jedi/test/Data/fv3files/fmsmpp.nml ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi/fmsmpp.nml SYMBOLIC) -file(CREATE_LINK ${PROJECT_SOURCE_DIR}/sorc/fv3-jedi/test/Data/fv3files/field_table_gfdl ${PROJECT_BINARY_DIR}/test/fv3jedi/fv3jedi/field_table_gfdl SYMBOLIC) - -# Tests -add_test(NAME test_gdasapp_fv3jedi_fv3inc - COMMAND srun -n6 ${CMAKE_BINARY_DIR}/bin/fv3jedi_fv3inc.x ${PROJECT_BINARY_DIR}/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml - WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/test/fv3jedi) - diff --git a/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml b/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml deleted file mode 100644 index 7ee403ccc..000000000 --- a/test/fv3jedi/testinput/gdasapp_fv3jedi_fv3inc.yaml +++ /dev/null @@ -1,65 +0,0 @@ -variable change: - variable change name: Model2GeoVaLs - input variables: &bkgvars [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr,hgtsfc] - output variables: &fv3incrvars [ua,va,t,sphum,ice_wat,liq_wat,o3mr,delp,delz] -jedi increment variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr] -fv3 increment variables: *fv3incrvars -background geometry: - fms initialization: - namelist filename: ./fv3jedi/fmsmpp.nml - field table filename: ./fv3jedi/field_table_gfdl - akbk: ./fv3jedi/akbk127.nc4 - layout: - - '1' - - '1' - npx: '13' - npy: '13' - npz: '127' - field metadata override: ./fv3jedi/fv3jedi_fieldmetadata_history.yaml -jedi increment geometry: - fms initialization: - namelist filename: ./fv3jedi/fmsmpp.nml - field table filename: ./fv3jedi/field_table_gfdl - akbk: ./fv3jedi/akbk127.nc4 - layout: - - '1' - - '1' - npx: '13' - npy: '13' - npz: '127' - field metadata override: ./fv3jedi/fv3jedi_fieldmetadata_history.yaml -fv3 increment geometry: - fms initialization: - namelist filename: ./fv3jedi/fmsmpp.nml - field table filename: ./fv3jedi/field_table_gfdl - akbk: ./fv3jedi/akbk127.nc4 - layout: - - '1' - - '1' - npx: '13' - npy: '13' - npz: '127' - field metadata override: ./fv3jedi/fv3jedi_fieldmetadata_fv3inc.yaml -members: -- background input: - filetype: cube sphere history - datapath: ../testdata/ - provider: ufs - datetime: '2021-07-31T12:00:00Z' - filename: gdas.t06z.atmf006.nc - state variables: *bkgvars - jedi increment input: - filetype: cube sphere history - datapath: ../testdata/ - filename: atminc.20210731.120000.nc4 - provider: ufs - fv3 increment output: - filetype: cube sphere history - filename: atminc.20210731_120000.nc4 - provider: ufs - -test: - reference filename: testoutput/gdasapp_fv3jedi_fv3inc.ref - test output filename: testoutput/gdasapp_fv3jedi_fv3inc.test.out - float relative tolerance: 1.0e-3 - diff --git a/test/fv3jedi/testoutput/gdasapp_fv3jedi_fv3inc.ref b/test/fv3jedi/testoutput/gdasapp_fv3jedi_fv3inc.ref deleted file mode 100644 index a4be55d39..000000000 --- a/test/fv3jedi/testoutput/gdasapp_fv3jedi_fv3inc.ref +++ /dev/null @@ -1,41 +0,0 @@ -Background State: - ----------------------------------------------------------------------------------------------------- -State print | number of fields = 9 | cube sphere face size: C12 -eastward_wind | Min:-7.6655158996582031e+01 Max:+1.3484048461914062e+02 RMS:+2.4474819956360815e+01 -northward_wind | Min:-5.7591831207275391e+01 Max:+6.1521602630615234e+01 RMS:+9.0604680778982232e+00 -air_temperature | Min:+1.6467715454101562e+02 Max:+3.1937854003906250e+02 RMS:+2.5118590413162758e+02 -surface_pressure | Min:+5.6141089843750000e+04 Max:+1.0346660156250000e+05 RMS:+9.8890740204548158e+04 -specific_humidity | Min:+1.2364032020428795e-09 Max:+2.1250871941447258e-02 RMS:+5.1335857648077696e-03 -cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+5.9844314819201827e-04 RMS:+1.2911033014274613e-05 -cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.1054204078391194e-03 RMS:+3.7434027002184771e-05 -ozone_mass_mixing_ratio | Min:+8.6089233519714981e-09 Max:+1.6528036212548614e-05 RMS:+4.4014999048943556e-06 -sfc_geopotential_height_times_grav | Min:-3.9759671688079834e+00 Max:+4.8742519531250000e+03 RMS:+6.2112179267749525e+02 ----------------------------------------------------------------------------------------------------- -JEDI Increment: - ----------------------------------------------------------------------------------------------------- -Increment print | number of fields = 8 | cube sphere face size: C12 -eastward_wind | Min:-4.3422836419308410e+00 Max:+1.2320940067737499e+01 RMS:+3.0957235443709130e-01 -northward_wind | Min:-4.1090470888107049e+00 Max:+5.4552721209750796e+00 RMS:+3.1062842460180656e-01 -air_temperature | Min:-5.2980343087781989e-01 Max:+5.1811022097894011e-01 RMS:+3.5920751813835923e-02 -surface_pressure | Min:-1.3399192319669237e+02 Max:+6.8315024915413233e+01 RMS:+1.5538727344814935e+01 -specific_humidity | Min:-2.8092260972819617e-04 Max:+2.9434075393080551e-04 RMS:+1.6532405760382759e-05 -cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 -cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 -ozone_mass_mixing_ratio | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 ----------------------------------------------------------------------------------------------------- -FV3 Increment: - ----------------------------------------------------------------------------------------------------- -Increment print | number of fields = 9 | cube sphere face size: C12 -eastward_wind | Min:-4.3422836419308410e+00 Max:+1.2320940067737499e+01 RMS:+3.0957235443709130e-01 -northward_wind | Min:-4.1090470888107049e+00 Max:+5.4552721209750796e+00 RMS:+3.1062842460180656e-01 -air_temperature | Min:-5.2980343087781989e-01 Max:+5.1811022097894011e-01 RMS:+3.5920751813835923e-02 -specific_humidity | Min:-2.8092260972819617e-04 Max:+2.9434075393080551e-04 RMS:+1.6532405760382759e-05 -cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 -cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 -ozone_mass_mixing_ratio | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 -air_pressure_thickness | Min:-2.9992886080290191e+00 Max:+1.5291703492039233e+00 RMS:+1.7535872214547940e-01 -layer_thickness | Min:-4.6699236754648155e-01 Max:+7.4693987323735200e-01 RMS:+3.1162055487823255e-02 ----------------------------------------------------------------------------------------------------- diff --git a/test/gw-ci/CMakeLists.txt b/test/gw-ci/CMakeLists.txt index 4f1a969e3..5a07090d0 100644 --- a/test/gw-ci/CMakeLists.txt +++ b/test/gw-ci/CMakeLists.txt @@ -1,11 +1,220 @@ +# Function that adds a test for a given GW task +function(add_task task_name test_prefix is_full_cycle HALF_CYCLE FULL_CYCLE pslot WORKING_DIRECTORY PROJECT_SOURCE_DIR) + + # Get subtask names if task is a metatask + if("${task_name}" STREQUAL "gdas_fcst") + set(subtask_names_list + "gdas_fcst_seg0") + elseif("${task_name}" STREQUAL "enkfgdas_fcst") + if("${pslot}" STREQUAL "C48mx500_hybAOWCDA") + set(subtask_names_list + "enkfgdas_fcst_mem001" + "enkfgdas_fcst_mem002" + "enkfgdas_fcst_mem003") + else() + set(subtask_names_list + "enkfgdas_fcst_mem001" + "enkfgdas_fcst_mem002") + endif() + elseif("${task_name}" STREQUAL "gdas_atmos_prod") + set(subtask_names_list + "gdas_atmos_prod_f000" + "gdas_atmos_prod_f001" + "gdas_atmos_prod_f002" + "gdas_atmos_prod_f003" + "gdas_atmos_prod_f004" + "gdas_atmos_prod_f005" + "gdas_atmos_prod_f006" + "gdas_atmos_prod_f007" + "gdas_atmos_prod_f008" + "gdas_atmos_prod_f009") + elseif("${task_name}" STREQUAL "enkfgdas_epmn") + set(subtask_names_list + "enkfgdas_epos001" + "enkfgdas_epos002" + "enkfgdas_epos003" + "enkfgdas_epos004" + "enkfgdas_epos005" + "enkfgdas_epos006") + elseif("${task_name}" STREQUAL "enkfgdas_ecmn") + if ("${pslot}" STREQUAL "C96C48_ufs_hybatmDA") + set(subtask_names_list + "enkfgdas_ecen000") + else() + set(subtask_names_list + "enkfgdas_ecen000" + "enkfgdas_ecen001" + "enkfgdas_ecen002") + endif() + else() + set(subtask_names_list ${task_name}) + endif() + + # Convert list to comma-delimited string + string(JOIN "," subtask_names ${subtask_names_list}) + + # Get task dependencies + set(TEST_DEPENDS) + if(NOT ${is_full_cycle}) + if("${task_name}" STREQUAL "gdas_fcst") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_stage_ic_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_atmos_prod") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_fcst") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_stage_ic_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_echgres") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_fcst_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_epmn") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_fcst_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_aeroanlgenb") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}") + endif() + else() + if("${task_name}" STREQUAL "gdas_prep") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_atmos_prod_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_anal") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_epmn_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prep_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_prepatmiodaobs") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prep_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_atmanlinit") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_epmn_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prepatmiodaobs_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_atmanlvar") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_atmanlinit_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_atmanlfv3inc") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_atmanlvar_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_atmanlfinal") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_atmanlfv3inc_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_aeroanlinit") + list(APPEND TEST_DEPENDS "${test_prefix}_aeroanlgenb_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prep_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_aeroanlvar") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_aeroanlinit_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_aeroanlfinal") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_aeroanlvar_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_snowanl") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prep_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_sfcanl") + if("${pslot}" STREQUAL "C96C48_ufs_hybatmDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_atmanlfinal_${FULL_CYCLE}") + elseif("${pslot}" STREQUAL "C96C48_hybatmaerosnowDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_anal_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_snowanal_${FULL_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_anal_${FULL_CYCLE}") + endif() + elseif("${task_name}" STREQUAL "gdas_analcalc") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_echgres_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_sfcanl_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_fcst") + if("${pslot}" STREQUAL "C96C48_hybatmaerosnowDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_sfcanl_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_aeroanlfinal_${FULL_CYCLE}") + elseif("${pslot}" STREQUAL "C48mx500_3DVarAOWCDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_sfcanl_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_marineanlfinal_${FULL_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_sfcanl_${FULL_CYCLE}") + endif() + elseif("${task_name}" STREQUAL "enkfgdas_atmensanlinit") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_epmn_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prepatmiodaobs_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_atmensanlobs") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlinit_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_atmensanlsol") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlobs_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_atmensanlfv3inc") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlsol_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_atmensanlfinal") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlfv3inc_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_eobs") + set(TEST_DEPENDS) + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_epmn_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prep_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_ediag") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_eobs_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_eupd") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_ediag_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_ecmn") + if("${pslot}" STREQUAL "C96C48_ufs_hybatmDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_analcalc_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlfinal_${FULL_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_analcalc_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_eupd_${FULL_CYCLE}") + endif() + elseif("${task_name}" STREQUAL "enkfgdas_esnowrecen") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_epmn_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_snowanl_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "enkfgdas_esfc") + if("${pslot}" STREQUAL "C96C48_ufs_hybatmDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_analcalc_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_atmensanlfinal_${FULL_CYCLE}") + elseif("${pslot}" STREQUAL "C96C48_hybatmaerosnowDA") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_analcalc_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_eupd_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_esnowrecen_${FULL_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_analcalc_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_eupd_${FULL_CYCLE}") + endif() + elseif("${task_name}" STREQUAL "enkfgdas_fcst") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_ecmn_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_esfc_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_prepoceanobs") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marinebmat") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marineanlinit") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_fcst_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prepoceanobs_${FULL_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_marinebmat_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marineanlvar") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_marineanlinit_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marineanlchkpt") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_marineanlvar_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marineanlfinal") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_marineanlchkpt_${FULL_CYCLE}") + elseif("${task_name}" STREQUAL "gdas_marineanlletkf") + list(APPEND TEST_DEPENDS "${test_prefix}_enkfgdas_fcst_${HALF_CYCLE}") + list(APPEND TEST_DEPENDS "${test_prefix}_gdas_prepoceanobs_${FULL_CYCLE}") + else() + list(APPEND TEST_DEPENDS "${test_prefix}") + endif() + endif() + + # Set cycle + if(${is_full_cycle}) + set(cycle ${FULL_CYCLE}) + else() + set(cycle ${HALF_CYCLE}) + endif() + + # Add Task + set(test_name ${test_prefix}_${task_name}_${cycle}) + message(STATUS "preparing ${subtask_names} for ${test_prefix} ctest") + ecbuild_add_test(TARGET ${test_name} + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh + ARGS ${pslot} ${cycle} ${subtask_names} + WORKING_DIRECTORY ${WORKING_DIRECTORY} + TEST_DEPENDS ${TEST_DEPENDS}) +endfunction() + # Function that generates the 1/2 cycle forecast and DA tasks -function(add_cycling_tests pslot YAML_PATH HOMEgfs RUNTESTS PROJECT_SOURCE_DIR TASK_LIST) - set(test_name test_gdasapp_${pslot}) +function(add_cycling_tests pslot YAML_PATH HOMEgfs WORKING_DIRECTORY PROJECT_SOURCE_DIR HALF_CYCLE_TASKS FULL_CYCLE_TASKS) + set(test_prefix test_gdasapp_${pslot}) # Prepare the COMROOT and EXPDIR for the cycling ctests - add_test(NAME ${test_name} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/create_exp.sh ${YAML_PATH} ${pslot} ${HOMEgfs} ${RUNTESTS}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name} PROPERTIES LABELS "manual") + ecbuild_add_test(TARGET ${test_prefix} + TYPE SCRIPT + COMMAND ${PROJECT_SOURCE_DIR}/test/gw-ci/create_exp.sh + ARGS ${YAML_PATH} ${pslot} ${HOMEgfs} ${WORKING_DIRECTORY} + WORKING_DIRECTORY ${WORKING_DIRECTORY}) # Get the 1/2 cycle and full cycle's dates execute_process( @@ -18,78 +227,151 @@ function(add_cycling_tests pslot YAML_PATH HOMEgfs RUNTESTS PROJECT_SOURCE_DIR T list(GET DATES_LIST 0 HALF_CYCLE) list(GET DATES_LIST 1 FULL_CYCLE) - # stage IC's - message(STATUS "staging the 1/2 cycle IC's for ${pslot} ctest") - add_test(NAME ${test_name}_gdas_stage_ic_${HALF_CYCLE} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh ${pslot} gdas_stage_ic ${HALF_CYCLE}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name}_gdas_stage_ic_${HALF_CYCLE} PROPERTIES LABELS "manual") - - # stage ensemble ics - if (letkf) - message(STATUS "preparing enkfgdas_stage_ic for ${pslot} ctest") - add_test(NAME ${test_name}_enkfgdas_stage_ic_${HALF_CYCLE} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh ${pslot} enkfgdas_stage_ic ${HALF_CYCLE}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name}_enkfgdas_stage_ic_${HALF_CYCLE} PROPERTIES LABELS "manual") - endif() - - # 1/2 cycle gdas_fcst - message(STATUS "preparing 1/2 cycle gdas_fcst for ${pslot} ctest") - add_test(NAME ${test_name}_gdas_fcst_seg0_${HALF_CYCLE} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh ${pslot} gdas_fcst_seg0 ${HALF_CYCLE}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name}_gdas_fcst_seg0_${HALF_CYCLE} PROPERTIES LABELS "manual") - - # 1/2 cycle enkfgdas_fcst - if (letkf) - set(ENS_MEMS "mem001" "mem002" "mem003") - foreach(ENS_MEM ${ENS_MEMS}) - message(STATUS "preparing 1/2 cycle enkfgdas_fcst_${ENS_MEM} for ${pslot} ctest") - add_test(NAME ${test_name}_enkfgdas_fcst_${ENS_MEM}_${HALF_CYCLE} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh ${pslot} enkfgdas_fcst_${ENS_MEM} ${HALF_CYCLE}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name}_enkfgdas_fcst_${ENS_MEM}_${HALF_CYCLE} PROPERTIES LABELS "manual") - endforeach() - endif() - + # Select the list of tasks to run for the half cycle + message(STATUS "Half-cycle tasks ${HALF_CYCLE_TASKS}") + set(is_full_cycle FALSE) + foreach(task_name ${HALF_CYCLE_TASKS}) + add_task(${task_name} ${test_prefix} ${is_full_cycle} ${HALF_CYCLE} ${FULL_CYCLE} ${pslot} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR}) + endforeach() + # Select the list of tasks to run for the full cycle - message(STATUS "Tasks ${TASK_LIST}") - - foreach(task ${TASK_LIST}) - message(STATUS "preparing the full cycle ${task} for ${pslot} ctest") - add_test(NAME ${test_name}_${task}_${FULL_CYCLE} - COMMAND /bin/bash -c "${PROJECT_SOURCE_DIR}/test/gw-ci/run_exp.sh ${pslot} ${task} ${FULL_CYCLE}" - WORKING_DIRECTORY ${RUNTESTS}) - set_tests_properties(${test_name}_${task}_${FULL_CYCLE} PROPERTIES LABELS "manual") + message(STATUS "Full-cycle tasks ${FULL_CYCLE_TASKS}") + set(is_full_cycle TRUE) + foreach(task_name ${FULL_CYCLE_TASKS}) + add_task(${task_name} ${test_prefix} ${is_full_cycle} ${HALF_CYCLE} ${FULL_CYCLE} ${pslot} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR}) endforeach() endfunction() if (WORKFLOW_TESTS) # Setup the environement set(HOMEgfs ${CMAKE_SOURCE_DIR}/../../..) - set(RUNTESTS ${CMAKE_CURRENT_BINARY_DIR}/../../test/gw-ci) + set(WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../test/gw-ci) + + # GSI Atm DA C96/C48 + # ------------------ + set(pslot "C96C48_hybatmDA") + set(YAML_PATH ${HOMEgfs}/ci/cases/pr/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst" + "gdas_atmos_prod" + "enkfgdas_stage_ic" + "enkfgdas_fcst" + "enkfgdas_echgres" + "enkfgdas_epmn") + set(FULL_CYCLE_TASKS + "gdas_prep" + "gdas_anal" + "gdas_sfcanl" + "gdas_analcalc" + "gdas_fcst" + "enkfgdas_eobs" + "enkfgdas_ediag" + "enkfgdas_eupd" + "enkfgdas_ecmn" + "enkfgdas_esfc" + "enkfgdas_fcst" + ) - # 3DVAR WCDA, low-res + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") + # JEDI Atm DA C96/C48 # ------------------- - set(pslot "WCDA-3DVAR-C48mx500") - set(YAML_PATH ${HOMEgfs}/ci/cases/pr/C48mx500_3DVarAOWCDA.yaml) - set(TASK_LIST + set(pslot "C96C48_ufs_hybatmDA") + set(YAML_PATH ${HOMEgfs}/ci/cases/pr/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst" + "gdas_atmos_prod" + "enkfgdas_stage_ic" + "enkfgdas_fcst" + "enkfgdas_echgres" + "enkfgdas_epmn") + set(FULL_CYCLE_TASKS + "gdas_prep" + "gdas_prepatmiodaobs" + "gdas_atmanlinit" + "gdas_atmanlvar" + "gdas_atmanlfv3inc" + "gdas_atmanlfinal" + "gdas_sfcanl" + "gdas_analcalc" + "gdas_fcst" + "enkfgdas_atmensanlinit" + "enkfgdas_atmensanlobs" + "enkfgdas_atmensanlsol" + "enkfgdas_atmensanlfv3inc" + "enkfgdas_atmensanlfinal" + "enkfgdas_ecmn" + "enkfgdas_esfc" + "enkfgdas_fcst" + ) + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") + + # Aero-Land DA C96 + # ---------------- + set(pslot "C96C48_hybatmaerosnowDA") + set(YAML_PATH ${HOMEgfs}/ci/cases/pr/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst" + "gdas_atmos_prod" + "gdas_aeroanlgenb" + "enkfgdas_stage_ic" + "enkfgdas_fcst" + "enkfgdas_echgres" + "enkfgdas_epmn") + set(FULL_CYCLE_TASKS + "gdas_prep" + "gdas_anal" + "gdas_aeroanlinit" + "gdas_aeroanlvar" + "gdas_aeroanlfinal" + "gdas_snowanl" + "gdas_sfcanl" + "gdas_analcalc" + "gdas_fcst" + "enkfgdas_eobs" + "enkfgdas_ediag" + "enkfgdas_eupd" + "enkfgdas_ecmn" + "enkfgdas_esnowrecen" + "enkfgdas_esfc" + "enkfgdas_fcst" + ) + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") + + # GSI Atm DA C48, JEDI Marine DA 500 + # ---------------------------------- + set(pslot "C48mx500_3DVarAOWCDA") + set(YAML_PATH ${HOMEgfs}/ci/cases/pr/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst") + set(FULL_CYCLE_TASKS "gdas_prepoceanobs" "gdas_marinebmat" "gdas_marineanlinit" "gdas_marineanlvar" "gdas_marineanlchkpt" "gdas_marineanlfinal" + "gdas_prep" + "gdas_anal" + "gdas_sfcanl" + "gdas_fcst" ) - add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${RUNTESTS} ${PROJECT_SOURCE_DIR} "${TASK_LIST}") + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") # WCDA, low-res, ensemble da # ------------- - set(pslot "WCDA-hyb-C48mx500") + set(pslot "C48mx500_hybAOWCDA") set(letkf TRUE) - set(YAML_PATH ${HOMEgfs}/ci/cases/pr/C48mx500_hybAOWCDA.yaml) - set(TASK_LIST + set(YAML_PATH ${HOMEgfs}/ci/cases/pr/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst" + "enkfgdas_stage_ic" + "enkfgdas_fcst") + set(FULL_CYCLE_TASKS "gdas_prepoceanobs" "gdas_marineanlletkf" # TODO(AFE) waiting until these are working for hybrid @@ -99,40 +381,31 @@ if (WORKFLOW_TESTS) # "gdas_marineanlchkpt" # "gdas_marineanlfinal" ) - add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${RUNTESTS} ${PROJECT_SOURCE_DIR} "${TASK_LIST}") + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") set(letkf FALSE) -endif() - -option(RUN_GW_CI "Enable the global-workflow CI tests" OFF) -if (RUN_GW_CI) - # Aero-Land DA, C96 - # ----------------- - set(pslot "Aero-Snow-3DVAR-C96") - set(YAML_PATH ${HOMEgfs}/ci/cases/pr/C96C48_hybatmaerosnowDA.yaml) - set(TASK_LIST) # empty list for now - add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${RUNTESTS} ${PROJECT_SOURCE_DIR} "${TASK_LIST}") - - # Atm DA, C96/C48 - # --------------- - set(pslot "Atm-hyb-C96C48") - set(YAML_PATH ${HOMEgfs}/ci/cases/pr/C96C48_ufs_hybatmDA.yaml) - set(TASK_LIST) # empty list for now - add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${RUNTESTS} ${PROJECT_SOURCE_DIR} "${TASK_LIST}") # GFSv17, 3DVAR prototype # ----------------------- - set(pslot "GFSv17-3DVAR-C384mx025") - set(YAML_PATH ${HOMEgfs}/ci/cases/gfsv17/C384mx025_3DVarAOWCDA.yaml) - set(TASK_LIST - "gdas_prepoceanobs" - "gdas_marinebmat" - "gdas_marineanlinit" - "gdas_marineanlvar" - "gdas_marineanlchkpt" - "gdas_marineanlfinal" - "gdas_ocnanalvrfy" - "gdas_prep" - "gdas_anal" - ) - add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${RUNTESTS} ${PROJECT_SOURCE_DIR} "${TASK_LIST}") + option(TEST_GFS17 "Enable the GFSv17 prototype CI tests" OFF) + if(TEST_GFS17) + set(pslot "GFSv17-3DVAR-C384mx025") + set(YAML_PATH ${HOMEgfs}/ci/cases/gfsv17/${pslot}.yaml) + set(HALF_CYCLE_TASKS + "gdas_stage_ic" + "gdas_fcst") + set(FULL_CYCLE_TASKS + "gdas_prepoceanobs" + "gdas_marinebmat" + "gdas_marineanlinit" + "gdas_marineanlvar" + "gdas_marineanlchkpt" + "gdas_marineanlfinal" + "gdas_ocnanalvrfy" + "gdas_prep" + "gdas_anal" + "gdas_sfcanl" + "gdas_fcst" + ) + add_cycling_tests(${pslot} ${YAML_PATH} ${HOMEgfs} ${WORKING_DIRECTORY} ${PROJECT_SOURCE_DIR} "${HALF_CYCLE_TASKS}" "${FULL_CYCLE_TASKS}") + endif() endif() diff --git a/test/gw-ci/run_exp.sh b/test/gw-ci/run_exp.sh index 8040860a0..3c02dbb1a 100755 --- a/test/gw-ci/run_exp.sh +++ b/test/gw-ci/run_exp.sh @@ -1,39 +1,55 @@ #!/bin/bash pslot=$1 -TASK_NAME=$2 -CYCLE=$3 +CYCLE=$2 +shift +shift +task_args=("$@") # Define the workflow XML and database files WORKFLOW_XML=${pslot}/EXPDIR/${pslot}/${pslot}.xml WORKFLOW_DB=${pslot}/EXPDIR/${pslot}/${pslot}.db # Boot the task -echo "booting $TASK_NAME for cycle $CYCLE" +echo "booting ${TASK_ARRAY[@]} for cycle $CYCLE" if [[ ! -e "$WORKFLOW_DB" ]]; then - rocotorun -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$TASK_NAME" -c "$CYCLE" + rocotorun -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task_args" -c "$CYCLE" fi -rocotoboot -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$TASK_NAME" -c "$CYCLE" +rocotoboot -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task_args" -c "$CYCLE" +# Loop through tasks +IFS=',' read -r -a TASK_ARRAY <<< "$task_args" +num_tasks=${#TASK_ARRAY[@]} while true; do # Update the status of the task - rocotorun -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$TASK_NAME" -c "$CYCLE" + rocotorun -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task_args" -c "$CYCLE" - # Check the task status - OUTPUT=$(rocotostat -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$TASK_NAME" -c "$CYCLE") - STATUS=$(echo "$OUTPUT" | awk '$2 == task {print $4}' task="$TASK_NAME") + num_succeeded=0 + for task in "${TASK_ARRAY[@]}"; do + + # Check the task status + OUTPUT=$(rocotostat -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task" -c "$CYCLE") + STATUS=$(echo "$OUTPUT" | awk '$2 == task {print $4}' task="$task") - if [[ "$STATUS" == "SUCCEEDED" ]]; then - echo "The task succeeded." + if [[ "$STATUS" == "SUCCEEDED" ]]; then + echo "$pslot"_"$task"_"$CYCLE"" succeeded." + num_succeeded=$((num_succeeded + 1)) + elif [[ "$STATUS" == "FAILED" ]]; then + echo "$pslot"_"$task"_"$CYCLE"" failed." + exit 1 + elif [[ "$STATUS" == "DEAD" ]]; then + echo "$pslot"_"$task"_"$CYCLE"" is dead." + exit 1 + elif [[ "$STATUS" == "SUBMITTING" ]] || [[ "$STATUS" == "QUEUED" ]] || [[ "$STATUS" == "RUNNING" ]]; then + echo "$pslot"_"$task"_"$CYCLE"" is in state: $STATUS" + else + echo "$pslot"_"$task"_"$CYCLE"" is in unrecognized state: $STATUS. Rewinding..." + rocotorewind -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task_args" -c "$CYCLE" + rocotoboot -w "$WORKFLOW_XML" -d "$WORKFLOW_DB" -t "$task_args" -c "$CYCLE" + fi + done + if [[ "$num_succeeded" == "$num_tasks" ]]; then exit 0 - elif [[ "$STATUS" == "FAILED" ]]; then - echo "The task failed." - exit 1 - elif [[ "$STATUS" == "DEAD" ]]; then - echo "The task is dead." - exit 1 - else - echo "The task is in state: $STATUS" fi sleep 10 done diff --git a/test/testreference/C48mx500_3DVarAOWCDA_3dfgat.ref b/test/testreference/C48mx500_3DVarAOWCDA_3dfgat.ref new file mode 100644 index 000000000..b28df9aec --- /dev/null +++ b/test/testreference/C48mx500_3DVarAOWCDA_3dfgat.ref @@ -0,0 +1,54 @@ +Norm of input parameter StdDev: 4.1916150456516459e+02 +CostJb : Nonlinear Jb = 0.0000000000000000e+00 +CostJo : Nonlinear Jo(adt_rads_all) = 3.6538107293180053e+02, nobs = 154056, Jo/n = 2.3717419180804417e-03, err = 3.5902523361909755e+00 +CostJo : Nonlinear Jo(sst_avhrr_ma_l3u) = 2.2674500789797807e+05, nobs = 80795, Jo/n = 2.8064237625840467e+00, err = 3.1933209964416054e-01 +CostJo : Nonlinear Jo(sst_avhrr_mb_l3u) = 2.4093341994206450e+05, nobs = 87590, Jo/n = 2.7506955125249970e+00, err = 3.1303879303248278e-01 +CostJo : Nonlinear Jo(sst_viirs_npp_l3u) = 3.5095100144345453e+05, nobs = 86464, Jo/n = 4.0589262750214488e+00, err = 2.7352638780435701e-01 +CostJo : Nonlinear Jo(sst_viirs_n20_l3u) = 3.4617882174260722e+05, nobs = 82328, Jo/n = 4.2048734542635220e+00, err = 2.7610924066693887e-01 +CostJo : Nonlinear Jo(sst_abi_g16_l3c) = 0.0000000000000000e+00 --- No Observations +CostJo : Nonlinear Jo(sst_abi_g17_l3c) = 0.0000000000000000e+00 --- No Observations +CostJo : Nonlinear Jo(sst_ahi_h08_l3c) = 0.0000000000000000e+00 --- No Observations +CostJo : Nonlinear Jo(icec_amsr2_north) = 1.3776003730013903e+05, nobs = 238447, Jo/n = 5.7773860564460455e-01, err = 1.1973958453579239e-01 +CostJo : Nonlinear Jo(icec_amsr2_south) = 1.3525377877554770e+06, nobs = 294824, Jo/n = 4.5876108720981907e+00, err = 1.6104199583000647e-01 +CostJo : Nonlinear Jo(insitu_profile_argo) = 1.2371155464032217e+03, nobs = 74525, Jo/n = 1.6600007331811092e-02, err = 1.0000000000000000e+01 +CostFunction: Nonlinear J = 2.6567085727010556e+06 +RPCGMinimizer: reduction in residual norm = 3.3320242450517824e-02 +CostFunction::addIncrement: Analysis: + Valid time: 2021-03-24T18:00:00Z + sea_ice_area_fraction min=-0.3191478642087981 max=1.9094064942717854 mean=0.1380060365165569 + sea_ice_thickness min=0.0000000000000000 max=4.7237067222595215 mean=0.1716933516882944 + sea_ice_snow_thickness min=0.0000000000000000 max=0.5992891192436218 mean=0.0227558953028715 + sea_water_salinity min=-0.0004127016278705 max=40.0432853698730469 mean=33.6826135810349925 +sea_water_potential_temperature min=-13.5424639498294965 max=31.5094358260619565 mean=11.4876284245572435 + eastward_sea_water_velocity min=-0.9187383651733398 max=0.6746135354042053 mean=-0.0008460743757450 + northward_sea_water_velocity min=-0.6511899232864380 max=0.9435366392135620 mean=0.0030693165578485 + sea_surface_height_above_geoid min=-1.9814533174212232 max=0.8682830617264085 mean=-0.3311748439341126 + sea_water_cell_thickness min=0.0000000000000000 max=5416.6992187500000000 mean=128.6267671163319903 + ocean_mixed_layer_thickness min=2.3304977416992188 max=2417.2331242561340332 mean=148.3113220148310063 + sea_water_depth min=2.3304977416992188 max=2949.9484505653381348 mean=150.4446913535238650 + + + + + + + + + + + + + +CostJb : Nonlinear Jb = 319.2500686210223648 +CostJo : Nonlinear Jo(adt_rads_all) = 269.8785811470986573, nobs = 154056, Jo/n = 0.0017518212932122, err = 3.5902523361909755 +CostJo : Nonlinear Jo(sst_avhrr_ma_l3u) = 97733.3440574856213061, nobs = 80795, Jo/n = 1.2096459441485936, err = 0.3193320996441605 +CostJo : Nonlinear Jo(sst_avhrr_mb_l3u) = 102482.6442049633478746, nobs = 87590, Jo/n = 1.1700267633858128, err = 0.3130387930324828 +CostJo : Nonlinear Jo(sst_viirs_npp_l3u) = 179681.9646639756683726, nobs = 86464, Jo/n = 2.0781130258139302, err = 0.2735263878043570 +CostJo : Nonlinear Jo(sst_viirs_n20_l3u) = 165441.5019567124545574, nobs = 82328, Jo/n = 2.0095411276444519, err = 0.2761092406669389 +CostJo : Nonlinear Jo(sst_abi_g16_l3c) = 0.0000000000000000 --- No Observations +CostJo : Nonlinear Jo(sst_abi_g17_l3c) = 0.0000000000000000 --- No Observations +CostJo : Nonlinear Jo(sst_ahi_h08_l3c) = 0.0000000000000000 --- No Observations +CostJo : Nonlinear Jo(icec_amsr2_north) = 96049.0640872453514021, nobs = 238447, Jo/n = 0.4028109562596525, err = 0.1197395845357924 +CostJo : Nonlinear Jo(icec_amsr2_south) = 507683.7047332451329567, nobs = 294824, Jo/n = 1.7219890671493676, err = 0.1610419958300065 +CostJo : Nonlinear Jo(insitu_profile_argo) = 608.7904107136805578, nobs = 74525, Jo/n = 0.0081689421095428, err = 10.0000000000000000 +CostFunction: Nonlinear J = 1150270.1427641094196588 diff --git a/test/testreference/C96C48_ufs_hybatmDA_3dvar-fv3inc.ref b/test/testreference/C96C48_ufs_hybatmDA_3dvar-fv3inc.ref new file mode 100644 index 000000000..6f3adb18d --- /dev/null +++ b/test/testreference/C96C48_ufs_hybatmDA_3dvar-fv3inc.ref @@ -0,0 +1,41 @@ +Background State: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C96 +eastward_wind | Min:-8.7593299865722656e+01 Max:+1.1421906280517578e+02 RMS:+1.7446423933066384e+01 +northward_wind | Min:-9.0978759765625000e+01 Max:+8.9302459716796875e+01 RMS:+9.8048456519148388e+00 +air_temperature | Min:+1.7290483093261719e+02 Max:+3.1017132568359375e+02 RMS:+2.5022377762999352e+02 +air_pressure_at_surface | Min:+5.1309082031250000e+04 Max:+1.0433011718750000e+05 RMS:+9.8914626690611054e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+9.9999986069576607e-10 Max:+2.1381899714469910e-02 RMS:+5.0230919069545812e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+5.7223520707339048e-04 RMS:+9.4296924830407741e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.6279185656458139e-03 RMS:+3.7809568286336720e-05 +ozone_mass_mixing_ratio | Min:+3.6120087476554374e-10 Max:+1.7313132048002444e-05 RMS:+4.4655432291945023e-06 +geopotential_height_at_surface | Min:-2.9894643783569336e+01 Max:+5.3870561523437500e+03 RMS:+6.4442219321892003e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-2.1115621251510674e-07 Max:+1.1444664416160322e-07 RMS:+1.8401316033983295e-09 +northward_wind | Min:-1.0219621415785696e-07 Max:+2.6249988138715707e-07 RMS:+1.8295902505163720e-09 +air_temperature | Min:-5.2000757477799198e-08 Max:+6.6504355800134363e-08 RMS:+7.1626194815483433e-10 +air_pressure_at_surface | Min:-2.0445149857550859e-06 Max:+9.8957389127463102e-07 RMS:+4.2160438885855514e-08 +water_vapor_mixing_ratio_wrt_moist_air | Min:-3.5212104499554586e-11 Max:+2.4915642032191654e-11 RMS:+2.7352479311235747e-13 +cloud_liquid_ice | Min:-5.2622388732733935e-13 Max:+3.8117236092690345e-13 RMS:+3.4198803820164734e-15 +cloud_liquid_water | Min:-1.1565164516162685e-11 Max:+3.1649457890922744e-12 RMS:+1.5995494806702646e-14 +ozone_mass_mixing_ratio | Min:-1.0346794247831136e-06 Max:+1.3451623930433847e-06 RMS:+3.6858146749007146e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-2.1115621251510674e-07 Max:+1.1444664416160322e-07 RMS:+1.8401316033983295e-09 +northward_wind | Min:-1.0219621415785696e-07 Max:+2.6249988138715707e-07 RMS:+1.8295902505163720e-09 +air_temperature | Min:-5.2000757477799198e-08 Max:+6.6504355800134363e-08 RMS:+7.1626194815483433e-10 +water_vapor_mixing_ratio_wrt_moist_air | Min:-3.5212104499554586e-11 Max:+2.4915642032191654e-11 RMS:+2.7352479311235747e-13 +cloud_liquid_ice | Min:-5.2622388732733935e-13 Max:+3.8117236092690345e-13 RMS:+3.4198803820164734e-15 +cloud_liquid_water | Min:-1.1565164516162685e-11 Max:+3.1649457890922744e-12 RMS:+1.5995494806702646e-14 +ozone_mass_mixing_ratio | Min:-1.0346794247831136e-06 Max:+1.3451623930433847e-06 RMS:+3.6858146749007146e-08 +air_pressure_thickness | Min:-3.8906364352442324e-08 Max:+1.7884758563013747e-08 RMS:+4.2747856122164087e-10 +layer_thickness | Min:-1.9763365344260819e-07 Max:+1.8311084204469807e-07 RMS:+3.6402384455212584e-09 +---------------------------------------------------------------------------------------------------- diff --git a/test/testreference/C96C48_ufs_hybatmDA_3dvar.ref b/test/testreference/C96C48_ufs_hybatmDA_3dvar.ref new file mode 100644 index 000000000..711f08fb2 --- /dev/null +++ b/test/testreference/C96C48_ufs_hybatmDA_3dvar.ref @@ -0,0 +1,124 @@ +CostJb : Nonlinear Jb = 0.0000000000000000e+00 +CostJo : Nonlinear Jo(Aircraft) = 6.0590797038184456e+05, nobs = 504555, Jo/n = 1.2008759607611550e+00, err = 2.2437239435917040e+00 +CostJo : Nonlinear Jo(ascatw_ascat_metop-b) = 1.5949936485170507e+04, nobs = 26314, Jo/n = 6.0613880387514274e-01, err = 1.8277692518568445e+00 +CostJo : Nonlinear Jo(ATMS N20) = 4.8387730216799086e+04, nobs = 156588, Jo/n = 3.0901301643037199e-01, err = 5.2594000470964719e+00 +CostJo : Nonlinear Jo(surface_ps) = 2.6308196193705146e+04, nobs = 107322, Jo/n = 2.4513330159431565e-01, err = 5.9305643428180190e+02 +CostJo : Nonlinear Jo(gnssrobndnbam) = 6.1501893265653157e+05, nobs = 473864, Jo/n = 1.2978806844506685e+00, err = 3.2933330370258057e-04 +CostJo : Nonlinear Jo(ompsnp_npp) = 2.1269336098572853e+03, nobs = 3087, Jo/n = 6.8899695816562534e-01, err = 2.4001367423170068e+00 +CostJo : Nonlinear Jo(ompstc_npp) = 3.3784707883660294e+03, nobs = 3696, Jo/n = 9.1408841676570063e-01, err = 6.0000000000000000e+00 +CostJo : Nonlinear Jo(satwind_goes-16) = 6.9383960384868606e+03, nobs = 193154, Jo/n = 3.5921575729660586e-02, err = 1.1892541771722902e+01 +CostFunction: Nonlinear J = 1.3240165663707610e+06 +DRPCGMinimizer: reduction in residual norm = 2.8257552285466486e-01 +CostFunction::addIncrement: Analysis: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 22 | cube sphere face size: C96 +eastward_wind | Min:-8.7593299865709369e+01 Max:+1.1421906280506562e+02 RMS:+1.7446423933063677e+01 +northward_wind | Min:-9.0978759765616502e+01 Max:+8.9302459716826505e+01 RMS:+9.8048456519093889e+00 +air_temperature | Min:+1.7290483093261747e+02 Max:+3.1017132568363934e+02 RMS:+2.5022377762999326e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7837935791015625e+03 RMS:+9.5699700087025974e+02 +air_pressure_at_surface | Min:+5.1309082031249884e+04 Max:+1.0433011718749903e+05 RMS:+9.8914626690610530e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+9.9999986088507587e-10 Max:+2.1381899714470930e-02 RMS:+5.0230919069543158e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+5.7223520707321528e-04 RMS:+9.4296924830162644e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.6279185656660684e-03 RMS:+3.7809568286304757e-05 +ozone_mass_mixing_ratio | Min:+3.8859406171368113e-10 Max:+1.7313133576612057e-05 RMS:+4.4663053755671636e-06 +geopotential_height_at_surface | Min:-2.9894643783569336e+01 Max:+5.3870561523437500e+03 RMS:+6.4442219321892003e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5312859958249614e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.6371386718750000e+02 RMS:+2.2054824502787593e+01 +skin_temperature_at_surface | Min:+2.1746235656738281e+02 Max:+3.2932260131835938e+02 RMS:+2.8737006087270038e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+5.8667091445155686e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.3549806522511076e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8026573181152344e+01 RMS:+1.9275201636346665e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.2045886230468750e+02 RMS:+2.8806776004459306e+02 +soilMoistureVolumetric | Min:+2.1923782303929329e-02 Max:+1.0000000000000000e+00 RMS:+8.6145451167852249e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.2327475547790527e+00 RMS:+1.5878111306662487e-01 +eastward_wind_at_surface | Min:-1.8106302261352539e+01 Max:+2.0922132492065430e+01 RMS:+5.2142386237867280e+00 +northward_wind_at_surface | Min:-2.0834318161010742e+01 Max:+1.9025196075439453e+01 RMS:+4.8322666159970842e+00 +f10m | Min:+9.3901658058166504e-01 Max:+1.0698120594024658e+00 RMS:+9.9592865511053685e-01 +---------------------------------------------------------------------------------------------------- + + + +Obs bias coefficients: +--------------------------------------------------------------- + constant: Min= -0.8381630182271099, Max= 0.8200770020481498, Norm= 2.2810923110282308 + lapseRate_order_2: Min= -0.2969009876260876, Max= 0.3889850080012900, Norm= 0.7014865852485521 + lapseRate: Min= -0.5954660177230082, Max= 1.6232719421370738, Norm= 2.1316868531033393 + emissivityJacobian: Min= -0.0097089996561411, Max= 8.3582897185072884, Norm= 10.2580018725806656 +sensorScanAngle_order_4: Min= -3.4036920070662289, Max= 0.8113600015621025, Norm= 4.8886281019448123 +sensorScanAngle_order_3: Min= -0.7697319984440882, Max= 0.3303030133246191, Norm= 0.9762309707883376 +sensorScanAngle_order_2: Min= -0.5401099920283099, Max= 2.2389800548543319, Norm= 2.4920946301939773 + sensorScanAngle: Min= -0.1069049984217430, Max= 0.4472059905526856, Norm= 0.8480380113023768 +--------------------------------------------------------------- + + + + + + +CostJb : Nonlinear Jb = 0.0000000000001377 +CostJo : Nonlinear Jo(Aircraft) = 605907.9700265740975738, nobs = 504555, Jo/n = 1.2008759600570287, err = 2.2437239435917040 +CostJo : Nonlinear Jo(ascatw_ascat_metop-b) = 15949.9364848986988363, nobs = 26314, Jo/n = 0.6061388038648133, err = 1.8277692518568445 +CostJo : Nonlinear Jo(ATMS N20) = 48387.7302149529932649, nobs = 156588, Jo/n = 0.3090130164185825, err = 5.2594000470964719 +CostJo : Nonlinear Jo(surface_ps) = 26308.1961930343022686, nobs = 107322, Jo/n = 0.2451333015880649, err = 593.0564342818018986 +CostJo : Nonlinear Jo(gnssrobndnbam) = 615018.9326265617273748, nobs = 473864, Jo/n = 1.2978806843874229, err = 0.0003293333037026 +CostJo : Nonlinear Jo(ompsnp_npp) = 1931.1242066182112467, nobs = 3087, Jo/n = 0.6255666364166541, err = 2.4001367423170068 +CostJo : Nonlinear Jo(ompstc_npp) = 1175.2354163386241908, nobs = 3696, Jo/n = 0.3179749503080693, err = 6.0000000000000000 +CostJo : Nonlinear Jo(satwind_goes-16) = 6938.3960383742578415, nobs = 193154, Jo/n = 0.0359215757290776, err = 11.8925417717229021 +CostFunction: Nonlinear J = 1321617.5212073526345193 +DRPCGMinimizer: reduction in residual norm = 0.8446076379600224 +CostFunction::addIncrement: Analysis: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 22 | cube sphere face size: C96 +eastward_wind | Min:-8.7593299865597274e+01 Max:+1.1421906280413639e+02 RMS:+1.7446423933041416e+01 +northward_wind | Min:-9.0978759765544794e+01 Max:+8.9302459717076374e+01 RMS:+9.8048456518642482e+00 +air_temperature | Min:+1.7290483093261994e+02 Max:+3.1017132568402411e+02 RMS:+2.5022377762999653e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7837935791015625e+03 RMS:+9.5699700087025974e+02 +air_pressure_at_surface | Min:+5.1309082031248872e+04 Max:+1.0433011718749085e+05 RMS:+9.8914626690605888e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+9.9999986293294490e-10 Max:+2.1381899714479527e-02 RMS:+5.0230919069522385e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+5.7223520707173773e-04 RMS:+9.4296924828094189e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.6279185658369072e-03 RMS:+3.7809568286035265e-05 +ozone_mass_mixing_ratio | Min:+0.0000000000000000e+00 Max:+1.7393152519974760e-05 RMS:+4.4687802775349384e-06 +geopotential_height_at_surface | Min:-2.9894643783569336e+01 Max:+5.3870561523437500e+03 RMS:+6.4442219321892003e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5312859958249614e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.6371386718750000e+02 RMS:+2.2054824502787593e+01 +skin_temperature_at_surface | Min:+2.1746235656738281e+02 Max:+3.2932260131835938e+02 RMS:+2.8737006087270038e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+5.8667091445155686e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.3549806522511076e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8026573181152344e+01 RMS:+1.9275201636346665e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.2045886230468750e+02 RMS:+2.8806776004459306e+02 +soilMoistureVolumetric | Min:+2.1923782303929329e-02 Max:+1.0000000000000000e+00 RMS:+8.6145451167852249e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.2327475547790527e+00 RMS:+1.5878111306662487e-01 +eastward_wind_at_surface | Min:-1.8106302261352539e+01 Max:+2.0922132492065430e+01 RMS:+5.2142386237867280e+00 +northward_wind_at_surface | Min:-2.0834318161010742e+01 Max:+1.9025196075439453e+01 RMS:+4.8322666159970842e+00 +f10m | Min:+9.3901658058166504e-01 Max:+1.0698120594024658e+00 RMS:+9.9592865511053685e-01 +---------------------------------------------------------------------------------------------------- + + + +Obs bias coefficients: +--------------------------------------------------------------- + constant: Min= -0.8381630182312128, Max= 0.8200770020452602, Norm= 2.2810923110345662 + lapseRate_order_2: Min= -0.2969009876342316, Max= 0.3889850080009739, Norm= 0.7014865852476552 + lapseRate: Min= -0.5954660177223734, Max= 1.6232719421235957, Norm= 2.1316868530892328 + emissivityJacobian: Min= -0.0097089996561434, Max= 8.3582897174897202, Norm= 10.2580018711068170 +sensorScanAngle_order_4: Min= -3.4036920070781176, Max= 0.8113600015458797, Norm= 4.8886281019598847 +sensorScanAngle_order_3: Min= -0.7697319984481772, Max= 0.3303030133236201, Norm= 0.9762309707916220 +sensorScanAngle_order_2: Min= -0.5401099920369742, Max= 2.2389800548457712, Norm= 2.4920946301898259 + sensorScanAngle: Min= -0.1069049984223674, Max= 0.4472059905508586, Norm= 0.8480380112990616 +--------------------------------------------------------------- + + + + + + +CostJb : Nonlinear Jb = 0.0000000000008880 +CostJo : Nonlinear Jo(Aircraft) = 605907.9670297848060727, nobs = 504555, Jo/n = 1.2008759541175587, err = 2.2437239435917040 +CostJo : Nonlinear Jo(ascatw_ascat_metop-b) = 15949.9364826060973428, nobs = 26314, Jo/n = 0.6061388037776886, err = 1.8277692518568445 +CostJo : Nonlinear Jo(ATMS N20) = 48387.7301996692985995, nobs = 156588, Jo/n = 0.3090130163209780, err = 5.2594000470964719 +CostJo : Nonlinear Jo(surface_ps) = 26308.1961873747168283, nobs = 107322, Jo/n = 0.2451333015353303, err = 593.0564342818018986 +CostJo : Nonlinear Jo(gnssrobndnbam) = 615018.9323734971694648, nobs = 473864, Jo/n = 1.2978806838533781, err = 0.0003293333037026 +CostJo : Nonlinear Jo(ompsnp_npp) = 1105.2453930547394521, nobs = 3087, Jo/n = 0.3580321972966438, err = 2.4001367423170068 +CostJo : Nonlinear Jo(ompstc_npp) = 842.3521445536282499, nobs = 3696, Jo/n = 0.2279091300199211, err = 6.0000000000000000 +CostJo : Nonlinear Jo(satwind_goes-16) = 6938.3960374245170897, nobs = 193154, Jo/n = 0.0359215757241606, err = 11.8925417717229021 +CostFunction: Nonlinear J = 1320458.7558479649014771 diff --git a/test/testreference/C96C48_ufs_hybatmDA_lgetkf-fv3inc.ref b/test/testreference/C96C48_ufs_hybatmDA_lgetkf-fv3inc.ref new file mode 100644 index 000000000..103e05260 --- /dev/null +++ b/test/testreference/C96C48_ufs_hybatmDA_lgetkf-fv3inc.ref @@ -0,0 +1,82 @@ +Background State for member 0: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-8.4384330749511719e+01 Max:+1.1146717834472656e+02 RMS:+1.7423407399233511e+01 +northward_wind | Min:-8.6144805908203125e+01 Max:+8.9331993103027344e+01 RMS:+1.0017299694477177e+01 +air_temperature | Min:+1.7350303649902344e+02 Max:+3.0961535644531250e+02 RMS:+2.5015669840056216e+02 +air_pressure_at_surface | Min:+5.2320046875000000e+04 Max:+1.0452482812500000e+05 RMS:+9.8914997456124955e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.6847316430812498e-08 Max:+2.2395884618163109e-02 RMS:+5.0107896876815721e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.1855275048874319e-04 RMS:+1.0354889627583217e-05 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.3839458115398884e-03 RMS:+3.5588872198565466e-05 +ozone_mass_mixing_ratio | Min:+1.1339260641562987e-09 Max:+1.7277885490329936e-05 RMS:+4.4686682637740296e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment for member 0: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-2.6713170463703555e+01 Max:+2.7247719731829164e+01 RMS:+7.7003410130506966e-01 +northward_wind | Min:-2.2266548354929135e+01 Max:+2.4111106836816546e+01 RMS:+7.7874592260732178e-01 +air_temperature | Min:-1.0204740456386372e+01 Max:+1.0612363461439131e+01 RMS:+3.2383456606394428e-01 +air_pressure_at_surface | Min:-1.6632427368676872e-03 Max:+1.3842245934938546e-03 RMS:+8.3556099392947144e-05 +water_vapor_mixing_ratio_wrt_moist_air | Min:-1.0075023053001828e-02 Max:+1.3216991071147419e-02 RMS:+1.3161159034094137e-04 +cloud_liquid_ice | Min:-3.2384493993478425e-04 Max:+2.5782120798697029e-04 RMS:+3.5186992249237140e-06 +cloud_liquid_water | Min:-1.3410840615217380e-03 Max:+1.0793991164780980e-03 RMS:+1.2675198989331570e-05 +ozone_mass_mixing_ratio | Min:-1.7321578649115885e-06 Max:+2.2122365151317159e-06 RMS:+3.4501654041399942e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment for member 0: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-2.6713170463703555e+01 Max:+2.7247719731829164e+01 RMS:+7.7003410130506966e-01 +northward_wind | Min:-2.2266548354929135e+01 Max:+2.4111106836816546e+01 RMS:+7.7874592260732178e-01 +air_temperature | Min:-1.0204740456386372e+01 Max:+1.0612363461439131e+01 RMS:+3.2383456606394428e-01 +water_vapor_mixing_ratio_wrt_moist_air | Min:-1.0075023053001828e-02 Max:+1.3216991071147419e-02 RMS:+1.3161159034094137e-04 +cloud_liquid_ice | Min:-3.2384493993478425e-04 Max:+2.5782120798697029e-04 RMS:+3.5186992249237140e-06 +cloud_liquid_water | Min:-1.3410840615217380e-03 Max:+1.0793991164780980e-03 RMS:+1.2675198989331570e-05 +ozone_mass_mixing_ratio | Min:-1.7321578649115885e-06 Max:+2.2122365151317159e-06 RMS:+3.4501654041399942e-08 +air_pressure_thickness | Min:-3.7230194720905274e-05 Max:+3.0984621844254434e-05 RMS:+9.4295307947072803e-07 +layer_thickness | Min:-5.0314572597610095e+01 Max:+3.1207257614340051e+01 RMS:+6.5903625246599373e-01 +---------------------------------------------------------------------------------------------------- +Background State for member 1: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-8.5966735839843750e+01 Max:+1.1211631774902344e+02 RMS:+1.7425666524535583e+01 +northward_wind | Min:-8.5594192504882812e+01 Max:+8.9450973510742188e+01 RMS:+1.0012910607932993e+01 +air_temperature | Min:+1.7322386169433594e+02 Max:+3.1173611450195312e+02 RMS:+2.5015480177211401e+02 +air_pressure_at_surface | Min:+5.2300289062500000e+04 Max:+1.0443091406250000e+05 RMS:+9.8912612346289476e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.7588122958045460e-08 Max:+2.1704806014895439e-02 RMS:+4.9960608009716814e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.2980920989066362e-04 RMS:+9.7698907168770129e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.4689513482153416e-03 RMS:+3.5167035611299903e-05 +ozone_mass_mixing_ratio | Min:+2.9807353807420611e-10 Max:+1.7195472537423484e-05 RMS:+4.4692040486361164e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment for member 1: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-2.7118603154153071e+01 Max:+2.5039255461317936e+01 RMS:+7.9016696986758683e-01 +northward_wind | Min:-1.9134521911266908e+01 Max:+1.8052220490594621e+01 RMS:+8.1416259656824774e-01 +air_temperature | Min:-1.0334410919697632e+01 Max:+1.0023267385714213e+01 RMS:+3.2993662752227909e-01 +air_pressure_at_surface | Min:-1.7015457730735761e-03 Max:+1.4328894367281464e-03 RMS:+8.3597529649529631e-05 +water_vapor_mixing_ratio_wrt_moist_air | Min:-1.0940498213010061e-02 Max:+1.4176037926216224e-02 RMS:+1.3345901067359821e-04 +cloud_liquid_ice | Min:-2.7333859171390946e-04 Max:+4.8852641654798684e-04 RMS:+3.6400194778040982e-06 +cloud_liquid_water | Min:-1.1354531767787950e-03 Max:+1.0641496243961217e-03 RMS:+1.3080375599165519e-05 +ozone_mass_mixing_ratio | Min:-1.8008616277179968e-06 Max:+2.4391037763833551e-06 RMS:+3.6841977469037158e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment for member 1: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-2.7118603154153071e+01 Max:+2.5039255461317936e+01 RMS:+7.9016696986758683e-01 +northward_wind | Min:-1.9134521911266908e+01 Max:+1.8052220490594621e+01 RMS:+8.1416259656824774e-01 +air_temperature | Min:-1.0334410919697632e+01 Max:+1.0023267385714213e+01 RMS:+3.2993662752227909e-01 +water_vapor_mixing_ratio_wrt_moist_air | Min:-1.0940498213010061e-02 Max:+1.4176037926216224e-02 RMS:+1.3345901067359821e-04 +cloud_liquid_ice | Min:-2.7333859171390946e-04 Max:+4.8852641654798684e-04 RMS:+3.6400194778040982e-06 +cloud_liquid_water | Min:-1.1354531767787950e-03 Max:+1.0641496243961217e-03 RMS:+1.3080375599165519e-05 +ozone_mass_mixing_ratio | Min:-1.8008616277179968e-06 Max:+2.4391037763833551e-06 RMS:+3.6841977469037158e-08 +air_pressure_thickness | Min:-3.8087571738287807e-05 Max:+3.2073941838461906e-05 RMS:+9.4342063209947081e-07 +layer_thickness | Min:-4.7521592877819785e+01 Max:+3.1680899109200254e+01 RMS:+6.5375317024288038e-01 +---------------------------------------------------------------------------------------------------- diff --git a/test/testreference/C96C48_ufs_hybatmDA_lgetkf_observer.ref b/test/testreference/C96C48_ufs_hybatmDA_lgetkf_observer.ref new file mode 100644 index 000000000..e85f63696 --- /dev/null +++ b/test/testreference/C96C48_ufs_hybatmDA_lgetkf_observer.ref @@ -0,0 +1,126 @@ +Initial state for member 1: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.4384330749511719e+01 Max:+1.1146717834472656e+02 RMS:+1.7423407399233511e+01 +northward_wind | Min:-8.6144805908203125e+01 Max:+8.9331993103027344e+01 RMS:+1.0017299694477179e+01 +air_temperature | Min:+1.7350303649902344e+02 Max:+3.0961535644531250e+02 RMS:+2.5015669840056216e+02 +layer_thickness | Min:-3.0059777832031250e+03 Max:-1.6207923889160156e+01 RMS:+9.8503674614826332e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7881016845703125e+03 RMS:+9.5698921151558159e+02 +air_pressure_at_surface | Min:+5.2320046875000000e+04 Max:+1.0452482812500000e+05 RMS:+9.8914997456124955e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.6847316430812498e-08 Max:+2.2395884618163109e-02 RMS:+5.0107896876815721e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.1855275048874319e-04 RMS:+1.0354889627583219e-05 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.3839458115398884e-03 RMS:+3.5588872198565459e-05 +ozone_mass_mixing_ratio | Min:+1.1339260641562987e-09 Max:+1.7277885490329936e-05 RMS:+4.4686682637740296e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.5217851257324219e+02 RMS:+2.2019818126018798e+01 +skin_temperature_at_surface | Min:+2.1759780883789062e+02 Max:+3.2456860351562500e+02 RMS:+2.8741259834843908e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1568060302734375e+02 RMS:+2.8817196445239324e+02 +soilMoistureVolumetric | Min:+2.1992070600390434e-02 Max:+1.0000000000000000e+00 RMS:+8.4975035958924516e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0927191972732544e+00 RMS:+1.5092084570439257e-01 +eastward_wind_at_surface | Min:-1.8143459320068359e+01 Max:+2.0627843856811523e+01 RMS:+5.1169707890467366e+00 +northward_wind_at_surface | Min:-2.3821027755737305e+01 Max:+1.9497446060180664e+01 RMS:+4.8067548196805943e+00 +f10m | Min:+9.4103527069091797e-01 Max:+1.0685453414916992e+00 RMS:+9.9573423073115486e-01 +---------------------------------------------------------------------------------------------------- +Initial state for member 2: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.5966735839843750e+01 Max:+1.1211631774902344e+02 RMS:+1.7425666524535583e+01 +northward_wind | Min:-8.5594192504882812e+01 Max:+8.9450973510742188e+01 RMS:+1.0012910607932993e+01 +air_temperature | Min:+1.7322386169433594e+02 Max:+3.1173611450195312e+02 RMS:+2.5015480177211401e+02 +layer_thickness | Min:-3.0079758300781250e+03 Max:-1.6234376907348633e+01 RMS:+9.8509317417150282e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7860076904296875e+03 RMS:+9.5696337286916196e+02 +air_pressure_at_surface | Min:+5.2300289062500000e+04 Max:+1.0443091406250000e+05 RMS:+9.8912612346289476e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.7588122958045460e-08 Max:+2.1704806014895439e-02 RMS:+4.9960608009716806e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.2980920989066362e-04 RMS:+9.7698907168770146e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.4689513482153416e-03 RMS:+3.5167035611299903e-05 +ozone_mass_mixing_ratio | Min:+2.9807353807420611e-10 Max:+1.7195472537423484e-05 RMS:+4.4692040486361164e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.4906845092773438e+02 RMS:+2.2004970461687567e+01 +skin_temperature_at_surface | Min:+2.1673643493652344e+02 Max:+3.2559057617187500e+02 RMS:+2.8745909600453388e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1603344726562500e+02 RMS:+2.8817511849953127e+02 +soilMoistureVolumetric | Min:+2.1997468546032906e-02 Max:+1.0000000000000000e+00 RMS:+8.4973303187978066e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0929538011550903e+00 RMS:+1.5094966458993353e-01 +eastward_wind_at_surface | Min:-1.9632795333862305e+01 Max:+2.2031156539916992e+01 RMS:+5.1474973436096771e+00 +northward_wind_at_surface | Min:-2.2859689712524414e+01 Max:+1.9478809356689453e+01 RMS:+4.7531537396512338e+00 +f10m | Min:+9.4079720973968506e-01 Max:+1.0689357519149780e+00 RMS:+9.9569948613238035e-01 +---------------------------------------------------------------------------------------------------- +H(x) for member 1: +Aircraft nobs= 502771 Min=-80.55443499910179, Max=305.5072533751332, RMS=146.5850485230079 + +ascatw_ascat_metop-b nobs= 24988 Min=-14.90743210285059, Max=18.50735802131708, RMS=5.626101623328659 + +ATMS N20 nobs= 17107090 Min=129.7859007557375, Max=294.7571288275636, RMS=237.7675940436646 + +surface_ps nobs= 199096 Min=481.5556154686088, Max=106952.1342381349, RMS=94358.04308199322 + +gnssrobndnbam nobs= 792394 Min=3.54653995010946e-06, Max=0.05689811581521509, RMS=0.00729813001231048 + +ompsnp_npp nobs= 3652 Min=0.02233893266611933, Max=544.9735566336279, RMS=74.39666518228908 + +ompstc_npp nobs= 29925 Min=232.08666141862, Max=578.874275460677, RMS=330.1687050473581 + +satwind_goes-16 nobs= 192150 Min=-46.72026247379588, Max=73.49080322835941, RMS=13.50004896322415 + + +H(x) for member 2: +Aircraft nobs= 502771 Min=-83.52929132190421, Max=303.935382876328, RMS=146.5832501835669 + +ascatw_ascat_metop-b nobs= 24988 Min=-15.95012800292468, Max=19.32845599082289, RMS=5.590280602334444 + +ATMS N20 nobs= 17107090 Min=129.5870694672627, Max=294.7645909817928, RMS=237.7536249801317 + +surface_ps nobs= 199096 Min=475.424805046184, Max=106814.5789947868, RMS=94338.64524856347 + +gnssrobndnbam nobs= 792394 Min=3.535338326285228e-06, Max=0.05521000303350442, RMS=0.007290866963061116 + +ompsnp_npp nobs= 3652 Min=0.02236964099830396, Max=551.3730864849784, RMS=74.49227809990998 + +ompstc_npp nobs= 29925 Min=232.3157492522477, Max=581.8884351421542, RMS=330.2400711699158 + +satwind_goes-16 nobs= 192150 Min=-45.04364111939185, Max=72.45210083322863, RMS=13.31321129007812 + + +H(x) ensemble background mean: +Aircraft nobs= 670256 Min=-82.041863160503, Max=304.2592158533807, RMS=127.3605543707548 + +ascatw_ascat_metop-b nobs= 241220 Min=-15.81413469653508, Max=19.88922395519342, RMS=5.523473979723838 + +ATMS N20 nobs= 17107090 Min=129.6864851115001, Max=294.7608599046782, RMS=237.7603500470373 + +surface_ps nobs= 199096 Min=486.4346696969737, Max=106883.3566164608, RMS=94348.33691646729 + +gnssrobndnbam nobs= 792394 Min=3.540939138197344e-06, Max=0.04945358726186298, RMS=0.007290515506537144 + +ompsnp_npp nobs= 3652 Min=0.02235738516446045, Max=548.1733215593032, RMS=74.44382038546588 + +ompstc_npp nobs= 29925 Min=232.3457460802846, Max=580.3706053589909, RMS=330.2028035413688 + +satwind_goes-16 nobs= 1605788 Min=-48.18299380448379, Max=74.78775267937297, RMS=10.02015189273681 + + +background y - H(x): +Aircraft nobs= 514449 Min=-244.1546176605621, Max=114.0538314416612, RMS=3.825505485330922 + +ascatw_ascat_metop-b nobs= 241220 Min=-15.53489644753131, Max=19.32628866297402, RMS=2.327498313731722 + +ATMS N20 nobs= 17107090 Min=-139.4066954833384, Max=99999997810.8074, RMS=5096987910.765858 + +surface_ps nobs= 116459 Min=-101684.8005703992, Max=75903.15428094343, RMS=2988.11265787499 + +gnssrobndnbam nobs= 791231 Min=-0.0302615994327759, Max=0.01662471709650585, RMS=0.0008693038108764198 + +ompsnp_npp nobs= 3652 Min=-30.64844591762643, Max=60.86103708368728, RMS=3.943997228450417 + +ompstc_npp nobs= 28934 Min=-98.77455818390638, Max=716.7959660681558, RMS=17.05887006514246 + +satwind_goes-16 nobs= 1605788 Min=-51.62964751676423, Max=38.23192217860554, RMS=3.10218655904646 + + diff --git a/test/testreference/C96C48_ufs_hybatmDA_lgetkf_solver.ref b/test/testreference/C96C48_ufs_hybatmDA_lgetkf_solver.ref new file mode 100644 index 000000000..7c07c4dfa --- /dev/null +++ b/test/testreference/C96C48_ufs_hybatmDA_lgetkf_solver.ref @@ -0,0 +1,180 @@ +Initial state for member 1: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.4384330749511719e+01 Max:+1.1146717834472656e+02 RMS:+1.7423407399233511e+01 +northward_wind | Min:-8.6144805908203125e+01 Max:+8.9331993103027344e+01 RMS:+1.0017299694477179e+01 +air_temperature | Min:+1.7350303649902344e+02 Max:+3.0961535644531250e+02 RMS:+2.5015669840056216e+02 +layer_thickness | Min:-3.0059777832031250e+03 Max:-1.6207923889160156e+01 RMS:+9.8503674614826332e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7881016845703125e+03 RMS:+9.5698921151558159e+02 +air_pressure_at_surface | Min:+5.2320046875000000e+04 Max:+1.0452482812500000e+05 RMS:+9.8914997456124955e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.6847316430812498e-08 Max:+2.2395884618163109e-02 RMS:+5.0107896876815721e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.1855275048874319e-04 RMS:+1.0354889627583219e-05 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.3839458115398884e-03 RMS:+3.5588872198565459e-05 +ozone_mass_mixing_ratio | Min:+1.1339260641562987e-09 Max:+1.7277885490329936e-05 RMS:+4.4686682637740296e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.5217851257324219e+02 RMS:+2.2019818126018798e+01 +skin_temperature_at_surface | Min:+2.1759780883789062e+02 Max:+3.2456860351562500e+02 RMS:+2.8741259834843908e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1568060302734375e+02 RMS:+2.8817196445239324e+02 +soilMoistureVolumetric | Min:+2.1992070600390434e-02 Max:+1.0000000000000000e+00 RMS:+8.4975035958924516e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0927191972732544e+00 RMS:+1.5092084570439257e-01 +eastward_wind_at_surface | Min:-1.8143459320068359e+01 Max:+2.0627843856811523e+01 RMS:+5.1169707890467366e+00 +northward_wind_at_surface | Min:-2.3821027755737305e+01 Max:+1.9497446060180664e+01 RMS:+4.8067548196805943e+00 +f10m | Min:+9.4103527069091797e-01 Max:+1.0685453414916992e+00 RMS:+9.9573423073115486e-01 +---------------------------------------------------------------------------------------------------- +Initial state for member 2: +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.5966735839843750e+01 Max:+1.1211631774902344e+02 RMS:+1.7425666524535583e+01 +northward_wind | Min:-8.5594192504882812e+01 Max:+8.9450973510742188e+01 RMS:+1.0012910607932993e+01 +air_temperature | Min:+1.7322386169433594e+02 Max:+3.1173611450195312e+02 RMS:+2.5015480177211401e+02 +layer_thickness | Min:-3.0079758300781250e+03 Max:-1.6234376907348633e+01 RMS:+9.8509317417150282e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7860076904296875e+03 RMS:+9.5696337286916196e+02 +air_pressure_at_surface | Min:+5.2300289062500000e+04 Max:+1.0443091406250000e+05 RMS:+9.8912612346289476e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+1.7588122958045460e-08 Max:+2.1704806014895439e-02 RMS:+4.9960608009716806e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.2980920989066362e-04 RMS:+9.7698907168770146e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.4689513482153416e-03 RMS:+3.5167035611299903e-05 +ozone_mass_mixing_ratio | Min:+2.9807353807420611e-10 Max:+1.7195472537423484e-05 RMS:+4.4692040486361164e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.4906845092773438e+02 RMS:+2.2004970461687567e+01 +skin_temperature_at_surface | Min:+2.1673643493652344e+02 Max:+3.2559057617187500e+02 RMS:+2.8745909600453388e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1603344726562500e+02 RMS:+2.8817511849953127e+02 +soilMoistureVolumetric | Min:+2.1997468546032906e-02 Max:+1.0000000000000000e+00 RMS:+8.4973303187978066e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0929538011550903e+00 RMS:+1.5094966458993353e-01 +eastward_wind_at_surface | Min:-1.9632795333862305e+01 Max:+2.2031156539916992e+01 RMS:+5.1474973436096771e+00 +northward_wind_at_surface | Min:-2.2859689712524414e+01 Max:+1.9478809356689453e+01 RMS:+4.7531537396512338e+00 +f10m | Min:+9.4079720973968506e-01 Max:+1.0689357519149780e+00 RMS:+9.9569948613238035e-01 +---------------------------------------------------------------------------------------------------- +H(x) for member 1: +Aircraft nobs= 502771 Min=-80.55443572998047, Max=305.5072631835938, RMS=146.5850485206547 + +ascatw_ascat_metop-b nobs= 24988 Min=-14.90743255615234, Max=18.50735855102539, RMS=5.626101621409232 + +ATMS N20 nobs= 17107090 Min=129.7859039306641, Max=294.7571411132812, RMS=237.7675940456118 + +surface_ps nobs= 199096 Min=481.5556030273438, Max=106952.1328125, RMS=94358.04310219502 + +gnssrobndnbam nobs= 792394 Min=3.546540028764866e-06, Max=0.05689811706542969, RMS=0.007298130011564753 + +ompsnp_npp nobs= 3652 Min=0.02233893238008022, Max=544.9735717773438, RMS=74.39666527674214 + +ompstc_npp nobs= 29925 Min=232.0866546630859, Max=578.874267578125, RMS=330.1687049872166 + +satwind_goes-16 nobs= 192150 Min=-46.72026062011719, Max=73.49080657958984, RMS=13.50004896377961 + + +H(x) for member 2: +Aircraft nobs= 502771 Min=-83.52928924560547, Max=303.9353942871094, RMS=146.5832501984888 + +ascatw_ascat_metop-b nobs= 24988 Min=-15.95012760162354, Max=19.32845687866211, RMS=5.590280603593994 + +ATMS N20 nobs= 17107090 Min=129.5870666503906, Max=294.7645874023438, RMS=237.7536249814979 + +surface_ps nobs= 199096 Min=475.4248046875, Max=106814.578125, RMS=94338.64525474468 + +gnssrobndnbam nobs= 792394 Min=3.53533823727048e-06, Max=0.05521000176668167, RMS=0.007290866961668531 + +ompsnp_npp nobs= 3652 Min=0.02236964181065559, Max=551.3731079101562, RMS=74.49227830514708 + +ompstc_npp nobs= 29925 Min=232.3157501220703, Max=581.888427734375, RMS=330.2400711798879 + +satwind_goes-16 nobs= 192150 Min=-45.04364013671875, Max=72.45210266113281, RMS=13.31321128986013 + + +H(x) ensemble background mean: +Aircraft nobs= 502771 Min=-82.04186248779297, Max=304.2592163085938, RMS=146.582395066166 + +ascatw_ascat_metop-b nobs= 24988 Min=-15.35133123397827, Max=18.91790771484375, RMS=5.590053671147163 + +ATMS N20 nobs= 17107090 Min=129.6864852905273, Max=294.7608642578125, RMS=237.7603500486925 + +surface_ps nobs= 199096 Min=486.4346618652344, Max=106883.35546875, RMS=94348.33692965737 + +gnssrobndnbam nobs= 792394 Min=3.540939133017673e-06, Max=0.04945358820259571, RMS=0.007290515505449794 + +ompsnp_npp nobs= 3652 Min=0.02235738560557365, Max=548.17333984375, RMS=74.44382053535134 + +ompstc_npp nobs= 29925 Min=232.3457412719727, Max=580.37060546875, RMS=330.2028035163413 + +satwind_goes-16 nobs= 192150 Min=-45.88195037841797, Max=72.75027465820312, RMS=13.36167441823028 + + +background y - H(x): +Aircraft nobs= 502771 Min=-18.89637756347656, Max=18.92713928222656, RMS=3.217299765305571 + +ascatw_ascat_metop-b nobs= 24988 Min=-4.990096844732761, Max=4.997781611979008, RMS=1.78136290653079 + +ATMS N20 nobs= 17107090 Min=-139.4066925048828, Max=99999997810.8074, RMS=5096987910.765857 + +surface_ps nobs= 116459 Min=-101684.80078125, Max=75903.154296875, RMS=2988.112660654301 + +gnssrobndnbam nobs= 791231 Min=-0.03026160039007664, Max=0.01662471704185009, RMS=0.000869303809760421 + +ompsnp_npp nobs= 3652 Min=-30.64844512939453, Max=60.86103820800781, RMS=3.943997189932038 + +ompstc_npp nobs= 28934 Min=-98.7745361328125, Max=716.7959594726562, RMS=17.05887006085864 + +satwind_goes-16 nobs= 192150 Min=-17.58694839477539, Max=18.68439626693726, RMS=3.267043143712932 + + +Background mean : +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.5175533294677734e+01 Max:+1.1179174804687500e+02 RMS:+1.7400557939433298e+01 +northward_wind | Min:-8.5735511779785156e+01 Max:+8.9157825469970703e+01 RMS:+9.9701645189144461e+00 +air_temperature | Min:+1.7338398742675781e+02 Max:+3.1067573547363281e+02 RMS:+2.5015547362929473e+02 +layer_thickness | Min:-3.0054658203125000e+03 Max:-1.6221150398254395e+01 RMS:+9.8506306362137718e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7870546875000000e+03 RMS:+9.5697619937906575e+02 +air_pressure_at_surface | Min:+5.2310167968750000e+04 Max:+1.0447787109375000e+05 RMS:+9.8913797930278190e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+2.9691944014587079e-08 Max:+2.1115131676197052e-02 RMS:+4.9994705712860729e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+3.6185300268698484e-04 RMS:+9.3862057121105856e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.2367462622933090e-03 RMS:+3.1415946634547486e-05 +ozone_mass_mixing_ratio | Min:+7.5237392704874395e-10 Max:+1.7233576727448963e-05 RMS:+4.4688532813447449e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.4910437774658203e+02 RMS:+2.2007651817656669e+01 +skin_temperature_at_surface | Min:+2.1716712188720703e+02 Max:+3.2174871826171875e+02 RMS:+2.8743544448926787e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1577014160156250e+02 RMS:+2.8817349407786276e+02 +soilMoistureVolumetric | Min:+2.1994769573211670e-02 Max:+1.0000000000000000e+00 RMS:+8.4973696890011863e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0928364992141724e+00 RMS:+1.5091512135815568e-01 +eastward_wind_at_surface | Min:-1.8888127326965332e+01 Max:+2.1329500198364258e+01 RMS:+5.1094029653114390e+00 +northward_wind_at_surface | Min:-2.3228111267089844e+01 Max:+1.8953988075256348e+01 RMS:+4.7537442465404594e+00 +f10m | Min:+9.4170856475830078e-01 Max:+1.0687405467033386e+00 RMS:+9.9571647867703006e-01 +---------------------------------------------------------------------------------------------------- +Analysis mean : +---------------------------------------------------------------------------------------------------- +State print | number of fields = 23 | cube sphere face size: C48 +eastward_wind | Min:-8.4774324321502988e+01 Max:+1.1170619450293722e+02 RMS:+1.7400375509763755e+01 +northward_wind | Min:-8.7214121288366655e+01 Max:+8.9233807495233577e+01 RMS:+9.9938074328966984e+00 +air_temperature | Min:+1.7338398731904834e+02 Max:+3.1021734492129713e+02 RMS:+2.5015182619184384e+02 +layer_thickness | Min:-3.0054658092822870e+03 Max:-1.6234013903099573e+01 RMS:+9.8506487778080520e+02 +air_pressure_thickness | Min:+6.0599988698959351e-01 Max:+1.7869309532732013e+03 RMS:+9.5697423778426378e+02 +air_pressure_at_surface | Min:+5.2310167956090001e+04 Max:+1.0447787101137359e+05 RMS:+9.8913797926518338e+04 +water_vapor_mixing_ratio_wrt_moist_air | Min:+0.0000000000000000e+00 Max:+2.1115131089317944e-02 RMS:+4.9974721017221301e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+4.4276663301760246e-04 RMS:+9.6220406276590353e-06 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.3226195416814611e-03 RMS:+3.3209346549199534e-05 +ozone_mass_mixing_ratio | Min:+1.0218316416270972e-09 Max:+1.7364107739907706e-05 RMS:+4.4689530099725226e-06 +geopotential_height_at_surface | Min:-2.7018375396728516e+01 Max:+5.2697558593750000e+03 RMS:+6.3772571434211386e+02 +slmsk | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+00 RMS:+6.5462209907135938e-01 +sheleg | Min:+0.0000000000000000e+00 Max:+2.4910437774658203e+02 RMS:+2.2007651817656669e+01 +skin_temperature_at_surface | Min:+2.1716712188720703e+02 Max:+3.2174871826171875e+02 RMS:+2.8743544448926787e+02 +vtype | Min:+0.0000000000000000e+00 Max:+2.0000000000000000e+01 RMS:+6.1246929250310931e+00 +stype | Min:+0.0000000000000000e+00 Max:+1.6000000000000000e+01 RMS:+4.5755536879077185e+00 +vfrac | Min:+0.0000000000000000e+00 Max:+9.8551864624023438e+01 RMS:+2.0170282476619530e+01 +stc | Min:+2.0000000000000000e+02 Max:+3.1577014160156250e+02 RMS:+2.8817349407786276e+02 +soilMoistureVolumetric | Min:+2.1994769573211670e-02 Max:+1.0000000000000000e+00 RMS:+8.4973696890011863e-01 +totalSnowDepthMeters | Min:+0.0000000000000000e+00 Max:+1.0928364992141724e+00 RMS:+1.5091512135815568e-01 +eastward_wind_at_surface | Min:-1.8888127326965332e+01 Max:+2.1329500198364258e+01 RMS:+5.1094029653114390e+00 +northward_wind_at_surface | Min:-2.3228111267089844e+01 Max:+1.8953988075256348e+01 RMS:+4.7537442465404594e+00 +f10m | Min:+9.4170856475830078e-01 Max:+1.0687405467033386e+00 RMS:+9.9571647867703006e-01 +---------------------------------------------------------------------------------------------------- diff --git a/test/testreference/atm_jjob_3dvar-fv3inc.ref b/test/testreference/atm_jjob_3dvar-fv3inc.ref new file mode 100644 index 000000000..98a94646b --- /dev/null +++ b/test/testreference/atm_jjob_3dvar-fv3inc.ref @@ -0,0 +1,41 @@ +Background State: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-5.5495644220059390e+01 Max:+8.4934651204487366e+01 RMS:+1.6388250288532191e+01 +northward_wind | Min:-7.3712421229093422e+01 Max:+7.6984825502186652e+01 RMS:+8.1424144891567511e+00 +air_temperature | Min:+1.7482158077318496e+02 Max:+3.1467235233685437e+02 RMS:+2.4978424883064508e+02 +surface_pressure | Min:+5.3298485514404747e+04 Max:+1.0398027192902798e+05 RMS:+9.8897229693652524e+04 +specific_humidity | Min:+1.2691624667179020e-08 Max:+2.0041369334954085e-02 RMS:+4.7792638023125686e-03 +cloud_liquid_ice | Min:+0.0000000000000000e+00 Max:+1.2024392024662985e-03 RMS:+1.4396968866569995e-05 +cloud_liquid_water | Min:+0.0000000000000000e+00 Max:+1.5935686618789048e-03 RMS:+4.1931345590543333e-05 +ozone_mass_mixing_ratio | Min:+1.1998327271379204e-08 Max:+1.7808431790670831e-05 RMS:+4.4947917149861064e-06 +surface_geopotential_height | Min:-2.7018394470214844e+01 Max:+5.2697460937500000e+03 RMS:+6.3032575784066080e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-4.9503077015344843e-07 Max:+7.0838511279092131e-07 RMS:+2.4490899978286723e-09 +northward_wind | Min:-7.2703516684757830e-07 Max:+2.8853321110133834e-07 RMS:+2.1376104971902294e-09 +air_temperature | Min:-2.1723477061641461e-07 Max:+6.5020122974601691e-07 RMS:+1.0998492962503341e-08 +surface_pressure | Min:-7.8580342233181000e-10 Max:+3.2014213502407074e-10 RMS:+1.5159255545534699e-11 +specific_humidity | Min:-6.7425976452941262e-04 Max:+7.2974731745455677e-04 RMS:+2.1043490698817701e-06 +cloud_liquid_ice | Min:-2.7736911125384438e-06 Max:+5.0834107240617123e-07 RMS:+4.7607939912271645e-08 +cloud_liquid_water | Min:-3.7332445167104997e-04 Max:+3.4355489504058373e-04 RMS:+3.0033170533500212e-06 +ozone_mass_mixing_ratio | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 +---------------------------------------------------------------------------------------------------- +FV3 Increment: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-4.9503077015344843e-07 Max:+7.0838511279092131e-07 RMS:+2.4490899978286723e-09 +northward_wind | Min:-7.2703516684757830e-07 Max:+2.8853321110133834e-07 RMS:+2.1376104971902294e-09 +air_temperature | Min:-2.1723477061641461e-07 Max:+6.5020122974601691e-07 RMS:+1.0998492962503341e-08 +specific_humidity | Min:-6.7425976452941262e-04 Max:+7.2974731745455677e-04 RMS:+2.1043490698817701e-06 +cloud_liquid_ice | Min:-2.7736911125384438e-06 Max:+5.0834107240617123e-07 RMS:+4.7607939912271645e-08 +cloud_liquid_water | Min:-3.7332445167104997e-04 Max:+3.4355489504058373e-04 RMS:+3.0033170533500212e-06 +ozone_mass_mixing_ratio | Min:+0.0000000000000000e+00 Max:+0.0000000000000000e+00 RMS:+0.0000000000000000e+00 +air_pressure_thickness | Min:-2.9103830456733704e-11 Max:+2.9103830456733704e-11 RMS:+3.3056019160193798e-13 +layer_thickness | Min:-1.0638235174337751e-01 Max:+1.0329449278924585e-01 RMS:+2.8485086711777381e-04 +---------------------------------------------------------------------------------------------------- diff --git a/test/atm/global-workflow/3dvar.ref b/test/testreference/atm_jjob_3dvar.ref similarity index 100% rename from test/atm/global-workflow/3dvar.ref rename to test/testreference/atm_jjob_3dvar.ref diff --git a/test/testreference/atm_jjob_lgetkf-fv3inc.ref b/test/testreference/atm_jjob_lgetkf-fv3inc.ref new file mode 100644 index 000000000..2c8fed453 --- /dev/null +++ b/test/testreference/atm_jjob_lgetkf-fv3inc.ref @@ -0,0 +1,123 @@ +Background State for member 0: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-5.1619864857418477e+01 Max:+8.6812084442971653e+01 RMS:+1.5983411875766325e+01 +northward_wind | Min:-7.3094846805319690e+01 Max:+7.0353817207582651e+01 RMS:+7.7265473774262041e+00 +air_temperature | Min:+1.7646396818493386e+02 Max:+3.1441817730817547e+02 RMS:+2.4989439192167012e+02 +surface_pressure | Min:+5.3259705655314101e+04 Max:+1.0392378167916714e+05 RMS:+9.8893465602866549e+04 +specific_humidity | Min:+9.5164908108891825e-09 Max:+2.0222136340880194e-02 RMS:+4.8552459174929334e-03 +cloud_liquid_ice | Min:-1.3545705512023003e-20 Max:+6.7304686933261399e-04 RMS:+1.0726563909939355e-05 +cloud_liquid_water | Min:-5.4244251425755909e-20 Max:+1.2879383569881558e-03 RMS:+3.8382491358281577e-05 +ozone_mass_mixing_ratio | Min:+2.9375003505643131e-08 Max:+1.8014885502109894e-05 RMS:+4.4946424525503736e-06 +surface_geopotential_height | Min:-2.7018394470214844e+01 Max:+5.2697460937500000e+03 RMS:+6.3032575784066080e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment for member 0: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-1.7416909136434541e+01 Max:+1.8325867271120192e+01 RMS:+7.2689113073983769e-01 +northward_wind | Min:-1.5335235321425948e+01 Max:+2.1574447615122054e+01 RMS:+7.1328003377466020e-01 +air_temperature | Min:-8.6048230478038406e+00 Max:+8.1497937417599609e+00 RMS:+3.1081395800884187e-01 +surface_pressure | Min:-4.9202937637815580e-04 Max:+8.7924188102306289e-04 RMS:+5.8051418356002832e-05 +specific_humidity | Min:-6.6741214369962698e-03 Max:+9.0731153226882751e-03 RMS:+1.4380776566867527e-04 +cloud_liquid_ice | Min:-4.9931336523754066e-04 Max:+2.6181751401796260e-04 RMS:+3.2747284981508197e-06 +cloud_liquid_water | Min:-1.0141458910771410e-03 Max:+1.1396207487973308e-03 RMS:+1.0447469223790289e-05 +ozone_mass_mixing_ratio | Min:-2.9909193396824413e-06 Max:+3.4967162777667096e-06 RMS:+5.0924831319987802e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment for member 0: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-1.7416909136434541e+01 Max:+1.8325867271120192e+01 RMS:+7.2689113073983769e-01 +northward_wind | Min:-1.5335235321425948e+01 Max:+2.1574447615122054e+01 RMS:+7.1328003377466020e-01 +air_temperature | Min:-8.6048230478038406e+00 Max:+8.1497937417599609e+00 RMS:+3.1081395800884187e-01 +specific_humidity | Min:-6.6741214369962698e-03 Max:+9.0731153226882751e-03 RMS:+1.4380776566867527e-04 +cloud_liquid_ice | Min:-4.9931336523754066e-04 Max:+2.6181751401796260e-04 RMS:+3.2747284981508197e-06 +cloud_liquid_water | Min:-1.0141458910771410e-03 Max:+1.1396207487973308e-03 RMS:+1.0447469223790289e-05 +ozone_mass_mixing_ratio | Min:-2.9909193396824413e-06 Max:+3.4967162777667096e-06 RMS:+5.0924831319987802e-08 +air_pressure_thickness | Min:-1.1013638868462294e-05 Max:+1.9681036064866930e-05 RMS:+6.5512588707706875e-07 +layer_thickness | Min:-2.8045559103640699e+01 Max:+2.1697786412500136e+01 RMS:+6.5544095172004369e-01 +---------------------------------------------------------------------------------------------------- +Background State for member 1: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-5.2853490758012072e+01 Max:+8.7248708527964936e+01 RMS:+1.5955809745480765e+01 +northward_wind | Min:-7.2178651628585953e+01 Max:+7.2568167230757609e+01 RMS:+7.7335061167195889e+00 +air_temperature | Min:+1.7660670217895057e+02 Max:+3.1526174222386965e+02 RMS:+2.4989392943476341e+02 +surface_pressure | Min:+5.3317702550070273e+04 Max:+1.0394629485957995e+05 RMS:+9.8892949759388735e+04 +specific_humidity | Min:+2.1514597275760548e-08 Max:+1.9663168048133908e-02 RMS:+4.8569105861498299e-03 +cloud_liquid_ice | Min:-1.3544569699620215e-20 Max:+7.9557019872326799e-04 RMS:+1.0816147029169270e-05 +cloud_liquid_water | Min:-5.4200711162051571e-20 Max:+1.2298889446687945e-03 RMS:+3.8689917911663205e-05 +ozone_mass_mixing_ratio | Min:+1.6238717942558199e-08 Max:+1.8031521448783218e-05 RMS:+4.4947640660308833e-06 +surface_geopotential_height | Min:-2.7018394470214844e+01 Max:+5.2697460937500000e+03 RMS:+6.3032575784066080e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment for member 1: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-1.7542991285853031e+01 Max:+2.0968845531775742e+01 RMS:+7.2825863145362402e-01 +northward_wind | Min:-1.5283258164430123e+01 Max:+2.0478626874987171e+01 RMS:+7.1562489129210427e-01 +air_temperature | Min:-1.0374519800275246e+01 Max:+9.3297652767893524e+00 RMS:+3.1237829519350230e-01 +surface_pressure | Min:-4.8986046327570421e-04 Max:+9.0817638056250871e-04 RMS:+5.9230402548777353e-05 +specific_humidity | Min:-6.9184909302780918e-03 Max:+8.2127508558306646e-03 RMS:+1.4099077159566875e-04 +cloud_liquid_ice | Min:-5.2537411650465499e-04 Max:+3.1949478810012653e-04 RMS:+3.2097080991341253e-06 +cloud_liquid_water | Min:-1.0684141562485590e-03 Max:+1.1931964279486475e-03 RMS:+1.0416514064617798e-05 +ozone_mass_mixing_ratio | Min:-3.1852115564505394e-06 Max:+3.2851197161513411e-06 RMS:+5.1928484225101225e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment for member 1: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-1.7542991285853031e+01 Max:+2.0968845531775742e+01 RMS:+7.2825863145362402e-01 +northward_wind | Min:-1.5283258164430123e+01 Max:+2.0478626874987171e+01 RMS:+7.1562489129210427e-01 +air_temperature | Min:-1.0374519800275246e+01 Max:+9.3297652767893524e+00 RMS:+3.1237829519350230e-01 +specific_humidity | Min:-6.9184909302780918e-03 Max:+8.2127508558306646e-03 RMS:+1.4099077159566875e-04 +cloud_liquid_ice | Min:-5.2537411650465499e-04 Max:+3.1949478810012653e-04 RMS:+3.2097080991341253e-06 +cloud_liquid_water | Min:-1.0684141562485590e-03 Max:+1.1931964279486475e-03 RMS:+1.0416514064617798e-05 +ozone_mass_mixing_ratio | Min:-3.1852115564505394e-06 Max:+3.2851197161513411e-06 RMS:+5.1928484225101225e-08 +air_pressure_thickness | Min:-1.0965086403302848e-05 Max:+2.0328705431893468e-05 RMS:+6.6843104175422882e-07 +layer_thickness | Min:-3.2106148452359776e+01 Max:+2.5923789087046316e+01 RMS:+6.6540710201306896e-01 +---------------------------------------------------------------------------------------------------- +Background State for member 2: + +---------------------------------------------------------------------------------------------------- +State print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-5.3776366655868109e+01 Max:+8.6331467223030344e+01 RMS:+1.5960680883840784e+01 +northward_wind | Min:-7.0176400159320124e+01 Max:+6.9531049915936578e+01 RMS:+7.7410680097841684e+00 +air_temperature | Min:+1.7648447482434227e+02 Max:+3.1491330999751426e+02 RMS:+2.4989313307279673e+02 +surface_pressure | Min:+5.3350124363319999e+04 Max:+1.0389818047809265e+05 RMS:+9.8892179510558097e+04 +specific_humidity | Min:+2.1846447498856659e-08 Max:+2.0007929878326374e-02 RMS:+4.8392192734415156e-03 +cloud_liquid_ice | Min:-6.7740196346531239e-21 Max:+6.2473018245821010e-04 RMS:+1.0889666282638220e-05 +cloud_liquid_water | Min:-5.4107584399974539e-20 Max:+1.2132298501853738e-03 RMS:+3.8405804865664137e-05 +ozone_mass_mixing_ratio | Min:+1.2289325508931378e-08 Max:+1.8036413152177077e-05 RMS:+4.4950884931704925e-06 +surface_geopotential_height | Min:-2.7018394470214844e+01 Max:+5.2697460937500000e+03 RMS:+6.3032575784066080e+02 +---------------------------------------------------------------------------------------------------- +JEDI Increment for member 2: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 8 | cube sphere face size: C48 +eastward_wind | Min:-1.8014062913663103e+01 Max:+1.8516732485049666e+01 RMS:+7.3383694849572323e-01 +northward_wind | Min:-1.5579280119728031e+01 Max:+2.2762102719398591e+01 RMS:+7.2377717441299694e-01 +air_temperature | Min:-1.0570848751737598e+01 Max:+8.3564092475959129e+00 RMS:+3.1645038788954982e-01 +surface_pressure | Min:-4.7656900311210393e-04 Max:+9.1220166839889316e-04 RMS:+5.8396146445486219e-05 +specific_humidity | Min:-5.2439197475218757e-03 Max:+8.2607880293262357e-03 RMS:+1.4211303446855155e-04 +cloud_liquid_ice | Min:-5.2671607196952148e-04 Max:+2.7498589550193714e-04 RMS:+3.2193226262458792e-06 +cloud_liquid_water | Min:-1.0851123947058787e-03 Max:+1.2045791096627974e-03 RMS:+1.0548571598067807e-05 +ozone_mass_mixing_ratio | Min:-3.2510682480215228e-06 Max:+3.3849184382668304e-06 RMS:+5.2379967545874409e-08 +---------------------------------------------------------------------------------------------------- +FV3 Increment for member 2: + +---------------------------------------------------------------------------------------------------- +Increment print | number of fields = 9 | cube sphere face size: C48 +eastward_wind | Min:-1.8014062913663103e+01 Max:+1.8516732485049666e+01 RMS:+7.3383694849572323e-01 +northward_wind | Min:-1.5579280119728031e+01 Max:+2.2762102719398591e+01 RMS:+7.2377717441299694e-01 +air_temperature | Min:-1.0570848751737598e+01 Max:+8.3564092475959129e+00 RMS:+3.1645038788954982e-01 +specific_humidity | Min:-5.2439197475218757e-03 Max:+8.2607880293262357e-03 RMS:+1.4211303446855155e-04 +cloud_liquid_ice | Min:-5.2671607196952148e-04 Max:+2.7498589550193714e-04 RMS:+3.2193226262458792e-06 +cloud_liquid_water | Min:-1.0851123947058787e-03 Max:+1.2045791096627974e-03 RMS:+1.0548571598067807e-05 +ozone_mass_mixing_ratio | Min:-3.2510682480215228e-06 Max:+3.3849184382668304e-06 RMS:+5.2379967545874409e-08 +air_pressure_thickness | Min:-1.0667572496458888e-05 Max:+2.0418810890987515e-05 RMS:+6.5901623607235396e-07 +layer_thickness | Min:-2.8377559817174188e+01 Max:+2.5490176089209854e+01 RMS:+6.7263739596740091e-01 +---------------------------------------------------------------------------------------------------- diff --git a/test/atm/global-workflow/lgetkf.ref b/test/testreference/atm_jjob_lgetkf.ref similarity index 100% rename from test/atm/global-workflow/lgetkf.ref rename to test/testreference/atm_jjob_lgetkf.ref diff --git a/test/atm/global-workflow/lgetkf_observer.ref b/test/testreference/atm_jjob_lgetkf_observer.ref similarity index 100% rename from test/atm/global-workflow/lgetkf_observer.ref rename to test/testreference/atm_jjob_lgetkf_observer.ref diff --git a/test/atm/global-workflow/lgetkf_solver.ref b/test/testreference/atm_jjob_lgetkf_solver.ref similarity index 100% rename from test/atm/global-workflow/lgetkf_solver.ref rename to test/testreference/atm_jjob_lgetkf_solver.ref diff --git a/ush/CMakeLists.txt b/ush/CMakeLists.txt index 2bf242db4..65f8bbfe8 100644 --- a/ush/CMakeLists.txt +++ b/ush/CMakeLists.txt @@ -1,6 +1,5 @@ list(APPEND ush_files check_yaml_keys.py - jediinc2fv3.py genYAML ) diff --git a/ush/jediinc2fv3.py b/ush/jediinc2fv3.py deleted file mode 100755 index 3bee852df..000000000 --- a/ush/jediinc2fv3.py +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env python3 -# translate FV3-JEDI increment to FV3 readable format with delp and hydrostatic delz calculation -import argparse -import netCDF4 as nc -import numpy as np -import logging -import os - -vardict = { - 'ua': 'u_inc', - 'va': 'v_inc', - 't': 'T_inc', - 'T': 'T_inc', - 'sphum': 'sphum_inc', - 'liq_wat': 'liq_wat_inc', - 'o3mr': 'o3mr_inc', - 'ice_wat': 'icmr_inc', - 'lat': 'lat', - 'lon': 'lon', -} - - -def jedi_inc_to_fv3(FV3ges, FV3JEDIinc, FV3inc): - logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s', level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S') - # Check if required input netcdf files exist. If not present, exit with error message. - try: - with nc.Dataset(FV3ges, 'r'), nc.Dataset(FV3JEDIinc, 'r'): - ncges = nc.Dataset(FV3ges, 'r') - ncin = nc.Dataset(FV3JEDIinc, 'r') - ncout = nc.Dataset(FV3inc, 'w', format='NETCDF4') - create_fv3inc(ncges, ncin, ncout) - - except FileNotFoundError as e: - logging.error(f"Error occurred with message {e}") - raise - - -def create_fv3inc(ncges, ncin, ncout): - - # Copy over dimensions - for name, dimension in ncin.dimensions.items(): - if name == 'time': - continue - elif name == 'edge': - nameout = 'ilev' - else: - nameout = name - ncout.createDimension(nameout, - (len(dimension) if not dimension.isunlimited() else None)) - # Some global attributes - ncout.source = 'jediinc2fv3.py' - ncout.comment = 'Increment produced by FV3-JEDI and modified for use by FV3 read' - - # Create all the dummy vertical coordinate variables - nlevs = len(ncin.dimensions['lev']) - nlats = len(ncin.dimensions['lat']) - nlons = len(ncin.dimensions['lon']) - pfull = range(1, nlevs+1) - phalf = range(1, nlevs+2) - levvar = ncout.createVariable('lev', 'f4', ('lev')) - levvar[:] = pfull - pfullvar = ncout.createVariable('pfull', 'f4', ('lev')) - pfullvar[:] = pfull - ilevvar = ncout.createVariable('ilev', 'f4', ('ilev')) - ilevvar[:] = phalf - hyaivar = ncout.createVariable('hyai', 'f4', ('ilev')) - hyaivar[:] = phalf - hybivar = ncout.createVariable('hybi', 'f4', ('ilev')) - hybivar[:] = phalf - - # Rename and change dimensionality of fields - for name, variable in ncin.variables.items(): - if len(variable.dimensions) in [4]: - dimsout = variable.dimensions[1:] - dimsout_inc = dimsout - else: - dimsout = variable.dimensions - - if name in vardict: - # The temperature increment is needed to compute the delz - # increment. Either T or t may be used in jedi increment - # files. Set tinc to the appropriate case. - if name in ['T', 't']: - tinc = name - - x = ncout.createVariable(vardict[name], 'f4', dimsout) - if len(variable.dimensions) in [4]: - ncout[vardict[name]][:] = ncin[name][0, ...] - else: - ncout[vardict[name]][:] = ncin[name][:] - - # Populate increment and guess fields - # Note: increment and guess fields have same shape - # ps_inc is (time, lat, lon), ps_ges is {time, grid_yt, grid_xt) - # t_inc is (time, lev, lat, lon), t_ges is (time, pfull, grid_yt, grid_xt) - - ps_ges = ncges.variables['pressfc'][:] - t_ges = ncges.variables['tmp'][:] - q_ges = ncges.variables['spfh'][:] - - ps_inc = ncin.variables['ps'][:] - t_inc = ncin.variables[tinc][:] - q_inc = ncin.variables['sphum'][:] - - # Compute analysis ps - ps_anl = np.zeros((nlats, nlons), float) - ps_anl = ps_ges + ps_inc - - # Set constants and compute derived constants - grav = 9.80665 - airmw = 28.965 - h2omw = 18.015 - runiv = 8314.47 - rdry = runiv/airmw - rvap = runiv/h2omw - cpdry = 3.5*rdry - fv = (rvap/rdry)-1 - rdog = rdry/grav - kappa = rdry/cpdry - kap1 = kappa+1.0 - kapr = 1.0/kappa - - # Get ak,bk from guess file - nc_attrs = ncges.ncattrs() - ak = ncges.getncattr('ak') - bk = ncges.getncattr('bk') - - # Compute guess and analysis interface pressures - prsi_ges = np.zeros((nlevs+1, nlats, nlons), float) - prsi_anl = np.zeros((nlevs+1, nlats, nlons), float) - for k in range(0, nlevs+1): - prsi_ges[k, :, :] = ak[k]+bk[k]*ps_ges[:, :] - prsi_anl[k, :, :] = ak[k]+bk[k]*ps_anl[:, :] - - # Compute pressure increment (delp_inc). Compute - # guess and analysis layer pressures using Philips method - delp_inc = np.zeros((nlevs, nlats, nlons), float) - prsl_ges = np.zeros((nlevs, nlats, nlons), float) - prsl_anl = np.zeros((nlevs, nlats, nlons), float) - for k in range(0, nlevs): - dbk = bk[k+1] - bk[k] - delp_inc[k, :, :] = ps_inc[:, :] * dbk - prsl_ges[k, :, :] = ((prsi_ges[k+1, :, :]**kap1 - prsi_ges[k, :, :]**kap1) / (kap1*(prsi_ges[k+1, :, :] - prsi_ges[k, :, :])))**kapr - prsl_anl[k, :, :] = ((prsi_anl[k+1, :, :]**kap1 - prsi_anl[k, :, :]**kap1) / (kap1*(prsi_anl[k+1, :, :] - prsi_anl[k, :, :])))**kapr - - # Write delp increment to output file - x = ncout.createVariable('delp_inc', 'f4', dimsout_inc) - ncout['delp_inc'][:] = delp_inc[:] - - # Compute analysis temperature andl specific humidity - t_anl = np.zeros((nlevs, nlats, nlons), float) - q_anl = np.zeros((nlevs, nlats, nlons), float) - t_anl = t_ges + t_inc - q_anl = q_ges + q_inc - - # Compute guess and analysis virtual temperature - tv_ges = np.zeros((nlevs, nlats, nlons), float) - tv_anl = np.zeros((nlevs, nlats, nlons), float) - tv_ges = t_ges * (1.0 + fv*q_ges) - tv_anl = t_anl * (1.0 + fv*q_anl) - - # Compute guess and analysis delz and delz increment - delz_ges = np.zeros((nlevs, nlats, nlons), float) - delz_anl = np.zeros((nlevs, nlats, nlons), float) - delz_inc = np.zeros((nlevs, nlats, nlons), float) - for k in range(0, nlevs): - if k == 0: - delz_ges[k, :, :] = rdog * tv_ges[:, k, :, :] * np.log(prsl_ges[k, :, :]/prsi_ges[k+1, :, :]) - delz_anl[k, :, :] = rdog * tv_anl[:, k, :, :] * np.log(prsl_anl[k, :, :]/prsi_anl[k+1, :, :]) - else: - delz_ges[k, :, :] = rdog * tv_ges[:, k, :, :] * np.log(prsi_ges[k, :, :]/prsi_ges[k+1, :, :]) - delz_anl[k, :, :] = rdog * tv_anl[:, k, :, :] * np.log(prsi_anl[k, :, :]/prsi_anl[k+1, :, :]) - - delz_inc[k, :, :] = delz_anl[k, :, :] - delz_ges[k, :, :] - - # Write delz increment to output file - x = ncout.createVariable('delz_inc', 'f4', dimsout_inc) - ncout['delz_inc'][:] = delz_inc[:] - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument('FV3background', type=str, help='Input FV3 background file') - parser.add_argument('FV3JEDIincrement', type=str, help='Input FV3-JEDI LatLon Increment File') - parser.add_argument('FV3increment', type=str, help='Output FV3 Increment File') - args = parser.parse_args() - jedi_inc_to_fv3(args.FV3background, args.FV3JEDIincrement, args.FV3increment) diff --git a/utils/fv3jedi/fv3jedi_fv3inc.h b/utils/fv3jedi/fv3jedi_fv3inc.h index 8044692a0..183e426aa 100644 --- a/utils/fv3jedi/fv3jedi_fv3inc.h +++ b/utils/fv3jedi/fv3jedi_fv3inc.h @@ -110,12 +110,21 @@ namespace gdasapp { // Read background state fv3jedi::State xxBkg(stateGeom, stateInputConfig); - oops::Log::test() << "Background State: " << std::endl << xxBkg << std::endl; // Read JEDI increment fv3jedi::Increment dxJEDI(jediIncrGeom, jediIncrVars, xxBkg.validTime()); dxJEDI.read(jediIncrInputConfig); - oops::Log::test() << "JEDI Increment: " << std::endl << dxJEDI << std::endl; + + // Testing output for inputs + if ( nmem == 1 ) { + oops::Log::test() << "Background State:" << std::endl << xxBkg << std::endl; + oops::Log::test() << "JEDI Increment:" << std::endl << dxJEDI << std::endl; + } else { + oops::Log::test() << "Background State for member " << imem << ":" << std::endl \ + << xxBkg << std::endl; + oops::Log::test() << "JEDI Increment for member " << imem << ":" << std::endl \ + << dxJEDI << std::endl; + } // Increment conversion // --------------------------------------------------------------------------------- @@ -156,7 +165,14 @@ namespace gdasapp { } } dxFV3.fromFieldSet(dxFsFV3); - oops::Log::test() << "FV3 Increment: " << std::endl << dxFV3 << std::endl; + + // Test output for outputs + if ( nmem == 1 ) { + oops::Log::test() << "FV3 Increment:" << std::endl << dxFV3 << std::endl; + } else { + oops::Log::test() << "FV3 Increment for member " << imem << ":" << std::endl \ + << dxFV3 << std::endl; + } // Write FV3 increment dxFV3.write(fv3IncrOuputConfig);