Ignore:
Timestamp:
Aug 26, 2011, 10:40:39 AM (13 years ago)
Author:
acolaitis
Message:

Modifications du surflayer_interpol.F : needed local duplicate for z_out, and included subgrid gustiness in friction quantities estimation.

File:
1 edited

Legend:

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

    r268 r272  
    4242      REAL, INTENT(IN) :: wmax(ngrid)
    4343      REAL, INTENT(IN) :: pts(ngrid),ph(ngrid,nlay)
    44       REAL, INTENT(INOUT) :: z_out                  ! output height (in m above surface)
     44      REAL, INTENT(IN) :: z_out                  ! output height (in m above surface)
    4545      REAL, INTENT(OUT) :: Teta_out(ngrid),u_out(ngrid)! interpolated fields at z_out : potential temperature and norm(uv)
    4646      REAL, INTENT(OUT) :: ustar(ngrid), tstar(ngrid) ! u* and teta*
     
    5757!    Local(2):
    5858!    ---------
     59      REAL zout
    5960
    6061      REAL rib(ngrid)  ! Bulk Richardson number
     
    8485!   couche de surface:
    8586!   ------------------
    86      
     87      zout=z_out
    8788      tstar(:)=0.
    8889      ustar(:)=0.
     
    184185      endif
    185186
    186        reynolds(ig)=karman*sqrt(fm(ig))*sqrt(pu(ig,1)**2 + pv(ig,1)**2)
     187       reynolds(ig)=karman*sqrt(fm(ig))
     188     &              *sqrt(zu2(ig))
     189!    &               *sqrt(pu(ig,1)**2 + pv(ig,1)**2)
    187190     &              *pz0(ig)/(log(z1z0)*nu)
    188191       pz0tcomp(ig)=pz0(ig)*exp(-karman*7.3*
     
    244247
    245248      DO ig=1,ngrid
    246       IF(z_out .ge. pz(ig,1)) THEN
    247            z_out=1.
     249      IF(zout .ge. pz(ig,1)) THEN
     250           zout=1.
    248251           print*, 'Warning, z_out should be less than the first
    249      &          vertical grid-point'
     252     & vertical grid-point'
    250253           print*, 'z1 =',pz(ig,1)
    251254           print*, 'z_out=',z_out
    252255           print*, 'z_out has been changed to 1m
    253      &                  and computation is resumed'
     256     & and computation is resumed'
    254257      ENDIF
    255258
    256       IF(z_out .lt. pz0(ig)) THEN
    257            z_out=1.
    258            print*, 'Warning, z_out should be more than the roughness
    259      &         length'
    260            print*, 'z0 =',pz0(ig)
     259      IF(zout .lt. pz0tcomp(ig)) THEN
     260           zout=pz0tcomp(ig)
     261           print*, 'Warning, z_out should be more than the thermal
     262     & roughness length'
     263           print*, 'z0 =',pz0tcomp(ig)
    261264           print*, 'z_out=',z_out
    262            print*, 'z_out has been changed to z0
    263      &                  and computation is resumed'
     265           print*, 'z_out has been changed to z0t
     266     & and computation is resumed'
    264267      ENDIF
    265268      ENDDO
    266269
    267       print*, 'interpolation of u and teta at z_out=',z_out
     270      print*, 'interpolation of u and teta at z_out=',zout
    268271
    269272      DO ig=1,ngrid
    270273        IF (L_mo(ig) .gt. 0.) THEN
    271            u_out(ig)=(ustar(ig)/karman)*log(z_out/pz0(ig)) +
    272      &            5.*(ustar(ig)/(karman*L_mo(ig)))*(z_out-pz0(ig))
     274           u_out(ig)=(ustar(ig)/karman)*log(zout/pz0(ig)) +
     275     &            5.*(ustar(ig)/(karman*L_mo(ig)))*(zout-pz0(ig))
    273276           Teta_out(ig)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))
    274      &                            *log(z_out/pz0tcomp(ig)) +
     277     &                            *log(zout/pz0tcomp(ig)) +
    275278     &            5.*(tstar(ig)/(prandtl(ig)*karman*L_mo(ig)))
    276      &                            *(z_out-pz0tcomp(ig))
     279     &                            *(zout-pz0tcomp(ig))
    277280        ELSEIF (L_mo(ig) .lt. 0.) THEN
    278281
     
    280283           
    281284           u_out(ig)=(ustar(ig)/karman)*(
    282      &  2.*atan((1.-16.*z_out/L_mo(ig))**0.25)
     285     &  2.*atan((1.-16.*zout/L_mo(ig))**0.25)
    283286     & -2.*atan((1.-16.*pz0(ig)/L_mo(ig))**0.25)
    284      & -2.*log(1.+(1.-16.*z_out/L_mo(ig))**0.25)
     287     & -2.*log(1.+(1.-16.*zout/L_mo(ig))**0.25)
    285288     & +2.*log(1.+(1.-16.*pz0(ig)/L_mo(ig))**0.25)
    286      & -   log(1.+sqrt(1.-16.*z_out/L_mo(ig)))
     289     & -   log(1.+sqrt(1.-16.*zout/L_mo(ig)))
    287290     & +   log(1.+sqrt(1.-16.*pz0(ig)/L_mo(ig)))
    288      & +   log(z_out/pz0(ig))
     291     & +   log(zout/pz0(ig))
    289292     &                                  )
    290293
    291294           Teta_out(ig)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    292295     &  2.*log(1.+sqrt(1.-16.*pz0tcomp(ig)/L_mo(ig)))
    293      & -2.*log(1.+sqrt(1.-16.*z_out/L_mo(ig)))
    294      & +   log(z_out/pz0tcomp(ig))
     296     & -2.*log(1.+sqrt(1.-16.*zout/L_mo(ig)))
     297     & +   log(zout/pz0tcomp(ig))
    295298     &                                                        )
    296299
     
    305308
    306309           u_out(ig)=(ustar(ig)/karman)*(
    307      &     (4./L_mo(ig))*(z_out-pz0(ig))
    308      &   + (20./(L_mo(ig))**2)*(z_out**2-pz0(ig)**2)
    309      &   + (160./(L_mo(ig))**3)*(z_out**3-pz0(ig)**3)
    310      &   + log(z_out/pz0(ig))
     310     &     (4./L_mo(ig))*(zout-pz0(ig))
     311     &   + (20./(L_mo(ig))**2)*(zout**2-pz0(ig)**2)
     312     &   + (160./(L_mo(ig))**3)*(zout**3-pz0(ig)**3)
     313     &   + log(zout/pz0(ig))
    311314     &                                   )
    312315
    313316           Teta_out(ig)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    314      &     (8./L_mo(ig))*(z_out-pz0tcomp(ig))
    315      &   + (48./(L_mo(ig))**2)*(z_out**2-pz0tcomp(ig)**2)
    316      &   + (1280./(3.*(L_mo(ig))**3))*(z_out**3-pz0tcomp(ig)**3)
    317      &   + log(z_out/pz0tcomp(ig))
     317     &     (8./L_mo(ig))*(zout-pz0tcomp(ig))
     318     &   + (48./(L_mo(ig))**2)*(zout**2-pz0tcomp(ig)**2)
     319     &   + (1280./(3.*(L_mo(ig))**3))*(zout**3-pz0tcomp(ig)**3)
     320     &   + log(zout/pz0tcomp(ig))
    318321     &                                                           )
    319322
     
    327330! Usefull diagnostics for the interpolation routine :
    328331
    329          call WRITEDIAGFI(ngrid,'L',
    330      &              'Monin Obukhov length','m',
    331      &                         2,L_mo)
    332          call WRITEDIAGFI(ngrid,'z0T',
    333      &              'thermal roughness length','m',
    334      &                         2,pz0tcomp)
    335          call WRITEDIAGFI(ngrid,'z0',
    336      &              'roughness length','m',
    337      &                         2,pz0)
     332!         call WRITEDIAGFI(ngrid,'L',
     333!     &              'Monin Obukhov length','m',
     334!     &                         2,L_mo)
     335!         call WRITEDIAGFI(ngrid,'z0T',
     336!     &              'thermal roughness length','m',
     337!     &                         2,pz0tcomp)
     338!         call WRITEDIAGFI(ngrid,'z0',
     339!     &              'roughness length','m',
     340!     &                         2,pz0)
    338341
    339342
Note: See TracChangeset for help on using the changeset viewer.