Ignore:
Timestamp:
Dec 17, 2008, 2:30:13 PM (16 years ago)
Author:
Laurent Fairhead
Message:
  • Modifications lie au premier niveau du modele pour la diffusion turbulent

du vent.

  • Preparation pour un couplage des courrant oceaniques.

JG

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/coef_diff_turb_mod.F90

    r878 r1067  
    1 !
    2 ! $Header$
    31!
    42MODULE coef_diff_turb_mod
     
    86! at surface(cdrag)
    97!
    10   USE dimphy
    11  
    128  IMPLICIT NONE
    139 
     
    1713!
    1814  SUBROUTINE coef_diff_turb(dtime, nsrf, knon, ni, &
    19        ypaprs, ypplay, yu, yv, yq, yt, yts, yrugos, yqsurf, &
     15       ypaprs, ypplay, yu, yv, yq, yt, yts, yrugos, yqsurf, ycdragm, &
    2016       ycoefm, ycoefh ,yq2)
    21 !
     17 
     18    USE dimphy
     19!
    2220! Calculate coefficients(ycoefm, ycoefh) for turbulent diffusion in the
    23 ! atmosphere and coefficients for turbulent diffusion at surface - cdrag
    24 ! (ycoefm(:,1), ycoefh(:,1)).
     21! atmosphere
     22! NB! No values are calculated between surface and the first model layer.
     23!     ycoefm(:,1) and ycoefh(:,1) are not valid !!!
    2524!
    2625!
     
    3534    REAL, DIMENSION(klon,klev), INTENT(IN)     :: yq, yt
    3635    REAL, DIMENSION(klon), INTENT(IN)          :: yts, yrugos, yqsurf
    37     REAL, DIMENSION(klon,klev+1)               :: yq2
     36    REAL, DIMENSION(klon), INTENT(IN)          :: ycdragm
     37
     38! InOutput arguments
     39!****************************************************************************************
     40    REAL, DIMENSION(klon,klev+1), INTENT(INOUT):: yq2
    3841 
    3942! Output arguments
     
    4750    REAL, DIMENSION(klon,klev)                 :: ycoefm0, ycoefh0, yzlay, yteta
    4851    REAL, DIMENSION(klon,klev+1)               :: yzlev, q2diag, ykmm, ykmn, ykmq
    49     REAL, DIMENSION(klon)                      :: y_cd_h, y_cd_m
    5052    REAL, DIMENSION(klon)                      :: yustar
    5153
     
    5961    INCLUDE "YOMCST.h"
    6062
    61 !****************************************************************************************
    62 ! Start calculation
    63 ! - Initilalize output variables
    64 !****************************************************************************************
    65 
    66     ycoefm(:,:) = 0.0
    67     ycoefh(:,:) = 0.0
    68 
    6963
    7064!****************************************************************************************   
    71 ! Methode 1 :
     65! Calcul de coefficients de diffusion turbulent de l'atmosphere :
     66! ycoefm(:,2:klev), ycoefh(:,2:klev)
    7267!
    7368!****************************************************************************************   
     
    8075 
    8176!****************************************************************************************
    82 ! Methode 2 :
     77! Eventuelle recalcule des coeffeicients de diffusion turbulent de l'atmosphere :
     78! ycoefm(:,2:klev), ycoefh(:,2:klev)
    8379!
    8480!****************************************************************************************
     
    9692    ENDIF
    9793
    98 !****************************************************************************************
    99 ! IM cf JLD : on seuille ycoefm et ycoefh
    100 !
    101 !****************************************************************************************
    102     IF (nsrf.EQ.is_oce) THEN
    103        DO j=1,knon
    104           ycoefm(j,1)=MIN(ycoefm(j,1),cdmmax)
    105           ycoefh(j,1)=MIN(ycoefh(j,1),cdhmax)
    106        ENDDO
    107     ENDIF
    10894 
    10995!**************************************************************************************** 
     
    11298!****************************************************************************************
    11399    IF (ok_kzmin) THEN
    114        CALL coefkzmin(knon,ypaprs,ypplay,yu,yv,yt,yq,ycoefm, &
     100       CALL coefkzmin(knon,ypaprs,ypplay,yu,yv,yt,yq,ycdragm, &
    115101            ycoefm0,ycoefh0)
    116102       
     
    127113!****************************************************************************************
    128114! MELLOR ET YAMADA adapte a Mars Richard Fournier et Frederic Hourdin
    129 ! Methode 3 :
     115!
    130116!****************************************************************************************
    131117
     
    159145       END DO
    160146
    161 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    162 ! Pour memoire, le papier Hourdin et al. 2002 a ete obtenur avec un
    163 ! bug sur les coefficients de surface :
    164 !          y_cd_h(1:knon) = ycoefm(1:knon,1)
    165 !          y_cd_m(1:knon) = ycoefh(1:knon,1)
    166 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    167 
    168        y_cd_m(1:knon) = ycoefm(1:knon,1)
    169        y_cd_h(1:knon) = ycoefh(1:knon,1)
    170        
    171        CALL ustarhb(knon,yu,yv,y_cd_m, yustar)
     147!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     148!!$! Pour memoire, le papier Hourdin et al. 2002 a ete obtenur avec un
     149!!$! bug sur les coefficients de surface :
     150!!$!          ycdragh(1:knon) = ycoefm(1:knon,1)
     151!!$!          ycdragm(1:knon) = ycoefh(1:knon,1)
     152!!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     153       CALL ustarhb(knon,yu,yv,ycdragm, yustar)
    172154     
    173155       IF (prt_level > 9) THEN
     
    179161          CALL vdif_kcay(knon,dtime,RG,RD,ypaprs,yt, &
    180162               yzlev,yzlay,yu,yv,yteta, &
    181                y_cd_m,yq2,q2diag,ykmm,ykmn,yustar, &
     163               ycdragm,yq2,q2diag,ykmm,ykmn,yustar, &
    182164               iflag_pbl)
    183165       ELSE
    184166          CALL yamada4(knon,dtime,RG,RD,ypaprs,yt, &
    185167               yzlev,yzlay,yu,yv,yteta, &
    186                y_cd_m,yq2,ykmm,ykmn,ykmq,yustar, &
     168               ycdragm,yq2,ykmm,ykmn,ykmq,yustar, &
    187169               iflag_pbl)
    188170       ENDIF
    189171       
    190        ycoefm(1:knon,1)=y_cd_m(1:knon)
    191        ycoefh(1:knon,1)=y_cd_h(1:knon)
    192172       ycoefm(1:knon,2:klev)=ykmm(1:knon,2:klev)
    193173       ycoefh(1:knon,2:klev)=ykmn(1:knon,2:klev)
     
    206186       pcfm, pcfh)
    207187   
     188    USE dimphy
     189 
    208190!======================================================================
    209191! Auteur(s) F. Hourdin, M. Forichon, Z.X. Li (LMD/CNRS) date: 19930922
     
    236218!
    237219    INTEGER, INTENT(IN)                      :: knon, nsrf
     220    REAL, INTENT(IN)                         :: ksta, ksta_ter
    238221    REAL, DIMENSION(klon), INTENT(IN)        :: ts
    239     REAL, DIMENSION(klon,klev+1), INTENT(IN) ::  paprs
    240     REAL, DIMENSION(klon,klev), INTENT(IN)   ::  pplay
     222    REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs
     223    REAL, DIMENSION(klon,klev), INTENT(IN)   :: pplay
    241224    REAL, DIMENSION(klon,klev), INTENT(IN)   :: u, v, t, q
    242225    REAL, DIMENSION(klon), INTENT(IN)        :: rugos
     226    REAL, DIMENSION(klon), INTENT(IN)        :: qsurf
    243227
    244228    REAL, DIMENSION(klon,klev), INTENT(OUT)  :: pcfm, pcfh
    245229
    246 
    247 ! Local variables
    248 
    249 ! numero de couche du sommet de la couche limite
    250     INTEGER, DIMENSION(klon)    :: itop
     230!
     231! Local variables:
     232!
     233    INTEGER, DIMENSION(klon)    :: itop ! numero de couche du sommet de la couche limite
    251234!
    252235! Quelques constantes et options:
    253236!
    254     REAL cepdu2, ckap, cb, cc, cd, clam
    255     PARAMETER (cepdu2 =(0.1)**2)
    256     PARAMETER (CKAP=0.4)
    257     PARAMETER (cb=5.0)
    258     PARAMETER (cc=5.0)
    259     PARAMETER (cd=5.0)
    260     PARAMETER (clam=160.0)
    261     REAL ratqs ! largeur de distribution de vapeur d'eau
    262     PARAMETER (ratqs=0.05)
    263     LOGICAL richum ! utilise le nombre de Richardson humide
    264     PARAMETER (richum=.TRUE.)
    265     REAL ric ! nombre de Richardson critique
    266     PARAMETER(ric=0.4)
    267     REAL prandtl
    268     PARAMETER (prandtl=0.4)
     237    REAL, PARAMETER :: cepdu2=0.1**2
     238    REAL, PARAMETER :: CKAP=0.4
     239    REAL, PARAMETER :: cb=5.0
     240    REAL, PARAMETER :: cc=5.0
     241    REAL, PARAMETER :: cd=5.0
     242    REAL, PARAMETER :: clam=160.0
     243    REAL, PARAMETER :: ratqs=0.05 ! largeur de distribution de vapeur d'eau
     244    LOGICAL, PARAMETER :: richum=.TRUE. ! utilise le nombre de Richardson humide
     245    REAL, PARAMETER :: ric=0.4 ! nombre de Richardson critique
     246    REAL, PARAMETER :: prandtl=0.4
    269247    REAL kstable ! diffusion minimale (situation stable)
    270248    ! GKtest
    271249    ! PARAMETER (kstable=1.0e-10)
    272     REAL ksta, ksta_ter
    273250!IM: 261103     REAL kstable_ter, kstable_sinon
    274251!IM: 211003 cf GK   PARAMETER (kstable_ter = 1.0e-6)
     
    277254!IM: 261103   PARAMETER (kstable_sinon = 1.0e-10)
    278255    ! fin GKtest
    279     REAL mixlen ! constante controlant longueur de melange
    280     PARAMETER (mixlen=35.0)
     256    REAL, PARAMETER :: mixlen=35.0 ! constante controlant longueur de melange
    281257    INTEGER isommet ! le sommet de la couche limite
    282     LOGICAL tvirtu ! calculer Ri d'une maniere plus performante
    283     PARAMETER (tvirtu=.TRUE.)
    284     LOGICAL opt_ec ! formule du Centre Europeen dans l'atmosphere
    285     PARAMETER (opt_ec=.FALSE.)
     258    LOGICAL, PARAMETER :: tvirtu=.TRUE. ! calculer Ri d'une maniere plus performante
     259    LOGICAL, PARAMETER :: opt_ec=.FALSE.! formule du Centre Europeen dans l'atmosphere
    286260
    287261!
    288262! Variables locales:
    289 
    290263    INTEGER i, k !IM 120704
    291264    REAL zgeop(klon,klev)
     
    293266    REAL zri(klon)
    294267    REAL zl2(klon)
    295    
    296     REAL u1(klon), v1(klon), t1(klon), q1(klon), z1(klon)
    297     REAL pcfm1(klon), pcfh1(klon)
    298 
    299268    REAL zdphi, zdu2, ztvd, ztvu, zcdn
    300269    REAL zscf
    301270    REAL zt, zq, zdelta, zcvm5, zcor, zqs, zfr, zdqs
    302271    REAL z2geomf, zalh2, zalm2, zscfh, zscfm
    303     REAL t_coup
    304     PARAMETER (t_coup=273.15)
    305 !IM
    306     LOGICAL check
    307     PARAMETER (check=.FALSE.)
     272    REAL, PARAMETER :: t_coup=273.15
     273    LOGICAL, PARAMETER :: check=.FALSE.
    308274!
    309275! contre-gradient pour la chaleur sensible: Kelvin/metre
    310276    REAL gamt(2:klev)
    311     REAL qsurf(klon)
    312 
    313     LOGICAL, SAVE :: appel1er
     277
     278    LOGICAL, SAVE :: appel1er=.TRUE.
    314279    !$OMP THREADPRIVATE(appel1er)
    315280!
    316281! Fonctions thermodynamiques et fonctions d'instabilite
    317282    REAL fsta, fins, x
    318     LOGICAL zxli ! utiliser un jeu de fonctions simples
    319     PARAMETER (zxli=.FALSE.)
    320283
    321284    fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x))
    322285    fins(x) = SQRT(1.0-18.0*x)
    323 
    324     DATA appel1er /.TRUE./
    325 
    326286
    327287    isommet=klev
     
    388348    ENDDO
    389349
    390 !
    391 ! Calculer le frottement au sol (Cdrag)
    392 !
    393     DO i = 1, knon
    394        u1(i) = u(i,1)
    395        v1(i) = v(i,1)
    396        t1(i) = t(i,1)
    397        q1(i) = q(i,1)
    398        z1(i) = zgeop(i,1)
    399     ENDDO
    400 
    401     CALL clcdrag(klon, knon, nsrf, zxli, &
    402          u1, v1, t1, q1, z1, &
    403          ts, qsurf, rugos, &
    404          pcfm1, pcfh1)
    405 !IM               ts, qsurf, rugos,
    406 
    407     DO i = 1, knon
    408        pcfm(i,1)=pcfm1(i)
    409        pcfh(i,1)=pcfh1(i)
    410     ENDDO
    411350!
    412351! Calculer les coefficients turbulents dans l'atmosphere
     
    535474       pcfm, pcfh)
    536475
     476    USE dimphy
     477
    537478!======================================================================
    538479! J'introduit un peu de diffusion sauf dans les endroits
     
    562503! Quelques constantes et options:
    563504!
    564     REAL prandtl
    565     PARAMETER (prandtl=0.4)
    566     REAL kstable
    567     PARAMETER (kstable=0.002)
    568 !    PARAMETER (kstable=0.001)
    569     REAL mixlen ! constante controlant longueur de melange
    570     PARAMETER (mixlen=35.0)
    571     REAL seuil ! au-dela l'inversion est consideree trop faible
    572     PARAMETER (seuil=-0.02)
     505    REAL, PARAMETER :: prandtl=0.4
     506    REAL, PARAMETER :: kstable=0.002
     507!   REAL, PARAMETER :: kstable=0.001
     508    REAL, PARAMETER :: mixlen=35.0 ! constante controlant longueur de melange
     509    REAL, PARAMETER :: seuil=-0.02 ! au-dela l'inversion est consideree trop faible
    573510!    PARAMETER (seuil=-0.04)
    574511!    PARAMETER (seuil=-0.06)
Note: See TracChangeset for help on using the changeset viewer.