17 implicit none ;
private 19 #include <MOM_memory.h> 40 #include "version_variable.h" 42 character(len=40) ::
mdl =
"SCM_idealized_hurricane" 50 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(out) :: T
51 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(out) :: S
52 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(in) :: h
54 logical,
optional,
intent(in) :: just_read_params
57 real :: eta(szk_(g)+1)
58 real :: S_ref, SST_ref, dTdZ, MLD
61 integer :: i, j, k, is, ie, js, je, isd, ied, jsd, jed, nz
63 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
64 isd = g%isd ; ied = g%ied ; jsd = g%jsd ; jed = g%jed
66 just_read = .false. ;
if (
present(just_read_params)) just_read = just_read_params
70 'Reference salinity', units=
'1e-3',default=35.0, do_not_log=just_read)
72 'Reference surface temperature', units=
'C', &
73 fail_if_missing=.not.just_read, do_not_log=just_read)
75 'Initial temperature stratification below mixed layer', &
76 units=
'C/m', fail_if_missing=.not.just_read, do_not_log=just_read)
78 'Initial mixed layer depth', units=
'm', &
79 fail_if_missing=.not.just_read, do_not_log=just_read)
83 do j=js,je ;
do i=is,ie
86 eta(k+1) = eta(k) - h(i,j,k)*gv%H_to_m
87 zc = 0.5*( eta(k) + eta(k+1) )
88 t(i,j,k) = sst_ref + dtdz*min(0., zc+mld)
97 type(time_type),
intent(in) :: Time
103 #include "version_variable.h" 105 if (
associated(cs))
then 106 call mom_error(fatal,
"SCM_idealized_hurricane_wind_init called with an associated "// &
107 "control structure.")
114 call get_param(param_file,
mdl,
"SCM_RHO_AIR", cs%rho_a, &
116 "used in the SCM idealized hurricane wind profile.", &
117 units=
'kg/m3', default=1.2)
118 call get_param(param_file,
mdl,
"SCM_AMBIENT_PRESSURE", cs%p_n, &
119 "Ambient pressure "// &
120 "used in the SCM idealized hurricane wind profile.", &
121 units=
'Pa', default=101200.)
122 call get_param(param_file,
mdl,
"SCM_CENTRAL_PRESSURE", cs%p_c, &
123 "Central pressure "// &
124 "used in the SCM idealized hurricane wind profile.", &
125 units=
'Pa', default=96800.)
126 call get_param(param_file,
mdl,
"SCM_RADIUS_MAX_WINDS", cs%r_max, &
127 "Radius of maximum winds "// &
128 "used in the SCM idealized hurricane wind profile.", &
129 units=
'm', default=50.e3)
130 call get_param(param_file,
mdl,
"SCM_MAX_WIND_SPEED", cs%U_max, &
131 "Maximum wind speed "// &
132 "used in the SCM idealized hurricane wind profile.", &
133 units=
'm/s', default=65.)
135 "Y distance of station "// &
136 "used in the SCM idealized hurricane wind profile.", &
137 units=
'm', default=50.e3)
138 call get_param(param_file,
mdl,
"SCM_TRAN_SPEED", cs%TRAN_SPEED, &
139 "Translation speed of hurricane"// &
140 "used in the SCM idealized hurricane wind profile.", &
141 units=
'm/s', default=5.0)
143 "The mean ocean density used with BOUSSINESQ true to \n"//&
144 "calculate accelerations and the mass for conservation \n"//&
145 "properties, or with BOUSSINSEQ false to convert some \n"//&
146 "parameters from vertical units of m to kg m-2.", &
147 units=
"kg m-3", default=1035.0)
151 call get_param(param_file,
mdl,
"GUST_CONST", cs%gust_const, &
152 "The background gustiness in the winds.", units=
"Pa", &
153 default=0.00, do_not_log=.true.)
160 type(
forcing),
intent(inout) :: fluxes
161 type(time_type),
intent(in) :: day
165 integer :: i, j, is, ie, js, je, Isq, Ieq, Jsq, Jeq
166 integer :: isd, ied, jsd, jed, IsdB, IedB, JsdB, JedB
168 real :: U10, A, B, C, r, f,du10,rkm
175 real :: Alph,Rstr, A0, A1, P1, Adir, transdir, V_TS, U_TS
178 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec
179 isq = g%IscB ; ieq = g%IecB ; jsq = g%JscB ; jeq = g%JecB
180 isd = g%isd ; ied = g%ied ; jsd = g%jsd ; jed = g%jed
181 isdb = g%IsdB ; iedb = g%IedB ; jsdb = g%JsdB ; jedb = g%JedB
186 pie = 4.0*atan(1.0) ; deg2rad = pie/180.
196 c = cs%U_max / sqrt( dp )
197 b = c**2 * cs%rho_a * exp(1.0)
200 b = c**2 * 1.2 * exp(1.0)
202 a = (cs%r_max/1000.)**b
203 f =g%CoriolisBu(is,js)
210 xx = ( t0 - time_type_to_real(day)) * cs%tran_speed * cos(transdir)
211 r = sqrt(xx**2.+cs%YY**2.)
230 if (r/cs%r_max.gt.0.001 .AND. r/cs%r_max.lt.10.)
then 231 u10 = sqrt( a*b*dp*exp(-a/rb)/(1.2*rb) + 0.25*(rkm*f)**2 ) - 0.5*rkm*f
232 elseif (r/cs%r_max.gt.10. .AND. r/cs%r_max.lt.12.)
then 241 u10 = ( sqrt( a*b*dp*exp(-a/rb)/(1.2*rb) + 0.25*(rkm*f)**2 ) - 0.5*rkm*f) &
242 * (12. - r/cs%r_max)/2.
246 adir = atan2(cs%YY,xx)
251 rstr = min(10.,r / cs%r_max)
252 a0 = -0.9*rstr -0.09*cs%U_max -14.33
253 a1 = -a0 *(0.04*rstr +0.05*cs%tran_speed+0.14)
254 p1 = (6.88*rstr -9.60*cs%tran_speed+85.31)*pie/180.
255 alph = a0 - a1*cos( (transdir - adir ) - p1)
256 if (r/cs%r_max.gt.10. .AND. r/cs%r_max.lt.12.)
then 257 alph = alph* (12. - r/cs%r_max)/2.
258 elseif (r/cs%r_max.gt.12.)
then 261 alph = alph * deg2rad
267 u_ts = cs%tran_speed/2.*cos(transdir)
268 v_ts = cs%tran_speed/2.*sin(transdir)
274 do j=js,je ;
do i=is-1,ieq
284 du = u10*sin(adir-pie-alph) - uocn + u_ts
285 dv = u10*cos(adir-alph) - vocn + v_ts
290 du10=sqrt(du**2+dv**2)
291 if (du10.LT.11.)
then 293 elseif (du10.LT.20.)
then 294 cd = (0.49 + 0.065 * u10 )*0.001
298 fluxes%taux(i,j) = cs%rho_a * g%mask2dCu(i,j) * cd*sqrt(du**2+dv**2)*du
302 do j=js-1,jeq ;
do i=is,ie
306 du = u10*sin(adir-pie-alph) - uocn + u_ts
307 dv = u10*cos(adir-alph) - vocn + v_ts
308 du10=sqrt(du**2+dv**2)
309 if (du10.LT.11.)
then 311 elseif (du10.LT.20.)
then 312 cd = (0.49 + 0.065 * u10 )*0.001
316 fluxes%tauy(i,j) = cs%rho_a * g%mask2dCv(i,j) * cd*du10*dv
319 do j=js,je ;
do i=is,ie
321 fluxes%ustar(i,j) = g%mask2dT(i,j) * sqrt(cs%gust_const/cs%Rho0 + &
322 sqrt(0.5*(fluxes%taux(i-1,j)**2 + fluxes%taux(i,j)**2) + &
323 0.5*(fluxes%tauy(i,j-1)**2 + fluxes%tauy(i,j)**2))/cs%Rho0)
The following structure contains pointers to various fields which may be used describe the surface st...
subroutine, public scm_idealized_hurricane_wind_init(Time, G, param_file, CS)
Initializes wind profile for the SCM idealized hurricane example.
This module implements boundary forcing for MOM6.
Ocean grid type. See mom_grid for details.
Provides the ocean grid type.
Container for parameters describing idealized wind structure.
subroutine, public allocate_forcing_type(G, fluxes, stress, ustar, water, heat, shelf, press, iceberg)
Conditionally allocate fields within the forcing type.
subroutine, public scm_idealized_hurricane_ts_init(T, S, h, G, GV, param_file, just_read_params)
Initializes temperature and salinity for the SCM idealized hurricane example.
Structure that contains pointers to the boundary forcing used to drive the liquid ocean simulated by ...
The thermo_var_ptrs structure contains pointers to an assortment of thermodynamic fields that may be ...
subroutine, public scm_idealized_hurricane_wind_forcing(state, fluxes, day, G, CS)
subroutine, public mom_error(level, message, all_print)
Initial conditions and forcing for the single column model (SCM) idealized hurricane example...