diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 5c277da0b..c08db54f2 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -13,3 +13,4 @@ | MetBenjaminWent | Benjamin Went | Met Office | 2026-01-15 | | timgraham-Met | Tim Graham | Met Office | 2026-01-15 | | mo-alistairp | Alistair Pirrie | Met Office | 2026-01-19 | +| cjohnson-pi | Christine Johnson | Met Office | 2026-01-19 | diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_operator_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_operator_alg_mod.x90 index 36906bb77..76f74e0f1 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_operator_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_operator_alg_mod.x90 @@ -7,7 +7,7 @@ module adjt_mixed_operator_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use log_mod, only: log_event, & log_scratch_space, & LOG_LEVEL_DEBUG, & @@ -83,7 +83,6 @@ contains real(kind=r_def) :: machine_tol, machine_tol_r_solver real(kind=r_def) :: relative_diff, relative_diff_r_solver real(kind=r_def), parameter :: overall_tolerance = 1000.0_r_def - real(kind=r_def), parameter :: eps = 1e-30_r_def integer(kind=tik) :: id if ( LPROF ) call start_timing( id, 'adjt_mixed_operator_alg' ) @@ -167,9 +166,9 @@ contains write(log_scratch_space, *) "w inner product = ", w_inner_prod call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) - p_sf = 1.0_r_def / (p_inner_prod + eps) - uv_sf = 1.0_r_def / (uv_inner_prod + eps) - w_sf = 1.0_r_def / (w_inner_prod + eps) + p_sf = 1.0_r_def / (p_inner_prod + EPS) + uv_sf = 1.0_r_def / (uv_inner_prod + EPS) + w_sf = 1.0_r_def / (w_inner_prod + EPS) inner1 = 0.0_r_def inner1 = inner1 + p_inner_prod * p_sf diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_schur_preconditioner_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_schur_preconditioner_alg_mod.x90 index 3c214bdd1..7e506f24d 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_schur_preconditioner_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_schur_preconditioner_alg_mod.x90 @@ -7,7 +7,7 @@ module adjt_mixed_schur_preconditioner_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use log_mod, only: log_event, & log_scratch_space, & LOG_LEVEL_INFO, & @@ -125,7 +125,6 @@ contains real(kind=r_def), parameter :: overall_tolerance = 1000.0_r_def real(kind=r_def) :: machine_tol, machine_tol_r_solver real(kind=r_def) :: relative_diff, relative_diff_r_solver - real(kind=r_def), parameter :: eps = 1e-30_r_def integer(kind=tik) :: id if ( LPROF ) call start_timing( id, 'adjt_mixed_schur_preconditioner_alg' ) @@ -254,9 +253,9 @@ contains write(log_scratch_space, *) "w inner product = ", w_inner_prod call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) - p_sf = 1.0_r_def / (p_inner_prod + eps) - uv_sf = 1.0_r_def / (uv_inner_prod + eps) - w_sf = 1.0_r_def / (w_inner_prod + eps) + p_sf = 1.0_r_def / (p_inner_prod + EPS) + uv_sf = 1.0_r_def / (uv_inner_prod + EPS) + w_sf = 1.0_r_def / (w_inner_prod + EPS) inner1 = 0.0_r_def inner1 = inner1 + p_inner_prod * p_sf diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_solver_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_solver_alg_mod.x90 index df216b670..9c38dc65e 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_solver_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_mixed_solver_alg_mod.x90 @@ -7,7 +7,7 @@ module adjt_mixed_solver_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use log_mod, only: log_event, & log_scratch_space, & LOG_LEVEL_INFO, & @@ -142,7 +142,6 @@ contains real(kind=r_def), parameter :: overall_tolerance = 1000.0_r_def real(kind=r_def) :: machine_tol, machine_tol_r_solver real(kind=r_def) :: relative_diff, relative_diff_r_solver - real(kind=r_def), parameter :: eps = 1e-30_r_def integer(tik) :: id if ( LPROF ) call start_timing( id, 'adjt_mixed_solver_alg' ) @@ -285,9 +284,9 @@ contains call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) ! Scaling factors are scaled up a bit to avoid numerical issues - p_sf = 1.0E4_r_def / (p_inner_prod + eps) - uv_sf = 1.0E4_r_def / (uv_inner_prod + eps) - w_sf = 1.0E4_r_def / (w_inner_prod + eps) + p_sf = 1.0E4_r_def / (p_inner_prod + EPS) + uv_sf = 1.0E4_r_def / (uv_inner_prod + EPS) + w_sf = 1.0E4_r_def / (w_inner_prod + EPS) inner1 = 0.0_r_def inner1 = inner1 + p_inner_prod * p_sf diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_pressure_precon_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_pressure_precon_alg_mod.x90 index 308b1f180..d2d385428 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_pressure_precon_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_pressure_precon_alg_mod.x90 @@ -7,7 +7,7 @@ module adjt_pressure_precon_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use log_mod, only: log_event, & log_scratch_space, & LOG_LEVEL_INFO, & @@ -114,7 +114,6 @@ contains real(kind=r_def), parameter :: overall_tolerance = 1000.0_r_def real(kind=r_def) :: machine_tol, machine_tol_r_solver real(kind=r_def) :: relative_diff, relative_diff_r_solver - real(kind=r_def), parameter :: eps = 1e-30_r_def integer(tik) :: id if ( LPROF ) call start_timing( id, 'adjt_pressure_precon_alg' ) @@ -236,7 +235,7 @@ contains write(log_scratch_space, *) "p inner product = ", p_inner_prod call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) - p_sf = 1.0_r_def / (p_inner_prod + eps) + p_sf = 1.0_r_def / (p_inner_prod + EPS) inner1 = 0.0_r_def inner1 = inner1 + p_inner_prod * p_sf diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_scaled_matrix_vector_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_scaled_matrix_vector_alg_mod.x90 index 81c23dd57..33a2a9f96 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_scaled_matrix_vector_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_scaled_matrix_vector_alg_mod.x90 @@ -9,7 +9,7 @@ !> @brief Module containing adjoint test for scaled_matrix_vector_kernel module adjt_scaled_matrix_vector_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use field_mod, only: field_type use finite_element_config_mod, only: element_order_h, element_order_v use fs_continuity_mod, only: W2, W3, Wtheta @@ -77,7 +77,6 @@ module adjt_scaled_matrix_vector_alg_mod real(kind=r_def) :: machine_tolerance real(kind=r_def) :: relative_diff real(kind=r_def), parameter :: overall_tolerance = 1500.0_r_def - real(kind=r_def), parameter :: eps = 1e-30_r_def ! Setup @@ -128,7 +127,7 @@ module adjt_scaled_matrix_vector_alg_mod write(log_scratch_space, *) "vector inner product = ", vector_inner_prod call log_event( log_scratch_space, LOG_LEVEL_DEBUG ) - vector_sf = 1.0_r_def / (vector_inner_prod + eps) + vector_sf = 1.0_r_def / (vector_inner_prod + EPS) inner1 = 0.0_r_def inner1 = inner1 + vector_inner_prod * vector_sf diff --git a/applications/adjoint_tests/source/algorithm/solver/adjt_semi_implicit_solver_step_alg_mod.x90 b/applications/adjoint_tests/source/algorithm/solver/adjt_semi_implicit_solver_step_alg_mod.x90 index efb6ffc53..13c990b7c 100644 --- a/applications/adjoint_tests/source/algorithm/solver/adjt_semi_implicit_solver_step_alg_mod.x90 +++ b/applications/adjoint_tests/source/algorithm/solver/adjt_semi_implicit_solver_step_alg_mod.x90 @@ -7,7 +7,7 @@ module adjt_semi_implicit_solver_step_alg_mod - use constants_mod, only: i_def, r_def, l_def, r_solver + use constants_mod, only: i_def, r_def, l_def, r_solver, EPS use log_mod, only: log_event, & log_scratch_space, & LOG_LEVEL_INFO, & @@ -307,7 +307,6 @@ contains real(kind=r_def), parameter :: overall_tolerance = 1000.0_r_def real(kind=r_def) :: machine_tol, machine_tol_r_solver real(kind=r_def) :: relative_diff, relative_diff_r_solver - real(kind=r_def), parameter :: eps = 1e-30_r_def integer(kind=i_def) :: i @@ -363,17 +362,17 @@ contains end do ! Scaling factors are scaled up a bit to avoid numerical issues - state_sf(igh_u) = 1.0E4_r_def / (state_inner_prod(igh_u) + eps) - state_sf(igh_t) = 1.0E4_r_def / (state_inner_prod(igh_t) + eps) - state_sf(igh_d) = 1.0E4_r_def / (state_inner_prod(igh_d) + eps) - state_sf(igh_p) = 1.0E4_r_def / (state_inner_prod(igh_p) + eps) - rhs_sf(igh_u) = 1.0E4_r_def / (rhs_inner_prod(igh_u) + eps) - rhs_sf(igh_t) = 1.0E4_r_def / (rhs_inner_prod(igh_t) + eps) - rhs_sf(igh_d) = 1.0E4_r_def / (rhs_inner_prod(igh_d) + eps) - rhs_sf(igh_p) = 1.0E4_r_def / (rhs_inner_prod(igh_p) + eps) - moist_dyn_gas_law_sf = 1.0E4_r_def / (moist_dyn_gas_law_inner_prod + eps) + state_sf(igh_u) = 1.0E4_r_def / (state_inner_prod(igh_u) + EPS) + state_sf(igh_t) = 1.0E4_r_def / (state_inner_prod(igh_t) + EPS) + state_sf(igh_d) = 1.0E4_r_def / (state_inner_prod(igh_d) + EPS) + state_sf(igh_p) = 1.0E4_r_def / (state_inner_prod(igh_p) + EPS) + rhs_sf(igh_u) = 1.0E4_r_def / (rhs_inner_prod(igh_u) + EPS) + rhs_sf(igh_t) = 1.0E4_r_def / (rhs_inner_prod(igh_t) + EPS) + rhs_sf(igh_d) = 1.0E4_r_def / (rhs_inner_prod(igh_d) + EPS) + rhs_sf(igh_p) = 1.0E4_r_def / (rhs_inner_prod(igh_p) + EPS) + moist_dyn_gas_law_sf = 1.0E4_r_def / (moist_dyn_gas_law_inner_prod + EPS) do i = 1, nummr - mr_sf(i) = 1.0E4_r_def / (mr_inner_prod(i) + eps) + mr_sf(i) = 1.0E4_r_def / (mr_inner_prod(i) + EPS) end do inner1 = 0.0_r_def diff --git a/applications/adjoint_tests/source/driver/adjoint_test_parameters_mod.F90 b/applications/adjoint_tests/source/driver/adjoint_test_parameters_mod.F90 index 09f74b4c9..9db0ddb99 100644 --- a/applications/adjoint_tests/source/driver/adjoint_test_parameters_mod.F90 +++ b/applications/adjoint_tests/source/driver/adjoint_test_parameters_mod.F90 @@ -28,12 +28,12 @@ module adjoint_test_parameters_mod ! if the ls is not realistic. ls can still be ! randomly assigned, but in a sensible range ! to prevent these issues. - real(r_def), dimension(2), parameter :: ls_u_range = (/ 0.0_r_def, 10.0_r_def /) + real(r_def), dimension(2), parameter :: ls_u_range = (/ 1.e2_r_def, 1.e3_r_def /) real(r_def), dimension(2), parameter :: ls_theta_range = (/ 280.0_r_def, 340.0_r_def /) - real(r_def), dimension(2), parameter :: ls_rho_range = (/ 0.0_r_def, 1.0_r_def /) - real(r_def), dimension(2), parameter :: ls_exner_range = (/ 0.0_r_def, 1.0_r_def /) - real(r_def), dimension(2), parameter :: ls_md1_range = (/ 0.0_r_def, 1.0_r_def /) - real(r_def), dimension(2), parameter :: ls_md2_range = (/ 0.0_r_def, 1.0_r_def /) - real(r_def), dimension(2), parameter :: ls_md3_range = (/ 0.0_r_def, 1.0_r_def /) + real(r_def), dimension(2), parameter :: ls_rho_range = (/ 0.1_r_def, 1.0_r_def /) + real(r_def), dimension(2), parameter :: ls_exner_range = (/ 0.1_r_def, 1.0_r_def /) + real(r_def), dimension(2), parameter :: ls_md1_range = (/ 0.1_r_def, 1.0_r_def /) + real(r_def), dimension(2), parameter :: ls_md2_range = (/ 0.1_r_def, 1.0_r_def /) + real(r_def), dimension(2), parameter :: ls_md3_range = (/ 0.1_r_def, 1.0_r_def /) end module adjoint_test_parameters_mod diff --git a/rose-stem/app/adjoint_tests/file/field_def_diags_ls.xml b/rose-stem/app/adjoint_tests/file/field_def_diags_ls.xml new file mode 100644 index 000000000..8a2c34e54 --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/field_def_diags_ls.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_ancil.xml b/rose-stem/app/adjoint_tests/file/file_def_ancil.xml new file mode 100644 index 000000000..43c9e9e44 --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_ancil.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_check_restart.xml b/rose-stem/app/adjoint_tests/file/file_def_check_restart.xml new file mode 100644 index 000000000..05ba6dcbc --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_check_restart.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_diags.xml b/rose-stem/app/adjoint_tests/file/file_def_diags.xml new file mode 100644 index 000000000..c12613f00 --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_diags.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_diags_ls.xml b/rose-stem/app/adjoint_tests/file/file_def_diags_ls.xml new file mode 100644 index 000000000..0cdd03798 --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_diags_ls.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_initial.xml b/rose-stem/app/adjoint_tests/file/file_def_initial.xml new file mode 100644 index 000000000..05a68968e --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_initial.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_ls.xml b/rose-stem/app/adjoint_tests/file/file_def_ls.xml new file mode 100644 index 000000000..63e02702a --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_ls.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/file_def_read.xml b/rose-stem/app/adjoint_tests/file/file_def_read.xml new file mode 100644 index 000000000..61cc7f81e --- /dev/null +++ b/rose-stem/app/adjoint_tests/file/file_def_read.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/file/iodef.xml b/rose-stem/app/adjoint_tests/file/iodef.xml index f51713b2a..0e910ff29 100644 --- a/rose-stem/app/adjoint_tests/file/iodef.xml +++ b/rose-stem/app/adjoint_tests/file/iodef.xml @@ -5,285 +5,54 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/adjoint_tests/opt/rose-app-64bit.conf b/rose-stem/app/adjoint_tests/opt/rose-app-64bit.conf new file mode 100644 index 000000000..c2ebcf72b --- /dev/null +++ b/rose-stem/app/adjoint_tests/opt/rose-app-64bit.conf @@ -0,0 +1,13 @@ +[file:iodef_temp.xml] +mode=auto +source=$ROSE_SUITE_DIR/app/adjoint_tests/file/iodef.xml + +[namelist:helmholtz_solver] +si_pressure_tolerance=1.0e-15 + +[namelist:linear] +fixed_ls=.false. + +[namelist:mixed_solver] +mixed_solver_a_tol=1.0e-21 +si_tolerance=1.0e-21 diff --git a/rose-stem/app/adjoint_tests/opt/rose-app-default.conf b/rose-stem/app/adjoint_tests/opt/rose-app-default.conf index e69de29bb..dba827637 100644 --- a/rose-stem/app/adjoint_tests/opt/rose-app-default.conf +++ b/rose-stem/app/adjoint_tests/opt/rose-app-default.conf @@ -0,0 +1,3 @@ +[file:iodef_temp.xml] +mode=auto +source=$ROSE_SUITE_DIR/app/adjoint_tests/file/iodef.xml diff --git a/rose-stem/app/adjoint_tests/rose-app.conf b/rose-stem/app/adjoint_tests/rose-app.conf index 20c70408b..fb61417fd 100644 --- a/rose-stem/app/adjoint_tests/rose-app.conf +++ b/rose-stem/app/adjoint_tests/rose-app.conf @@ -1,7 +1,7 @@ meta=lfric-adjoint_tests/vn3.0 [command] -default=$LAUNCH_SCRIPT/launch-exe +default=rose env-cat iodef_temp.xml -o iodef.xml; $LAUNCH_SCRIPT/launch-exe [env] ENSEMBLE_MEMBER=0 @@ -421,7 +421,7 @@ normalise=.true. preconditioner='tridiagonal' si_pressure_a_tol=0 si_pressure_maximum_iterations=400 -si_pressure_tolerance=1.0e-15 +si_pressure_tolerance=1.0e-6 [namelist:iau] !!iau_ainc_multifile=.false. @@ -724,14 +724,14 @@ fail_on_non_converged=.false. gcrk=10 guess_np1=.false. !!jacobi_relaxation=0 -mixed_solver_a_tol=1.0e-21 +mixed_solver_a_tol=1.0e-7 monitor_convergence=.true. normalise=.true. reference_reset_time=3600.0 si_maximum_iterations=10 si_method='block_gcr' si_preconditioner='pressure' -si_tolerance=1.0e-21 +si_tolerance=1.0e-8 split_w=.true. [namelist:mixing] diff --git a/rose-stem/app/linear_model/file/field_def_diags_ls.xml b/rose-stem/app/linear_model/file/field_def_diags_ls.xml new file mode 100644 index 000000000..8a2c34e54 --- /dev/null +++ b/rose-stem/app/linear_model/file/field_def_diags_ls.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_ancil.xml b/rose-stem/app/linear_model/file/file_def_ancil.xml new file mode 100644 index 000000000..43c9e9e44 --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_ancil.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_check_restart.xml b/rose-stem/app/linear_model/file/file_def_check_restart.xml new file mode 100644 index 000000000..05ba6dcbc --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_check_restart.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_diags.xml b/rose-stem/app/linear_model/file/file_def_diags.xml new file mode 100644 index 000000000..c12613f00 --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_diags.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_diags_ls.xml b/rose-stem/app/linear_model/file/file_def_diags_ls.xml new file mode 100644 index 000000000..0cdd03798 --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_diags_ls.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_initial.xml b/rose-stem/app/linear_model/file/file_def_initial.xml new file mode 100644 index 000000000..05a68968e --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_initial.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_ls.xml b/rose-stem/app/linear_model/file/file_def_ls.xml new file mode 100644 index 000000000..63e02702a --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_ls.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/file_def_read.xml b/rose-stem/app/linear_model/file/file_def_read.xml new file mode 100644 index 000000000..61cc7f81e --- /dev/null +++ b/rose-stem/app/linear_model/file/file_def_read.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/rose-stem/app/linear_model/file/iodef.xml b/rose-stem/app/linear_model/file/iodef.xml index d9d6303af..0e910ff29 100644 --- a/rose-stem/app/linear_model/file/iodef.xml +++ b/rose-stem/app/linear_model/file/iodef.xml @@ -5,331 +5,54 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - processed__tot_col_uv_kinetic_energy + processed__tot_col_w_kinetic_energy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rose-stem/site/common/adjoint_tests/tasks_adjoint_tests.cylc b/rose-stem/site/common/adjoint_tests/tasks_adjoint_tests.cylc index 6a32d88bf..dbc9239f1 100644 --- a/rose-stem/site/common/adjoint_tests/tasks_adjoint_tests.cylc +++ b/rose-stem/site/common/adjoint_tests/tasks_adjoint_tests.cylc @@ -19,6 +19,13 @@ "resolution": "C12", }) %} +{% elif task_ns.conf_name == "64bit-C12" %} + + {% do task_dict.update({ + "opt_confs": ["64bit"], + "resolution": "C12", + }) %} + {% elif task_ns.conf_name == "canned" %} {% do task_dict.update({ diff --git a/rose-stem/site/common/linear_model/tasks_linear_model.cylc b/rose-stem/site/common/linear_model/tasks_linear_model.cylc index 23b91946c..fb054999f 100644 --- a/rose-stem/site/common/linear_model/tasks_linear_model.cylc +++ b/rose-stem/site/common/linear_model/tasks_linear_model.cylc @@ -13,7 +13,7 @@ "DT": 1800, "tsteps": 12, "mpi_parts": 6, - "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_C12 theta:exner:rho:u_in_w2h:v_in_w2h:w_in_wth:m_v:m_cl:m_r:m_s 120:0:5", + "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_C12 theta:exner:rho:u_in_w3:v_in_w3:m_v:m_cl:m_r:m_cf 120:0:5", }) %} {% elif task_ns.conf_name == "nwp_gal9-C224_MG" %} @@ -27,8 +27,8 @@ "xios_nodes": 4, "mpi_parts_xios" : 16, "log_level": "debug", + "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_C224 theta:exner:rho:u_in_w3 120:0:5", "tech-tests_wallclock": 30, - "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_C224 theta:exner:rho:u_in_w2h 120:0:5", }) %} {% elif task_ns.conf_name == "nwp_gal9_random-C12_MG" %} @@ -39,7 +39,7 @@ "DT": 1800, "tsteps": 12, "mpi_parts": 6, - "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_random theta:exner:rho:u_in_w2h:v_in_w2h:w_in_wth:m_v:m_cl:m_r:m_s 120:0:5", + "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_random theta:exner:rho:u_in_w3:v_in_w3:m_v:m_cl:m_r:m_cf 120:0:5", }) %} {% elif task_ns.conf_name == "nwp_gal9_zero-C12_MG" %} @@ -50,6 +50,7 @@ "DT": 1800, "tsteps": 12, "mpi_parts": 6, + "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 70 linear_model-nwp-gal9_random theta:exner:rho:m_v:m_cl:m_r:m_cf 120:0:5", }) %} {% elif task_ns.conf_name == "runge-kutta-C12" %} @@ -81,7 +82,7 @@ "DT": 10, "tsteps": 180, "mpi_parts": 12, - "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 10 linear_model-dcmip theta:exner:rho:u_in_w2h:v_in_w2h:w_in_wth 120:0:5" + "plot_str": "linear.py $NODAL_DATA_DIR/lfric_diag.nc $PLOT_DIR 10 linear_model-dcmip theta:exner:rho:u_in_w3:v_in_w3 120:0:5" }) %} {% elif task_ns.conf_name == "canned" %} diff --git a/rose-stem/site/meto/groups/groups_adjoint_tests.cylc b/rose-stem/site/meto/groups/groups_adjoint_tests.cylc index 804f53ee8..bdfef1608 100644 --- a/rose-stem/site/meto/groups/groups_adjoint_tests.cylc +++ b/rose-stem/site/meto/groups/groups_adjoint_tests.cylc @@ -8,9 +8,9 @@ {# Azspice Groups #} {% do site_groups.update({ "adjoint_tests_azspice_developer": [ - "adjoint_tests_default-C12_azspice_gnu_fast-debug-64bit-rsolver64", - "adjoint_tests_default-C12_azspice_gnu_full-debug-64bit-rsolver64", - "adjoint_tests_varying_ls-C12_azspice_gnu_fast-debug-64bit-rsolver64", + "adjoint_tests_default-C12_azspice_gnu_production-32bit", + "adjoint_tests_64bit-C12_azspice_gnu_fast-debug-64bit-rsolver64", + "adjoint_tests_64bit-C12_azspice_gnu_full-debug-64bit-rsolver64", "adjoint_tests_azspice_canned", ], "adjoint_tests_azspice": [ @@ -20,7 +20,7 @@ "adjoint_tests_canned_azspice_gnu_fast-debug-64bit-rsolver64", ], "adjoint_tests_azspice_build": [ - "build_adjoint_tests_azspice_gnu_fast-debug-64bit", + "build_adjoint_tests_azspice_gnu_production-32bit", "build_adjoint_tests_azspice_gnu_full-debug-64bit", ], }) %} @@ -28,8 +28,9 @@ {# EX1A Groups #} {% do site_groups.update({ "adjoint_tests_ex1a_developer": [ - "adjoint_tests_default-C12_ex1a_gnu_fast-debug-64bit-rsolver64", - "adjoint_tests_default-C12_ex1a_gnu_full-debug-64bit-rsolver64", + "adjoint_tests_default-C12_ex1a_gnu_production-32bit", + "adjoint_tests_64bit-C12_ex1a_gnu_fast-debug-64bit-rsolver64", + "adjoint_tests_64bit-C12_ex1a_gnu_full-debug-64bit-rsolver64", "adjoint_tests_ex1a_canned", ], "adjoint_tests_ex1a": [ @@ -39,7 +40,7 @@ "adjoint_tests_canned_ex1a_gnu_fast-debug-64bit-rsolver64", ], "adjoint_tests_ex1a_build": [ - "build_adjoint_tests_ex1a_gnu_fast-debug-64bit", + "build_adjoint_tests_ex1a_gnu_production-32bit", "build_adjoint_tests_ex1a_gnu_full-debug-64bit", ], }) %} diff --git a/rose-stem/site/meto/groups/groups_linear_model.cylc b/rose-stem/site/meto/groups/groups_linear_model.cylc index b584e591e..062689d42 100644 --- a/rose-stem/site/meto/groups/groups_linear_model.cylc +++ b/rose-stem/site/meto/groups/groups_linear_model.cylc @@ -8,6 +8,7 @@ {# Azspice Groups #} {% do site_groups.update({ "linear_model_azspice_developer": [ + "linear_model_nwp_gal9-C12_MG_azspice_gnu_production-32bit", "linear_model_nwp_gal9-C12_MG_azspice_gnu_fast-debug-64bit", "linear_model_nwp_gal9_random-C12_MG_azspice_gnu_fast-debug-64bit", "linear_model_nwp_gal9_zero-C12_MG_azspice_gnu_fast-debug-64bit", @@ -31,12 +32,21 @@ {# EX1A Groups #} {% do site_groups.update({ "linear_model_ex1a_developer": [ - "linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-64bit", - "linear_model_nwp_gal9_random-C12_MG_ex1a_gnu_fast-debug-64bit", - "linear_model_nwp_gal9_zero-C12_MG_ex1a_gnu_fast-debug-64bit", "linear_model_runge-kutta-C12_ex1a_gnu_fast-debug-64bit", "linear_model_semi-implicit-C12_ex1a_gnu_fast-debug-64bit", "linear_model_dcmip301-C24_ex1a_gnu_fast-debug-64bit", + "linear_model_nwp_gal9_random-C12_MG_ex1a_gnu_fast-debug-64bit", + "linear_model_nwp_gal9_zero-C12_MG_ex1a_gnu_fast-debug-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-32bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-32bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-32bit", + "linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-32bit", + "linear_model_nwp_gal9-C12_MG_ex1a_cce_production-64bit", + "linear_model_nwp_gal9-C12_MG_ex1a_cce_production-32bit", "linear_model_ex1a_canned", ], "linear_model_ex1a": [ diff --git a/rose-stem/site/meto/kgos/linear_model/azspice/checksum_linear_model_nwp_gal9-C12_MG_azspice_gnu_production-32bit.txt b/rose-stem/site/meto/kgos/linear_model/azspice/checksum_linear_model_nwp_gal9-C12_MG_azspice_gnu_production-32bit.txt new file mode 100644 index 000000000..c934afe08 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/azspice/checksum_linear_model_nwp_gal9-C12_MG_azspice_gnu_production-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4ACAE6 +Inner product checksum theta = 4B0FFC49 +Inner product checksum u = 6B52658C +Inner product checksum mr1 = 39DC40E0 +Inner product checksum mr2 = 37599186 +Inner product checksum mr3 = 36FF90E9 +Inner product checksum mr4 = 376A1F26 +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-32bit.txt new file mode 100644 index 000000000..e80557eca --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4ACE5F +Inner product checksum theta = 4B0FFDD1 +Inner product checksum u = 6B52681C +Inner product checksum mr1 = 39DC44FB +Inner product checksum mr2 = 3759A01B +Inner product checksum mr3 = 36FFA7F1 +Inner product checksum mr4 = 376A28C7 +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-64bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-64bit.txt new file mode 100644 index 000000000..229501ffa --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_fast-debug-64bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3FA958EF383B0782 +Inner product checksum theta = 4161FFBE25C862BD +Inner product checksum u = 456A4D0A84F080A3 +Inner product checksum mr1 = 3F3B887BAF34DBFF +Inner product checksum mr2 = 3EEB31093A6C92AD +Inner product checksum mr3 = 3EDFF31B7D494BE0 +Inner product checksum mr4 = 3EED42825E6771A0 +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-32bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-32bit.txt new file mode 100644 index 000000000..e6510b951 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4AF97F +Inner product checksum theta = 4B0FFB8A +Inner product checksum u = 6B5264A4 +Inner product checksum mr1 = 39DC524B +Inner product checksum mr2 = 3759A43A +Inner product checksum mr3 = 36FF9496 +Inner product checksum mr4 = 376A002D +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-64bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-64bit.txt new file mode 100644 index 000000000..aaea37eb9 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_cce_production-64bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3FA958F7049182F0 +Inner product checksum theta = 4161FFBD6EBABDF1 +Inner product checksum u = 456A4D0A64E2B7A7 +Inner product checksum mr1 = 3F3B8855C1E5D2B9 +Inner product checksum mr2 = 3EEB3109C255DDD4 +Inner product checksum mr3 = 3EDFF31B85B04D4A +Inner product checksum mr4 = 3EED428246BF621C +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-32bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-32bit.txt new file mode 100644 index 000000000..c2ac32349 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_fast-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4ACBD4 +Inner product checksum theta = 4B0FFCD7 +Inner product checksum u = 6B526688 +Inner product checksum mr1 = 39DC44FD +Inner product checksum mr2 = 37599DDD +Inner product checksum mr3 = 36FF9C03 +Inner product checksum mr4 = 376A223A +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-32bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-32bit.txt new file mode 100644 index 000000000..c2ac32349 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4ACBD4 +Inner product checksum theta = 4B0FFCD7 +Inner product checksum u = 6B526688 +Inner product checksum mr1 = 39DC44FD +Inner product checksum mr2 = 37599DDD +Inner product checksum mr3 = 36FF9C03 +Inner product checksum mr4 = 376A223A +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-64bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-64bit.txt new file mode 100644 index 000000000..8839d63b9 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_full-debug-64bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3FA958F09D97D52D +Inner product checksum theta = 4161FFBE7B6B7DE1 +Inner product checksum u = 456A4D0ACAB467CA +Inner product checksum mr1 = 3F3B888D5EA6A45C +Inner product checksum mr2 = 3EEB310977D9678E +Inner product checksum mr3 = 3EDFF31B705B97D8 +Inner product checksum mr4 = 3EED42824B13222B +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-32bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-32bit.txt new file mode 100644 index 000000000..ee7721fa6 --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-32bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3D4ACB2D +Inner product checksum theta = 4B0FFC10 +Inner product checksum u = 6B526556 +Inner product checksum mr1 = 39DC4799 +Inner product checksum mr2 = 375987FC +Inner product checksum mr3 = 36FF91E4 +Inner product checksum mr4 = 376A23BA +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-64bit.txt b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-64bit.txt new file mode 100644 index 000000000..57c69ccdd --- /dev/null +++ b/rose-stem/site/meto/kgos/linear_model/ex1a/checksum_linear_model_nwp_gal9-C12_MG_ex1a_gnu_production-64bit.txt @@ -0,0 +1,9 @@ +Inner product checksum rho = 3FA958F2AD005117 +Inner product checksum theta = 4161FFC01F219433 +Inner product checksum u = 456A4D0C6EB9A688 +Inner product checksum mr1 = 3F3B888EDFD9349C +Inner product checksum mr2 = 3EEB3108D38837C3 +Inner product checksum mr3 = 3EDFF31B73A51CE4 +Inner product checksum mr4 = 3EED42827244488E +Inner product checksum mr5 = 0 +Inner product checksum mr6 = 0 diff --git a/science/gungho/source/diagnostics/diagnostics_io_mod.x90 b/science/gungho/source/diagnostics/diagnostics_io_mod.x90 index ad2f7737a..2b3c5dcec 100755 --- a/science/gungho/source/diagnostics/diagnostics_io_mod.x90 +++ b/science/gungho/source/diagnostics/diagnostics_io_mod.x90 @@ -17,6 +17,7 @@ module diagnostics_io_mod scalar_nodal_diagnostic_alg, & scalar_ugrid_diagnostic_alg, & vector_nodal_diagnostic_alg + use initialise_diagnostics_mod, only: diagnostic_to_be_sampled use io_config_mod, only: use_xios_io, write_fluxes use files_config_mod, only: diag_stem_name use function_space_collection_mod, only: function_space_collection @@ -139,9 +140,13 @@ subroutine write_scalar_diagnostic( field_name, field, & ! Check if we need to write an initial field if (clock%is_initialisation()) then - call output_field(1)%write_field(trim('init_'//field_name)) + if (diagnostic_to_be_sampled(trim('init_'//field_name))) then + call output_field(1)%write_field(trim('init_'//field_name)) + end if else - call output_field(1)%write_field(trim(field_name)) + if (diagnostic_to_be_sampled(trim(field_name))) then + call output_field(1)%write_field(trim(field_name)) + end if end if nullify(tmp_write_ptr) @@ -308,23 +313,47 @@ subroutine write_vector_diagnostic( field_name, field, & if (clock%is_initialisation()) then if (field_name == 'u') then - call u1_wind%write_field("init_u_in_w2h") - call u2_wind%write_field("init_v_in_w2h") - call u3_wind%write_field("init_w_in_wth") + if (diagnostic_to_be_sampled("init_u_in_w2h")) then + call u1_wind%write_field("init_u_in_w2h") + end if + if (diagnostic_to_be_sampled("init_v_in_w2h")) then + call u2_wind%write_field("init_v_in_w2h") + end if + if (diagnostic_to_be_sampled("init_w_in_wth")) then + call u3_wind%write_field("init_w_in_wth") + end if else - call u1_wind%write_field("init_"//trim(field_name)//"1") - call u2_wind%write_field("init_"//trim(field_name)//"2") - call u3_wind%write_field("init_"//trim(field_name)//"3") + if (diagnostic_to_be_sampled(trim(field_name)//"1")) then + call u1_wind%write_field("init_"//trim(field_name)//"1") + end if + if (diagnostic_to_be_sampled(trim(field_name)//"2")) then + call u2_wind%write_field("init_"//trim(field_name)//"2") + end if + if (diagnostic_to_be_sampled(trim(field_name)//"3")) then + call u3_wind%write_field("init_"//trim(field_name)//"3") + end if end if else if (field_name == 'u') then - call u1_wind%write_field("u_in_w2h") - call u2_wind%write_field("v_in_w2h") - call u3_wind%write_field("w_in_wth") + if (diagnostic_to_be_sampled("u_in_w2h")) then + call u1_wind%write_field("u_in_w2h") + end if + if (diagnostic_to_be_sampled("v_in_w2h")) then + call u2_wind%write_field("v_in_w2h") + end if + if (diagnostic_to_be_sampled("w_in_wth")) then + call u3_wind%write_field("w_in_wth") + end if else - call u1_wind%write_field(trim(field_name)//"1") - call u2_wind%write_field(trim(field_name)//"2") - call u3_wind%write_field(trim(field_name)//"3") + if (diagnostic_to_be_sampled(trim(field_name)//"1")) then + call u1_wind%write_field(trim(field_name)//"1") + end if + if (diagnostic_to_be_sampled(trim(field_name)//"2")) then + call u2_wind%write_field(trim(field_name)//"2") + end if + if (diagnostic_to_be_sampled(trim(field_name)//"3")) then + call u3_wind%write_field(trim(field_name)//"3") + end if end if end if diff --git a/science/gungho/source/driver/gungho_diagnostics_driver_mod.F90 b/science/gungho/source/driver/gungho_diagnostics_driver_mod.F90 index aff34838f..f1bfcab13 100644 --- a/science/gungho/source/driver/gungho_diagnostics_driver_mod.F90 +++ b/science/gungho/source/driver/gungho_diagnostics_driver_mod.F90 @@ -212,13 +212,25 @@ subroutine gungho_diagnostics_driver( modeldb, & call u_in_w2h%set_write_behaviour(tmp_write_ptr) call v_in_w2h%set_write_behaviour(tmp_write_ptr) if (modeldb%clock%is_initialisation()) then - call u_in_w2h%write_field("init_u_in_w2h") - call v_in_w2h%write_field("init_v_in_w2h") - call w_in_wth%write_field("init_w_in_wth") + if (diagnostic_to_be_sampled("init_u_in_w2h")) then + call u_in_w2h%write_field("init_u_in_w2h") + end if + if (diagnostic_to_be_sampled("init_v_in_w2h")) then + call v_in_w2h%write_field("init_v_in_w2h") + end if + if (diagnostic_to_be_sampled("init_w_in_wth")) then + call w_in_wth%write_field("init_w_in_wth") + end if else - call u_in_w2h%write_field("u_in_w2h") - call v_in_w2h%write_field("v_in_w2h") - call w_in_wth%write_field("w_in_wth") + if (diagnostic_to_be_sampled("u_in_w2h")) then + call u_in_w2h%write_field("u_in_w2h") + end if + if (diagnostic_to_be_sampled("v_in_w2h")) then + call v_in_w2h%write_field("v_in_w2h") + end if + if (diagnostic_to_be_sampled("w_in_wth")) then + call w_in_wth%write_field("w_in_wth") + end if end if else call write_vector_diagnostic('u', u, &