Changeset 605 for trunk


Ignore:
Timestamp:
Mar 29, 2012, 10:12:30 AM (13 years ago)
Author:
acolaitis
Message:

Added a number of corrections to pbl_parameter. The routine can now be called either without thermals (it will then use log law for wind and first level temp for t_out) and with thermals and richardson surface layer (it will conduct a Monin Obukhov interpolation). WARNING: The routine default output is now T instead of TETA. (not much change at this altitude though)

File:
1 edited

Legend:

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

    r566 r605  
    11      SUBROUTINE pbl_parameters(ngrid,nlay,ps,pplay,pz0,
    22     & pg,zzlay,zzlev,pu,pv,wstar_in,hfmax,zmax,pts,ph,z_out,n_out,
    3      & Teta_out,u_out,ustar,tstar,L_mo,vhf,vvv)
     3     & T_out,u_out,ustar,tstar,L_mo,vhf,vvv)
    44      IMPLICIT NONE
    55!=======================================================================
     
    6767!    --------
    6868
    69       REAL, INTENT(OUT) :: Teta_out(ngrid,n_out),u_out(ngrid,n_out)
    70       REAL T_out(ngrid,n_out)
     69      REAL, INTENT(OUT) :: T_out(ngrid,n_out),u_out(ngrid,n_out)
     70      REAL Teta_out(ngrid,n_out)
    7171      REAL, INTENT(OUT) :: ustar(ngrid), tstar(ngrid)
    7272      REAL wstar(ngrid)
     
    156156         IF (zu2(ig) .ne. 0.) THEN
    157157            ! Richardson number formulation proposed by D.E. England et al. (1995)
    158             rib(ig) = (pg/ph(ig,1))
     158          rib(ig) = (pg/pts(ig))
    159159     &        *sqrt(zzlev(ig,2)*pz0(ig))
    160160     &        *(((log(zzlev(ig,2)/pz0(ig)))**2)/(log(zzlev(ig,2)/pz0t)))
     
    203203        residual = abs(pz0t-pz0tcomp(ig))
    204204        ite = ite+1
    205  
     205
    206206       ENDDO  ! of while
    207207       pz0t=0.
     
    273273     &                                  )
    274274
    275            Teta_out(ig,n)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
     275           Teta_out(ig,n)=MAX(pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    276276     &  2.*log(1.+sqrt(1.-16.*pz0tcomp(ig)/L_mo(ig)))
    277277     & -2.*log(1.+sqrt(1.-16.*zout/L_mo(ig)))
    278278     & +   log(zout/pz0tcomp(ig))
    279      &                                                        )
     279     &                             ),ph(ig,1))
    280280
    281281          ELSE
     
    295295     &                                   )
    296296
    297            Teta_out(ig,n)=pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
     297           Teta_out(ig,n)=MAX(pts(ig)+(tstar(ig)/(prandtl(ig)*karman))*(
    298298     &     (8./L_mo(ig))*(zout-pz0tcomp(ig))
    299299     &   + (48./(L_mo(ig))**2)*(zout**2-pz0tcomp(ig)**2)
    300300     &   + (1280./(3.*(L_mo(ig))**3))*(zout**3-pz0tcomp(ig)**3)
    301301     &   + log(zout/pz0tcomp(ig))
    302      &                                                           )
     302     &                             ),ph(ig,1))
    303303
    304304          ENDIF
     
    317317
    318318      IF ((.not.calltherm).and.(calladj)) THEN
    319            Teta_out(:,n)=ph(:,1)
     319       Teta_out(:,n)=ph(:,1)
     320       u_out(:,n)=(sqrt(cdn(:))*sqrt(pu(:,1)*pu(:,1)+pv(:,1)*pv(:,1))
     321     &                                /karman)*log(zout/pz0(:))
    320322      ENDIF
    321 
    322323              T_out(:,n) = Teta_out(:,n)*(exp(
    323324     &   (zout/zzlay(:,1))*(log(pplay(:,1)/ps))
Note: See TracChangeset for help on using the changeset viewer.