160
161
164
167# ifdef DISTRIBUTE
169# endif
170
171
172
173 integer, intent(in) :: ng, tile
174 integer, intent(in) :: LBi, UBi, LBj, UBj
175 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
176 integer, intent(in) :: nrhs
177
178# ifdef ASSUMED_SHAPE
179# ifdef MASKING
180 real(r8), intent(in) :: rmask(LBi:,LBj:)
181 real(r8), intent(in) :: umask(LBi:,LBj:)
182 real(r8), intent(in) :: vmask(LBi:,LBj:)
183# endif
184 real(r8), intent(in) :: alpha(LBi:,LBj:)
185 real(r8), intent(in) :: beta(LBi:,LBj:)
186 real(r8), intent(in) :: rho(LBi:,LBj:,:)
187 real(r8), intent(in) :: t(LBi:,LBj:,:,:,:)
188 real(r8), intent(in) :: Hair(LBi:,LBj:)
189 real(r8), intent(in) :: Pair(LBi:,LBj:)
190 real(r8), intent(in) :: Tair(LBi:,LBj:)
191 real(r8), intent(in) :: Uwind(LBi:,LBj:)
192 real(r8), intent(in) :: Vwind(LBi:,LBj:)
193 real(r8), intent(inout) :: ad_alpha(LBi:,LBj:)
194 real(r8), intent(inout) :: ad_beta(LBi:,LBj:)
195 real(r8), intent(inout) :: ad_rho(LBi:,LBj:,:)
196 real(r8), intent(inout) :: ad_t(LBi:,LBj:,:,:,:)
197# ifdef CLOUDS
198 real(r8), intent(in) :: cloud(LBi:,LBj:)
199# endif
200# ifdef BBL_MODEL_NOT_YET
201 real(r8), intent(in) :: Awave(LBi:,LBj:)
202 real(r8), intent(in) :: Pwave(LBi:,LBj:)
203# endif
204 real(r8), intent(in) :: rain(LBi:,LBj:)
205
206 real(r8), intent(inout) :: lhflx(LBi:,LBj:)
207 real(r8), intent(inout) :: lrflx(LBi:,LBj:)
208 real(r8), intent(inout) :: shflx(LBi:,LBj:)
209 real(r8), intent(inout) :: srflx(LBi:,LBj:)
210 real(r8), intent(inout) :: stflx(LBi:,LBj:,:)
211 real(r8), intent(inout) :: ad_lhflx(LBi:,LBj:)
212 real(r8), intent(inout) :: ad_lrflx(LBi:,LBj:)
213 real(r8), intent(inout) :: ad_shflx(LBi:,LBj:)
214 real(r8), intent(inout) :: ad_stflx(LBi:,LBj:,:)
215
216# ifdef EMINUSP
217 real(r8), intent(in) :: evap(LBi:,LBj:)
218 real(r8), intent(inout) :: ad_evap(LBi:,LBj:)
219# endif
220 real(r8), intent(inout) :: ad_sustr(LBi:,LBj:)
221 real(r8), intent(inout) :: ad_svstr(LBi:,LBj:)
222# else
223# ifdef MASKING
224 real(r8), intent(in) :: rmask(LBi:UBi,LBj:UBj)
225 real(r8), intent(in) :: umask(LBi:UBi,LBj:UBj)
226 real(r8), intent(in) :: vmask(LBi:UBi,LBj:UBj)
227# endif
228 real(r8), intent(in) :: alpha(LBi:UBi,LBj:UBj)
229 real(r8), intent(in) :: beta(LBi:UBi,LBj:UBj)
230 real(r8), intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
231 real(r8), intent(in) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
232 real(r8), intent(in) :: Hair(LBi:UBi,LBj:UBj)
233 real(r8), intent(in) :: Pair(LBi:UBi,LBj:UBj)
234 real(r8), intent(in) :: Tair(LBi:UBi,LBj:UBj)
235 real(r8), intent(in) :: Uwind(LBi:UBi,LBj:UBj)
236 real(r8), intent(in) :: Vwind(LBi:UBi,LBj:UBj)
237 real(r8), intent(inout) :: ad_alpha(LBi:UBi,LBj:UBj)
238 real(r8), intent(inout) :: ad_beta(LBi:UBi,LBj:UBj)
239 real(r8), intent(inout) :: ad_rho(LBi:UBi,LBj:UBj,N(ng))
240 real(r8), intent(inout) :: ad_t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
241# ifdef CLOUDS
242 real(r8), intent(in) :: cloud(LBi:UBi,LBj:UBj)
243# endif
244# ifdef BBL_MODEL_NOT_YET
245 real(r8), intent(in) :: Awave(LBi:UBi,LBj:UBj)
246 real(r8), intent(in) :: Pwave(LBi:UBi,LBj:UBj)
247# endif
248 real(r8), intent(in) :: rain(LBi:UBi,LBj:UBj)
249
250 real(r8), intent(inout) :: lhflx(LBi:UBi,LBj:UBj)
251 real(r8), intent(inout) :: lrflx(LBi:UBi,LBj:UBj)
252 real(r8), intent(inout) :: shflx(LBi:UBi,LBj:UBj)
253 real(r8), intent(inout) :: srflx(LBi:UBi,LBj:UBj)
254 real(r8), intent(inout) :: stflx(LBi:UBi,LBj:UBj,NT(ng))
255 real(r8), intent(inout) :: ad_lhflx(LBi:UBi,LBj:UBj)
256 real(r8), intent(inout) :: ad_lrflx(LBi:UBi,LBj:UBj)
257 real(r8), intent(inout) :: ad_shflx(LBi:UBi,LBj:UBj)
258 real(r8), intent(inout) :: ad_stflx(LBi:UBi,LBj:UBj,NT(ng))
259
260# ifdef EMINUSP
261 real(r8), intent(in) :: evap(LBi:UBi,LBj:UBj)
262 real(r8), intent(inout) :: ad_evap(LBi:UBi,LBj:UBj)
263# endif
264 real(r8), intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
265 real(r8), intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
266# endif
267
268
269
270 integer :: Iter, IterA, i, j, k
271 integer, parameter :: IterMax = 3
272
273 real(r8), parameter :: eps = 1.0e-20_r8
274 real(r8), parameter :: r3 = 1.0_r8/3.0_r8
275
276 real(r8) :: Bf, Cd, Hl, Hlw, Hscale, Hs, Hsr, IER
277 real(r8) :: ad_Bf, ad_Cd, ad_Hl, ad_Hlw, ad_Hsr, ad_Hs
278 real(r8) :: PairM, RH, Taur
279 real(r8) :: Wspeed, ZQoL, ZToL
280
281 real(r8) :: cff, cff1, cff2, diffh, diffw, oL, upvel
282 real(r8) :: twopi_inv, wet_bulb
283 real(r8) :: ad_wet_bulb, ad_Wspeed
284 real(r8) :: fac, ad_fac, fac1, ad_fac1, fac2, ad_fac2
285 real(r8) :: fac3, ad_fac3, ad_cff, ad_upvel
286 real(r8) :: adfac, adfac1, adfac2
287# ifdef LONGWAVE
288 real(r8) :: e_sat, vap_p
289# endif
290# ifdef COOL_SKIN
291 real(r8) :: Clam, Fc, Hcool, Hsb, Hlb, Qbouy, Qcool, lambd
292 real(r8) :: ad_Clam, ad_Hcool, ad_Hsb, ad_Hlb
293 real(r8) :: ad_Qbouy, ad_Qcool, ad_lambd
294# endif
295
296 real(r8), dimension(IminS:ImaxS) :: CC
297 real(r8), dimension(IminS:ImaxS) :: Cd10
298 real(r8), dimension(IminS:ImaxS) :: Ch10
299 real(r8), dimension(IminS:ImaxS) :: Ct10
300 real(r8), dimension(IminS:ImaxS) :: charn
301 real(r8), dimension(IminS:ImaxS) :: Ct
302 real(r8), dimension(IminS:ImaxS) :: Cwave
303 real(r8), dimension(IminS:ImaxS) :: Cwet
304 real(r8), dimension(IminS:ImaxS) :: delQ
305 real(r8), dimension(IminS:ImaxS) :: delQc
306 real(r8), dimension(IminS:ImaxS) :: delT
307 real(r8), dimension(IminS:ImaxS) :: delTc
308 real(r8), dimension(IminS:ImaxS) :: delW
309 real(r8), dimension(IminS:ImaxS) :: delW1
310 real(r8), dimension(IminS:ImaxS) :: L
311 real(r8), dimension(IminS:ImaxS) :: L10
312 real(r8), dimension(IminS:ImaxS) :: Lwave
313 real(r8), dimension(IminS:ImaxS) :: Q
314 real(r8), dimension(IminS:ImaxS) :: Qair
315 real(r8), dimension(IminS:ImaxS) :: Qpsi
316 real(r8), dimension(IminS:ImaxS) :: Qsea
317 real(r8), dimension(IminS:ImaxS) :: Qstar
318 real(r8), dimension(IminS:ImaxS) :: rhoAir
319 real(r8), dimension(IminS:ImaxS) :: rhoSea
320 real(r8), dimension(IminS:ImaxS) :: Ri
321 real(r8), dimension(IminS:ImaxS) :: Ribcu
322 real(r8), dimension(IminS:ImaxS) :: Rr
323 real(r8), dimension(IminS:ImaxS) :: Scff
324 real(r8), dimension(IminS:ImaxS) :: TairC
325 real(r8), dimension(IminS:ImaxS) :: TairK
326 real(r8), dimension(IminS:ImaxS) :: Tcff
327 real(r8), dimension(IminS:ImaxS) :: Tpsi
328 real(r8), dimension(IminS:ImaxS) :: TseaC
329 real(r8), dimension(IminS:ImaxS) :: TseaK
330 real(r8), dimension(IminS:ImaxS) :: Tstar
331 real(r8), dimension(IminS:ImaxS) :: u10
332 real(r8), dimension(IminS:ImaxS) :: VisAir
333 real(r8), dimension(IminS:ImaxS) :: Wgus
334 real(r8), dimension(IminS:ImaxS) :: Wmag
335 real(r8), dimension(IminS:ImaxS) :: Wpsi
336 real(r8), dimension(IminS:ImaxS) :: Wstar
337 real(r8), dimension(IminS:ImaxS) :: Zetu
338 real(r8), dimension(IminS:ImaxS) :: Zo10
339 real(r8), dimension(IminS:ImaxS) :: ZoT10
340 real(r8), dimension(IminS:ImaxS) :: ZoL
341 real(r8), dimension(IminS:ImaxS) :: ZoQ
342 real(r8), dimension(IminS:ImaxS) :: ZoT
343 real(r8), dimension(IminS:ImaxS) :: ZoW
344 real(r8), dimension(IminS:ImaxS) :: ZWoL
345
346 real(r8), dimension(IminS:ImaxS) :: Wstar1
347 real(r8), dimension(IminS:ImaxS) :: Tstar1
348 real(r8), dimension(IminS:ImaxS) :: Qstar1
349 real(r8), dimension(IminS:ImaxS) :: delTc1
350
351 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Hlv
352 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: LHeat
353 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: LRad
354 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: SHeat
355 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: SRad
356 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Taux
357 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: Tauy
358
359 real(r8), dimension(IminS:ImaxS) :: ad_CC
360 real(r8), dimension(IminS:ImaxS) :: ad_charn
361 real(r8), dimension(IminS:ImaxS) :: ad_Ct
362 real(r8), dimension(IminS:ImaxS) :: ad_Cd10
363 real(r8), dimension(IminS:ImaxS) :: ad_Ct10
364 real(r8), dimension(IminS:ImaxS) :: ad_Cwet
365 real(r8), dimension(IminS:ImaxS) :: ad_delQ
366 real(r8), dimension(IminS:ImaxS) :: ad_delQc
367 real(r8), dimension(IminS:ImaxS) :: ad_delT
368 real(r8), dimension(IminS:ImaxS) :: ad_delTc
369 real(r8), dimension(IminS:ImaxS) :: ad_delW
370 real(r8), dimension(IminS:ImaxS) :: ad_L
371 real(r8), dimension(IminS:ImaxS) :: ad_L10
372 real(r8), dimension(IminS:ImaxS) :: ad_Q
373 real(r8), dimension(IminS:ImaxS) :: ad_Qpsi
374 real(r8), dimension(IminS:ImaxS) :: ad_Qsea
375 real(r8), dimension(IminS:ImaxS) :: ad_Qstar
376 real(r8), dimension(IminS:ImaxS) :: ad_rhoSea
377 real(r8), dimension(IminS:ImaxS) :: ad_Ri
378 real(r8), dimension(IminS:ImaxS) :: ad_Rr
379 real(r8), dimension(IminS:ImaxS) :: ad_Scff
380 real(r8), dimension(IminS:ImaxS) :: ad_Tcff
381 real(r8), dimension(IminS:ImaxS) :: ad_Tpsi
382 real(r8), dimension(IminS:ImaxS) :: ad_TseaC
383 real(r8), dimension(IminS:ImaxS) :: ad_TseaK
384 real(r8), dimension(IminS:ImaxS) :: ad_Tstar
385 real(r8), dimension(IminS:ImaxS) :: ad_u10
386 real(r8), dimension(IminS:ImaxS) :: ad_Wgus
387 real(r8), dimension(IminS:ImaxS) :: ad_Wpsi
388 real(r8), dimension(IminS:ImaxS) :: ad_Wstar
389 real(r8), dimension(IminS:ImaxS) :: ad_Zetu
390 real(r8), dimension(IminS:ImaxS) :: ad_Zo10
391 real(r8), dimension(IminS:ImaxS) :: ad_ZoT10
392 real(r8), dimension(IminS:ImaxS) :: ad_ZoL
393 real(r8), dimension(IminS:ImaxS) :: ad_ZoQ
394 real(r8), dimension(IminS:ImaxS) :: ad_ZoT
395 real(r8), dimension(IminS:ImaxS) :: ad_ZoW
396 real(r8), dimension(IminS:ImaxS) :: ad_ZWoL
397
398 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Hlv
399 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LHeat
400 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_LRad
401 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_SHeat
402 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Taux
403 real(r8), dimension(IminS:ImaxS,JminS:JmaxS) :: ad_Tauy
404
405# include "set_bounds.h"
406
407
408
409
410
411 ad_wet_bulb=0.0_r8
412 ad_wspeed=0.0_r8
413 ad_bf=0.0_r8
414 ad_cd=0.0_r8
415 ad_hl=0.0_r8
416 ad_hlw=0.0_r8
417 ad_hsr=0.0_r8
418 ad_hs=0.0_r8
419 ad_fac=0.0_r8
420 ad_fac1=0.0_r8
421 ad_fac2=0.0_r8
422 ad_fac3=0.0_r8
423 ad_cff=0.0_r8
424 ad_upvel=0.0_r8
425# ifdef COOL_SKIN
426 ad_clam=0.0_r8
427 ad_hcool=0.0_r8
428 ad_hsb=0.0_r8
429 ad_hlb=0.0_r8
430 ad_qbouy=0.0_r8
431 ad_qcool=0.0_r8
432 ad_lambd=0.0_r8
433# endif
434 DO i=imins,imaxs
435 ad_cc(i)=0.0_r8
436 ad_charn(i)=0.0_r8
437 ad_ct(i)=0.0_r8
438 ad_cd10(i)=0.0_r8
439 ad_ct10(i)=0.0_r8
440 ad_cwet(i)=0.0_r8
441 ad_delq(i)=0.0_r8
442 ad_delqc(i)=0.0_r8
443 ad_delt(i)=0.0_r8
444 ad_deltc(i)=0.0_r8
445 ad_delw(i)=0.0_r8
446 ad_l(i)=0.0_r8
447 ad_l10(i)=0.0_r8
448 ad_q(i)=0.0_r8
449 ad_qpsi(i)=0.0_r8
450 ad_qsea(i)=0.0_r8
451 ad_qstar(i)=0.0_r8
452 ad_rhosea(i)=0.0_r8
453 ad_ri(i)=0.0_r8
454 ad_rr(i)=0.0_r8
455 ad_scff(i)=0.0_r8
456 ad_tcff(i)=0.0_r8
457 ad_tpsi(i)=0.0_r8
458 ad_tseac(i)=0.0_r8
459 ad_tseak(i)=0.0_r8
460 ad_tstar(i)=0.0_r8
461 ad_u10(i)=0.0_r8
462 ad_wgus(i)=0.0_r8
463 ad_wpsi(i)=0.0_r8
464 ad_wstar(i)=0.0_r8
465 ad_zetu(i)=0.0_r8
466 ad_zo10(i)=0.0_r8
467 ad_zot10(i)=0.0_r8
468 ad_zol(i)=0.0_r8
469 ad_zoq(i)=0.0_r8
470 ad_zot(i)=0.0_r8
471 ad_zow(i)=0.0_r8
472 ad_zwol(i)=0.0_r8
473 END DO
474 DO j=jmins,jmaxs
475 DO i=imins,imaxs
476 ad_hlv(i,j)=0.0_r8
477 ad_lheat(i,j)=0.0_r8
478 ad_lrad(i,j)=0.0_r8
479 ad_sheat(i,j)=0.0_r8
480 ad_taux(i,j)=0.0_r8
481 ad_tauy(i,j)=0.0_r8
482 END DO
483 END DO
484
486
487
488
489
490
491# ifdef DISTRIBUTE
492
493
494
495
496
497
499 & lbi, ubi, lbj, ubj, &
502 & ad_sustr, ad_svstr)
503# ifdef EMINUSP
504
505
506
507
508
509
510
512 & lbi, ubi, lbj, ubj, &
515 & ad_evap, &
516 & ad_stflx(:,:,
isalt))
517# endif
518
519
520
521
522
523
524
526 & lbi, ubi, lbj, ubj, &
529 & ad_lrflx, ad_lhflx, ad_shflx, &
530 & ad_stflx(:,:,
itemp))
531# endif
533
534
535
536
537 CALL ad_exchange_v2d_tile (ng, tile, &
538 & lbi, ubi, lbj, ubj, &
539 & ad_svstr)
540
541
542
543
544 CALL ad_exchange_u2d_tile (ng, tile, &
545 & lbi, ubi, lbj, ubj, &
546 & ad_sustr)
547# ifdef EMINUSP
548
549
550
551
552 CALL ad_exchange_r2d_tile (ng, tile, &
553 & lbi, ubi, lbj, ubj, &
554 & ad_stflx(:,:,
isalt))
555
556
557
558
559 CALL ad_exchange_r2d_tile (ng, tile, &
560 & lbi, ubi, lbj, ubj, &
561 & ad_evap)
562# endif
563
564
565
566
567 CALL ad_exchange_r2d_tile (ng, tile, &
568 & lbi, ubi, lbj, ubj, &
569 & ad_stflx(:,:,
itemp))
570
571
572
573
574 CALL ad_exchange_r2d_tile (ng, tile, &
575 & lbi, ubi, lbj, ubj, &
576 & ad_shflx)
577
578
579
580
581 CALL ad_exchange_r2d_tile (ng, tile, &
582 & lbi, ubi, lbj, ubj, &
583 & ad_lhflx)
584
585
586
587
588 CALL ad_exchange_r2d_tile (ng, tile, &
589 & lbi, ubi, lbj, ubj, &
590 & ad_lrflx)
591 END IF
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
626 DO j=jstrr,jendr
627 DO i=istr,iendr
628# ifdef MASKING
629
630 ad_sustr(i,j)=ad_sustr(i,j)*umask(i,j)
631# endif
632
633 adfac=cff*ad_sustr(i,j)
634 ad_taux(i-1,j)=ad_taux(i-1,j)+adfac
635 ad_taux(i ,j)=ad_taux(i ,j)+adfac
636# if !(defined AD_SENSITIVITY || defined ADJUST_WSTRESS || \
637 defined i4dvar_ana_sensitivity || defined opt_observations || \
638 defined so_semi)
639 ad_sustr(i,j)=0.0_r8
640# endif
641 END DO
642 END DO
643 DO j=jstr,jendr
644 DO i=istrr,iendr
645# ifdef MASKING
646
647 ad_svstr(i,j)=ad_svstr(i,j)*vmask(i,j)
648# endif
649
650 adfac=cff*ad_svstr(i,j)
651 ad_tauy(i,j-1)=ad_tauy(i,j-1)+adfac
652 ad_tauy(i,j )=ad_tauy(i,j )+adfac
653# if !(defined AD_SENSITIVITY || defined ADJUST_WSTRESS || \
654 defined i4dvar_ana_sensitivity || defined opt_observations || \
655 defined so_semi)
656 ad_svstr(i,j)=0.0_r8
657# endif
658 END DO
659 END DO
660
661
662
663
664 DO j=jstr-1,jendr
665 DO i=istr-1,iendr
666 tseac(i)=t(i,j,
n(ng),nrhs,
itemp)
667 hlv(i,j)=(2.501_r8-0.00237_r8*tseac(i))*1.0e+6_r8
668 END DO
669 END DO
670
673 DO j=jstrr,jendr
674 DO i=istrr,iendr
675# ifdef MASKING
676# ifdef EMINUSP
677
678 ad_evap(i,j)=ad_evap(i,j)*rmask(i,j)
679
680 ad_stflx(i,j,
isalt)=ad_stflx(i,j,
isalt)*rmask(i,j)
681# endif
682
683 ad_stflx(i,j,
itemp)=ad_stflx(i,j,
itemp)*rmask(i,j)
684# endif
685# ifdef EMINUSP
686
687 ad_evap(i,j)=ad_evap(i,j)+cff*ad_stflx(i,j,
isalt)
688# if !(defined AD_SENSITIVITY || defined ADJUST_STFLUX || \
689 defined i4dvar_ana_sensitivity || defined opt_observations || \
690 defined so_semi)
691 ad_stflx(i,j,
isalt)=0.0_r8
692# endif
693
694
695 adfac=ad_evap(i,j)/hlv(i,j)
696 ad_lheat(i,j)=ad_lheat(i,j)+adfac
697 ad_hlv(i,j)=ad_hlv(i,j)-adfac*evap(i,j)
698# if !(defined AD_SENSITIVITY || defind I4DVAR_ANA_SENSITIVITY || \
699 defined opt_observations || defined so_semi)
700 ad_evap(i,j)=0.0_r8
701# endif
702# endif
703
704
705 ad_lrflx(i,j)=ad_lrflx(i,j)+ad_stflx(i,j,
itemp)
706 ad_lhflx(i,j)=ad_lhflx(i,j)+ad_stflx(i,j,
itemp)
707 ad_shflx(i,j)=ad_shflx(i,j)+ad_stflx(i,j,
itemp)
708# if !(defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
709 defined opt_observations || defined so_semi)
710 ad_stflx(i,j,
itemp)=0.0_r8
711# endif
712
713 ad_sheat(i,j)=ad_sheat(i,j)-ad_shflx(i,j)*hscale
714# if !(defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
715 defined opt_observations || defined so_semi)
716 ad_shflx(i,j)=0.0_r8
717# endif
718
719 ad_lheat(i,j)=ad_lheat(i,j)-ad_lhflx(i,j)*hscale
720# if !(defined AD_SENSITIVITY || defined I4DVAR_ANA_SENSITIVITY || \
721 defined opt_observations || defined so_semi)
722 ad_lhflx(i,j)=0.0_r8
723# endif
724
725 ad_lrad(i,j)=ad_lrad(i,j)+ad_lrflx(i,j)*hscale
726 ad_lrflx(i,j)=0.0_r8
727
728 END DO
729 END DO
730
731
732
733
734
736 DO j=jstr-1,jendr
737
738
739
740 DO i=istr-1,iendr
741
742
743
744 wmag(i)=sqrt(uwind(i,j)*uwind(i,j)+vwind(i,j)*vwind(i,j))
745 pairm=pair(i,j)
746 tairc(i)=tair(i,j)
747 tairk(i)=tairc(i)+273.16_r8
748 tseac(i)=t(i,j,
n(ng),nrhs,
itemp)
749 tseak(i)=tseac(i)+273.16_r8
750 rhosea(i)=rho(i,j,
n(ng))+1000.0_r8
751 rh=hair(i,j)
752 srad(i,j)=srflx(i,j)*hscale
753 tcff(i)=alpha(i,j)
754 scff(i)=beta(i,j)
755
756
757
758 deltc(i)=0.0_r8
759 delqc(i)=0.0_r8
760 lheat(i,j)=lhflx(i,j)*hscale
761 sheat(i,j)=shflx(i,j)*hscale
762 taur=0.0_r8
763 taux(i,j)=0.0_r8
764 tauy(i,j)=0.0_r8
765
766
767
768
769
770# if defined LONGWAVE
771
772
773
774
775
776
777
778 cff=(0.7859_r8+0.03477_r8*tairc(i))/ &
779 & (1.0_r8+0.00412_r8*tairc(i))
780 e_sat=10.0_r8**cff
781 vap_p=e_sat*rh
782 cff2=tairk(i)*tairk(i)*tairk(i)
783 cff1=cff2*tairk(i)
785 & (cff1*(0.39_r8-0.05_r8*sqrt(vap_p))* &
786 & (1.0_r8-0.6823_r8*cloud(i,j)*cloud(i,j))+ &
787 & cff2*4.0_r8*(tseak(i)-tairk(i)))
788
789# elif defined LONGWAVE_OUT
790
791
792
793
794 lrad(i,j)=lrflx(i,j)*hscale- &
796
797# else
798 lrad(i,j)=lrflx(i,j)*hscale
799# endif
800# ifdef MASKING
801 lrad(i,j)=lrad(i,j)*rmask(i,j)
802# endif
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
837 & exp(17.502_r8*tairc(i)/(240.97_r8+tairc(i)))
838
839
840
841 qair(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
842
843
844
845 IF (rh.lt.2.0_r8) THEN
846 cff=cff*rh
847 q(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
848 ELSE
849 q(i)=rh/1000.0_r8
850 END IF
851
852
853
854 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
855 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
856
857
858
859 cff=cff*0.98_r8
860
861
862
863 qsea(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
864
865
866
867
868
869
870
871
872 rhoair(i)=pairm*100.0_r8/(
blk_rgas*tairk(i)* &
873 & (1.0_r8+0.61_r8*q(i)))
874
875
876
877 visair(i)=1.326e-5_r8* &
878 & (1.0_r8+tairc(i)*(6.542e-3_r8+tairc(i)* &
879 & (8.301e-6_r8-4.84e-9_r8*tairc(i))))
880
881
882
883 hlv(i,j)=(2.501_r8-0.00237_r8*tseac(i))*1.0e+6_r8
884
885
886
887
888 wgus(i)=0.5_r8
889 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
890 delq(i)=qsea(i)-q(i)
891 delt(i)=tseac(i)-tairc(i)
892
893
894
895 zow(i)=0.0001_r8
896 u10(i)=delw(i)*log(10.0_r8/zow(i))/log(
blk_zw(ng)/zow(i))
897 wstar(i)=0.035_r8*u10(i)
898 zo10(i)=0.011_r8*wstar(i)*wstar(i)/
g+ &
899 & 0.11_r8*visair(i)/wstar(i)
900 cd10(i)=(
vonkar/log(10.0_r8/zo10(i)))**2
901 ch10(i)=0.00115_r8
902 ct10(i)=ch10(i)/sqrt(cd10(i))
903 zot10(i)=10.0_r8/exp(
vonkar/ct10(i))
905
906
907
910 deltc(i)=0.0_r8
911# ifdef COOL_SKIN
913# endif
915 ri(i)=-
g*
blk_zw(ng)*((delt(i)-deltc(i))+ &
916 & 0.61_r8*tairk(i)*delq(i))/ &
917 & (tairk(i)*delw(i)*delw(i))
918 IF (ri(i).lt.0.0_r8) THEN
919 zetu(i)=cc(i)*ri(i)/(1.0_r8+ri(i)/ribcu(i))
920 ELSE
921 zetu(i)=cc(i)*ri(i)/(1.0_r8+3.0_r8*ri(i)/cc(i))
922 END IF
924
925
926
929 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
930 & (log(
blk_zt(ng)/zot10(i))- &
932 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
933 & (log(
blk_zq(ng)/zot10(i))- &
935
936
937
938
939 IF (delw(i).gt.18.0_r8) THEN
940 charn(i)=0.018_r8
941 ELSE IF ((10.0_r8.lt.delw(i)).and.(delw(i).le.18.0_r8)) THEN
942 charn(i)=0.011_r8+ &
943 & 0.125_r8*(0.018_r8-0.011_r8)*(delw(i)-10._r8)
944 ELSE
945 charn(i)=0.011_r8
946 END IF
947# ifdef BBL_MODEL_NOT_YET
948 cwave(i)=
g*pwave(i,j)*twopi_inv
949 lwave(i)=cwave(i)*pwave(i,j)
950# endif
951 END DO
952
953
954
955 DO iter=1,itermax
956 DO i=istr-1,iendr
957# ifdef BBL_MODEL_NOT_YET
958
959
960
961# ifdef WIND_WAVES
962 zow(i)=(25._r8/
pi)*lwave(i)*(wstar(i)/cwave(i))**4.5+ &
963 & 0.11_r8*visair(i)/(wstar(i)+eps)
964# else
965 zow(i)=1200._r8*awave(i,j)*(awave(i,j)/lwave(i))**4.5+ &
966 & 0.11_r8*visair(i)/(wstar(i)+eps)
967# endif
968# else
969 zow(i)=charn(i)*wstar(i)*wstar(i)/
g+ &
970 & 0.11_r8*visair(i)/(wstar(i)+eps)
971# endif
972 rr(i)=zow(i)*wstar(i)/visair(i)
973
974
975
976 zoq(i)=min(1.15e-4_r8,5.5e-5_r8/rr(i)**0.6)
977 zot(i)=zoq(i)
979 & (tstar(i)*(1.0_r8+0.61_r8*q(i))+ &
980 & 0.61_r8*tairk(i)*qstar(i))/ &
981 & (tairk(i)*wstar(i)*wstar(i)* &
982 & (1.0_r8+0.61_r8*q(i))+eps)
983 l(i)=
blk_zw(ng)/(zol(i)+eps)
984
985
986
990# ifdef COOL_SKIN
991 cwet(i)=0.622_r8*hlv(i,j)*qsea(i)/ &
993 delqc(i)=cwet(i)*deltc(i)
994# endif
995
996
997
998 wstar(i)=max(eps,delw(i)*
vonkar/ &
999 & (log(
blk_zw(ng)/zow(i))-wpsi(i)))
1000 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
1001 & (log(
blk_zt(ng)/zot(i))-tpsi(i))
1002 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
1003 & (log(
blk_zq(ng)/zoq(i))-qpsi(i))
1004
1005
1006
1008 & wstar(i)*(tstar(i)+0.61_r8*tairk(i)*qstar(i))
1009 IF (bf.gt.0.0_r8) THEN
1011 ELSE
1012 wgus(i)=0.2_r8
1013 END IF
1014 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
1015# ifdef COOL_SKIN
1016
1017
1018
1019
1020
1021
1022
1023
1026
1027
1028
1029 hcool=0.001_r8
1030
1031
1032
1033 hsb=-rhoair(i)*
blk_cpa*wstar(i)*tstar(i)
1034 hlb=-rhoair(i)*hlv(i,j)*wstar(i)*qstar(i)
1035
1036
1037
1038 fc=0.065_r8+11.0_r8*hcool- &
1039 & (1.0_r8-exp(-hcool*1250.0_r8))*6.6e-5_r8/hcool
1040
1041
1042
1043 qcool=lrad(i,j)+hsb+hlb-srad(i,j)*fc
1044 qbouy=tcff(i)*qcool+scff(i)*hlb*
blk_cpw/hlv(i,j)
1045
1046
1047
1048 IF ((qcool.gt.0.0_r8).and.(qbouy.gt.0.0_r8)) THEN
1049 lambd=6.0_r8/ &
1050 & (1.0_r8+(clam*qbouy/(wstar(i)+eps)**4)**0.75_r8)**r3
1051 hcool=lambd*
blk_visw/(sqrt(rhoair(i)/rhosea(i))* &
1052 & wstar(i)+eps)
1054 ELSE
1055 deltc(i)=0.0_r8
1056 END IF
1057 delqc(i)=cwet(i)*deltc(i)
1058# endif
1059 END DO
1060 END DO
1061
1062
1063
1064
1065
1066
1067
1068 DO i=istr-1,iendr
1069
1070
1071
1072 wspeed=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
1073 cd=wstar(i)*wstar(i)/(wspeed*wspeed+eps)
1074
1075
1076
1077 hs=-
blk_cpa*rhoair(i)*wstar(i)*tstar(i)
1078
1079
1080
1081 diffw=2.11e-5_r8*(tairk(i)/273.16_r8)**1.94_r8
1082 diffh=0.02411_r8*(1.0_r8+tairc(i)* &
1083 & (3.309e-3_r8-1.44e-6_r8*tairc(i)))/ &
1085 cff=qair(i)*hlv(i,j)/(
blk_rgas*tairk(i)*tairk(i))
1086 wet_bulb=1.0_r8/(1.0_r8+0.622_r8*(cff*hlv(i,j)*diffw)/ &
1088 hsr=rain(i,j)*wet_bulb*
blk_cpw* &
1089 & ((tseac(i)-tairc(i))+(qsea(i)-q(i))*hlv(i,j)/
blk_cpa)
1090 sheat(i,j)=(hs+hsr)
1091# ifdef MASKING
1092 sheat(i,j)=sheat(i,j)*rmask(i,j)
1093# endif
1094
1095
1096
1097 hl=-hlv(i,j)*rhoair(i)*wstar(i)*qstar(i)
1098
1099
1100
1101 upvel=-1.61_r8*wstar(i)*qstar(i)- &
1102 & (1.0_r8+1.61_r8*q(i))*wstar(i)*tstar(i)/tairk(i)
1103 hlw=rhoair(i)*hlv(i,j)*upvel*q(i)
1104 lheat(i,j)=(hl+hlw)
1105# ifdef MASKING
1106 lheat(i,j)=lheat(i,j)*rmask(i,j)
1107# endif
1108
1109
1110
1111
1112# ifdef MASKING
1113
1114 ad_tauy(i,j)=ad_tauy(i,j)*rmask(i,j)
1115# endif
1116
1117 ad_cff=ad_cff+ad_tauy(i,j)*vwind(i,j)
1118 ad_tauy(i,j)=0.0_r8
1119# ifdef MASKING
1120
1121 ad_taux(i,j)=ad_taux(i,j)*rmask(i,j)
1122# endif
1123
1124 ad_cff=ad_cff+ad_taux(i,j)*uwind(i,j)
1125 ad_taux(i,j)=0.0_r8
1126
1127
1128 adfac=rhoair(i)*ad_cff
1129 ad_cd=ad_cd+wspeed*adfac
1130 ad_wspeed=ad_wspeed+cd*adfac
1131 ad_cff=0.0_r8
1132
1133
1134
1135
1136
1137# ifdef MASKING
1138
1139 ad_lheat(i,j)=ad_lheat(i,j)*rmask(i,j)
1140# endif
1141
1142 ad_hl=ad_hl+ad_lheat(i,j)
1143 ad_hlw=ad_hlw+ad_lheat(i,j)
1144 ad_lheat(i,j)=0.0_r8
1145
1146
1147
1148 adfac=rhoair(i)*q(i)*ad_hlw
1149 ad_hlv(i,j)=ad_hlv(i,j)+upvel*adfac
1150 ad_upvel=ad_upvel+hlv(i,j)*adfac
1151 ad_hlw=0.0_r8
1152
1153
1154
1155
1156
1157 adfac=-1.61_r8*ad_upvel
1158 adfac1=-(1.0_r8+1.61_r8*q(i))*ad_upvel/tairk(i)
1159 ad_wstar(i)=ad_wstar(i)+qstar(i)*adfac+tstar(i)*adfac1
1160 ad_qstar(i)=ad_qstar(i)+wstar(i)*adfac
1161 ad_tstar(i)=ad_tstar(i)+wstar(i)*adfac1
1162 ad_upvel=0.0_r8
1163
1164
1165
1166
1167 adfac=hlv(i,j)*rhoair(i)*ad_hl
1168 ad_hlv(i,j)=ad_hlv(i,j)-rhoair(i)*wstar(i)*qstar(i)*ad_hl
1169 ad_wstar(i)=ad_wstar(i)-qstar(i)*adfac
1170 ad_qstar(i)=ad_qstar(i)-wstar(i)*adfac
1171 ad_hl=0.0_r8
1172
1173
1174
1175
1176
1177# ifdef MASKING
1178
1179 ad_sheat(i,j)=ad_sheat(i,j)*rmask(i,j)
1180# endif
1181
1182
1183 ad_hs=ad_hs+ad_sheat(i,j)
1184 ad_hsr=ad_hsr+ad_sheat(i,j)
1185 ad_sheat(i,j)=0.0_r8
1186
1187
1188
1189
1190
1191 adfac=rain(i,j)*wet_bulb*
blk_cpw*ad_hsr
1193 ad_wet_bulb=ad_wet_bulb+hsr*ad_hsr/wet_bulb
1194 ad_tseac(i)=ad_tseac(i)+adfac
1195 ad_qsea(i)=ad_qsea(i)+hlv(i,j)*adfac1
1196 ad_hlv(i,j)=ad_hlv(i,j)+(qsea(i)-q(i))*adfac1
1197 ad_hsr=0.0_r8
1198
1199
1200 ad_fac=-wet_bulb*wet_bulb*ad_wet_bulb
1201 ad_wet_bulb=0.0_r8
1202
1203
1204
1205 adfac=0.622_r8*diffw*ad_fac/(
blk_cpa*diffh)
1206 ad_cff=ad_cff+hlv(i,j)*adfac
1207 ad_hlv(i,j)=ad_hlv(i,j)+cff*adfac
1208 ad_fac=0.0_r8
1209
1210
1211 ad_hlv(i,j)=ad_hlv(i,j)+qair(i)*ad_cff/ &
1213 ad_cff=0.0_r8
1214
1215
1216
1217
1218
1219
1220 adfac=-
blk_cpa*rhoair(i)*ad_hs
1221 ad_wstar(i)=ad_wstar(i)+tstar(i)*adfac
1222 ad_tstar(i)=ad_tstar(i)+wstar(i)*adfac
1223 ad_hs=0.0_r8
1224
1225
1226
1227
1228
1229
1230 adfac=2.0_r8*ad_cd/(wspeed*wspeed+eps)
1231 ad_wstar(i)=ad_wstar(i)+wstar(i)*adfac
1232 ad_wspeed=ad_wspeed-wspeed*cd*adfac
1233 ad_cd=0.0_r8
1234
1235 IF (wspeed.ne.0.0_r8) THEN
1236
1237 ad_wgus(i)=ad_wgus(i)+wgus(i)*ad_wspeed/wspeed
1238 ad_wspeed=0.0_r8
1239 ELSE
1240
1241 ad_wspeed=0.0_r8
1242 END IF
1243
1244 END DO
1245
1246
1247
1248
1249 DO iter=itermax,1,-1
1250
1251
1252
1253
1254 DO i=istr-1,iendr
1255
1256
1257
1258 wmag(i)=sqrt(uwind(i,j)*uwind(i,j)+vwind(i,j)*vwind(i,j))
1259 pairm=pair(i,j)
1260 tairc(i)=tair(i,j)
1261 tairk(i)=tairc(i)+273.16_r8
1262 tseac(i)=t(i,j,
n(ng),nrhs,
itemp)
1263 tseak(i)=tseac(i)+273.16_r8
1264 rhosea(i)=rho(i,j,
n(ng))+1000.0_r8
1265 rh=hair(i,j)
1266 srad(i,j)=srflx(i,j)*hscale
1267 tcff(i)=alpha(i,j)
1268 scff(i)=beta(i,j)
1269
1270
1271
1272 deltc(i)=0.0_r8
1273 delqc(i)=0.0_r8
1274 lheat(i,j)=lhflx(i,j)*hscale
1275 sheat(i,j)=shflx(i,j)*hscale
1276 taur=0.0_r8
1277 taux(i,j)=0.0_r8
1278 tauy(i,j)=0.0_r8
1279
1280
1281
1282
1283
1284# if defined LONGWAVE
1285
1286
1287
1288
1289
1290
1291
1292 cff=(0.7859_r8+0.03477_r8*tairc(i))/ &
1293 & (1.0_r8+0.00412_r8*tairc(i))
1294 e_sat=10.0_r8**cff
1295 vap_p=e_sat*rh
1296 cff2=tairk(i)*tairk(i)*tairk(i)
1297 cff1=cff2*tairk(i)
1299 & (cff1*(0.39_r8-0.05_r8*sqrt(vap_p))* &
1300 & (1.0_r8-0.6823_r8*cloud(i,j)*cloud(i,j))+ &
1301 & cff2*4.0_r8*(tseak(i)-tairk(i)))
1302
1303# elif defined LONGWAVE_OUT
1304
1305
1306
1307
1308 lrad(i,j)=lrflx(i,j)*hscale- &
1310
1311# else
1312 lrad(i,j)=lrflx(i,j)*hscale
1313# endif
1314# ifdef MASKING
1315 lrad(i,j)=lrad(i,j)*rmask(i,j)
1316# endif
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
1351 & exp(17.502_r8*tairc(i)/(240.97_r8+tairc(i)))
1352
1353
1354
1355 qair(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
1356
1357
1358
1359 IF (rh.lt.2.0_r8) THEN
1360 cff=cff*rh
1361 q(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
1362 ELSE
1363 q(i)=rh/1000.0_r8
1364 END IF
1365
1366
1367
1368 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
1369 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
1370
1371
1372
1373 cff=cff*0.98_r8
1374
1375
1376
1377 qsea(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
1378
1379
1380
1381
1382
1383
1384
1385
1386 rhoair(i)=pairm*100.0_r8/(
blk_rgas*tairk(i)* &
1387 & (1.0_r8+0.61_r8*q(i)))
1388
1389
1390
1391 visair(i)=1.326e-5_r8* &
1392 & (1.0_r8+tairc(i)*(6.542e-3_r8+tairc(i)* &
1393 & (8.301e-6_r8-4.84e-9_r8*tairc(i))))
1394
1395
1396
1397 hlv(i,j)=(2.501_r8-0.00237_r8*tseac(i))*1.0e+6_r8
1398
1399
1400
1401
1402 wgus(i)=0.5_r8
1403 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
1404 delq(i)=qsea(i)-q(i)
1405 delt(i)=tseac(i)-tairc(i)
1406
1407
1408
1409 zow(i)=0.0001_r8
1410 u10(i)=delw(i)*log(10.0_r8/zow(i))/log(
blk_zw(ng)/zow(i))
1411 wstar(i)=0.035_r8*u10(i)
1412 zo10(i)=0.011_r8*wstar(i)*wstar(i)/
g+ &
1413 & 0.11_r8*visair(i)/wstar(i)
1414 cd10(i)=(
vonkar/log(10.0_r8/zo10(i)))**2
1415 ch10(i)=0.00115_r8
1416 ct10(i)=ch10(i)/sqrt(cd10(i))
1417 zot10(i)=10.0_r8/exp(
vonkar/ct10(i))
1419
1420
1421
1424 deltc(i)=0.0_r8
1425# ifdef COOL_SKIN
1427# endif
1429 ri(i)=-
g*
blk_zw(ng)*((delt(i)-deltc(i))+ &
1430 & 0.61_r8*tairk(i)*delq(i))/ &
1431 & (tairk(i)*delw(i)*delw(i))
1432 IF (ri(i).lt.0.0_r8) THEN
1433 zetu(i)=cc(i)*ri(i)/(1.0_r8+ri(i)/ribcu(i))
1434 ELSE
1435 zetu(i)=cc(i)*ri(i)/(1.0_r8+3.0_r8*ri(i)/cc(i))
1436 END IF
1437 l10(i)=
blk_zw(ng)/zetu(i)
1438
1439
1440
1443 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
1444 & (log(
blk_zt(ng)/zot10(i))- &
1446 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
1447 & (log(
blk_zq(ng)/zot10(i))- &
1449
1450
1451
1452
1453 IF (delw(i).gt.18.0_r8) THEN
1454 charn(i)=0.018_r8
1455 ELSE IF ((10.0_r8.lt.delw(i)).and.(delw(i).le.18.0_r8)) THEN
1456 charn(i)=0.011_r8+ &
1457 & 0.125_r8*(0.018_r8-0.011_r8)*(delw(i)-10._r8)
1458 ELSE
1459 charn(i)=0.011_r8
1460 END IF
1461# ifdef BBL_MODEL_NOT_YET
1462 cwave(i)=
g*pwave(i,j)*twopi_inv
1463 lwave(i)=cwave(i)*pwave(i,j)
1464# endif
1465 END DO
1466
1467
1468
1469 DO itera=1,iter-1
1470 DO i=istr-1,iendr
1471# ifdef BBL_MODEL_NOT_YET
1472
1473
1474
1475# ifdef WIND_WAVES
1476 zow(i)=(25._r8/
pi)*lwave(i)*(wstar(i)/cwave(i))**4.5+ &
1477 & 0.11_r8*visair(i)/(wstar(i)+eps)
1478# else
1479 zow(i)=1200._r8*awave(i,j)*(awave(i,j)/lwave(i))**4.5+ &
1480 & 0.11_r8*visair(i)/(wstar(i)+eps)
1481# endif
1482# else
1483 zow(i)=charn(i)*wstar(i)*wstar(i)/
g+ &
1484 & 0.11_r8*visair(i)/(wstar(i)+eps)
1485# endif
1486 rr(i)=zow(i)*wstar(i)/visair(i)
1487
1488
1489
1490 zoq(i)=min(1.15e-4_r8,5.5e-5_r8/rr(i)**0.6)
1491 zot(i)=zoq(i)
1493 & (tstar(i)*(1.0_r8+0.61_r8*q(i))+ &
1494 & 0.61_r8*tairk(i)*qstar(i))/ &
1495 & (tairk(i)*wstar(i)*wstar(i)* &
1496 & (1.0_r8+0.61_r8*q(i))+eps)
1497 l(i)=
blk_zw(ng)/(zol(i)+eps)
1498
1499
1500
1504# ifdef COOL_SKIN
1505 cwet(i)=0.622_r8*hlv(i,j)*qsea(i)/ &
1507 delqc(i)=cwet(i)*deltc(i)
1508# endif
1509
1510
1511
1512 wstar(i)=max(eps,delw(i)*
vonkar/ &
1513 & (log(
blk_zw(ng)/zow(i))-wpsi(i)))
1514 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
1515 & (log(
blk_zt(ng)/zot(i))-tpsi(i))
1516 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
1517 & (log(
blk_zq(ng)/zoq(i))-qpsi(i))
1518
1519
1520
1522 & wstar(i)*(tstar(i)+0.61_r8*tairk(i)*qstar(i))
1523 IF (bf.gt.0.0_r8) THEN
1525 ELSE
1526 wgus(i)=0.2_r8
1527 END IF
1528 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
1529# ifdef COOL_SKIN
1530
1531
1532
1533
1534
1535
1536
1537
1540
1541
1542
1543 hcool=0.001_r8
1544
1545
1546
1547 hsb=-rhoair(i)*
blk_cpa*wstar(i)*tstar(i)
1548 hlb=-rhoair(i)*hlv(i,j)*wstar(i)*qstar(i)
1549
1550
1551
1552 fc=0.065_r8+11.0_r8*hcool- &
1553 & (1.0_r8-exp(-hcool*1250.0_r8))*6.6e-5_r8/hcool
1554
1555
1556
1557 qcool=lrad(i,j)+hsb+hlb-srad(i,j)*fc
1558 qbouy=tcff(i)*qcool+scff(i)*hlb*
blk_cpw/hlv(i,j)
1559
1560
1561
1562 IF ((qcool.gt.0.0_r8).and.(qbouy.gt.0.0_r8)) THEN
1563 lambd=6.0_r8/ &
1564 & (1.0_r8+(clam*qbouy/(wstar(i)+eps)**4)**0.75_r8)**r3
1565 hcool=lambd*
blk_visw/(sqrt(rhoair(i)/rhosea(i))* &
1566 & wstar(i)+eps)
1568 ELSE
1569 deltc(i)=0.0_r8
1570 END IF
1571 delqc(i)=cwet(i)*deltc(i)
1572# endif
1573 END DO
1574 END DO
1575
1576
1577 DO i=istr-1,iendr
1578
1579
1580
1581
1582# ifdef BBL_MODEL_NOT_YET
1583
1584
1585
1586# ifdef WIND_WAVES
1587 zow(i)=(25._r8/
pi)*lwave(i)*(wstar(i)/cwave(i))**4.5+ &
1588 & 0.11_r8*visair(i)/(wstar(i)+eps)
1589# else
1590 zow(i)=1200._r8*awave(i,j)*(awave(i,j)/lwave(i))**4.5+ &
1591 & 0.11_r8*visair(i)/(wstar(i)+eps)
1592# endif
1593# else
1594 zow(i)=charn(i)*wstar(i)*wstar(i)/
g+ &
1595 & 0.11_r8*visair(i)/(wstar(i)+eps)
1596# endif
1597 rr(i)=zow(i)*wstar(i)/visair(i)
1598
1599
1600
1601 zoq(i)=min(1.15e-4_r8,5.5e-5_r8/rr(i)**0.6)
1602 zot(i)=zoq(i)
1604 & (tstar(i)*(1.0_r8+0.61_r8*q(i))+ &
1605 & 0.61_r8*tairk(i)*qstar(i))/ &
1606 & (tairk(i)*wstar(i)*wstar(i)* &
1607 & (1.0_r8+0.61_r8*q(i))+eps)
1608 l(i)=
blk_zw(ng)/(zol(i)+eps)
1609
1610
1611
1615# ifdef COOL_SKIN
1616 delqc(i)=cwet(i)*deltc(i)
1617# endif
1618
1619
1620
1621 wstar1(i)=max(eps,delw(i)*
vonkar/ &
1622 & (log(
blk_zw(ng)/zow(i))-wpsi(i)))
1623 tstar1(i)=-(delt(i)-deltc(i))*
vonkar/ &
1624 & (log(
blk_zt(ng)/zot(i))-tpsi(i))
1625 qstar1(i)=-(delq(i)-delqc(i))*
vonkar/ &
1626 & (log(
blk_zq(ng)/zoq(i))-qpsi(i))
1627
1628
1629
1631 & wstar1(i)*(tstar1(i)+0.61_r8*tairk(i)*qstar1(i))
1632 IF (bf.gt.0.0_r8) THEN
1634 ELSE
1635 wgus(i)=0.2_r8
1636 END IF
1637 delw1(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
1638# ifdef COOL_SKIN
1639
1640
1641
1642
1643
1644
1645
1646
1649
1650
1651
1652 hcool=0.001_r8
1653
1654
1655
1656 hsb=-rhoair(i)*
blk_cpa*wstar1(i)*tstar1(i)
1657 hlb=-rhoair(i)*hlv(i,j)*wstar1(i)*qstar1(i)
1658
1659
1660
1661 fc=0.065_r8+11.0_r8*hcool- &
1662 & (1.0_r8-exp(-hcool*1250.0_r8))*6.6e-5_r8/hcool
1663
1664
1665
1666 qcool=lrad(i,j)+hsb+hlb-srad(i,j)*fc
1667 qbouy=tcff(i)*qcool+scff(i)*hlb*
blk_cpw/hlv(i,j)
1668
1669
1670
1671 IF ((qcool.gt.0.0_r8).and.(qbouy.gt.0.0_r8)) THEN
1672 lambd=6.0_r8/ &
1673 & (1.0_r8+(clam*qbouy/(wstar1(i)+eps)**4)**0.75_r8)**r3
1674 hcool=lambd*
blk_visw/(sqrt(rhoair(i)/rhosea(i))* &
1675 & wstar1(i)+eps)
1677 ELSE
1678 deltc1(i)=0.0_r8
1679 END IF
1680 delqc(i)=cwet(i)*deltc1(i)
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691 ad_cwet(i)=ad_cwet(i)+deltc1(i)*ad_delqc(i)
1692 ad_deltc(i)=ad_deltc(i)+cwet(i)*ad_delqc(i)
1693 ad_delqc(i)=0.0_-r8
1694
1695 IF ((qcool.gt.0.0_r8).and.(qbouy.gt.0.0_r8)) THEN
1696 fac1=sqrt(rhoair(i)/rhosea(i))
1697 fac2=fac1*wstar1(i)+eps
1699
1700
1702 ad_qcool=ad_qcool+hcool*adfac
1703 ad_hcool=ad_hcool+qcool*adfac
1704 ad_deltc(i)=0.0_r8
1705
1706
1707 adfac=ad_hcool/fac2
1709 ad_fac2=-hcool*adfac
1710 ad_hcool=0.0_r8
1711
1712 IF (fac1.ne.0.0_r8) THEN
1713
1714 ad_rhosea(i)=ad_rhosea(i)-0.5*fac1*ad_fac1/rhosea(i)
1715 ad_fac1=0.0_r8
1716 ELSE
1717
1718 ad_fac1=0.0_r8
1719 END IF
1720
1721 fac1=(wstar1(i)+eps)**4
1722 fac2=clam*qbouy
1723 fac3=(fac2/fac1)**0.75_r8
1724 lambd=6.0_r8/(1.0_r8+fac3)**r3
1725
1726
1727 ad_fac3=-r3*6.0_r8*ad_lambd/(1.0_r8+fac3)**(r3+1.0_r8)
1728 ad_lambd=0.0_r8
1729
1730
1731
1732 adfac=0.75_r8*(fac2/fac1)**(-0.25_r8)*ad_fac3
1733 ad_fac2=adfac/fac1
1734 ad_fac1=-fac2*adfac/(fac1*fac1)
1735 ad_fac3=0.0_r8
1736
1737
1738
1739 ad_clam=ad_clam+qbouy*ad_fac2
1740 ad_qbouy=ad_qbouy+clam*ad_fac2
1741 ad_fac2=0.0_r8
1742
1743
1744
1745 ad_wstar(i)=ad_wstar(i)+4.0_r8*ad_fac1*(wstar1(i)+eps)**3
1746 ad_fac1=0.0_r8
1747
1748 ELSE
1749
1750 ad_deltc(i)=0.0_r8
1751 END IF
1752
1753
1754
1757
1758
1759
1760 hcool=0.001_r8
1761
1762
1763
1764 hsb=-rhoair(i)*
blk_cpa*wstar1(i)*tstar1(i)
1765 hlb=-rhoair(i)*hlv(i,j)*wstar1(i)*qstar1(i)
1766
1767
1768
1769 fc=0.065_r8+11.0_r8*hcool- &
1770 & (1.0_r8-exp(-hcool*1250.0_r8))*6.6e-5_r8/hcool
1771
1772
1773
1774 qcool=lrad(i,j)+hsb+hlb-srad(i,j)*fc
1775 qbouy=tcff(i)*qcool+scff(i)*hlb*
blk_cpw/hlv(i,j)
1776
1777
1778
1779
1780
1781
1782 adfac=ad_qbouy*
blk_cpw/hlv(i,j)
1783 ad_tcff(i)=ad_tcff(i)+qcool*ad_qbouy
1784 ad_qcool=ad_qcool+tcff(i)*ad_qbouy
1785 ad_scff(i)=ad_scff(i)+hlb*adfac
1786 ad_hlb=ad_hlb+scff(i)*adfac
1787 ad_hlv(i,j)=ad_hlv(i,j)- &
1788 & scff(i)*hlb*adfac/hlv(i,j)
1789 ad_qbouy=0.0_r8
1790
1791
1792
1793 ad_lrad(i,j)=ad_lrad(i,j)+ad_qcool
1794 ad_hsb=ad_hsb+ad_qcool
1795 ad_hlb=ad_hlb+ad_qcool
1796 ad_qcool=0.0_r8
1797
1798
1799
1800
1801
1802
1803
1804 adfac=-rhoair(i)*ad_hlb
1805 adfac1=hlv(i,j)*adfac
1806 ad_hlv(i,j)=ad_hlv(i,j)+wstar1(i)*qstar1(i)*adfac
1807 ad_wstar(i)=ad_wstar(i)+qstar1(i)*adfac1
1808 ad_qstar(i)=ad_qstar(i)+wstar1(i)*adfac1
1809 ad_hlb=0.0_r8
1810
1811
1812
1813 adfac=-rhoair(i)*
blk_cpa*ad_hsb
1814 ad_wstar(i)=ad_wstar(i)+tstar1(i)*adfac
1815 ad_tstar(i)=ad_tstar(i)+wstar1(i)*adfac
1816 ad_hsb=0.0_r8
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826 ad_rhosea(i)=ad_rhosea(i)+ &
1830 ad_clam=0.0_r8
1831# endif
1832
1833
1834
1835
1836 IF (delw1(i).ne.0.0_r8)THEN
1837
1838 ad_wgus(i)=ad_wgus(i)+wgus(i)*ad_delw(i)/delw1(i)
1839 ad_delw(i)=0.0_r8
1840 ELSE
1841
1842 ad_delw(i)=0.0_r8
1843 END IF
1844
1845 IF (bf.gt.0.0_r8) THEN
1846
1847
1850 ad_wgus(i)=0.0_r8
1851 ELSE
1852
1853 ad_wgus(i)=0.0_r8
1854 END IF
1855
1856
1857
1858
1859 adfac=-
g/tairk(i)*ad_bf
1860 adfac1=wstar1(i)*adfac
1861 ad_wstar(i)=ad_wstar(i)+ &
1862 & (tstar1(i)+0.61_r8*tairk(i)*qstar1(i))*adfac
1863 ad_tstar(i)=ad_tstar(i)+adfac1
1864 ad_qstar(i)=ad_qstar(i)+0.61_r8*tairk(i)*adfac1
1865 ad_bf=0.0_r8
1866
1867
1868
1869
1870
1872 fac2=log(fac1)
1873
1874
1875
1876 adfac=-ad_qstar(i)*
vonkar/(fac2-qpsi(i))
1877 adfac1=-ad_qstar(i)*qstar1(i)/(fac2-qpsi(i))
1878 ad_delq(i)=ad_delq(i)+adfac
1879 ad_delqc(i)=ad_delqc(i)-adfac
1880 ad_fac2=adfac1
1881 ad_qpsi(i)=ad_qpsi(i)-adfac1
1882 ad_qstar(i)=0.0_r8
1883
1884
1885 ad_fac1=ad_fac2/fac1
1886 ad_fac2=0.0_r8
1887
1888
1889 ad_zoq(i)=ad_zoq(i)-fac1*ad_fac1/zoq(i)
1890 ad_fac1=0.0_r8
1891
1893 fac2=log(fac1)
1894
1895
1896
1897 adfac=-ad_tstar(i)*
vonkar/(fac2-tpsi(i))
1898 adfac1=-ad_tstar(i)*tstar1(i)/(fac2-tpsi(i))
1899 ad_delt(i)=ad_delt(i)+adfac
1900 ad_deltc(i)=ad_deltc(i)-adfac
1901 ad_fac2=adfac1
1902 ad_tpsi(i)=ad_tpsi(i)-adfac1
1903 ad_tstar(i)=0.0_r8
1904
1905
1906 ad_fac1=ad_fac1+ad_fac2/fac1
1907 ad_fac2=0.0_r8
1908
1909
1910 ad_zot(i)=ad_zot(i)-fac1*ad_fac1/zot(i)
1911 ad_fac1=0.0_r8
1912
1914 fac2=log(fac1)
1915 fac3=delw(i)*
vonkar/(fac2-wpsi(i))
1916
1917
1918 ad_fac3=ad_wstar(i)*(0.5_r8-sign(0.5_r8,eps-fac3))
1919 ad_wstar(i)=0.0_r8
1920
1921
1922
1923 adfac=ad_fac3/(fac2-wpsi(i))
1924 adfac1=fac3*adfac
1925 ad_delw(i)=ad_delw(i)+
vonkar*adfac
1926 ad_fac2=-adfac1
1927 ad_wpsi(i)=ad_wpsi(i)+adfac1
1928 ad_fac3=0.0_r8
1929
1930
1931 ad_fac1=ad_fac1+ad_fac2/fac1
1932 ad_fac2=0.0_r8
1933
1934
1935 ad_zow(i)=ad_zow(i)-fac1*ad_fac1/zow(i)
1936 ad_fac1=0.0_r8
1937
1938# ifdef COOL_SKIN
1939
1940 ad_cwet(i)=ad_cwet(i)+deltc(i)*ad_delqc(i)
1941 ad_deltc(i)=ad_deltc(i)+cwet(i)*ad_delqc(i)
1942 ad_delqc(i)=0.0_r8
1943
1944
1945
1946
1947
1948
1949
1950 adfac=ad_cwet(i)/(
blk_rgas*tseak(i)*tseak(i))
1951 adfac1=2.0_r8*
blk_rgas*tseak(i)*cwet(i)*adfac
1952 adfac2=0.622_r8*adfac
1953 ad_hlv(i,j)=ad_hlv(i,j)+qsea(i)*adfac2
1954 ad_qsea(i)=ad_qsea(i)+hlv(i,j)*adfac2
1955 ad_tseak(i)=ad_tseak(i)-adfac1
1956 ad_cwet(i)=0.0_r8
1957
1958# endif
1959
1960
1961
1962
1964
1965 ad_fac=ad_bulk_psit(ad_qpsi(i),fac,
pi)
1966 ad_qpsi(i)=0.0_r8
1967
1968
1969 ad_l(i)=ad_l(i)-ad_fac*fac/l(i)
1970 ad_fac=0.0_r8
1971
1973
1974 ad_fac=ad_bulk_psit(ad_tpsi(i),fac,
pi)
1975 ad_tpsi(i)=0.0_r8
1976
1977
1978 ad_l(i)=ad_l(i)-ad_fac*fac/l(i)
1979 ad_fac=0.0_r8
1980
1981
1982 ad_zol(i)=ad_zol(i)+ad_bulk_psiu(ad_wpsi(i),zol(i),
pi)
1983 ad_wpsi(i)=0.0_r8
1984
1985
1986
1987
1988
1989 ad_zol(i)=ad_zol(i)-l(i)*ad_l(i)/(zol(i)+eps)
1990 ad_l(i)=0.0_r8
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2002 & (tairk(i)*wstar(i)*wstar(i)* &
2003 & (1.0_r8+0.61_r8*q(i))+eps)
2004 ad_tstar(i)=ad_tstar(i)+(1.0_r8+0.61_r8*q(i))*adfac
2005 ad_qstar(i)=ad_qstar(i)+0.61_r8*tairk(i)*adfac
2006 ad_wstar(i)=ad_wstar(i)-2.0_r8*tairk(i)*wstar(i)* &
2007 & (1.0_r8+0.61_r8*q(i))*zol(i)*ad_zol(i)/ &
2008 & (tairk(i)*wstar(i)*wstar(i)* &
2009 & (1.0_r8+0.61_r8*q(i))+eps)
2010 ad_zol(i)=0.0_r8
2011
2012
2013 ad_zoq(i)=ad_zoq(i)+ad_zot(i)
2014 ad_zot(i)=0.0_r8
2015
2016
2017
2018
2019 ad_rr(i)=ad_rr(i)- &
2020 & (0.5_r8-sign(0.5_r8,5.5e-5_r8/rr(i)**0.6-1.15e-4_r8)) &
2021 & *0.6_r8*5.5e-5_r8*ad_zoq(i)/rr(i)**1.6
2022 ad_zoq(i)=0.0_r8
2023
2024
2025 adfac=ad_rr(i)/visair(i)
2026 ad_zow(i)=ad_zow(i)+wstar(i)*adfac
2027 ad_wstar(i)=ad_wstar(i)+zow(i)*adfac
2028 ad_rr(i)=0.0_r8
2029
2030# ifdef BBL_MODEL_NOT_YET
2031# ifdef WIND_WAVES
2032
2033
2034
2035
2036 ad_wstar(i)=ad_wstar(i)+(25._r8/
pi)*lwave(i)*4.5_r8* &
2037 & (wstar(i)/cwave(i))**3.5*ad_zow(i)/cwave(i)- &
2038 & 0.11_r8*visair(i)*ad_zow(i)/ &
2039 & ((wstar(i)+eps)*(wstar(i)+eps))
2040 ad_zow(i)0.0_r8
2041# else
2042
2043
2044 ad_wstar(i)=ad_wstar(i)-0.11_r8*visair(i)*ad_zow(i)/ &
2045 & ((wstar(i)+eps)*(wstar(i)+eps))
2046 ad_zow(i)0.0_r8
2047# endif
2048# else
2049
2050
2051
2053 ad_wstar(i)=ad_wstar(i)+2.0_r8*charn(i)*wstar(i)*adfac- &
2054 & 0.11_r8*visair(i)*ad_zow(i)/ &
2055 & ((wstar(i)+eps)*(wstar(i)+eps))
2056 ad_zow(i)=0.0_r8
2057
2058# endif
2059 END DO
2060 END DO
2061
2062
2063
2064
2065 DO i=istr-1,iendr
2066
2067
2068
2069 wmag(i)=sqrt(uwind(i,j)*uwind(i,j)+vwind(i,j)*vwind(i,j))
2070 pairm=pair(i,j)
2071 tairc(i)=tair(i,j)
2072 tairk(i)=tairc(i)+273.16_r8
2073 tseac(i)=t(i,j,
n(ng),nrhs,
itemp)
2074 tseak(i)=tseac(i)+273.16_r8
2075 rhosea(i)=rho(i,j,
n(ng))+1000.0_r8
2076 rh=hair(i,j)
2077 srad(i,j)=srflx(i,j)*hscale
2078 tcff(i)=alpha(i,j)
2079 scff(i)=beta(i,j)
2080
2081
2082
2083 deltc(i)=0.0_r8
2084 delqc(i)=0.0_r8
2085 lheat(i,j)=lhflx(i,j)*hscale
2086 sheat(i,j)=shflx(i,j)*hscale
2087 taur=0.0_r8
2088 taux(i,j)=0.0_r8
2089 tauy(i,j)=0.0_r8
2090
2091
2092
2093
2094
2095# if defined LONGWAVE
2096
2097
2098
2099
2100
2101
2102
2103 cff=(0.7859_r8+0.03477_r8*tairc(i))/ &
2104 & (1.0_r8+0.00412_r8*tairc(i))
2105 e_sat=10.0_r8**cff
2106 vap_p=e_sat*rh
2107 cff2=tairk(i)*tairk(i)*tairk(i)
2108 cff1=cff2*tairk(i)
2110 & (cff1*(0.39_r8-0.05_r8*sqrt(vap_p))* &
2111 & (1.0_r8-0.6823_r8*cloud(i,j)*cloud(i,j))+ &
2112 & cff2*4.0_r8*(tseak(i)-tairk(i)))
2113
2114# elif defined LONGWAVE_OUT
2115
2116
2117
2118
2119 lrad(i,j)=lrflx(i,j)*hscale- &
2121
2122# else
2123 lrad(i,j)=lrflx(i,j)*hscale
2124# endif
2125# ifdef MASKING
2126 lrad(i,j)=lrad(i,j)*rmask(i,j)
2127# endif
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
2162 & exp(17.502_r8*tairc(i)/(240.97_r8+tairc(i)))
2163
2164
2165
2166 qair(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
2167
2168
2169
2170 IF (rh.lt.2.0_r8) THEN
2171 cff=cff*rh
2172 q(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
2173 ELSE
2174 q(i)=rh/1000.0_r8
2175 END IF
2176
2177
2178
2179 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
2180 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
2181
2182
2183
2184 cff=cff*0.98_r8
2185
2186
2187
2188 qsea(i)=0.62197_r8*(cff/(pairm-0.378_r8*cff))
2189
2190
2191
2192
2193
2194
2195
2196
2197 rhoair(i)=pairm*100.0_r8/(
blk_rgas*tairk(i)* &
2198 & (1.0_r8+0.61_r8*q(i)))
2199
2200
2201
2202 visair(i)=1.326e-5_r8* &
2203 & (1.0_r8+tairc(i)*(6.542e-3_r8+tairc(i)* &
2204 & (8.301e-6_r8-4.84e-9_r8*tairc(i))))
2205
2206
2207
2208 hlv(i,j)=(2.501_r8-0.00237_r8*tseac(i))*1.0e+6_r8
2209
2210
2211
2212
2213 wgus(i)=0.5_r8
2214 delw(i)=sqrt(wmag(i)*wmag(i)+wgus(i)*wgus(i))
2215 delq(i)=qsea(i)-q(i)
2216 delt(i)=tseac(i)-tairc(i)
2217
2218
2219
2220 zow(i)=0.0001_r8
2221 u10(i)=delw(i)*log(10.0_r8/zow(i))/log(
blk_zw(ng)/zow(i))
2222 wstar(i)=0.035_r8*u10(i)
2223 zo10(i)=0.011_r8*wstar(i)*wstar(i)/
g+ &
2224 & 0.11_r8*visair(i)/wstar(i)
2225 cd10(i)=(
vonkar/log(10.0_r8/zo10(i)))**2
2226 ch10(i)=0.00115_r8
2227 ct10(i)=ch10(i)/sqrt(cd10(i))
2228 zot10(i)=10.0_r8/exp(
vonkar/ct10(i))
2230
2231
2232
2235 deltc(i)=0.0_r8
2236# ifdef COOL_SKIN
2238# endif
2240 ri(i)=-
g*
blk_zw(ng)*((delt(i)-deltc(i))+ &
2241 & 0.61_r8*tairk(i)*delq(i))/ &
2242 & (tairk(i)*delw(i)*delw(i))
2243 IF (ri(i).lt.0.0_r8) THEN
2244 zetu(i)=cc(i)*ri(i)/(1.0_r8+ri(i)/ribcu(i))
2245 ELSE
2246 zetu(i)=cc(i)*ri(i)/(1.0_r8+3.0_r8*ri(i)/cc(i))
2247 END IF
2248 l10(i)=
blk_zw(ng)/zetu(i)
2249
2250
2251
2254 tstar(i)=-(delt(i)-deltc(i))*
vonkar/ &
2255 & (log(
blk_zt(ng)/zot10(i))- &
2257 qstar(i)=-(delq(i)-delqc(i))*
vonkar/ &
2258 & (log(
blk_zq(ng)/zot10(i))- &
2260
2261
2262
2263
2264 IF (delw(i).gt.18.0_r8) THEN
2265 charn(i)=0.018_r8
2266 ELSE IF ((10.0_r8.lt.delw(i)).and.(delw(i).le.18.0_r8)) THEN
2267 charn(i)=0.011_r8+ &
2268 & 0.125_r8*(0.018_r8-0.011_r8)*(delw(i)-10._r8)
2269 ELSE
2270 charn(i)=0.011_r8
2271 END IF
2272
2273
2274
2275
2276
2277
2278
2279 IF (delw(i).gt.18.0_r8) THEN
2280
2281 ad_charn(i)=0.0_r8
2282 ELSE IF ((10.0_r8.lt.delw(i)).and.(delw(i).le.18.0_r8)) THEN
2283
2284 ad_charn(i)=0.0_r8
2285 ELSE
2286
2287 ad_charn(i)=0.0_r8
2288 END IF
2289
2290
2291
2292
2293
2295 fac2=log(
blk_zq(ng)/zot10(i))
2296
2297
2298
2299
2300
2301
2302 adfac=ad_qstar(i)*
vonkar/ &
2305 ad_delq(i)=ad_delq(i)-adfac
2306 ad_delqc(i)=ad_delqc(i)+adfac
2307 ad_fac2=-cff*ad_qstar(i)
2308
2309 ad_fac1=ad_bulk_psit(cff*ad_qstar(i),fac1,
pi)
2310 ad_qstar(i)=0.0_r8
2311
2312
2313 ad_zot10(i)=ad_zot10(i)-ad_fac2/zot10(i)
2314 ad_fac2=0.0_r8
2315
2316
2317 ad_l10(i)=ad_l10(i)-ad_fac1*fac1/l10(i)
2318 ad_fac1=0.0_r8
2319
2321 fac2=log(
blk_zt(ng)/zot10(i))
2322
2323
2324
2325
2326
2327 adfac=ad_tstar(i)*
vonkar/ &
2330 ad_delt(i)=ad_delt(i)-adfac
2331 ad_deltc(i)=ad_deltc(i)+adfac
2332 ad_fac2=-cff*ad_tstar(i)
2333
2334 ad_fac1=ad_bulk_psit(cff*ad_tstar(i),fac1,
pi)
2335 ad_tstar(i)=0.0_r8
2336
2337
2338 ad_zot10(i)=ad_zot10(i)-ad_fac2/zot10(i)
2339 ad_fac2=0.0_r8
2340
2341
2342 ad_l10(i)=ad_l10(i)-fac1*ad_fac1/l10(i)
2343 ad_fac1=0.0_r8
2344
2346 fac2=log(
blk_zw(ng)/zo10(i))
2347
2348
2349
2351 ad_fac2=-cff*ad_wstar(i)
2352
2353 ad_fac1=ad_bulk_psiu(cff*ad_wstar(i),fac1,
pi)
2354 ad_wstar(i)=0.0_r8
2355
2356
2357 ad_zo10(i)=ad_zo10(i)-ad_fac2/zo10(i)
2358 ad_fac2=0.0_r8
2359
2360
2361 ad_l10(i)=ad_l10(i)-ad_fac1*fac1/l10(i)
2362 ad_fac1=0.0_r8
2363
2364
2365
2366
2367
2368
2369 ad_zetu(i)=ad_zetu(i)-l10(i)*l10(i)*ad_l10(i)/
blk_zw(ng)
2370 ad_l10(i)=0.0_r8
2371
2372 IF (ri(i).lt.0.0_r8) THEN
2373
2374
2375
2376 adfac=ad_zetu(i)/(1.0_r8+ri(i)/ribcu(i))
2377 ad_cc(i)=ad_cc(i)+ri(i)*adfac
2378 ad_ri(i)=ad_ri(i)+cc(i)*adfac-zetu(i)*adfac/ribcu(i)
2379 ad_zetu(i)=0.0_r8
2380 ELSE
2381 fac=3.0_r8*ri(i)/cc(i)
2382
2383
2384 adfac=ad_zetu(i)/(1.0_r8+fac)
2385 ad_cc(i)=ad_cc(i)+ri(i)*adfac
2386 ad_ri(i)=ad_ri(i)+cc(i)*adfac
2387 ad_fac=-zetu(i)*adfac
2388 ad_zetu(i)=0.0_r8
2389
2390
2391 ad_ri(i)=ad_ri(i)+3.0_r8*ad_fac/cc(i)
2392 ad_cc(i)=ad_cc(i)-ad_fac*fac/cc(i)
2393 ad_fac=0.0_r8
2394 END IF
2395
2396 fac=1.0/(tairk(i)*delw(i)*delw(i))
2397
2398
2399
2400
2401 adfac=-fac*
g*
blk_zw(ng)*ad_ri(i)
2402 ad_delt(i)=ad_delt(i)+adfac
2403 ad_deltc(i)=ad_deltc(i)-adfac
2404 ad_delq(i)=ad_delq(i)+0.61_r8*tairk(i)*adfac
2405 ad_ri(i)=0.0_r8
2406
2407# ifdef COOL_SKIN
2408
2409 ad_deltc(i)=0.0_r8
2410# endif
2411
2412
2413 ad_deltc(i)=0.0_r8
2414
2415
2416 adfac=ad_cc(i)/cd
2417 ad_ct(i)=ad_ct(i)+
vonkar*adfac
2418 ad_cd=ad_cd-cc(i)*adfac
2419 ad_cc(i)=0.0_r8
2420
2421 fac=log(
blk_zt(ng)/zot10(i))
2422
2423
2424 ad_fac=-ad_ct(i)*ct(i)/fac
2425
2426
2427 ad_zot10(i)=ad_zot10(i)-ad_fac/zot10(i)
2428 ad_fac=0.0_r8
2429
2430
2431
2432
2433 fac=log(
blk_zw(ng)/zo10(i))
2434
2435
2436 ad_fac=-2.0_r8*ad_cd/fac
2437 ad_cd=0.0_r8
2438
2439
2440 ad_zo10(i)=ad_zo10(i)-ad_fac/zo10(i)
2441 ad_fac=0.0_r8
2442
2444
2445
2446 ad_fac=-ad_zot10(i)*zot10(i)
2447 ad_fac=0.0_r8
2448
2449
2450 ad_ct10(i)=ad_ct10(i)-fac*ad_fac/ct10(i)
2451 ad_fac=0.0_r8
2452
2453
2454 ad_cd10(i)=ad_cd10(i)-0.5_r8*ct10(i)*ad_ct10(i)/cd10(i)
2455 ad_ct10(i)=0.0_r8
2456
2457 fac=log(10.0_r8/zo10(i))
2458
2459
2460 ad_fac=-2.0_r8*cd10(i)*ad_cd10(i)/fac
2461 ad_cd10(i)=0.0_r8
2462
2463
2464 ad_zo10(i)=ad_zo10(i)-ad_fac/zo10(i)
2465 ad_fac=0.0_r8
2466
2467
2468
2469
2470 ad_wstar(i)=ad_wstar(i)+0.022_r8*wstar(i)*ad_zo10(i)/
g- &
2471 & 0.11_r8*visair(i)*ad_zo10(i)/(wstar(i)*wstar(i))
2472 ad_zo10(i)=0.0_r8
2473
2474
2475 ad_u10(i)=ad_u10(i)+0.035_r8*ad_wstar(i)
2476 ad_wstar(i)=0.0_r8
2477
2478
2479
2480 ad_u10(i)=0.0_r8
2481
2482
2483 ad_zow(i)=0.0_r8
2484
2485
2486
2487
2488
2489
2490
2491
2492 ad_tseac(i)=ad_tseac(i)+ad_delt(i)
2493 ad_delt(i)=0.0_r8
2494
2495
2496 ad_qsea(i)=ad_qsea(i)+ad_delq(i)
2497 ad_delq(i)=0.0_r8
2498
2499
2500 ad_delw(i)=0.0_r8
2501
2502
2503 ad_wgus(i)=0.0_r8
2504
2505
2506
2507
2508
2509
2510 ad_tseac(i)=ad_tseac(i)-0.00237_r8*1.0e+6_r8*ad_hlv(i,j)
2511 ad_hlv(i,j)=0.0_r8
2512
2513
2514
2515 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
2516 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
2517 cff=cff*0.98_r8
2518
2519
2520 ad_fac=ad_qsea(i)*(1.0_r8+0.378_r8*cff/((pairm-0.378_r8*cff)))
2521 ad_qsea(i)=0.0_r8
2522
2523
2524 ad_cff=ad_cff+0.62197_r8*ad_fac/(pairm-0.378_r8*cff)
2525 ad_fac=0.0_r8
2526
2527
2528
2529
2530
2531
2532 ad_cff=ad_cff*0.98_r8
2533
2534
2535
2536 fac=17.502_r8*tseac(i)/(240.97_r8+tseac(i))
2537 cff=(1.0007_r8+3.46e-6_r8*pairm)*6.1121_r8* &
2538 & exp(17.502_r8*tseac(i)/(240.97_r8+tseac(i)))
2539
2540
2541 ad_fac=ad_cff*cff
2542 ad_cff=0.0_r8
2543
2544
2545
2546 ad_tseac(i)=ad_tseac(i)+ &
2547 & 17.502_r8*ad_fac/(240.97_r8+tseac(i))- &
2548 & fac*ad_fac/(240.97_r8+tseac(i))
2549 ad_fac=0.0_r8
2550
2551
2552
2553
2554
2555# ifdef MASKING
2556
2557
2558 ad_lrad(i,j)=ad_lrad(i,j)*rmask(i,j)
2559# endif
2560# if defined LONGWAVE
2561
2562
2563
2564
2565
2566
2567
2568 cff2=tairk(i)*tairk(i)*tairk(i)
2569
2570
2571 ad_tseak(i)=ad_tseak(i)-
emmiss*
stefbo*cff2*4.0_r8*ad_lrad(i,j)
2572 ad_lrad(i,j)=0.0_r8
2573
2574# elif defined LONGWAVE_OUT
2575
2576
2577
2578
2579
2580
2581
2582
2583 ad_lrflx(i,j)=ad_lrflx(i,j)+ad_lrad(i,j)*hscale
2584 ad_tseak(i)=ad_tseak(i)- &
2586 & tseak(i)*tseak(i)*tseak(i)
2587 ad_lrad(i,j)=0.0_r8
2588# else
2589
2590
2591 ad_lrflx(i,j)=ad_lrflx(i,j)+ad_lrad(i,j)*hscale
2592 ad_lrad(i,j)=0.0_r8
2593# endif
2594
2595
2596
2597
2598
2599 ad_delqc(i)=0.0_r8
2600
2601
2602
2603 ad_deltc(i)=0.0_r8
2604
2605
2606 ad_lhflx(i,j)=ad_lhflx(i,j)+ad_lheat(i,j)*hscale
2607 ad_lheat(i,j)=0.0_r8
2608
2609
2610 ad_shflx(i,j)=ad_shflx(i,j)+ad_sheat(i,j)*hscale
2611 ad_sheat(i,j)=0.0_r8
2612
2613
2614 ad_taux(i,j)=0.0_r8
2615
2616
2617 ad_tauy(i,j)=0.0_r8
2618
2619
2620 ad_beta(i,j)=ad_beta(i,j)+ad_scff(i)
2621 ad_scff(i)=0.0_r8
2622
2623
2624 ad_alpha(i,j)=ad_alpha(i,j)+ad_tcff(i)
2625 ad_tcff(i)=0.0_r8
2626
2627
2628 ad_rho(i,j,
n(ng))=ad_rho(i,j,
n(ng))+ad_rhosea(i)
2629 ad_rhosea(i)=0.0_r8
2630
2631
2632 ad_tseac(i)=ad_tseac(i)+ad_tseak(i)
2633 ad_tseak(i)=0.0_r8
2634
2635
2636 ad_t(i,j,
n(ng),nrhs,
itemp)=ad_t(i,j,
n(ng),nrhs,
itemp)+ &
2637 & ad_tseac(i)
2638 ad_tseac(i)=0.0_r8
2639 END DO
2640 END DO
2641
2642 RETURN
real(r8) function, public bulk_psiu(zol, pi)
real(r8) function, public bulk_psit(zol, pi)
integer, dimension(:), allocatable n
real(r8), dimension(:), allocatable blk_zt
real(r8), dimension(:), allocatable blk_zw
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(r8), dimension(:), allocatable blk_zq
subroutine ad_mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, ad_a, ad_b, ad_c, ad_d)