Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
21 changes: 21 additions & 0 deletions columnphysics/icepack_flux.F90
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ subroutine merge_fluxes (aicen, &
fhocnn, fswthrun, &
fswthrun_vdr, fswthrun_vdf,&
fswthrun_idr, fswthrun_idf,&
fswthrun_uvrdr, fswthrun_uvrdf,&
fswthrun_pardr, fswthrun_pardf,&
strairxT, strairyT, &
Cdn_atm_ratio, &
fsurf, fcondtop, &
Expand All @@ -56,6 +58,8 @@ subroutine merge_fluxes (aicen, &
fhocn, fswthru, &
fswthru_vdr, fswthru_vdf,&
fswthru_idr, fswthru_idf,&
fswthru_uvrdr, fswthru_uvrdf,&
fswthru_pardr, fswthru_pardf,&
melttn, meltsn, meltbn, congeln, snoicen, &
meltt, melts, &
meltb, dsnow, dsnown,&
Expand Down Expand Up @@ -102,6 +106,10 @@ subroutine merge_fluxes (aicen, &
fswthrun_vdf, & ! vis dif sw radiation through ice bot (W/m**2)
fswthrun_idr, & ! nir dir sw radiation through ice bot (W/m**2)
fswthrun_idf, & ! nir dif sw radiation through ice bot (W/m**2)
fswthrun_uvrdr, & ! vis uvr dir sw radiation through ice bot (GEOS) (W/m**2)
fswthrun_uvrdf, & ! vis uvr dif sw radiation through ice bot (GEOS) (W/m**2)
fswthrun_pardr, & ! vis par dir sw radiation through ice bot (GEOS) (W/m**2)
fswthrun_pardf, & ! vis par dif sw radiation through ice bot (GEOS) (W/m**2)
Urefn ! air speed reference level (m/s)

! cumulative fluxes
Expand Down Expand Up @@ -135,6 +143,10 @@ subroutine merge_fluxes (aicen, &
fswthru_vdf, & ! vis dif sw radiation through ice bot (W/m**2)
fswthru_idr, & ! nir dir sw radiation through ice bot (W/m**2)
fswthru_idf, & ! nir dif sw radiation through ice bot (W/m**2)
fswthru_uvrdr, & ! vis uvr dir sw radiation through ice bot (GEOS) (W/m**2)
fswthru_uvrdf, & ! vis uvr dif sw radiation through ice bot (GEOS) (W/m**2)
fswthru_pardr, & ! vis par dir sw radiation through ice bot (GEOS) (W/m**2)
fswthru_pardf, & ! vis par dif sw radiation through ice bot (GEOS) (W/m**2)
dsnow, & ! change in snow depth (m)
Uref ! air speed reference level (m/s)

Expand Down Expand Up @@ -228,6 +240,15 @@ subroutine merge_fluxes (aicen, &
if (present(fswthrun_idf) .and. present(fswthru_idf)) &
fswthru_idf = fswthru_idf + fswthrun_idf * aicen

if (present(fswthrun_uvrdr) .and. present(fswthru_uvrdr)) &
fswthru_uvrdr = fswthru_uvrdr + fswthrun_uvrdr * aicen
if (present(fswthrun_uvrdf) .and. present(fswthru_uvrdf)) &
fswthru_uvrdf = fswthru_uvrdf + fswthrun_uvrdf * aicen
if (present(fswthrun_pardr) .and. present(fswthru_pardr)) &
fswthru_pardr = fswthru_pardr + fswthrun_pardr * aicen
if (present(fswthrun_pardf) .and. present(fswthru_pardf)) &
fswthru_pardf = fswthru_pardf + fswthrun_pardf * aicen

! ice/snow thickness

if (present(melttn) .and. present(meltt)) &
Expand Down
20 changes: 17 additions & 3 deletions columnphysics/icepack_parameters.F90
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ module icepack_parameters
calc_Tsfc = .true. ,&! if true, calculate surface temperature
! if false, Tsfc is computed elsewhere and
! atmos-ice fluxes are provided to CICE
geos_heatflux = .false.,&! geos heatflux option
geos_massflux = .false.,&! geos massflux option

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We do need to name these something more descriptive, not using geos. I'll think about this.
The mass flux is only associated with evaporation and sublimation. Is that also true for the heat flux here? Or does it also include contributions from conduction etc?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The mass flux is only relevant for evap/sublimation. There is no connection to conduction.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So then, are both geos_massflux and geos_heatflux only associated with evaporation and sublimation? (Later you include deposition, right?) Why are both of these options needed? Do you ever need to run (in production mode) with one of them true and the other one false?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm leaving the previous comment to illustrate my confusion here. Such parallel nameing implies (to me) that they are mass and heat fluxes associated with the same process.

Apparently (correct me if I'm wrong), the 'massflux' option is about the assumed temperature of water vapor deposition/sublimation, and the 'heatflux' option is entirely different, having to do with the coupling strategy for for calculating the surface temperature. If so, then perhaps we could change geos_massflux to vapor_flux_correction or something like that. But I suggested the same thing for enforcing_massflux in sg_thermo.rst. They are both logicals. What is the difference between geos_massflux and enforcing_massflux? Actually, I don't see enforcing_massflux (or enforcing_heatflux) in the code, only in the docs, so that might be left over from a previous iteration.

Would it make sense to change geos_heatflux to semi-implicit_Tsfc? (I suggested that instead of enforcing_heatflux)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eclare108213, sorry about the enforcing_heatflux and geos_heatflux confusion. It is just that the documentation is not synced with the code.

I really like semi-implicit_Tsfc as the replacement of geos_heatflux as it captures the nature of GEOS coupling. And vapor_flux_correction is also appropriate name for its purpose.

We do need these two flags as they are associated with two different processes (all related to coupling).

Thanks for these suggestions.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

update_ocn_f = .false. ,&! include fresh water and salt fluxes for frazil
modal_aero = .false. ,&! if true, use modal aerosal optical properties
! only for use with tr_aero or tr_zaero
Expand Down Expand Up @@ -556,7 +558,7 @@ subroutine icepack_init_parameters( &
qqqice_in, TTTice_in, qqqocn_in, TTTocn_in, &
ktherm_in, conduct_in, fbot_xfer_type_in, calc_Tsfc_in, &
update_ocn_f_in, ustar_min_in, hi_min_in, a_rapid_mode_in, &
cpl_frazil_in, &
cpl_frazil_in, geos_heatflux_in, geos_massflux_in, &
Rac_rapid_mode_in, aspect_rapid_mode_in, &
dSdt_slow_mode_in, phi_c_slow_mode_in, &
phi_i_mushy_in, shortwave_in, albedo_type_in, albsnowi_in, &
Expand Down Expand Up @@ -689,6 +691,9 @@ subroutine icepack_init_parameters( &
calc_Tsfc_in , &! if true, calculate surface temperature
! if false, Tsfc is computed elsewhere and
! atmos-ice fluxes are provided to CICE
geos_heatflux_in, &! compute dfsurf/dT, dflat/dT terms instead of fsurf, flat
geos_massflux_in, &! compute mass/enthalpy correction when evaporation/sublimation
! computed outside at 0C
update_ocn_f_in ! include fresh water and salt fluxes for frazil

real (kind=dbl_kind), intent(in), optional :: &
Expand Down Expand Up @@ -1151,6 +1156,8 @@ subroutine icepack_init_parameters( &
if (present(conduct_in) ) conduct = conduct_in
if (present(fbot_xfer_type_in) ) fbot_xfer_type = fbot_xfer_type_in
if (present(calc_Tsfc_in) ) calc_Tsfc = calc_Tsfc_in
if (present(geos_heatflux_in) ) geos_heatflux = geos_heatflux_in
if (present(geos_massflux_in) ) geos_massflux = geos_massflux_in
if (present(cpl_frazil_in) ) cpl_frazil = cpl_frazil_in
if (present(update_ocn_f_in) ) update_ocn_f = update_ocn_f_in
if (present(ustar_min_in) ) ustar_min = ustar_min_in
Expand Down Expand Up @@ -1549,8 +1556,8 @@ subroutine icepack_query_parameters( &
Lfresh_out, cprho_out, Cp_out, ustar_min_out, hi_min_out, a_rapid_mode_out, &
ktherm_out, conduct_out, fbot_xfer_type_out, calc_Tsfc_out, &
Rac_rapid_mode_out, aspect_rapid_mode_out, dSdt_slow_mode_out, &
phi_c_slow_mode_out, phi_i_mushy_out, shortwave_out, &
albedo_type_out, albicev_out, albicei_out, albsnowv_out, &
phi_c_slow_mode_out, phi_i_mushy_out, shortwave_out, geos_heatflux_out, &
albedo_type_out, albicev_out, albicei_out, albsnowv_out, geos_massflux_out, &
albsnowi_out, ahmax_out, R_ice_out, R_pnd_out, R_snw_out, dT_mlt_out, &
rsnw_mlt_out, dEdd_algae_out, &
kalg_out, R_gC2molC_out, kstrength_out, krdg_partic_out, krdg_redist_out, mu_rdg_out, &
Expand Down Expand Up @@ -1688,6 +1695,9 @@ subroutine icepack_query_parameters( &
calc_Tsfc_out ,&! if true, calculate surface temperature
! if false, Tsfc is computed elsewhere and
! atmos-ice fluxes are provided to CICE
geos_heatflux_out,&! compute dfsurf/dT, dflat/dT terms instead of fsurf, flat
geos_massflux_out,&! compute mass/enthalpy correction when evaporation/sublimation
! computed outside at 0C
update_ocn_f_out ! include fresh water and salt fluxes for frazil

real (kind=dbl_kind), intent(out), optional :: &
Expand Down Expand Up @@ -2184,6 +2194,8 @@ subroutine icepack_query_parameters( &
if (present(conduct_out) ) conduct_out = conduct
if (present(fbot_xfer_type_out) ) fbot_xfer_type_out = fbot_xfer_type
if (present(calc_Tsfc_out) ) calc_Tsfc_out = calc_Tsfc
if (present(geos_heatflux_out) ) geos_heatflux_out= geos_heatflux
if (present(geos_massflux_out) ) geos_massflux_out= geos_massflux
if (present(cpl_frazil_out) ) cpl_frazil_out = cpl_frazil
if (present(update_ocn_f_out) ) update_ocn_f_out = update_ocn_f
if (present(ustar_min_out) ) ustar_min_out = ustar_min
Expand Down Expand Up @@ -2489,6 +2501,8 @@ subroutine icepack_write_parameters(iounit)
write(iounit,*) " conduct = ", trim(conduct)
write(iounit,*) " fbot_xfer_type = ", trim(fbot_xfer_type)
write(iounit,*) " calc_Tsfc = ", calc_Tsfc
write(iounit,*) " geos_heatflux = ", geos_heatflux
write(iounit,*) " geos_massflux = ", geos_massflux
write(iounit,*) " cpl_frazil = ", cpl_frazil
write(iounit,*) " update_ocn_f = ", update_ocn_f
write(iounit,*) " ustar_min = ", ustar_min
Expand Down
Loading