CCPP SciDoc v7.0.0  v7.0.0
Common Community Physics Package Developed at DTC
 
Loading...
Searching...
No Matches
GFS_phys_time_vary.fv3.F90
1
3
8
9#ifdef _OPENMP
10 use omp_lib
11#endif
12
13 use machine, only : kind_phys, kind_dbl_prec, kind_sngl_prec
14
16
17 use module_ozphys, only: ty_ozphys
18
19 use h2o_def, only : levh2o, h2o_coeff, h2o_lat, h2o_pres, h2o_time, h2oplin
20 use h2ointerp, only : read_h2odata, setindxh2o, h2ointerpol
21
22 use aerclm_def, only : aerin, aer_pres, ntrcaer, ntrcaerm, iamin, iamax, jamin, jamax
23 use aerinterp, only : read_aerdata, setindxaer, aerinterpol, read_aerdataf
24
25 use iccn_def, only : ciplin, ccnin, ci_pres
26 use iccninterp, only : read_cidata, setindxci, ciinterpol
27
28 use gcycle_mod, only : gcycle
29
30 use cires_tauamf_data, only: cires_indx_ugwp, read_tau_amf, tau_amf_interp
31 use cires_tauamf_data, only: tau_limb, days_limb, ugwp_taulat
32
33 !--- variables needed for calculating 'sncovr'
34 use namelist_soilveg, only: salp_data, snupx
36
37 ! --- needed for Noah MP init
38 use noahmp_tables, only: read_mp_table_parameters, &
39 laim_table,saim_table,sla_table, &
40 bexp_table,smcmax_table,smcwlt_table, &
41 dwsat_table,dksat_table,psisat_table, &
42 isurban_table,isbarren_table, &
43 isice_table,iswater_table
44
45 implicit none
46
47 private
48
50
51 logical :: is_initialized = .false.
52
53 real(kind=kind_phys), parameter :: con_hr = 3600.0_kind_phys
54 real(kind=kind_phys), parameter :: con_99 = 99.0_kind_phys
55 real(kind=kind_phys), parameter :: con_100 = 100.0_kind_phys
56 real(kind=kind_phys), parameter :: missing_value = 9.99e20_kind_phys
57 real(kind=kind_phys), parameter :: drythresh = 1.e-4_kind_phys
58 real(kind=kind_phys), parameter :: zero = 0.0_kind_phys
59 real(kind=kind_phys), parameter :: one = 1.0_kind_phys
60
61 contains
62
63 subroutine copy_error(myerrmsg, myerrflg, errmsg, errflg)
64 implicit none
65 character(*), intent(in) :: myerrmsg
66 integer, intent(in) :: myerrflg
67 character(*), intent(out) :: errmsg
68 integer, intent(inout) :: errflg
69 if(myerrflg /= 0 .and. errflg == 0) then
70 !$OMP CRITICAL
71 if(errflg == 0) then
72 errmsg = myerrmsg
73 errflg = myerrflg
74 endif
75 !$OMP END CRITICAL
76 endif
77 end subroutine copy_error
78
85 me, master, ntoz, h2o_phys, iaerclm, iccn, iaermdl, iflip, im, levs, &
86 nx, ny, idate, xlat_d, xlon_d, &
87 jindx1_o3, jindx2_o3, ddy_o3, jindx1_h, jindx2_h, ddy_h, h2opl,fhour, &
88 jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, &
89 jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, imap, jmap, &
90 do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, &
91 isot, ivegsrc, nlunit, sncovr, sncovr_ice, lsm, lsm_noahmp, lsm_ruc, min_seaice, &
92 fice, landfrac, vtype, weasd, lsoil, zs, dzs, lsnow_lsm_lbound, lsnow_lsm_ubound, &
93 tvxy, tgxy, tahxy, canicexy, canliqxy, eahxy, cmxy, chxy, fwetxy, sneqvoxy, alboldxy,&
94 qsnowxy, wslakexy, albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, albdvis_ice, &
95 albdnir_ice, albivis_ice, albinir_ice, emiss_lnd, emiss_ice, taussxy, waxy, wtxy, &
96 zwtxy, xlaixy, xsaixy, lfmassxy, stmassxy, rtmassxy, woodxy, stblcpxy, fastcpxy, &
97 smcwtdxy, deeprechxy, rechxy, snowxy, snicexy, snliqxy, tsnoxy , smoiseq, zsnsoxy, &
98 slc, smc, stc, tsfcl, snowd, canopy, tg3, stype, con_t0c, lsm_cold_start, nthrds, &
99 lkm, use_lake_model, lakefrac, lakedepth, iopt_lake, iopt_lake_clm, iopt_lake_flake, &
100 lakefrac_threshold, lakedepth_threshold, ozphys, errmsg, errflg)
101
102 implicit none
103
104 ! Interface variables
105 integer, intent(in) :: me, master, ntoz, iccn, iflip, im, nx, ny, levs, iaermdl
106 logical, intent(in) :: h2o_phys, iaerclm, lsm_cold_start
107 integer, intent(in) :: idate(:), iopt_lake, iopt_lake_clm, iopt_lake_flake
108 real(kind_phys), intent(in) :: fhour, lakefrac_threshold, lakedepth_threshold
109 real(kind_phys), intent(in) :: xlat_d(:), xlon_d(:)
110
111 integer, intent(in) :: lkm
112 integer, intent(inout) :: use_lake_model(:)
113 real(kind=kind_phys), intent(in ) :: lakefrac(:), lakedepth(:)
114
115 integer, intent(inout), optional :: jindx1_o3(:), jindx2_o3(:), jindx1_h(:), jindx2_h(:)
116 real(kind_phys), intent(inout), optional :: ddy_o3(:), ddy_h(:)
117 real(kind_phys), intent(in) :: h2opl(:,:,:)
118
119 integer, intent(inout), optional :: jindx1_aer(:), jindx2_aer(:), iindx1_aer(:), iindx2_aer(:)
120 real(kind_phys), intent(inout), optional :: ddy_aer(:), ddx_aer(:)
121 real(kind_phys), intent(out) :: aer_nm(:,:,:)
122 integer, intent(inout), optional :: jindx1_ci(:), jindx2_ci(:), iindx1_ci(:), iindx2_ci(:)
123 real(kind_phys), intent(inout), optional :: ddy_ci(:), ddx_ci(:)
124 integer, intent(inout) :: imap(:), jmap(:)
125 logical, intent(in) :: do_ugwp_v1
126 real(kind_phys), intent(inout), optional :: ddy_j1tau(:), ddy_j2tau(:)
127 integer, intent(inout), optional :: jindx1_tau(:), jindx2_tau(:)
128
129 integer, intent(in) :: isot, ivegsrc, nlunit
130 real(kind_phys), intent(inout) :: sncovr(:), sncovr_ice(:)
131 integer, intent(in) :: lsm, lsm_noahmp, lsm_ruc, vtype(:)
132 real(kind_phys), intent(in) :: min_seaice, fice(:)
133 real(kind_phys), intent(in) :: landfrac(:)
134 real(kind_phys), intent(inout) :: weasd(:)
135 type(ty_ozphys), intent(in) :: ozphys
136
137 ! NoahMP - only allocated when NoahMP is used
138 integer, intent(in) :: lsoil, lsnow_lsm_lbound, lsnow_lsm_ubound
139 real(kind_phys), intent(in) :: zs(:)
140 real(kind_phys), intent(in) :: dzs(:)
141 real(kind_phys), intent(inout), optional :: tvxy(:)
142 real(kind_phys), intent(inout), optional :: tgxy(:)
143 real(kind_phys), intent(inout), optional :: tahxy(:)
144 real(kind_phys), intent(inout), optional :: canicexy(:)
145 real(kind_phys), intent(inout), optional :: canliqxy(:)
146 real(kind_phys), intent(inout), optional :: eahxy(:)
147 real(kind_phys), intent(inout), optional :: cmxy(:)
148 real(kind_phys), intent(inout), optional :: chxy(:)
149 real(kind_phys), intent(inout), optional :: fwetxy(:)
150 real(kind_phys), intent(inout), optional :: sneqvoxy(:)
151 real(kind_phys), intent(inout), optional :: alboldxy(:)
152 real(kind_phys), intent(inout), optional :: qsnowxy(:)
153 real(kind_phys), intent(inout), optional :: wslakexy(:)
154 real(kind_phys), intent(inout) :: albdvis_lnd(:)
155 real(kind_phys), intent(inout) :: albdnir_lnd(:)
156 real(kind_phys), intent(inout) :: albivis_lnd(:)
157 real(kind_phys), intent(inout) :: albinir_lnd(:)
158 real(kind_phys), intent(inout), optional :: albdvis_ice(:)
159 real(kind_phys), intent(inout), optional :: albdnir_ice(:)
160 real(kind_phys), intent(inout), optional :: albivis_ice(:)
161 real(kind_phys), intent(inout), optional :: albinir_ice(:)
162 real(kind_phys), intent(inout) :: emiss_lnd(:)
163 real(kind_phys), intent(inout) :: emiss_ice(:)
164 real(kind_phys), intent(inout), optional :: taussxy(:)
165 real(kind_phys), intent(inout), optional :: waxy(:)
166 real(kind_phys), intent(inout), optional :: wtxy(:)
167 real(kind_phys), intent(inout), optional :: zwtxy(:)
168 real(kind_phys), intent(inout), optional :: xlaixy(:)
169 real(kind_phys), intent(inout), optional :: xsaixy(:)
170 real(kind_phys), intent(inout), optional :: lfmassxy(:)
171 real(kind_phys), intent(inout), optional :: stmassxy(:)
172 real(kind_phys), intent(inout), optional :: rtmassxy(:)
173 real(kind_phys), intent(inout), optional :: woodxy(:)
174 real(kind_phys), intent(inout), optional :: stblcpxy(:)
175 real(kind_phys), intent(inout), optional :: fastcpxy(:)
176 real(kind_phys), intent(inout), optional :: smcwtdxy(:)
177 real(kind_phys), intent(inout), optional :: deeprechxy(:)
178 real(kind_phys), intent(inout), optional :: rechxy(:)
179 real(kind_phys), intent(inout), optional :: snowxy(:)
180 real(kind_phys), intent(inout), optional :: snicexy(:,lsnow_lsm_lbound:)
181 real(kind_phys), intent(inout), optional :: snliqxy(:,lsnow_lsm_lbound:)
182 real(kind_phys), intent(inout), optional :: tsnoxy (:,lsnow_lsm_lbound:)
183 real(kind_phys), intent(inout), optional :: smoiseq(:,:)
184 real(kind_phys), intent(inout), optional :: zsnsoxy(:,lsnow_lsm_lbound:)
185 real(kind_phys), intent(inout) :: slc(:,:)
186 real(kind_phys), intent(inout) :: smc(:,:)
187 real(kind_phys), intent(inout) :: stc(:,:)
188 real(kind_phys), intent(in) :: tsfcl(:)
189 real(kind_phys), intent(in) :: snowd(:)
190 real(kind_phys), intent(in) :: canopy(:)
191 real(kind_phys), intent(in) :: tg3(:)
192 integer, intent(in) :: stype(:)
193
194 real(kind_phys), intent(in) :: con_t0c
195
196 integer, intent(in) :: nthrds
197 character(len=*), intent(out) :: errmsg
198 integer, intent(out) :: errflg
199
200 ! Local variables
201 integer :: i, j, ix, vegtyp
202 real(kind_phys) :: rsnow
203
204 !--- Noah MP
205 integer :: soiltyp, isnow, is, imn
206 real(kind=kind_phys) :: masslai, masssai, snd
207 real(kind=kind_phys) :: bexp, ddz, smcmax, smcwlt, dwsat, dksat, psisat
208
209 real(kind=kind_phys), dimension(:), allocatable :: dzsno
210 real(kind=kind_phys), dimension(:), allocatable :: dzsnso
211
212 integer :: myerrflg
213 character(len=255) :: myerrmsg
214
215 ! Initialize CCPP error handling variables
216 errmsg = ''
217 errflg = 0
218
219 if (is_initialized) return
220 iamin=999
221 iamax=-999
222 jamin=999
223 jamax=-999
224
226 need_h2odata: if(h2o_phys) then
227 call read_h2odata (h2o_phys, me, master)
228
229 ! Consistency check that the hardcoded values for levh2o and
230 ! h2o_coeff in GFS_typedefs.F90 match what is set by read_h2odata
231 ! in GFS_typedefs.F90: allocate (Tbd%h2opl (IM,levh2o,h2o_coeff))
232 if (size(h2opl, dim=2).ne.levh2o) then
233 write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
234 "levh2o from read_h2odata does not match value in GFS_typedefs.F90: ", &
235 levh2o, " /= ", size(h2opl, dim=2)
236 myerrflg = 1
237 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
238 end if
239 if (size(h2opl, dim=3).ne.h2o_coeff) then
240 write(myerrmsg,'(2a,i0,a,i0)') "Value error in GFS_phys_time_vary_init: ", &
241 "h2o_coeff from read_h2odata does not match value in GFS_typedefs.F90: ", &
242 h2o_coeff, " /= ", size(h2opl, dim=3)
243 myerrflg = 1
244 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
245 end if
246 endif need_h2odata
247
250 if (iaerclm) then
251 ntrcaer = ntrcaerm
252 myerrflg = 0
253 myerrmsg = 'read_aerdata failed without a message'
254 call read_aerdata (me,master,iflip,idate,myerrmsg,myerrflg)
255 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
256 else if(iaermdl ==2 ) then
257 do ix=1,ntrcaerm
258 do j=1,levs
259 do i=1,im
260 aer_nm(i,j,ix) = 1.e-20_kind_phys
261 end do
262 end do
263 end do
264 ntrcaer = ntrcaerm
265 else
266 ntrcaer = 1
267 endif
268
270 if (iccn == 1) then
271 call read_cidata (me,master)
272 ! No consistency check needed for in/ccn data, all values are
273 ! hardcoded in module iccn_def.F and GFS_typedefs.F90
274 endif
275
277 if (do_ugwp_v1) then
278 myerrflg = 0
279 myerrmsg = 'read_tau_amf failed without a message'
280 call read_tau_amf(me, master, myerrmsg, myerrflg)
281 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
282 endif
283
285 myerrflg = 0
286 myerrmsg = 'set_soilveg failed without a message'
287 call set_soilveg(me, isot, ivegsrc, nlunit, myerrmsg, myerrflg)
288 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
289
291 if(lsm == lsm_noahmp) then
292 myerrflg = 0
293 myerrmsg = 'read_mp_table_parameters failed without a message'
294 call read_mp_table_parameters(myerrmsg, myerrflg)
295 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
296 endif
297
298
299! Need an OpenMP barrier here (implicit in "end sections")
300
302 if (ntoz > 0) then
303 call ozphys%setup_o3prog(xlat_d, jindx1_o3, jindx2_o3, ddy_o3)
304 endif
305
307 if (h2o_phys) then
308 call setindxh2o (im, xlat_d, jindx1_h, jindx2_h, ddy_h)
309 endif
310
312 if (iaerclm) then
313 call setindxaer (im, xlat_d, jindx1_aer, &
314 jindx2_aer, ddy_aer, xlon_d, &
315 iindx1_aer, iindx2_aer, ddx_aer, &
316 me, master)
317 iamin = min(minval(iindx1_aer), iamin)
318 iamax = max(maxval(iindx2_aer), iamax)
319 jamin = min(minval(jindx1_aer), jamin)
320 jamax = max(maxval(jindx2_aer), jamax)
321 endif
322
324 if (iccn == 1) then
325 call setindxci (im, xlat_d, jindx1_ci, &
326 jindx2_ci, ddy_ci, xlon_d, &
327 iindx1_ci, iindx2_ci, ddx_ci)
328 endif
329
331 if (do_ugwp_v1) then
332 call cires_indx_ugwp (im, me, master, xlat_d, jindx1_tau, jindx2_tau, &
333 ddy_j1tau, ddy_j2tau)
334 endif
335
336 !--- initial calculation of maps local ix -> global i and j
337 ix = 0
338 do j = 1,ny
339 do i = 1,nx
340 ix = ix + 1
341 jmap(ix) = j
342 imap(ix) = i
343 enddo
344 enddo
345
346 !--- if sncovr does not exist in the restart, need to create it
347 if (all(sncovr < zero)) then
348 if (me == master ) write(*,'(a)') 'GFS_phys_time_vary_init: compute sncovr from weasd and soil vegetation parameters'
349 !--- compute sncovr from existing variables
350 !--- code taken directly from read_fix.f
351 sncovr(:) = zero
352 do ix=1,im
353 if (landfrac(ix) >= drythresh .or. fice(ix) >= min_seaice) then
354 vegtyp = vtype(ix)
355 if (vegtyp == 0) vegtyp = 7
356 rsnow = 0.001_kind_phys*weasd(ix)/snupx(vegtyp)
357 if (0.001_kind_phys*weasd(ix) < snupx(vegtyp)) then
358 sncovr(ix) = one - (exp(-salp_data*rsnow) - rsnow*exp(-salp_data))
359 else
360 sncovr(ix) = one
361 endif
362 endif
363 enddo
364 endif
365
366 !--- For RUC LSM: create sncovr_ice from sncovr
367 if (lsm == lsm_ruc) then
368 if (all(sncovr_ice < zero)) then
369 if (me == master ) write(*,'(a)') 'GFS_phys_time_vary_init: fill sncovr_ice with sncovr for RUC LSM'
370 sncovr_ice(:) = sncovr(:)
371 endif
372 endif
373
374 if (errflg/=0) return
375
376 if (iaerclm) then
377 ! This call is outside the OpenMP section, so it should access errmsg & errflg directly.
378 call read_aerdataf (me, master, iflip, idate, fhour, errmsg, errflg)
379 ! If it is moved to an OpenMP section, it must use myerrmsg, myerrflg, and copy_error.
380 if (errflg/=0) return
381 end if
382
383 !--- For Noah MP or RUC LSMs: initialize four components of albedo for
384 !--- land and ice - not for restart runs
385 lsm_init: if (lsm_cold_start) then
386 if (lsm == lsm_noahmp .or. lsm == lsm_ruc) then
387 if (me == master ) write(*,'(a)') 'GFS_phys_time_vary_init: initialize albedo for land and ice'
388 do ix=1,im
389 albdvis_lnd(ix) = 0.2_kind_phys
390 albdnir_lnd(ix) = 0.2_kind_phys
391 albivis_lnd(ix) = 0.2_kind_phys
392 albinir_lnd(ix) = 0.2_kind_phys
393 emiss_lnd(ix) = 0.95_kind_phys
394 enddo
395 endif
396 if (lsm == lsm_ruc) then
397 do ix=1,im
398 albdvis_ice(ix) = 0.6_kind_phys
399 albdnir_ice(ix) = 0.6_kind_phys
400 albivis_ice(ix) = 0.6_kind_phys
401 albinir_ice(ix) = 0.6_kind_phys
402 emiss_ice(ix) = 0.97_kind_phys
403 enddo
404 endif
405
406 noahmp_init: if (lsm == lsm_noahmp) then
407 allocate(dzsno(lsnow_lsm_lbound:lsnow_lsm_ubound))
408 allocate(dzsnso(lsnow_lsm_lbound:lsoil) )
409 dzsno(:) = missing_value
410 dzsnso(:) = missing_value
411
412 tvxy(:) = missing_value
413 tgxy(:) = missing_value
414 tahxy(:) = missing_value
415 canicexy(:) = missing_value
416 canliqxy(:) = missing_value
417 eahxy(:) = missing_value
418 cmxy(:) = missing_value
419 chxy(:) = missing_value
420 fwetxy(:) = missing_value
421 sneqvoxy(:) = missing_value
422 alboldxy(:) = missing_value
423 qsnowxy(:) = missing_value
424 wslakexy(:) = missing_value
425 taussxy(:) = missing_value
426 waxy(:) = missing_value
427 wtxy(:) = missing_value
428 zwtxy(:) = missing_value
429 xlaixy(:) = missing_value
430 xsaixy(:) = missing_value
431
432 lfmassxy(:) = missing_value
433 stmassxy(:) = missing_value
434 rtmassxy(:) = missing_value
435 woodxy(:) = missing_value
436 stblcpxy(:) = missing_value
437 fastcpxy(:) = missing_value
438 smcwtdxy(:) = missing_value
439 deeprechxy(:) = missing_value
440 rechxy(:) = missing_value
441
442 snowxy(:) = missing_value
443 snicexy(:,:) = missing_value
444 snliqxy(:,:) = missing_value
445 tsnoxy(:,:) = missing_value
446 smoiseq(:,:) = missing_value
447 zsnsoxy(:,:) = missing_value
448
449 imn = idate(2)
450
451!$OMP parallel do num_threads(nthrds) default(none) &
452!$OMP shared(im,lsoil,con_t0c,landfrac,tsfcl,tvxy,tgxy,tahxy) &
453!$OMP shared(snowd,canicexy,canliqxy,canopy,eahxy,cmxy,chxy) &
454!$OMP shared(fwetxy,sneqvoxy,weasd,alboldxy,qsnowxy,wslakexy) &
455!$OMP shared(taussxy) &
456!$OMP shared(waxy,wtxy,zwtxy,imn,vtype,xlaixy,xsaixy,lfmassxy) &
457!$OMP shared(stmassxy,rtmassxy,woodxy,stblcpxy,fastcpxy) &
458!$OMP shared(isbarren_table,isice_table,isurban_table) &
459!$omp shared(iswater_table,laim_table,sla_table,bexp_table) &
460!$omp shared(stc,smc,slc,tg3,snowxy,tsnoxy,snicexy,snliqxy) &
461!$omp shared(zsnsoxy,stype,smcmax_table,smcwlt_table,zs,dzs) &
462!$omp shared(dwsat_table,dksat_table,psisat_table,smoiseq) &
463!$OMP shared(smcwtdxy,deeprechxy,rechxy,errmsg,errflg) &
464!$OMP private(vegtyp,masslai,masssai,snd,dzsno,dzsnso,isnow) &
465!$OMP private(soiltyp,bexp,smcmax,smcwlt,dwsat,dksat,psisat) &
466!$OMP private(myerrmsg,myerrflg,ddz)
467 do ix=1,im
468 if (landfrac(ix) >= drythresh) then
469 tvxy(ix) = tsfcl(ix)
470 tgxy(ix) = tsfcl(ix)
471 tahxy(ix) = tsfcl(ix)
472
473 if (snowd(ix) > 0.01_kind_phys .and. tsfcl(ix) > con_t0c ) then
474 tvxy(ix) = con_t0c
475 tgxy(ix) = con_t0c
476 tahxy(ix) = con_t0c
477 end if
478
479 canicexy(ix) = 0.0_kind_phys
480 canliqxy(ix) = canopy(ix)
481
482 eahxy(ix) = 2000.0_kind_phys
483
484 cmxy(ix) = zero
485 chxy(ix) = zero
486 fwetxy(ix) = zero
487 sneqvoxy(ix) = weasd(ix) ! mm
488 alboldxy(ix) = 0.65_kind_phys
489 qsnowxy(ix) = zero
490
491! if (srflag(ix) > 0.001) qsnowxy(ix) = tprcp(ix)/dtp
492 ! already set to 0.0
493 wslakexy(ix) = zero
494 taussxy(ix) = zero
495
496 waxy(ix) = 4900.0_kind_phys
497 wtxy(ix) = waxy(ix)
498 zwtxy(ix) = (25.0_kind_phys + 2.0_kind_phys) - waxy(ix) / 1000.0_kind_phys / 0.2_kind_phys
499
500 vegtyp = vtype(ix)
501 if (vegtyp == 0) vegtyp = 7
502
503 if ((vegtyp == isbarren_table) .or. (vegtyp == isice_table) .or. (vegtyp == isurban_table) .or. (vegtyp == iswater_table)) then
504
505 xlaixy(ix) = zero
506 xsaixy(ix) = zero
507
508 lfmassxy(ix) = zero
509 stmassxy(ix) = zero
510 rtmassxy(ix) = zero
511
512 woodxy(ix) = zero
513 stblcpxy(ix) = zero
514 fastcpxy(ix) = zero
515
516 else
517
518 xlaixy(ix) = max(laim_table(vegtyp, imn),0.05_kind_phys)
519! xsaixy(ix) = max(saim_table(vegtyp, imn),0.05)
520 xsaixy(ix) = max(xlaixy(ix)*0.1_kind_phys,0.05_kind_phys)
521
522 masslai = 1000.0_kind_phys / max(sla_table(vegtyp),one)
523 lfmassxy(ix) = xlaixy(ix)*masslai
524 masssai = 1000.0_kind_phys / 3.0_kind_phys
525 stmassxy(ix) = xsaixy(ix)* masssai
526
527 rtmassxy(ix) = 500.0_kind_phys
528
529 woodxy(ix) = 500.0_kind_phys
530 stblcpxy(ix) = 1000.0_kind_phys
531 fastcpxy(ix) = 1000.0_kind_phys
532
533 endif ! non urban ...
534
535 if (vegtyp == isice_table) then
536 do is = 1,lsoil
537 stc(ix,is) = min(stc(ix,is),min(tg3(ix),263.15_kind_phys))
538 smc(ix,is) = one
539 slc(ix,is) = zero
540 enddo
541 endif
542
543 snd = snowd(ix)/1000.0_kind_phys ! go to m from snwdph
544
545 if (weasd(ix) /= zero .and. snd == zero ) then
546 snd = weasd(ix)/1000.0
547 endif
548
549 if (vegtyp == 15) then ! land ice in MODIS/IGBP
550 if (weasd(ix) < 0.1_kind_phys) then
551 weasd(ix) = 0.1_kind_phys
552 snd = 0.01_kind_phys
553 endif
554 endif
555
556 if (snd < 0.025_kind_phys ) then
557 snowxy(ix) = zero
558 dzsno(-2:0) = zero
559 elseif (snd >= 0.025_kind_phys .and. snd <= 0.05_kind_phys ) then
560 snowxy(ix) = -1.0_kind_phys
561 dzsno(0) = snd
562 elseif (snd > 0.05_kind_phys .and. snd <= 0.10_kind_phys ) then
563 snowxy(ix) = -2.0_kind_phys
564 dzsno(-1) = 0.5_kind_phys*snd
565 dzsno(0) = 0.5_kind_phys*snd
566 elseif (snd > 0.10_kind_phys .and. snd <= 0.25_kind_phys ) then
567 snowxy(ix) = -2.0_kind_phys
568 dzsno(-1) = 0.05_kind_phys
569 dzsno(0) = snd - 0.05_kind_phys
570 elseif (snd > 0.25_kind_phys .and. snd <= 0.45_kind_phys ) then
571 snowxy(ix) = -3.0_kind_phys
572 dzsno(-2) = 0.05_kind_phys
573 dzsno(-1) = 0.5_kind_phys*(snd-0.05_kind_phys)
574 dzsno(0) = 0.5_kind_phys*(snd-0.05_kind_phys)
575 elseif (snd > 0.45_kind_phys) then
576 snowxy(ix) = -3.0_kind_phys
577 dzsno(-2) = 0.05_kind_phys
578 dzsno(-1) = 0.20_kind_phys
579 dzsno(0) = snd - 0.05_kind_phys - 0.20_kind_phys
580 else
581 myerrmsg = 'Error in GFS_phys_time_vary.fv3.F90: Problem with the logic assigning snow layers in Noah MP initialization'
582 myerrflg = 1
583 call copy_error(myerrmsg, myerrflg, errmsg, errflg)
584 endif
585
586! Now we have the snowxy field
587! snice + snliq + tsno allocation and compute them from what we have
588
589 tsnoxy(ix,:) = zero
590 snicexy(ix,:) = zero
591 snliqxy(ix,:) = zero
592 zsnsoxy(ix,:) = zero
593
594 isnow = nint(snowxy(ix))+1 ! snowxy <=0.0, dzsno >= 0.0
595
596 do is = isnow,0
597 tsnoxy(ix,is) = tgxy(ix)
598 snliqxy(ix,is) = zero
599 snicexy(ix,is) = one * dzsno(is) * weasd(ix)/snd
600 enddo
601!
602!zsnsoxy, all negative ?
603!
604 do is = isnow,0
605 dzsnso(is) = -dzsno(is)
606 enddo
607
608 do is = 1,4
609 dzsnso(is) = -dzs(is)
610 enddo
611!
612! Assign to zsnsoxy
613!
614 zsnsoxy(ix,isnow) = dzsnso(isnow)
615 do is = isnow+1,4
616 zsnsoxy(ix,is) = zsnsoxy(ix,is-1) + dzsnso(is)
617 enddo
618!
619! smoiseq
620! Init water table related quantities here
621!
622 soiltyp = stype(ix)
623 if (soiltyp /= 0) then
624 bexp = bexp_table(soiltyp)
625 smcmax = smcmax_table(soiltyp)
626 smcwlt = smcwlt_table(soiltyp)
627 dwsat = dwsat_table(soiltyp)
628 dksat = dksat_table(soiltyp)
629 psisat = -psisat_table(soiltyp)
630 endif
631
632 if (vegtyp == isurban_table) then
633 smcmax = 0.45_kind_phys
634 smcwlt = 0.40_kind_phys
635 endif
636
637 if ((bexp > zero) .and. (smcmax > zero) .and. (-psisat > zero)) then
638 do is = 1, lsoil
639 if ( is == 1 )then
640 ddz = -zs(is+1) * 0.5_kind_phys
641 elseif ( is < lsoil ) then
642 ddz = ( zs(is-1) - zs(is+1) ) * 0.5_kind_phys
643 else
644 ddz = zs(is-1) - zs(is)
645 endif
646 smoiseq(ix,is) = min(max(find_eq_smc(bexp, dwsat, dksat, ddz, smcmax),1.e-4_kind_phys),smcmax*0.99_kind_phys)
647 enddo
648 else ! bexp <= 0.0
649 smoiseq(ix,1:4) = smcmax
650 endif ! end the bexp condition
651
652 smcwtdxy(ix) = smcmax
653 deeprechxy(ix) = zero
654 rechxy(ix) = zero
655
656 endif
657
658 enddo ! ix
659!$OMP end parallel do
660
661 if (errflg/=0) return
662
663 deallocate(dzsno)
664 deallocate(dzsnso)
665
666 endif noahmp_init
667 endif lsm_init
668
669!Lake model
670 if(lkm>0 .and. iopt_lake>0) then
671 ! A lake model is enabled.
672 do i = 1, im
673 !if (lakefrac(i) > 0.0 .and. lakedepth(i) > 1.0 ) then
674
675 ! The lake data must say there's a lake here (lakefrac) with a depth (lakedepth)
676 if (lakefrac(i) > lakefrac_threshold .and. lakedepth(i) > lakedepth_threshold ) then
677 ! This is a lake point. Inform the other schemes to use a lake model, and possibly nsst (lkm)
678 use_lake_model(i) = lkm
679 cycle
680 else
681 ! Not a valid lake point.
682 use_lake_model(i) = 0
683 endif
684 enddo
685 else
686 ! Lake model is disabled or settings are invalid.
687 use_lake_model = 0
688 endif
689
690 is_initialized = .true.
691
692 contains
693
694!
695! Use newton-raphson method to find eq soil moisture
696!
697 function find_eq_smc(bexp, dwsat, dksat, ddz, smcmax) result(smc)
698 implicit none
699 real(kind=kind_phys), intent(in) :: bexp, dwsat, dksat, ddz, smcmax
700 real(kind=kind_phys) :: smc
701 real(kind=kind_phys) :: expon, aa, bb, func, dfunc, dx
702 integer :: iter
703 !
704 expon = bexp + 1.
705 aa = dwsat / ddz
706 bb = dksat / smcmax ** expon
707 smc = 0.5 * smcmax
708 !
709 do iter = 1,100
710 func = (smc - smcmax) * aa + bb * smc ** expon
711 dfunc = aa + bb * expon * smc ** bexp
712 dx = func / dfunc
713 smc = smc - dx
714 if ( abs(dx) < 1.e-6_kind_phys) return
715 enddo
716 end function find_eq_smc
717
718 end subroutine gfs_phys_time_vary_init
720
727 me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, nsswr, fhswr, lsswr, fhour, &
728 imfdeepcnv, cal_pre, random_clds, nscyc, ntoz, h2o_phys, iaerclm, iccn, clstp, &
729 jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl, iflip, &
730 jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, &
731 jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, fn_nml, &
732 imap, jmap, prsl, seed0, rann, nthrds, nx, ny, nsst, tile_num, nlunit, lsoil, lsoil_lsm,&
733 kice, ialb, isot, ivegsrc, input_nml_file, use_ufo, nst_anl, frac_grid, fhcyc, phour, &
734 lakefrac, min_seaice, min_lakeice, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, &
735 tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, &
736 zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype,scolor, shdmin, shdmax, snowd, &
737 cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, landfrac, ozphys, &
738 do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, errmsg, errflg)
739
740 implicit none
741
742 ! Interface variables
743 integer, intent(in) :: me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, &
744 nsswr, imfdeepcnv, iccn, nscyc, ntoz, iflip
745 integer, intent(in) :: idate(:)
746 real(kind_phys), intent(in) :: fhswr, fhour
747 logical, intent(in) :: lsswr, cal_pre, random_clds, h2o_phys, iaerclm
748 real(kind_phys), intent(out) :: clstp
749 integer, intent(in), optional :: jindx1_o3(:), jindx2_o3(:), jindx1_h(:), jindx2_h(:)
750 real(kind_phys), intent(in), optional :: ddy_o3(:), ddy_h(:)
751 real(kind_phys), intent(inout) :: ozpl(:,:,:), h2opl(:,:,:)
752 integer, intent(in), optional :: jindx1_aer(:), jindx2_aer(:), iindx1_aer(:), iindx2_aer(:)
753 real(kind_phys), intent(in), optional :: ddy_aer(:), ddx_aer(:)
754 real(kind_phys), intent(inout) :: aer_nm(:,:,:)
755 integer, intent(in), optional :: jindx1_ci(:), jindx2_ci(:), iindx1_ci(:), iindx2_ci(:)
756 real(kind_phys), intent(in), optional :: ddy_ci(:), ddx_ci(:)
757 real(kind_phys), intent(inout) :: in_nm(:,:), ccn_nm(:,:)
758 integer, intent(in) :: imap(:), jmap(:)
759 real(kind_phys), intent(in) :: prsl(:,:)
760 integer, intent(in) :: seed0
761 real(kind_phys), intent(inout) :: rann(:,:)
762
763 logical, intent(in) :: do_ugwp_v1
764 integer, intent(in), optional :: jindx1_tau(:), jindx2_tau(:)
765 real(kind_phys), intent(in), optional :: ddy_j1tau(:), ddy_j2tau(:)
766 real(kind_phys), intent(inout) :: tau_amf(:)
767 type(ty_ozphys), intent(in) :: ozphys
768
769 ! For gcycle only
770 integer, intent(in) :: nthrds, nx, ny, nsst, tile_num, nlunit, lsoil
771 integer, intent(in) :: lsoil_lsm, kice, ialb, isot, ivegsrc
772 character(len=*), intent(in) :: input_nml_file(:)
773 character(len=*), intent(in) :: fn_nml
774 logical, intent(in) :: use_ufo, nst_anl, frac_grid
775 real(kind_phys), intent(in) :: fhcyc, phour, lakefrac(:), min_seaice, min_lakeice, &
776 xlat_d(:), xlon_d(:), landfrac(:)
777 real(kind_phys), intent(inout) :: smc(:,:), slc(:,:), stc(:,:), tiice(:,:), tg3(:), &
778 tsfc(:), tsfco(:), tisfc(:), hice(:), fice(:), &
779 facsf(:), facwf(:), alvsf(:), alvwf(:), alnsf(:), alnwf(:), &
780 zorli(:), zorll(:), zorlo(:), weasd(:), snoalb(:), &
781 canopy(:), vfrac(:), shdmin(:), shdmax(:), &
782 snowd(:), cv(:), cvb(:), cvt(:), oro(:), oro_uf(:), slmsk(:)
783 real(kind_phys), intent(inout), optional :: smois(:,:), sh2o(:,:), tslb(:,:), tref(:)
784 integer, intent(inout) :: vtype(:), stype(:),scolor(:), slope(:)
785
786 character(len=*), intent(out) :: errmsg
787 integer, intent(out) :: errflg
788
789 ! Local variables
790 integer :: i, j, k, iseed, iskip, ix, idat(8), jdat(8), iday, j1, j2, nc, n1, n2, jdow, &
791 jdoy, jday, w3kindreal, w3kindint
792 real(kind_phys) :: wrk(1), tem, tx1, tx2, rjday
793 real(kind_phys) :: rannie(cny)
794 real(kind_phys) :: rndval(cnx*cny*nrcm)
795 real(kind_dbl_prec) :: rinc(5)
796
797 ! Initialize CCPP error handling variables
798 errmsg = ''
799 errflg = 0
800
801 ! Check initialization status
802 if (.not.is_initialized) then
803 write(errmsg,'(*(a))') "Logic error: GFS_phys_time_vary_timestep_init called before GFS_phys_time_vary_init"
804 errflg = 1
805 return
806 end if
807
808!$OMP parallel num_threads(nthrds) default(none) &
809!$OMP shared(kdt,nsswr,lsswr,clstp,imfdeepcnv,cal_pre,random_clds) &
810!$OMP shared(fhswr,fhour,seed0,cnx,cny,nrcm,wrk,rannie,rndval) &
811!$OMP shared(rann,im,isc,jsc,imap,jmap,ntoz,me,idate,jindx1_o3,jindx2_o3) &
812!$OMP shared(ozpl,ddy_o3,h2o_phys,jindx1_h,jindx2_h,h2opl,ddy_h,iaerclm,master) &
813!$OMP shared(levs,prsl,iccn,jindx1_ci,jindx2_ci,ddy_ci,iindx1_ci,iindx2_ci) &
814!$OMP shared(ddx_ci,in_nm,ccn_nm,do_ugwp_v1,jindx1_tau,jindx2_tau,ddy_j1tau) &
815!$OMP shared(ddy_j2tau,tau_amf,iflip,ozphys,rjday,n1,n2,idat,jdat,rinc) &
816!$OMP shared(w3kindreal,w3kindint,jdow,jdoy,jday) &
817!$OMP private(iseed,iskip,i,j,k)
818
819!$OMP sections
820
821!$OMP section
822
823 !--- switch for saving convective clouds - cnvc90.f
824 !--- aka Ken Campana/Yu-Tai Hou legacy
825 if ((mod(kdt,nsswr) == 0) .and. (lsswr)) then
826 !--- initialize,accumulate,convert
827 clstp = 1100 + min(fhswr/con_hr,fhour,con_99)
828 elseif (mod(kdt,nsswr) == 0) then
829 !--- accumulate,convert
830 clstp = 0100 + min(fhswr/con_hr,fhour,con_99)
831 elseif (lsswr) then
832 !--- initialize,accumulate
833 clstp = 1100
834 else
835 !--- accumulate
836 clstp = 0100
837 endif
838
839!$OMP section
840
841 !--- random number needed for RAS and old SAS and when cal_pre=.true.
842 ! imfdeepcnv < 0 when ras = .true.
843 if ( (imfdeepcnv <= 0 .or. cal_pre) .and. random_clds ) then
844
845 iseed = mod(con_100*sqrt(fhour*con_hr),1.0d9) + seed0
846 call random_setseed(iseed)
847 call random_number(wrk)
848 do i = 1,cnx*nrcm
849 iseed = iseed + nint(wrk(1)*1000.0) * i
850 call random_setseed(iseed)
851 call random_number(rannie)
852 rndval(1+(i-1)*cny:i*cny) = rannie(1:cny)
853 enddo
854
855 do k = 1,nrcm
856 iskip = (k-1)*cnx*cny
857 do ix=1,im
858 j = jmap(ix)
859 i = imap(ix)
860 rann(ix,k) = rndval(i+isc-1 + (j+jsc-2)*cnx + iskip)
861 enddo
862 enddo
863
864 endif ! imfdeepcnv, cal_re, random_clds
865
866!$OMP section
868 idat=0
869 idat(1)=idate(4)
870 idat(2)=idate(2)
871 idat(3)=idate(3)
872 idat(5)=idate(1)
873 rinc=0.
874 rinc(2)=fhour
875 CALL w3movdat(rinc,idat,jdat)
876 jdow = 0
877 jdoy = 0
878 jday = 0
879 call w3doxdat(jdat,jdow,jdoy,jday)
880 rjday = jdoy + jdat(5) / 24.
881 if (rjday < ozphys%time(1)) rjday = rjday + 365.
882
883 n2 = ozphys%ntime + 1
884 do j=2,ozphys%ntime
885 if (rjday < ozphys%time(j)) then
886 n2 = j
887 exit
888 endif
889 enddo
890 n1 = n2 - 1
891 if (n2 > ozphys%ntime) n2 = n2 - ozphys%ntime
892
894 if (ntoz > 0) then
895 call ozphys%update_o3prog(jindx1_o3, jindx2_o3, ddy_o3, rjday, n1, n2, ozpl)
896 endif
897
898!$OMP section
900 if (h2o_phys) then
901 call h2ointerpol (me, im, idate, fhour, &
902 jindx1_h, jindx2_h, &
903 h2opl, ddy_h)
904 endif
905
906!$OMP section
908 if (iccn == 1) then
909 call ciinterpol (me, im, idate, fhour, &
910 jindx1_ci, jindx2_ci, &
911 ddy_ci, iindx1_ci, &
912 iindx2_ci, ddx_ci, &
913 levs, prsl, in_nm, ccn_nm)
914 endif
915
916!$OMP section
918 if (do_ugwp_v1) then
919 call tau_amf_interp(me, master, im, idate, fhour, &
920 jindx1_tau, jindx2_tau, &
921 ddy_j1tau, ddy_j2tau, tau_amf)
922 endif
923
924!$OMP end sections
925!$OMP end parallel
926
928 if (iaerclm) then
929 ! aerinterpol is using threading inside, don't
930 ! move into OpenMP parallel section above
931 call aerinterpol (me, master, nthrds, im, idate, &
932 fhour, iflip, jindx1_aer, jindx2_aer, &
933 ddy_aer, iindx1_aer, &
934 iindx2_aer, ddx_aer, &
935 levs, prsl, aer_nm, errmsg, errflg)
936 if(errflg /= 0) then
937 return
938 endif
939 endif
940
942 if (nscyc > 0) then
943 if (mod(kdt,nscyc) == 1) THEN
944 call gcycle (me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, &
945 input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, &
946 use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice,&
947 frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, &
948 tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, &
949 zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, &
950 stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, &
951 xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg)
952 endif
953 endif
954
957
963 subroutine gfs_phys_time_vary_timestep_finalize (errmsg, errflg)
964
965 implicit none
966
967 ! Interface variables
968 character(len=*), intent(out) :: errmsg
969 integer, intent(out) :: errflg
970
971 ! Initialize CCPP error handling variables
972 errmsg = ''
973 errflg = 0
974
977
981 subroutine gfs_phys_time_vary_finalize(errmsg, errflg)
982
983 implicit none
984
985 ! Interface variables
986 character(len=*), intent(out) :: errmsg
987 integer, intent(out) :: errflg
988
989 ! Initialize CCPP error handling variables
990 errmsg = ''
991 errflg = 0
992
993 if (.not.is_initialized) return
994
995 ! Deallocate h2o arrays
996 if (allocated(h2o_lat) ) deallocate(h2o_lat)
997 if (allocated(h2o_pres)) deallocate(h2o_pres)
998 if (allocated(h2o_time)) deallocate(h2o_time)
999 if (allocated(h2oplin) ) deallocate(h2oplin)
1000
1001 ! Deallocate aerosol arrays
1002 if (allocated(aerin) ) deallocate(aerin)
1003 if (allocated(aer_pres)) deallocate(aer_pres)
1004
1005 ! Deallocate IN and CCN arrays
1006 if (allocated(ciplin) ) deallocate(ciplin)
1007 if (allocated(ccnin) ) deallocate(ccnin)
1008 if (allocated(ci_pres) ) deallocate(ci_pres)
1009
1010 ! Deallocate UGWP-input arrays
1011 if (allocated(ugwp_taulat)) deallocate(ugwp_taulat)
1012 if (allocated(tau_limb )) deallocate(tau_limb)
1013 if (allocated(days_limb )) deallocate(days_limb)
1014
1015 is_initialized = .false.
1016
1017 end subroutine gfs_phys_time_vary_finalize
1018
1019 end module gfs_phys_time_vary
subroutine, public set_soilveg(me, isot, ivet, nlunit, errmsg, errflg)
This subroutine initializes soil and vegetation.
Definition set_soilveg.f:17
real(kind=kind_phys), parameter drythresh
real(kind=kind_phys), parameter one
real(kind=kind_phys), parameter con_99
subroutine, public gfs_phys_time_vary_init(me, master, ntoz, h2o_phys, iaerclm, iccn, iflip, im, nx, ny, idate, xlat_d, xlon_d, jindx1_o3, jindx2_o3, ddy_o3, jindx1_h, jindx2_h, ddy_h, h2opl, fhour, jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, imap, jmap, do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, isot, ivegsrc, nlunit, sncovr, sncovr_ice, lsm, lsm_noahmp, lsm_ruc, min_seaice, fice, landfrac, vtype, weasd, lsoil, zs, dzs, lsnow_lsm_lbound, lsnow_lsm_ubound, tvxy, tgxy, tahxy, canicexy, canliqxy, eahxy, cmxy, chxy, fwetxy, sneqvoxy, alboldxy, qsnowxy, wslakexy, albdvis_lnd, albdnir_lnd, albivis_lnd, albinir_lnd, albdvis_ice, albdnir_ice, albivis_ice, albinir_ice, emiss_lnd, emiss_ice, taussxy, waxy, wtxy, zwtxy, xlaixy, xsaixy, lfmassxy, stmassxy, rtmassxy, woodxy, stblcpxy, fastcpxy, smcwtdxy, deeprechxy, rechxy, snowxy, snicexy, snliqxy, tsnoxy, smoiseq, zsnsoxy, slc, smc, stc, tsfcl, snowd, canopy, tg3, stype, con_t0c, lsm_cold_start, nthrds, ozphys, errmsg, errflg)
subroutine, public gfs_phys_time_vary_finalize(errmsg, errflg)
real(kind=kind_phys), parameter missing_value
subroutine, public gcycle(me, nthrds, nx, ny, isc, jsc, nsst, tile_num, nlunit, fn_nml, input_nml_file, lsoil, lsoil_lsm, kice, idate, ialb, isot, ivegsrc, use_ufo, nst_anl, fhcyc, phour, landfrac, lakefrac, min_seaice, min_lakeice, frac_grid, smc, slc, stc, smois, sh2o, tslb, tiice, tg3, tref, tsfc, tsfco, tisfc, hice, fice, facsf, facwf, alvsf, alvwf, alnsf, alnwf, zorli, zorll, zorlo, weasd, slope, snoalb, canopy, vfrac, vtype, stype, scolor, shdmin, shdmax, snowd, cv, cvb, cvt, oro, oro_uf, xlat_d, xlon_d, slmsk, imap, jmap, errmsg, errflg)
This subroutine repopulates specific time-varying surface properties for atmospheric forecast runs.
Definition gcycle.F90:26
real(kind=kind_phys), parameter con_hr
real(kind=kind_phys), parameter con_100
subroutine, public gfs_phys_time_vary_timestep_finalize(errmsg, errflg)
real(kind=kind_phys), parameter zero
real(kind=kind_phys) function find_eq_smc(bexp, dwsat, dksat, ddz, smcmax)
subroutine, public gfs_phys_time_vary_timestep_init(me, master, cnx, cny, isc, jsc, nrcm, im, levs, kdt, idate, nsswr, fhswr, lsswr, fhour, imfdeepcnv, cal_pre, random_clds, ozphys, ntoz, h2o_phys, iaerclm, iccn, clstp, jindx1_o3, jindx2_o3, ddy_o3, ozpl, jindx1_h, jindx2_h, ddy_h, h2opl, iflip, jindx1_aer, jindx2_aer, ddy_aer, iindx1_aer, iindx2_aer, ddx_aer, aer_nm, jindx1_ci, jindx2_ci, ddy_ci, iindx1_ci, iindx2_ci, ddx_ci, in_nm, ccn_nm, imap, jmap, prsl, seed0, rann, do_ugwp_v1, jindx1_tau, jindx2_tau, ddy_j1tau, ddy_j2tau, tau_amf, nthrds, errmsg, errflg)
This module defines arrays in H2O scheme.
Definition h2o_def.f:6
This module contains subroutines of reading and interpolating h2o coefficients.
Definition h2ointerp.f90:8
This module defines IN and CCN arrays.
Definition iccn_def.F:6
This module contains subroutines of reading and interplating IN and CCN data.
Definition iccninterp.F90:8
The operational GFS currently parameterizes ozone production and destruction based on monthly mean co...
Data from MPTABLE.TBL, SOILPARM.TBL, GENPARM.TBL for NoahMP.
This module contains set_soilveg subroutine.
Definition set_soilveg.f:4
Derived type containing data and procedures needed by ozone photochemistry parameterization Note All ...