Skip to content

Commit 67b676d

Browse files
committed
Add variable dimensions to available_diags file
Adds appropriate horizontal and vertical dimension names to the entries listed in the available_diags file. Scalar diagnostics are denoted with a "scalar" string.
1 parent 792a061 commit 67b676d

File tree

1 file changed

+49
-6
lines changed

1 file changed

+49
-6
lines changed

src/framework/MOM_diag_mediator.F90

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2164,6 +2164,7 @@ integer function register_diag_field(module_name, field_name, axes_in, init_time
21642164
character(len=256) :: msg, cm_string
21652165
character(len=256) :: new_module_name
21662166
character(len=480) :: module_list, var_list
2167+
character(len=16) :: dimensions
21672168
integer :: num_modnm, num_varnm
21682169
logical :: active
21692170

@@ -2384,6 +2385,21 @@ integer function register_diag_field(module_name, field_name, axes_in, init_time
23842385
enddo ! i
23852386
enddo
23862387

2388+
dimensions = ""
2389+
if (axes_in%is_h_point) dimensions = trim(dimensions)//" ,yh, xh"
2390+
if (axes_in%is_q_point) dimensions = trim(dimensions)//" ,yq, xq"
2391+
if (axes_in%is_u_point) dimensions = trim(dimensions)//" ,yh, xq"
2392+
if (axes_in%is_v_point) dimensions = trim(dimensions)//" ,yq, xh"
2393+
if (axes_in%is_layer) dimensions = trim(dimensions)//", zl"
2394+
if (axes_in%is_interface) dimensions = trim(dimensions)//", zi"
2395+
2396+
if (len(dimensions) > 0) then
2397+
dimensions = trim(adjustl(dimensions))
2398+
if (dimensions(1:1) == ",") then
2399+
dimensions = dimensions(2:)
2400+
endif
2401+
endif
2402+
23872403
if (is_root_pe() .and. (diag_CS%available_diag_doc_unit > 0)) then
23882404
msg = ''
23892405
if (present(cmor_field_name)) msg = 'CMOR equivalent is "'//trim(cmor_field_name)//'"'
@@ -2395,7 +2411,7 @@ integer function register_diag_field(module_name, field_name, axes_in, init_time
23952411
if (num_varnm <= 1) var_list = ''
23962412

23972413
call log_available_diag(dm_id>0, module_list, field_name, cm_string, msg, diag_CS, &
2398-
long_name, units, standard_name, variants=var_list)
2414+
long_name, units, standard_name, variants=var_list, dimensions=dimensions)
23992415
endif
24002416

24012417
register_diag_field = dm_id
@@ -2897,6 +2913,7 @@ function register_scalar_field(module_name, field_name, init_time, diag_cs, &
28972913
integer :: dm_id, fms_id
28982914
type(diag_type), pointer :: diag => null(), cmor_diag => null()
28992915
character(len=256) :: posted_cmor_units, posted_cmor_standard_name, posted_cmor_long_name
2916+
character(len=16) :: dimensions
29002917

29012918
MOM_missing_value = diag_cs%missing_value
29022919
if (present(missing_value)) MOM_missing_value = missing_value
@@ -2956,15 +2973,18 @@ function register_scalar_field(module_name, field_name, init_time, diag_cs, &
29562973
endif
29572974
endif
29582975

2976+
dimensions = "scalar"
2977+
29592978
! Document diagnostics in list of available diagnostics
29602979
if (is_root_pe() .and. diag_CS%available_diag_doc_unit > 0) then
29612980
if (present(cmor_field_name)) then
29622981
call log_available_diag(associated(diag), module_name, field_name, '', '', diag_CS, &
29632982
long_name, units, standard_name, &
2964-
variants="{"//trim(field_name)//","//trim(cmor_field_name)//"}")
2983+
variants="{"//trim(field_name)//","//trim(cmor_field_name)//"}", &
2984+
dimensions=dimensions)
29652985
else
29662986
call log_available_diag(associated(diag), module_name, field_name, '', '', diag_CS, &
2967-
long_name, units, standard_name)
2987+
long_name, units, standard_name, dimensions=dimensions)
29682988
endif
29692989
endif
29702990

@@ -3016,6 +3036,7 @@ function register_static_field(module_name, field_name, axes, &
30163036
integer :: dm_id, fms_id
30173037
character(len=256) :: posted_cmor_units, posted_cmor_standard_name, posted_cmor_long_name
30183038
character(len=9) :: axis_name
3039+
character(len=16) :: dimensions
30193040

30203041
MOM_missing_value = axes%diag_cs%missing_value
30213042
if (present(missing_value)) MOM_missing_value = missing_value
@@ -3108,15 +3129,31 @@ function register_static_field(module_name, field_name, axes, &
31083129
endif
31093130
endif
31103131

3132+
dimensions = ""
3133+
if (axes%is_h_point) dimensions = trim(dimensions)//" ,yh, xh"
3134+
if (axes%is_q_point) dimensions = trim(dimensions)//" ,yq, xq"
3135+
if (axes%is_u_point) dimensions = trim(dimensions)//" ,yh, xq"
3136+
if (axes%is_v_point) dimensions = trim(dimensions)//" ,yq, xh"
3137+
if (axes%is_layer) dimensions = trim(dimensions)//", zl"
3138+
if (axes%is_interface) dimensions = trim(dimensions)//", zi"
3139+
3140+
if (len(dimensions) > 0) then
3141+
dimensions = trim(adjustl(dimensions))
3142+
if (dimensions(1:1) == ",") then
3143+
dimensions = dimensions(2:)
3144+
endif
3145+
endif
3146+
31113147
! Document diagnostics in list of available diagnostics
31123148
if (is_root_pe() .and. diag_CS%available_diag_doc_unit > 0) then
31133149
if (present(cmor_field_name)) then
31143150
call log_available_diag(associated(diag), module_name, field_name, '', '', diag_CS, &
31153151
long_name, units, standard_name, &
3116-
variants="{"//trim(field_name)//","//trim(cmor_field_name)//"}")
3152+
variants="{"//trim(field_name)//","//trim(cmor_field_name)//"}", &
3153+
dimensions=dimensions)
31173154
else
31183155
call log_available_diag(associated(diag), module_name, field_name, '', '', diag_CS, &
3119-
long_name, units, standard_name)
3156+
long_name, units, standard_name, dimensions=dimensions)
31203157
endif
31213158
endif
31223159

@@ -3865,13 +3902,14 @@ end subroutine alloc_diag_with_id
38653902

38663903
!> Log a diagnostic to the available diagnostics file.
38673904
subroutine log_available_diag(used, module_name, field_name, cell_methods_string, comment, &
3868-
diag_CS, long_name, units, standard_name, variants)
3905+
diag_CS, long_name, units, standard_name, variants, dimensions)
38693906
logical, intent(in) :: used !< Whether this diagnostic was in the diag_table or not
38703907
character(len=*), intent(in) :: module_name !< Name of the diagnostic module
38713908
character(len=*), intent(in) :: field_name !< Name of this diagnostic field
38723909
character(len=*), intent(in) :: cell_methods_string !< The spatial component of the CF cell_methods attribute
38733910
character(len=*), intent(in) :: comment !< A comment to append after [Used|Unused]
38743911
type(diag_ctrl), intent(in) :: diag_CS !< The diagnotics control structure
3912+
character(len=*), optional, intent(in) :: dimensions !< Descriptor of the horizontal and vertical dimensions
38753913
character(len=*), optional, intent(in) :: long_name !< CF long name of diagnostic
38763914
character(len=*), optional, intent(in) :: units !< Units for diagnostic
38773915
character(len=*), optional, intent(in) :: standard_name !< CF standardized name of diagnostic
@@ -3891,6 +3929,11 @@ subroutine log_available_diag(used, module_name, field_name, cell_methods_string
38913929
write(diag_CS%available_diag_doc_unit, '(a)') trim(mesg)
38923930
endif
38933931
call describe_option("modules", module_name, diag_CS)
3932+
if (present(dimensions)) then
3933+
if (len(trim(dimensions)) > 0) then
3934+
call describe_option("dimensions", dimensions, diag_CS)
3935+
endif
3936+
endif
38943937
if (present(long_name)) call describe_option("long_name", long_name, diag_CS)
38953938
if (present(units)) call describe_option("units", units, diag_CS)
38963939
if (present(standard_name)) &

0 commit comments

Comments
 (0)