Skip to content

Commit 5cce072

Browse files
authored
Merge pull request #576 from Hallberg-NOAA/dev/gfdl
Passed last week: https://gitlab.gfdl.noaa.gov/ogrp/MOM6/pipelines/2258 Also passed today on the newly refactored pipeline: https://gitlab.gfdl.noaa.gov/ogrp/MOM6/pipelines/2294
2 parents 28991ce + af42044 commit 5cce072

6 files changed

Lines changed: 121 additions & 53 deletions

File tree

config_src/coupled_driver/ocean_model_MOM.F90

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module ocean_model_mod
3535
!</OVERVIEW>
3636

3737
use MOM, only : initialize_MOM, step_MOM, MOM_control_struct, MOM_end
38-
use MOM, only : calculate_surface_state, finish_MOM_initialization
38+
use MOM, only : calculate_surface_state, allocate_surface_state, finish_MOM_initialization
3939
use MOM, only : step_offline
4040
use MOM_constants, only : CELSIUS_KELVIN_OFFSET, hlf
4141
use MOM_diag_mediator, only : diag_ctrl, enable_averaging, disable_averaging
@@ -240,7 +240,6 @@ subroutine ocean_model_init(Ocean_sfc, OS, Time_init, Time_in, gas_fields_ocn)
240240
character(len=40) :: mdl = "ocean_model_init" ! This module's name.
241241
character(len=48) :: stagger
242242
integer :: secs, days
243-
integer :: is, ie, js, je
244243
type(param_file_type) :: param_file !< A structure to parse for run-time parameters
245244
logical :: offline_tracer_mode
246245

@@ -262,16 +261,6 @@ subroutine ocean_model_init(Ocean_sfc, OS, Time_init, Time_in, gas_fields_ocn)
262261
OS%C_p = OS%MOM_CSp%tv%C_p
263262
OS%fluxes%C_p = OS%MOM_CSp%tv%C_p
264263

265-
is = OS%grid%isc ; ie = OS%grid%iec ; js = OS%grid%jsc ; je = OS%grid%jec
266-
if (present(gas_fields_ocn)) then
267-
call coupler_type_spawn(gas_fields_ocn, OS%state%tr_fields, &
268-
(/is,is,ie,ie/), (/js,js,je,je/))
269-
elseif (coupler_type_initialized(Ocean_sfc%fields)) then
270-
!### I think that this is never used.
271-
call coupler_type_spawn(Ocean_sfc%fields, OS%state%tr_fields, &
272-
(/is,is,ie,ie/), (/js,js,je,je/))
273-
endif
274-
275264
! Read all relevant parameters and write them to the model log.
276265
call log_version(param_file, mdl, version, "")
277266
call get_param(param_file, mdl, "RESTART_CONTROL", OS%Restart_control, &
@@ -327,23 +316,28 @@ subroutine ocean_model_init(Ocean_sfc, OS, Time_init, Time_in, gas_fields_ocn)
327316
call get_param(param_file, mdl, "KV_ICEBERG", OS%kv_iceberg, &
328317
"The viscosity of the icebergs", units="m2 s-1",default=1.0e10)
329318
call get_param(param_file, mdl, "DENSITY_ICEBERGS", OS%density_iceberg, &
330-
"A typical density of icebergs.", units="kg m-3", default=917.0)
319+
"A typical density of icebergs.", units="kg m-3", default=917.0)
331320
call get_param(param_file, mdl, "LATENT_HEAT_FUSION", OS%latent_heat_fusion, &
332321
"The latent heat of fusion.", units="J/kg", default=hlf)
333322
call get_param(param_file, mdl, "BERG_AREA_THRESHOLD", OS%berg_area_threshold, &
334323
"Fraction of grid cell which iceberg must occupy, so that fluxes \n"//&
335-
"below berg are set to zero. Not applied for negative \n"//&
324+
"below berg are set to zero. Not applied for negative \n"//&
336325
" values.", units="non-dim", default=-1.0)
337326
endif
338327

339328
OS%press_to_z = 1.0/(Rho0*G_Earth)
340329

330+
! Consider using a run-time flag to determine whether to do the diagnostic
331+
! vertical integrals, since the related 3-d sums are not negligible in cost.
332+
call allocate_surface_state(OS%state, OS%grid, OS%MOM_CSp%use_temperature, &
333+
do_integrals=.true., gas_fields_ocn=gas_fields_ocn)
334+
341335
call surface_forcing_init(Time_in, OS%grid, param_file, OS%MOM_CSp%diag, &
342336
OS%forcing_CSp, OS%restore_salinity, OS%restore_temp)
343337

344338
if (OS%use_ice_shelf) then
345-
call initialize_ice_shelf(param_file, OS%grid, OS%Time, OS%ice_shelf_CSp, &
346-
OS%MOM_CSp%diag, OS%fluxes)
339+
call initialize_ice_shelf(param_file, OS%grid, OS%Time, OS%ice_shelf_CSp, &
340+
OS%MOM_CSp%diag, OS%fluxes)
347341
endif
348342
if (OS%icebergs_apply_rigid_boundary) then
349343
!call allocate_forcing_type(OS%grid, OS%fluxes, iceberg=.true.)
@@ -891,9 +885,6 @@ subroutine convert_state_to_ocean_type(state, Ocean_sfc, G, use_conT_absS, &
891885
if (.not.coupler_type_initialized(Ocean_sfc%fields)) then
892886
call MOM_error(FATAL, "convert_state_to_ocean_type: "//&
893887
"Ocean_sfc%fields has not been initialized.")
894-
! call coupler_type_spawn(state%tr_fields, Ocean_sfc%fields, &
895-
! (/isc_bnd,isc_bnd,iec_bnd,iec_bnd/), &
896-
! (/jsc_bnd,jsc_bnd,jec_bnd,jec_bnd/) )
897888
endif
898889
call coupler_type_copy_data(state%tr_fields, Ocean_sfc%fields)
899890
endif

config_src/ice_solo_driver/coupler_types.F90

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,12 +2856,18 @@ end subroutine CT_register_restarts_2d
28562856

28572857
!> This subroutine registers the fields in a coupler_2d_bc_type to be saved
28582858
!! in the specified restart file.
2859-
subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain)
2859+
subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain, &
2860+
varname_prefix)
28602861
type(coupler_2d_bc_type), intent(inout) :: var !< BC_type structure to be registered for restarts
28612862
character(len=*), intent(in) :: file_name !< The name of the restart file
28622863
type(restart_file_type), pointer :: rest_file !< A (possibly associated) structure describing the restart file
28632864
type(domain2D), intent(in) :: mpp_domain !< The FMS domain to use for this registration call
2865+
character(len=*), optional, intent(in) :: varname_prefix !< A prefix for the variable name
2866+
!! in the restart file, intended to allow
2867+
!! multiple BC_type variables to use the
2868+
!! same restart files.
28642869

2870+
character(len=128) :: var_name
28652871
integer :: n, m
28662872

28672873
! Register the fields with the restart file
@@ -2871,8 +2877,10 @@ subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain
28712877

28722878
var%bc(n)%rest_type => rest_file
28732879
do m = 1, var%bc(n)%num_fields
2880+
var_name = trim(var%bc(n)%field(m)%name)
2881+
if (present(varname_prefix)) var_name = trim(varname_prefix)//trim(var_name)
28742882
var%bc(n)%field(m)%id_rest = register_restart_field(rest_file, &
2875-
file_name, var%bc(n)%field(m)%name, var%bc(n)%field(m)%values, &
2883+
file_name, var_name, var%bc(n)%field(m)%values, &
28762884
mpp_domain, mandatory=.not.var%bc(n)%field(m)%may_init )
28772885
enddo
28782886
enddo
@@ -2934,12 +2942,19 @@ end subroutine CT_register_restarts_3d
29342942

29352943
!> This subroutine registers the fields in a coupler_3d_bc_type to be saved
29362944
!! in the specified restart file.
2937-
subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain)
2945+
subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain, &
2946+
varname_prefix)
29382947
type(coupler_3d_bc_type), intent(inout) :: var !< BC_type structure to be registered for restarts
29392948
character(len=*), intent(in) :: file_name !< The name of the restart file
29402949
type(restart_file_type), pointer :: rest_file !< A (possibly associated) structure describing the restart file
29412950
type(domain2D), intent(in) :: mpp_domain !< The FMS domain to use for this registration call
29422951

2952+
character(len=*), optional, intent(in) :: varname_prefix !< A prefix for the variable name
2953+
!! in the restart file, intended to allow
2954+
!! multiple BC_type variables to use the
2955+
!! same restart files.
2956+
2957+
character(len=128) :: var_name
29432958
integer :: n, m
29442959

29452960
! Register the fields with the restart file
@@ -2949,8 +2964,10 @@ subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain
29492964

29502965
var%bc(n)%rest_type => rest_file
29512966
do m = 1, var%bc(n)%num_fields
2967+
var_name = trim(var%bc(n)%field(m)%name)
2968+
if (present(varname_prefix)) var_name = trim(varname_prefix)//trim(var_name)
29522969
var%bc(n)%field(m)%id_rest = register_restart_field(rest_file, &
2953-
file_name, var%bc(n)%field(m)%name, var%bc(n)%field(m)%values, &
2970+
file_name, var_name, var%bc(n)%field(m)%values, &
29542971
mpp_domain, mandatory=.not.var%bc(n)%field(m)%may_init )
29552972
enddo
29562973
enddo

config_src/solo_driver/coupler_types.F90

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,12 +2856,18 @@ end subroutine CT_register_restarts_2d
28562856

28572857
!> This subroutine registers the fields in a coupler_2d_bc_type to be saved
28582858
!! in the specified restart file.
2859-
subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain)
2859+
subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain, &
2860+
varname_prefix)
28602861
type(coupler_2d_bc_type), intent(inout) :: var !< BC_type structure to be registered for restarts
28612862
character(len=*), intent(in) :: file_name !< The name of the restart file
28622863
type(restart_file_type), pointer :: rest_file !< A (possibly associated) structure describing the restart file
28632864
type(domain2D), intent(in) :: mpp_domain !< The FMS domain to use for this registration call
2865+
character(len=*), optional, intent(in) :: varname_prefix !< A prefix for the variable name
2866+
!! in the restart file, intended to allow
2867+
!! multiple BC_type variables to use the
2868+
!! same restart files.
28642869

2870+
character(len=128) :: var_name
28652871
integer :: n, m
28662872

28672873
! Register the fields with the restart file
@@ -2871,8 +2877,10 @@ subroutine CT_register_restarts_to_file_2d(var, file_name, rest_file, mpp_domain
28712877

28722878
var%bc(n)%rest_type => rest_file
28732879
do m = 1, var%bc(n)%num_fields
2880+
var_name = trim(var%bc(n)%field(m)%name)
2881+
if (present(varname_prefix)) var_name = trim(varname_prefix)//trim(var_name)
28742882
var%bc(n)%field(m)%id_rest = register_restart_field(rest_file, &
2875-
file_name, var%bc(n)%field(m)%name, var%bc(n)%field(m)%values, &
2883+
file_name, var_name, var%bc(n)%field(m)%values, &
28762884
mpp_domain, mandatory=.not.var%bc(n)%field(m)%may_init )
28772885
enddo
28782886
enddo
@@ -2934,12 +2942,19 @@ end subroutine CT_register_restarts_3d
29342942

29352943
!> This subroutine registers the fields in a coupler_3d_bc_type to be saved
29362944
!! in the specified restart file.
2937-
subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain)
2945+
subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain, &
2946+
varname_prefix)
29382947
type(coupler_3d_bc_type), intent(inout) :: var !< BC_type structure to be registered for restarts
29392948
character(len=*), intent(in) :: file_name !< The name of the restart file
29402949
type(restart_file_type), pointer :: rest_file !< A (possibly associated) structure describing the restart file
29412950
type(domain2D), intent(in) :: mpp_domain !< The FMS domain to use for this registration call
29422951

2952+
character(len=*), optional, intent(in) :: varname_prefix !< A prefix for the variable name
2953+
!! in the restart file, intended to allow
2954+
!! multiple BC_type variables to use the
2955+
!! same restart files.
2956+
2957+
character(len=128) :: var_name
29432958
integer :: n, m
29442959

29452960
! Register the fields with the restart file
@@ -2949,8 +2964,10 @@ subroutine CT_register_restarts_to_file_3d(var, file_name, rest_file, mpp_domain
29492964

29502965
var%bc(n)%rest_type => rest_file
29512966
do m = 1, var%bc(n)%num_fields
2967+
var_name = trim(var%bc(n)%field(m)%name)
2968+
if (present(varname_prefix)) var_name = trim(varname_prefix)//trim(var_name)
29522969
var%bc(n)%field(m)%id_rest = register_restart_field(rest_file, &
2953-
file_name, var%bc(n)%field(m)%name, var%bc(n)%field(m)%values, &
2970+
file_name, var_name, var%bc(n)%field(m)%values, &
29542971
mpp_domain, mandatory=.not.var%bc(n)%field(m)%may_init )
29552972
enddo
29562973
enddo

src/core/MOM.F90

Lines changed: 67 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ module MOM
3636
use MOM_diag_mediator, only : diag_set_state_ptrs, diag_update_remap_grids
3737
use MOM_diag_mediator, only : disable_averaging, post_data, safe_alloc_ptr
3838
use MOM_diag_mediator, only : register_diag_field, register_static_field
39-
use MOM_diag_mediator, only : register_scalar_field
39+
use MOM_diag_mediator, only : register_scalar_field, get_diag_time_end
4040
use MOM_diag_mediator, only : set_axes_info, diag_ctrl, diag_masks_set
4141
use MOM_domains, only : MOM_domains_init, clone_MOM_domain
4242
use MOM_domains, only : sum_across_PEs, pass_var, pass_vector
@@ -62,6 +62,7 @@ module MOM
6262
use MOM_time_manager, only : operator(-), operator(>), operator(*), operator(/)
6363
use MOM_time_manager, only : increment_date
6464
use MOM_unit_tests, only : unit_tests
65+
use coupler_types_mod, only : coupler_type_send_data, coupler_1d_bc_type, coupler_type_spawn
6566

6667
! MOM core modules
6768
use MOM_ALE, only : ALE_init, ALE_end, ALE_main, ALE_CS, adjustGridForIntegrity
@@ -430,6 +431,7 @@ module MOM
430431
public step_MOM
431432
public step_offline
432433
public MOM_end
434+
public allocate_surface_state
433435
public calculate_surface_state
434436

435437
integer :: id_clock_ocean
@@ -1926,7 +1928,7 @@ subroutine initialize_MOM(Time, param_file, dirs, CS, Time_in, offline_tracer_mo
19261928
endif
19271929

19281930
if (CS%bulkmixedlayer .or. CS%use_temperature) then
1929-
allocate(CS%Hml(isd:ied,jsd:jed)) ; CS%Hml(:,:) = 0.0
1931+
allocate(CS%Hml(isd:ied,jsd:jed)) ; CS%Hml(:,:) = 0.0
19301932
endif
19311933

19321934
if (CS%bulkmixedlayer) then
@@ -3222,6 +3224,8 @@ subroutine post_surface_diagnostics(CS, G, diag, state)
32223224
call post_data(CS%id_speed, sfc_speed, diag, mask=G%mask2dT)
32233225
endif
32243226

3227+
call coupler_type_send_data(state%tr_fields, get_diag_time_end(diag))
3228+
32253229
end subroutine post_surface_diagnostics
32263230

32273231
!> Offers the static fields in the ocean grid type
@@ -3428,6 +3432,64 @@ subroutine adjust_ssh_for_p_atm(CS, G, GV, ssh, p_atm)
34283432

34293433
end subroutine adjust_ssh_for_p_atm
34303434

3435+
!> This subroutine allocates the fields for the surface (return) properties of
3436+
!! the ocean model. Unused fields are unallocated.
3437+
subroutine allocate_surface_state(state, G, use_temperature, do_integrals, &
3438+
gas_fields_ocn)
3439+
type(ocean_grid_type), intent(in) :: G !< ocean grid structure
3440+
type(surface), intent(inout) :: state !< ocean surface state type to be allocated.
3441+
logical, optional, intent(in) :: use_temperature !< If true, allocate the space for thermodynamic variables.
3442+
logical, optional, intent(in) :: do_integrals !< If true, allocate the space for vertically integrated fields.
3443+
type(coupler_1d_bc_type), &
3444+
optional, intent(in) :: gas_fields_ocn !< If present, this type describes the ocean
3445+
!! ocean and surface-ice fields that will participate
3446+
!! in the calculation of additional gas or other
3447+
!! tracer fluxes, and can be used to spawn related
3448+
!! internal variables in the ice model.
3449+
3450+
logical :: use_temp, alloc_integ
3451+
integer :: is, ie, js, je, isd, ied, jsd, jed
3452+
integer :: isdB, iedB, jsdB, jedB
3453+
3454+
is = G%isc ; ie = G%iec ; js = G%jsc ; je = G%jec
3455+
isd = G%isd ; ied = G%ied ; jsd = G%jsd ; jed = G%jed
3456+
isdB = G%isdB ; iedB = G%iedB; jsdB = G%jsdB ; jedB = G%jedB
3457+
3458+
use_temp = .true. ; if (present(use_temperature)) use_temp = use_temperature
3459+
alloc_integ = .true. ; if (present(do_integrals)) alloc_integ = do_integrals
3460+
3461+
if (state%arrays_allocated) return
3462+
3463+
if (use_temp) then
3464+
allocate(state%SST(isd:ied,jsd:jed)) ; state%SST(:,:) = 0.0
3465+
allocate(state%SSS(isd:ied,jsd:jed)) ; state%SSS(:,:) = 0.0
3466+
else
3467+
allocate(state%sfc_density(isd:ied,jsd:jed)) ; state%sfc_density(:,:) = 0.0
3468+
endif
3469+
allocate(state%sea_lev(isd:ied,jsd:jed)) ; state%sea_lev(:,:) = 0.0
3470+
allocate(state%Hml(isd:ied,jsd:jed)) ; state%Hml(:,:) = 0.0
3471+
allocate(state%u(IsdB:IedB,jsd:jed)) ; state%u(:,:) = 0.0
3472+
allocate(state%v(isd:ied,JsdB:JedB)) ; state%v(:,:) = 0.0
3473+
3474+
if (alloc_integ) then
3475+
! Allocate structures for the vertically integrated ocean_mass, ocean_heat,
3476+
! and ocean_salt.
3477+
allocate(state%ocean_mass(isd:ied,jsd:jed)) ; state%ocean_mass(:,:) = 0.0
3478+
if (use_temp) then
3479+
allocate(state%ocean_heat(isd:ied,jsd:jed)) ; state%ocean_heat(:,:) = 0.0
3480+
allocate(state%ocean_salt(isd:ied,jsd:jed)) ; state%ocean_salt(:,:) = 0.0
3481+
endif
3482+
allocate(state%salt_deficit(isd:ied,jsd:jed)) ; state%salt_deficit(:,:) = 0.0
3483+
endif
3484+
3485+
if (present(gas_fields_ocn)) &
3486+
call coupler_type_spawn(gas_fields_ocn, state%tr_fields, &
3487+
(/isd,is,ie,ied/), (/jsd,js,je,jed/), as_needed=.true.)
3488+
3489+
state%arrays_allocated = .true.
3490+
3491+
end subroutine allocate_surface_state
3492+
34313493
!> This subroutine sets the surface (return) properties of the ocean
34323494
!! model by setting the appropriate fields in state. Unused fields
34333495
!! are set to NULL or are unallocated.
@@ -3462,28 +3524,9 @@ subroutine calculate_surface_state(state, u, v, h, ssh, G, GV, CS)
34623524
isdB = G%isdB ; iedB = G%iedB; jsdB = G%jsdB ; jedB = G%jedB
34633525

34643526
if (.not.state%arrays_allocated) then
3465-
if (CS%use_temperature) then
3466-
allocate(state%SST(isd:ied,jsd:jed)) ; state%SST(:,:) = 0.0
3467-
allocate(state%SSS(isd:ied,jsd:jed)) ; state%SSS(:,:) = 0.0
3468-
else
3469-
allocate(state%sfc_density(isd:ied,jsd:jed)) ; state%sfc_density(:,:) = 0.0
3470-
endif
3471-
allocate(state%sea_lev(isd:ied,jsd:jed)) ; state%sea_lev(:,:) = 0.0
3472-
allocate(state%Hml(isd:ied,jsd:jed)) ; state%Hml(:,:) = 0.0
3473-
allocate(state%u(IsdB:IedB,jsd:jed)) ; state%u(:,:) = 0.0
3474-
allocate(state%v(isd:ied,JsdB:JedB)) ; state%v(:,:) = 0.0
3475-
3476-
! Allocate structures for ocean_mass, ocean_heat, and ocean_salt. This could
3477-
! be wrapped in a run-time flag to disable it for economy, since the 3-d
3478-
! sums are not negligible.
3479-
allocate(state%ocean_mass(isd:ied,jsd:jed)) ; state%ocean_mass(:,:) = 0.0
3480-
if (CS%use_temperature) then
3481-
allocate(state%ocean_heat(isd:ied,jsd:jed)) ; state%ocean_heat(:,:) = 0.0
3482-
allocate(state%ocean_salt(isd:ied,jsd:jed)) ; state%ocean_salt(:,:) = 0.0
3483-
endif
3484-
allocate(state%salt_deficit(isd:ied,jsd:jed)) ; state%salt_deficit(:,:) = 0.0
3485-
3486-
state%arrays_allocated = .true.
3527+
! Consider using a run-time flag to determine whether to do the vertical
3528+
! integrals, since the 3-d sums are not negligible in cost.
3529+
call allocate_surface_state(state, G, CS%use_temperature, do_integrals=.true.)
34873530
endif
34883531
state%frazil => CS%tv%frazil
34893532
state%TempxPmE => CS%tv%TempxPmE

src/parameterizations/vertical/MOM_entrain_diffusive.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2255,7 +2255,7 @@ subroutine entrain_diffusive_init(Time, G, GV, param_file, diag, CS)
22552255
! CS%Tolerance_Ent = MAX(100.0*GV%Angstrom,1.0e-4*sqrt(dt*Kd)) !
22562256
call get_param(param_file, mod, "TOLERANCE_ENT", CS%Tolerance_Ent, &
22572257
"The tolerance with which to solve for entrainment values.", &
2258-
units="m", default=MAX(100.0*GV%Angstrom,1.0e-4*sqrt(dt*Kd)))
2258+
units="m", default=MAX(100.0*GV%Angstrom_Z,1.0e-4*sqrt(dt*Kd)))
22592259

22602260
CS%id_Kd = register_diag_field('ocean_model', 'Kd_effective', diag%axesTL, Time, &
22612261
'Diapycnal diffusivity as applied', 'meter2 second-1')

src/parameterizations/vertical/MOM_set_diffusivity.F90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2630,7 +2630,7 @@ subroutine set_diffusivity_init(Time, G, GV, param_file, diag, CS, diag_to_Z_CSp
26302630
"length scale.", default=.false.)
26312631
if (CS%ML_radiation) then
26322632
! This give a minimum decay scale that is typically much less than Angstrom.
2633-
CS%ustar_min = 2e-4*CS%omega*(GV%Angstrom + GV%H_subroundoff)
2633+
CS%ustar_min = 2e-4*CS%omega*(GV%Angstrom_z + GV%H_subroundoff*GV%H_to_m)
26342634

26352635
call get_param(param_file, mdl, "ML_RAD_EFOLD_COEFF", CS%ML_rad_efold_coeff, &
26362636
"A coefficient that is used to scale the penetration \n"//&

0 commit comments

Comments
 (0)