/[lmdze]/trunk/phylmd/coefkz2.f
ViewVC logotype

Diff of /trunk/phylmd/coefkz2.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/phylmd/coefkz2.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/Sources/phylmd/coefkz2.f revision 248 by guez, Fri Jan 5 16:40:13 2018 UTC
# Line 1  Line 1 
1        SUBROUTINE coefkz2(nsrf, knon, paprs, pplay,t,  module coefkz2_m
2       .                  pcfm, pcfh)  
3        use dimens_m    IMPLICIT none
4        use indicesol  
5        use dimphy  contains
6        use iniprint  
7        use YOMCST    SUBROUTINE coefkz2(nsrf, knon, paprs, pplay, t, pcfm, pcfh)
8        IMPLICIT none  
9  c======================================================================      ! J'introduit un peu de diffusion sauf dans les endroits
10  c J'introduit un peu de diffusion sauf dans les endroits      ! ou une forte inversion est presente
11  c ou une forte inversion est presente      ! On peut dire qu'il represente la convection peu profonde
12  c On peut dire qu'il represente la convection peu profonde  
13  c      use dimens_m
14  c Arguments:      use indicesol
15  c nsrf-----input-I- indicateur de la nature du sol      use dimphy
16  c knon-----input-I- nombre de points a traiter      use conf_gcm_m
17  c paprs----input-R- pression a chaque intercouche (en Pa)      use SUPHEC_M
18  c pplay----input-R- pression au milieu de chaque couche (en Pa)  
19  c t--------input-R- temperature (K)      ! Arguments:
20  c      ! nsrf-----input-I- indicateur de la nature du sol
21  c pcfm-----output-R- coefficients a calculer (vitesse)      ! knon-----input-I- nombre de points a traiter
22  c pcfh-----output-R- coefficients a calculer (chaleur et humidite)      ! paprs----input-R- pression a chaque intercouche (en Pa)
23  c======================================================================      ! pplay----input-R- pression au milieu de chaque couche (en Pa)
24  c      ! t--------input-R- temperature (K)
25  c Arguments:  
26  c      ! pcfm-----output-R- coefficients a calculer (vitesse)
27        INTEGER knon, nsrf      ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)
28        REAL paprs(klon,klev+1), pplay(klon,klev)  
29        REAL t(klon,klev)      ! Arguments:
30  c  
31        REAL pcfm(klon,klev), pcfh(klon,klev)      INTEGER knon
32  c      integer, intent(in):: nsrf
33  c Quelques constantes et options:      REAL, intent(in):: paprs(klon, klev+1), pplay(klon, klev)
34  c      REAL, intent(in):: t(klon, klev)
35        REAL prandtl  
36        PARAMETER (prandtl=0.4)      REAL, intent(out):: pcfm(:, 2:), pcfh(:, 2:) ! (knon, 2:klev)
37        REAL kstable  
38        PARAMETER (kstable=0.002)      ! Quelques constantes et options:
39  ccc      PARAMETER (kstable=0.001)  
40        REAL mixlen ! constante controlant longueur de melange      REAL prandtl
41        PARAMETER (mixlen=35.0)      PARAMETER (prandtl=0.4)
42        REAL seuil ! au-dela l'inversion est consideree trop faible      REAL kstable
43        PARAMETER (seuil=-0.02)      PARAMETER (kstable=0.002)
44  ccc      PARAMETER (seuil=-0.04)      REAL mixlen ! constante controlant longueur de melange
45  ccc      PARAMETER (seuil=-0.06)      PARAMETER (mixlen=35.0)
46  ccc      PARAMETER (seuil=-0.09)      REAL seuil ! au-dela l'inversion est consideree trop faible
47  c      PARAMETER (seuil=-0.02)
48  c Variables locales:  
49  c      ! Variables locales:
50        INTEGER i, k, invb(knon)  
51        REAL zl2(knon)      INTEGER i, k, invb(knon)
52        REAL zdthmin(knon), zdthdp      REAL zl2(knon)
53  c      REAL zdthmin(knon), zdthdp
54  c Initialiser les sorties  
55  c      !----------------------------------------------------------
56        DO k = 1, klev  
57        DO i = 1, knon      ! Initialiser les sorties
58           pcfm(i,k) = 0.0      DO k = 2, klev
59           pcfh(i,k) = 0.0         DO i = 1, knon
60        ENDDO            pcfm(i, k) = 0.0
61        ENDDO            pcfh(i, k) = 0.0
62  c         ENDDO
63  c Chercher la zone d'inversion forte      ENDDO
64  c  
65        DO i = 1, knon      ! Chercher la zone d'inversion forte
66           invb(i) = klev  
67           zdthmin(i)=0.0      DO i = 1, knon
68        ENDDO         invb(i) = klev
69        DO k = 2, klev/2-1         zdthmin(i)=0.0
70        DO i = 1, knon      ENDDO
71           zdthdp = (t(i,k)-t(i,k+1))/(pplay(i,k)-pplay(i,k+1))      DO k = 2, klev/ 2 - 1
72       .          - RD * 0.5*(t(i,k)+t(i,k+1))/RCPD/paprs(i,k+1)         DO i = 1, knon
73           zdthdp = zdthdp * 100.0            zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
74           IF (pplay(i,k).GT.0.8*paprs(i,1) .AND.                 - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
75       .       zdthdp.LT.zdthmin(i) ) THEN            zdthdp = zdthdp * 100.
76              zdthmin(i) = zdthdp            IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
77              invb(i) = k               zdthmin(i) = zdthdp
78           ENDIF               invb(i) = k
79        ENDDO            ENDIF
80        ENDDO         ENDDO
81  c      ENDDO
82  c Introduire une diffusion:  
83  c      ! Introduire une diffusion:
84        DO k = 2, klev      DO k = 2, klev
85        DO i = 1, knon         DO i = 1, knon
86  cIM cf FH/GK   IF ( (nsrf.NE.is_oce) .OR.  ! si ce n'est pas sur l'ocean            ! si on est sur ocean et s'il n'y a pas d'inversion ou si
87  cIM cf FH/GK  .     (invb(i).EQ.klev) .OR. ! s'il n'y a pas d'inversion            ! l'inversion est trop faible:
88        !IM cf JLD/ GKtest TERkz2            IF ((nsrf.EQ.is_oce) .AND.  &  
89        ! IF ( (nsrf.EQ.is_ter) .OR.  ! si on est sur la terre                 ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN
90        ! fin GKtest               zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &
91        IF ( (nsrf.EQ.is_oce) .AND.  ! si on est sur ocean et si                    /(paprs(i, 2)-paprs(i, klev+1))))**2
92       .     ( (invb(i).EQ.klev) .OR.      ! s'il n'y a pas d'inversion               pcfm(i, k)= zl2(i)* kstable
93       .     (zdthmin(i).GT.seuil) ) )THEN ! si l'inversion est trop faible               pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different
94           zl2(i)=(mixlen*MAX(0.0,(paprs(i,k)-paprs(i,klev+1))            ENDIF
95       .                       /(paprs(i,2)-paprs(i,klev+1)) ))**2         ENDDO
96           pcfm(i,k)= zl2(i)* kstable      ENDDO
97           pcfh(i,k) = pcfm(i,k) /prandtl ! h et m different  
98        ENDIF    END SUBROUTINE coefkz2
99        ENDDO  
100        ENDDO  end module coefkz2_m
 c  
       RETURN  
       END  

Legend:
Removed from v.3  
changed lines
  Added in v.248

  ViewVC Help
Powered by ViewVC 1.1.21