Changeset 1377 for trunk/LMDZ.MARS/libf


Ignore:
Timestamp:
Feb 13, 2015, 8:58:27 AM (10 years ago)
Author:
emillour
Message:

Mars GCM:

  • Update pbl_parameter with corrected version by Anne-Flore Moreau.

EM

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/pbl_parameters.F

    r1226 r1377  
    145145       ite=0.
    146146       residual=abs(pz0tcomp(ig)-pz0t)
    147 !       zu2(ig)=MAX(pu(ig,1)*pu(ig,1)+pv(ig,1)*pv(ig,1)
    148 !     &                                ,(0.3*wstar_in(ig))**2)
     147
    149148       zu2(ig)=pu(ig,1)*pu(ig,1)+pv(ig,1)*pv(ig,1)
    150149     &     + (log(1.+0.7*wstar_in(ig) + 2.3*wstar_in(ig)**2))**2
     
    158157     &        *sqrt(zzlay(ig,1)*pz0(ig))
    159158     &        *(((log(zzlay(ig,1)/pz0(ig)))**2)/(log(zzlay(ig,1)/pz0t)))
    160      &        *(ph(ig,1)-pts(ig))/zu2(ig)
     159     &        *(ph(ig,1)-pts(ig))/(pu(ig,1)*pu(ig,1)+pv(ig,1)*pv(ig,1))
    161160         ELSE
    162161            print*,'warning, infinite Richardson at surface'
     
    220219
    221220
    222 ! u* theta* computation
    223 ! and Monin Obukhov length:
     221! u* theta* computation:
    224222
    225223      DO ig=1,ngrid
     
    227225           ustar(ig)=0.
    228226           tstar(ig)=0.
    229            L_mo(ig)=0.
     227
    230228         ELSE
    231229           ustar(ig)=sqrt(pcdv(ig))
     
    233231           tstar(ig)=-pcdh(ig)*(pts(ig)-ph(ig,1))
    234232     &        /sqrt(pcdv(ig))
    235            L_mo(ig)=pts(ig)*(ustar(ig)**2)/(pg*karman*tstar(ig))  !as defined here, L is positive for SBL, negative for UBL
    236          ENDIF
    237       ENDDO
    238 
    239 ! Monin Obukhov length:
    240 
    241 !      DO ig=1,ngrid
    242 !         IF (rib(ig) .ge. ric) THEN
    243 !            L_mo(ig)=0.
    244 !         ELSE
    245 !            L_mo(ig)=pts(ig)*(ustar(ig)**2)/(pg*karman*tstar(ig))  !as defined here, L is positive for SBL, negative for UBL
    246 !         ENDIF
    247 !      ENDDO
    248 
    249 ! Interpolation:
     233
     234         ENDIF
     235      ENDDO
    250236
    251237      DO ig=1,ngrid
     
    253239           u_out(ig,n)=0.
    254240           Teta_out(ig,n)=pts(ig)
    255         ELSEIF (L_mo(ig) .gt. 0.) THEN
    256 !           u_out(ig,n)=(ustar(ig)/karman)*log(zout/pz0(ig)) +
    257 !     &            5.*(ustar(ig)/(karman*L_mo(ig)))*(zout-pz0(ig))
    258 !           Teta_out(ig,n)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))
    259 !     &                            *log(zout/pz0tcomp(ig)) +
    260 !     &            5.*(tstar(ig)/(prandtl(ig)*karman*L_mo(ig)))
    261 !     &                            *(zout-pz0tcomp(ig))
    262           IF ((zout/L_mo(ig).lt.ric).and.(pz0(ig).lt.ric)) THEN
    263 !     &  ((zout/L_mo(ig).gt.ric).and.(pz0(ig).gt.ric))  ) THEN
    264 
    265             u_out(ig,n)=(ustar(ig)/karman)*(
    266      &  log((ric-pz0(ig)/L_mo(ig))/(ric-zout/L_mo(ig)))
    267      & +log(zout/pz0(ig))
    268      & )
    269           ELSEIF ((zout/L_mo(ig).gt.ric).and.(pz0(ig).gt.ric)) THEN
    270 
    271             u_out(ig,n)=(ustar(ig)/karman)*(
    272      &  log((zout-ric*L_mo(ig))/(pz0(ig)-ric*L_mo(ig)))
    273      & +log(pz0(ig)/zout)
    274      & )
    275 
    276           ELSEIF ((zout/L_mo(ig).gt.ric).and.(pz0(ig).lt.ric)) THEN
    277           !integral of the stability function does not converge
    278 
    279 
    280            u_out(ig,n)=sqrt(pu(ig,1)**2 + pv(ig,1)**2)
    281 
    282 
    283           ENDIF
    284           IF((zout/L_mo(ig).lt.ric).and.(pz0tcomp(ig).lt.ric)) THEN
    285 !     &  ((zout/L_mo(ig).gt.ric).and.(pz0tcomp(ig).gt.ric))  ) THEN
    286 
    287            Teta_out(ig,n)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    288      &  log((ric-pz0tcomp(ig)/L_mo(ig))/(ric-zout/L_mo(ig)))
    289      & +log(zout/pz0tcomp(ig))
    290      & )
    291           ELSEIF ((zout/L_mo(ig).gt.ric).and.(pz0tcomp(ig).gt.ric)) THEN
    292 
    293            Teta_out(ig,n)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    294      &  log((zout-ric*L_mo(ig))/(pz0tcomp(ig)-ric*L_mo(ig)))
    295      & +log(pz0tcomp(ig)/zout)
    296      & )
    297 
    298           ELSEIF ((zout/L_mo(ig).gt.ric).and.(pz0tcomp(ig).lt.ric)) THEN
    299           !integral of the stability function does not converge
    300 
    301            Teta_out(ig,n)=ph(ig,1)
    302 
    303           ENDIF
    304 
    305         ELSEIF (L_mo(ig) .lt. 0.) THEN
    306 
    307           IF(L_mo(ig) .gt. -1000.) THEN
    308            
    309            u_out(ig,n)=(ustar(ig)/karman)*(
    310      &  2.*atan((1.-16.*zout/L_mo(ig))**0.25)
    311      & -2.*atan((1.-16.*pz0(ig)/L_mo(ig))**0.25)
    312      & -2.*log(1.+(1.-16.*zout/L_mo(ig))**0.25)
    313      & +2.*log(1.+(1.-16.*pz0(ig)/L_mo(ig))**0.25)
    314      & -   log(1.+sqrt(1.-16.*zout/L_mo(ig)))
    315      & +   log(1.+sqrt(1.-16.*pz0(ig)/L_mo(ig)))
    316      & +   log(zout/pz0(ig))
    317      &                                  )
    318 
    319            Teta_out(ig,n)=MAX(pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    320      &  2.*log(1.+sqrt(1.-16.*pz0tcomp(ig)/L_mo(ig)))
    321      & -2.*log(1.+sqrt(1.-16.*zout/L_mo(ig)))
    322      & +   log(zout/pz0tcomp(ig))
    323      &                             ),ph(ig,1))
    324 
    325           ELSE
    326 
    327 ! We have to treat the case where L is very large and negative,
    328 ! corresponding to a very nearly stable atmosphere (but not quite !)
    329 ! i.e. teta* <0 and almost zero. We choose the cutoff
    330 ! corresponding to L_mo < -1000 and use a 3rd order taylor expansion. The difference
    331 ! between the two expression for z/L = -1/1000 is -1.54324*10^-9
    332 ! (we do that to avoid using r*4 precision, otherwise, we get -inf values)         
    333 
    334            u_out(ig,n)=(ustar(ig)/karman)*(
    335      &     (4./L_mo(ig))*(zout-pz0(ig))
    336      &   + (20./(L_mo(ig))**2)*(zout**2-pz0(ig)**2)
    337      &   + (160./(L_mo(ig))**3)*(zout**3-pz0(ig)**3)
    338      &   + log(zout/pz0(ig))
    339      &                                   )
    340 
    341            Teta_out(ig,n)=MAX(pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    342      &     (8./L_mo(ig))*(zout-pz0tcomp(ig))
    343      &   + (48./(L_mo(ig))**2)*(zout**2-pz0tcomp(ig)**2)
    344      &   + (1280./(3.*(L_mo(ig))**3))*(zout**3-pz0tcomp(ig)**3)
    345      &   + log(zout/pz0tcomp(ig))
    346      &                             ),ph(ig,1))
    347 
    348           ENDIF
    349         ELSE
    350            u_out(ig,n)=sqrt(pu(ig,1)**2 + pv(ig,1)**2)
    351            Teta_out(ig,n)=ph(ig,1)
     241         ELSE
     242           u_out(ig,n)= ustar(ig)*log(zout/pz0(ig))/
     243     &(karman*sqrt(fm(ig)))
     244
     245           Teta_out(ig,n)=pts(ig)+(tstar(ig)*sqrt(fm(ig))*log(zout/
     246     & (pz0tcomp(ig)))/
     247     &(karman*fh(ig)))
     248
    352249        ENDIF
    353         IF(zout .lt. pz0(ig)) THEN
     250
     251        IF (zout .lt. pz0(ig)) THEN
    354252           u_out(ig,n)=0.
    355         ENDIF
    356 
    357 ! Final check
    358         IF (L_mo(ig) .gt. 0) THEN
    359            IF (Teta_out(ig,n) .gt. ph(ig,1)) THEN
    360               Teta_out(ig,n)=ph(ig,1)
    361            ELSEIF (Teta_out(ig,n) .lt. pts(ig)) THEN
    362               Teta_out(ig,n)=pts(ig)
    363            ENDIF
    364         ELSEIF (L_mo(ig) .lt. 0) THEN
    365            IF (Teta_out(ig,n) .lt. ph(ig,1)) THEN
    366               Teta_out(ig,n)=ph(ig,1)
    367            ELSEIF (Teta_out(ig,n) .gt. pts(ig)) THEN
    368               Teta_out(ig,n)=pts(ig)
    369            ENDIF
    370         ENDIF
    371 
    372         IF (u_out(ig,n) .gt. sqrt(pu(ig,1)**2 + pv(ig,1)**2)) THEN
    373            u_out(ig,n)=sqrt(pu(ig,1)**2 + pv(ig,1)**2)
    374         ENDIF
     253        ENDIF
    375254
    376255      ENDDO
     
    488367     &   'momentum stab function','m/s',2,fh)
    489368            call WRITEDIAGFI(ngrid,'B_pbl',
    490      &   'flottabilité','m/',2,(ph(:,1)-pts(:))/pts(:))
     369     &   'buoyancy','m/',2,(ph(:,1)-pts(:))/pts(:))
    491370            call WRITEDIAGFI(ngrid,'zot_pbl',
    492      &   'flottabilité','ms',2,pz0tcomp)
    493        call WRITEDIAGFI(ngrid,'zz1','flottabilité','m',2,zzlay(:,1))
     371     &   'buoyancy','ms',2,pz0tcomp)
     372       call WRITEDIAGFI(ngrid,'zz1','buoyancy','m',2,zzlay(:,1))
    494373#endif
    495374
  • trunk/LMDZ.MARS/libf/phymars/physiq.F

    r1375 r1377  
    518518      zdtsurf(:)=0
    519519      dqsurf(:,:)=0
     520#ifdef DUSTSTORM
    520521      pq_tmp(:,:,:)=0
     522#endif
    521523      igout=ngrid/2+1
    522524
     
    15671569            call WRITEDIAGFI(ngrid,'teta_star',
    15681570     &   'friction potential temperature','K',dimout,tstar)
    1569             call WRITEDIAGFI(ngrid,'L',
    1570      &   'Monin Obukhov length','m',dimout,L_mo)
     1571!            call WRITEDIAGFI(ngrid,'L',
     1572!     &   'Monin Obukhov length','m',dimout,L_mo)
    15711573            call WRITEDIAGFI(ngrid,'vvv',
    15721574     &   'Vertical velocity variance at zout','m',dimout,vvv)
Note: See TracChangeset for help on using the changeset viewer.