Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ccpp/physics_namelists/input_GFS_v17_p8_ugwpv1.nml
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@
iopt_tbot = 2
iopt_stc = 3
debug = .false.
nstf_name = 2,0,0,0,0
nstf_name = 2,1,0,0,0
nst_anl = .true.
psautco = 0.0008,0.0005
prautco = 0.00015,0.00015
Expand Down
2 changes: 1 addition & 1 deletion ccpp/physics_namelists/input_GFS_v17_p8_ugwpv1_ps.nml
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
iopt_tbot = 2
iopt_stc = 3
debug = .false.
nstf_name = 2,0,0,0,0
nstf_name = 2,1,0,0,0
nst_anl = .true.
psautco = 0.0008,0.0005
prautco = 0.00015,0.00015
Expand Down
2 changes: 1 addition & 1 deletion ccpp/physics_namelists/input_RAP.nml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
debug = .false.
oz_phys = .false.
oz_phys_2015 = .true.
nstf_name = 2,0,0,0,0
nstf_name = 2,1,0,0,0
nst_anl = .true.
lkm = 0
psautco = 0.0008,0.0005
Expand Down
1 change: 1 addition & 0 deletions scm/etc/case_config/DYNAMO_NSA3a.nml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ case_name = 'DYNAMO_NSA3a',
input_type = 1
lsm_ics = .false.,
do_spinup = .false.,
do_sst_initialize_only = .false.
spinup_timesteps = 0,
reference_profile_choice = 2,
column_area = 1.45E8,
Expand Down
14 changes: 9 additions & 5 deletions scm/src/scm_forcing.F90
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,9 @@ subroutine interpolate_forcing(scm_input, scm_state, in_spinup)

!> - Set the surface parameters to the last available data.
scm_state%pres_surf(i) = scm_input%input_pres_surf(scm_input%input_ntimes)
scm_state%T_surf(i) = scm_input%input_T_surf(scm_input%input_ntimes)
if (.not. scm_state%do_sst_initialize_only) then
scm_state%T_surf(i) = scm_input%input_T_surf(scm_input%input_ntimes)
end if
scm_state%sh_flux(i) = scm_input%input_sh_flux_sfc_kin(scm_input%input_ntimes)
scm_state%lh_flux(i) = scm_input%input_lh_flux_sfc_kin(scm_input%input_ntimes)
end do
Expand Down Expand Up @@ -324,7 +326,7 @@ subroutine interpolate_forcing(scm_input, scm_state, in_spinup)
end do
end if

if (scm_state%surface_thermo_control == 0 .or. scm_state%surface_thermo_control == 1 .or. scm_state%surface_thermo_control == 2) then
if (scm_state%surface_thermo_control == 0 .or. scm_state%surface_thermo_control == 1 .or. scm_state%surface_thermo_control == 2 .and. (.not. scm_state%do_sst_initialize_only)) then
!skin temperature is needed if surface fluxes are specified (for calculating bulk Richardson number in the specified surface flux scheme) and for simple ocean scheme
do i=1, scm_state%n_cols
scm_state%T_surf(i) = scm_input%input_T_surf(scm_input%input_ntimes)
Expand Down Expand Up @@ -479,7 +481,9 @@ subroutine interpolate_forcing(scm_input, scm_state, in_spinup)
!> - Interpolate the surface parameters in time.
scm_state%pres_surf(i) = (1.0 - lifrac)*scm_input%input_pres_surf(low_t_index) + &
lifrac*scm_input%input_pres_surf(low_t_index+1)
scm_state%T_surf(i) = (1.0 - lifrac)*scm_input%input_T_surf(low_t_index) + lifrac*scm_input%input_T_surf(low_t_index+1)
if (.not. scm_state%do_sst_initialize_only .or. scm_state%model_time == 0.0) then
scm_state%T_surf(i) = (1.0 - lifrac)*scm_input%input_T_surf(low_t_index) + lifrac*scm_input%input_T_surf(low_t_index+1)
end if
scm_state%sh_flux(i) = (1.0 - lifrac)*scm_input%input_sh_flux_sfc_kin(low_t_index) + &
lifrac*scm_input%input_sh_flux_sfc_kin(low_t_index+1)
scm_state%lh_flux(i) = (1.0 - lifrac)*scm_input%input_lh_flux_sfc_kin(low_t_index) + &
Expand Down Expand Up @@ -701,8 +705,8 @@ subroutine interpolate_forcing(scm_input, scm_state, in_spinup)
scm_state%dT_dt_rad(i,:) = (1.0 - lifrac)*dT_dt_rad_bracket(1,:) + lifrac*dT_dt_rad_bracket(2,:)
end do
end if

if (scm_state%surface_thermo_control == 0 .or. scm_state%surface_thermo_control == 1 .or. scm_state%surface_thermo_control == 2) then
if (scm_state%surface_thermo_control == 0 .or. scm_state%surface_thermo_control == 1 .or. scm_state%surface_thermo_control == 2 .and. (.not. scm_state%do_sst_initialize_only .or. scm_state%model_time == 0.0)) then
!skin temperature is needed if surface fluxes are specified (for calculating bulk Richardson number in the specified surface flux scheme) and for simple ocean scheme
do i=1, scm_state%n_cols
scm_state%T_surf(i) = (1.0 - lifrac)*scm_input%input_T_surf(low_t_index) + lifrac*scm_input%input_T_surf(low_t_index+1)
Expand Down
5 changes: 4 additions & 1 deletion scm/src/scm_input.F90
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ subroutine get_config_nml(scm_state)
logical :: model_ics !< true means have land info too
logical :: lsm_ics !< true when LSM initial conditions are included (but not all ICs from another model)
logical :: do_spinup
logical :: do_sst_initialize_only
integer :: reference_profile_choice !< 1: McClatchey profile, 2: mid-latitude summer standard atmosphere
integer :: year, month, day, hour, min
real(kind=dp) :: column_area
Expand All @@ -80,7 +81,7 @@ subroutine get_config_nml(scm_state)

NAMELIST /case_config/ npz_type, vert_coord_file, case_name, dt, runtime, runtime_mult, n_itt_out, n_itt_diag, &
n_levels, output_dir, thermo_forcing_type, model_ics, &
lsm_ics, do_spinup, C_RES, spinup_timesteps, mom_forcing_type, relax_time, sfc_type, sfc_flux_spec, &
lsm_ics, do_spinup, do_sst_initialize_only, C_RES, spinup_timesteps, mom_forcing_type, relax_time, sfc_type, sfc_flux_spec, &
sfc_roughness_length_cm, reference_profile_choice, year, month, day, hour, min, &
column_area, input_type

Expand Down Expand Up @@ -116,6 +117,7 @@ subroutine get_config_nml(scm_state)
model_ics = .false.
lsm_ics = .false.
do_spinup = .false.
do_sst_initialize_only = .false.
reference_profile_choice = 1
year = 2006
month = 1
Expand Down Expand Up @@ -200,6 +202,7 @@ subroutine get_config_nml(scm_state)
scm_state%model_ics = model_ics
scm_state%lsm_ics = lsm_ics
scm_state%do_spinup = do_spinup
scm_state%do_sst_initialize_only = do_sst_initialize_only
scm_state%reference_profile_choice = reference_profile_choice
scm_state%relax_time = relax_time
scm_state%input_type = input_type
Expand Down
9 changes: 7 additions & 2 deletions scm/src/scm_type_defs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ module scm_type_defs
logical :: model_ics !< true means have land info too
logical :: lsm_ics !< true when LSM initial conditions are included (but not all ICs from another model)
logical :: do_spinup !< true when allowing the model to spin up before the "official" model integration starts
logical :: do_sst_initialize_only !< true when initializing SST only (and letting physics change SST during integration)
integer :: input_type !< 0=> original DTC format, 1=> DEPHY-SCM format
integer :: force_adv_T !< 0=> off, 1=> temperature, 2=> theta, 3=> thetal
logical :: force_adv_qv !< true = on
Expand Down Expand Up @@ -1335,12 +1336,16 @@ subroutine physics_set(physics, scm_input, scm_state)
physics%Sfcprop%xs(i) = real_zero
physics%Sfcprop%xu(i) = real_zero
physics%Sfcprop%xv(i) = real_zero
physics%Sfcprop%xz(i) = 30.0_dp
physics%Sfcprop%xz(i) = 20.0_dp
physics%Sfcprop%zm(i) = real_zero
physics%Sfcprop%xtts(i) = real_zero
physics%Sfcprop%xzts(i) = real_zero
physics%Sfcprop%d_conv(i) = real_zero
physics%Sfcprop%ifd(i) = real_zero
if (scm_state%sfc_type(i) == 0) then
physics%Sfcprop%ifd(i) = real_one
else
physics%Sfcprop%ifd(i) = real_zero
endif
physics%Sfcprop%dt_cool(i) = real_zero
physics%Sfcprop%qrain(i) = real_zero
elseif (physics%Model%nstf_name(2) == 0) then ! nsst restart
Expand Down
Loading