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)