Common Community Physics Package (CCPP) Scientific Documentation  Version 2.0
subroutine sfc_nst::sfc_nst_run ( integer, intent(in)  im,
integer, intent(in)  km,
real (kind=kind_phys), dimension(im), intent(in)  ps,
real (kind=kind_phys), dimension(im), intent(in)  u1,
real (kind=kind_phys), dimension(im), intent(in)  v1,
real (kind=kind_phys), dimension(im), intent(in)  t1,
real (kind=kind_phys), dimension(im), intent(in)  q1,
real (kind=kind_phys), dimension(im), intent(in)  tref,
real (kind=kind_phys), dimension(im), intent(in)  cm,
real (kind=kind_phys), dimension(im), intent(in)  ch,
real (kind=kind_phys), dimension(im), intent(in)  prsl1,
real (kind=kind_phys), dimension(im), intent(in)  prslki,
integer, dimension(im), intent(in)  islimsk,
real (kind=kind_phys), dimension(im), intent(in)  xlon,
real (kind=kind_phys), dimension(im), intent(in)  sinlat,
real (kind=kind_phys), dimension(im), intent(in)  stress,
real (kind=kind_phys), dimension(im), intent(in)  sfcemis,
real (kind=kind_phys), dimension(im), intent(in)  dlwflx,
real (kind=kind_phys), dimension(im), intent(in)  sfcnsw,
real (kind=kind_phys), dimension(im), intent(in)  rain,
real (kind=kind_phys), intent(in)  timestep,
integer, intent(in)  kdt,
real (kind=kind_phys), intent(in)  solhr,
real (kind=kind_phys), dimension(im), intent(in)  xcosz,
real (kind=kind_phys), dimension(im), intent(in)  ddvel,
logical, dimension(im), intent(in)  flag_iter,
logical, dimension(im), intent(in)  flag_guess,
integer, intent(in)  nstf_name1,
integer, intent(in)  nstf_name4,
integer, intent(in)  nstf_name5,
logical, intent(in)  lprnt,
integer, intent(in)  ipr,
real (kind=kind_phys), dimension(im), intent(inout)  tskin,
real (kind=kind_phys), dimension(im), intent(inout)  tsurf,
real (kind=kind_phys), dimension(im), intent(inout)  xt,
real (kind=kind_phys), dimension(im), intent(inout)  xs,
real (kind=kind_phys), dimension(im), intent(inout)  xu,
real (kind=kind_phys), dimension(im), intent(inout)  xv,
real (kind=kind_phys), dimension(im), intent(inout)  xz,
real (kind=kind_phys), dimension(im), intent(inout)  zm,
real (kind=kind_phys), dimension(im), intent(inout)  xtts,
real (kind=kind_phys), dimension(im), intent(inout)  xzts,
real (kind=kind_phys), dimension(im), intent(inout)  dt_cool,
real (kind=kind_phys), dimension(im), intent(inout)  z_c,
real (kind=kind_phys), dimension(im), intent(inout)  c_0,
real (kind=kind_phys), dimension(im), intent(inout)  c_d,
real (kind=kind_phys), dimension(im), intent(inout)  w_0,
real (kind=kind_phys), dimension(im), intent(inout)  w_d,
real (kind=kind_phys), dimension(im), intent(inout)  d_conv,
real (kind=kind_phys), dimension(im), intent(inout)  ifd,
real (kind=kind_phys), dimension(im), intent(inout)  qrain,
real (kind=kind_phys), dimension(im), intent(inout)  qsurf,
real (kind=kind_phys), dimension(im), intent(inout)  gflux,
real (kind=kind_phys), dimension(im), intent(inout)  cmm,
real (kind=kind_phys), dimension(im), intent(inout)  chh,
real (kind=kind_phys), dimension(im), intent(inout)  evap,
real (kind=kind_phys), dimension(im), intent(inout)  hflx,
real (kind=kind_phys), dimension(im), intent(inout)  ep,
character(len=*), intent(out)  errmsg,
integer, intent(out)  errflg 
)
  • Calculate latent and sensible heat flux over open water with tskin.
  • Call module_nst_water_prop::density() to compute sea water density.
  • Call module_nst_water_prop::rhocoef() to compute thermal expansion coefficient (alpha) and saline contraction coefficient (beta).
  • Calculate sensible heat flux (qrain) due to rainfall.
  • Calculate input non solar heat flux as upward = positive to models here
  • Call cool_skin(), which is the sub-layer cooling parameterization (Fairfall et al. (1996) [27]).
  • Call convdepth() to calculate depth for convective adjustments.
  • Call the diurnal thermocline layer model dtm_1p().
    • If dtl heat content xt > 0.0, call dtm_1p_mda() to apply minimum depth adjustment (mda).
      • If dtl thickness >= module_nst_parameters::z_w_max, call dtl_reset() to reset xt/xs/x/xv to zero, and xz to module_nst_parameters::z_w_max.
    • If thickness of free convection layer > 0.0, call dtm_1p_fca() to apply free convection adjustment.
      • If dtl thickness >= module_nst_parameters::z_w_max(), call dtl_reset() to reset xt/xs/x/xv to zero, and xz to module_nst_parameters::z_w_max().
    • Call sw_ps_9b() to compute the fraction of the solar radiation absorbed by the depth delz (Paulson and Simpson (1981) [84]). And calculate the total heat absorbed in warm layer.
    • Call cal_ttop() to calculate the diurnal warming amount at the top layer with thickness of dz.
    • Call dtm_1p_tla() to apply top layer adjustment.
    • Call dt_1p_mwa() to apply maximum warming adjustment.
    • Call dtm_1p_mta() to apply maximum temperature adjustment.
    • Call get_dtzm_point() to computes dtz and tsurf.
    • Call cal_w() to calculate w_0 and w_d.
  • Calculate latent and sensible heat flux over open water with updated tskin for the grids of open water and the iteration is on.

References nst_module::cal_ttop(), nst_module::cal_w(), module_nst_water_prop::compjd(), physcons::con_cp, physcons::con_eps, physcons::con_epsm1, physcons::con_fvirt, physcons::con_hfus, physcons::con_hvap, physcons::con_jcal, physcons::con_pi, physcons::con_rd, physcons::con_rhw0, physcons::con_sbc, nst_module::convdepth(), nst_module::cool_skin(), module_nst_water_prop::density(), nst_module::dtl_reset(), nst_module::dtm_1p(), nst_module::dtm_1p_fca(), nst_module::dtm_1p_mda(), nst_module::dtm_1p_mta(), nst_module::dtm_1p_mwa(), nst_module::dtm_1p_tla(), funcphys::fpvs(), module_nst_water_prop::get_dtzm_point(), module_nst_water_prop::grv(), module_nst_water_prop::rhocoef(), and module_nst_water_prop::solar_time_from_julian().

Here is the call graph for this function: