43 integer,
private :: ATMOS_PHY_SF_FLG_MOM_FLUX = 0
47 real(RP),
private,
parameter :: ATMOS_PHY_SF_U_maxM = 100.0_rp
48 real(RP),
private :: ATMOS_PHY_SF_U_minM = 0.0_rp
49 real(RP),
private,
parameter :: ATMOS_PHY_SF_Cm_max = 2.5e-3_rp
50 real(RP),
private :: ATMOS_PHY_SF_Cm_min = 1.0e-5_rp
52 real(RP),
private :: ATMOS_PHY_SF_Const_Ustar = 0.25_rp
53 real(RP),
private :: ATMOS_PHY_SF_Const_Cm = 0.0011_rp
54 real(RP),
private :: ATMOS_PHY_SF_Const_SH = 15.0_rp
55 real(RP),
private :: ATMOS_PHY_SF_Const_LH = 115.0_rp
57 logical,
private :: ATMOS_PHY_SF_FLG_SH_DIURNAL = .false.
58 real(RP),
private :: ATMOS_PHY_SF_Const_FREQ = 24.0_rp
69 namelist / param_atmos_phy_sf_const / &
70 atmos_phy_sf_flg_mom_flux, &
71 atmos_phy_sf_u_minm, &
72 atmos_phy_sf_cm_min, &
73 atmos_phy_sf_const_ustar, &
74 atmos_phy_sf_const_cm, &
75 atmos_phy_sf_const_sh, &
76 atmos_phy_sf_const_lh, &
77 atmos_phy_sf_flg_sh_diurnal, &
78 atmos_phy_sf_const_freq
84 log_info(
"ATMOS_PHY_SF_const_setup",*)
'Setup'
85 log_info(
"ATMOS_PHY_SF_const_setup",*)
'Constant flux'
89 read(
io_fid_conf,nml=param_atmos_phy_sf_const,iostat=ierr)
91 log_info(
"ATMOS_PHY_SF_const_setup",*)
'Not found namelist. Default used.'
92 elseif( ierr > 0 )
then
93 log_error(
"ATMOS_PHY_SF_const_setup",*)
'Not appropriate names in namelist PARAM_ATMOS_PHY_SF_CONST. Check!'
96 log_nml(param_atmos_phy_sf_const)
104 IA, IS, IE, JA, JS, JE, &
105 ATM_W, ATM_U, ATM_V, ATM_TEMP, &
107 SFLX_MW, SFLX_MU, SFLX_MV, SFLX_SH, SFLX_LH, &
113 hydrometeor_lhv => atmos_hydrometeor_lhv
117 integer,
intent(in) :: ia, is, ie
118 integer,
intent(in) :: ja, js, je
120 real(rp),
intent(in) :: atm_w (ia,ja)
121 real(rp),
intent(in) :: atm_u (ia,ja)
122 real(rp),
intent(in) :: atm_v (ia,ja)
123 real(rp),
intent(in) :: atm_temp(ia,ja)
124 real(rp),
intent(in) :: atm_z1 (ia,ja)
125 real(rp),
intent(in) :: sfc_dens(ia,ja)
127 real(rp),
intent(out) :: sflx_mw(ia,ja)
128 real(rp),
intent(out) :: sflx_mu(ia,ja)
129 real(rp),
intent(out) :: sflx_mv(ia,ja)
130 real(rp),
intent(out) :: sflx_sh(ia,ja)
131 real(rp),
intent(out) :: sflx_lh(ia,ja)
132 real(rp),
intent(out) :: sflx_qv(ia,ja)
133 real(rp),
intent(out) :: u10 (ia,ja)
134 real(rp),
intent(out) :: v10 (ia,ja)
136 real(rp) :: atm_uabs(ia,ja)
138 real(rp) :: cm(ia,ja)
141 real(rp) :: modulation
142 real(rp) :: lhv(ia,ja)
147 log_progress(*)
'atmosphere / physics / surface flux / const'
152 atm_uabs(i,j) = min( atmos_phy_sf_u_maxm, max( atmos_phy_sf_u_minm, &
153 sqrt( atm_w(i,j)**2 + atm_u(i,j)**2 + atm_v(i,j)**2 ) ) )
157 if ( atmos_phy_sf_flg_mom_flux == 0 )
then
161 cm(i,j) = atmos_phy_sf_const_cm
164 elseif( atmos_phy_sf_flg_mom_flux == 1 )
then
168 cm(i,j) = ( atmos_phy_sf_const_ustar / atm_uabs(i,j) )**2
169 cm(i,j) = min( max( cm(i,j), atmos_phy_sf_cm_min ), atmos_phy_sf_cm_max )
179 sflx_mw(i,j) = -cm(i,j) * atm_uabs(i,j) * sfc_dens(i,j) * atm_w(i,j)
180 sflx_mu(i,j) = -cm(i,j) * atm_uabs(i,j) * sfc_dens(i,j) * atm_u(i,j)
181 sflx_mv(i,j) = -cm(i,j) * atm_uabs(i,j) * sfc_dens(i,j) * atm_v(i,j)
187 if ( atmos_phy_sf_flg_sh_diurnal )
then
188 modulation = sin( 2.0_rp * pi *
time_nowsec / 3600.0_rp / atmos_phy_sf_const_freq )
196 sflx_sh(i,j) = atmos_phy_sf_const_sh * modulation
197 sflx_lh(i,j) = atmos_phy_sf_const_lh
202 call hydrometeor_lhv( &
203 ia, is, ie, ja, js, je, &
210 sflx_qv(i,j) = sflx_lh(i,j) / lhv(i,j)
220 r10 = 10.0_rp / atm_z1(i,j)
222 u10(i,j) = r10 * atm_u(i,j)
223 v10(i,j) = r10 * atm_v(i,j)