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

Diff of /trunk/Sources/phylmd/coefkz2.f

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

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

Legend:
Removed from v.76  
changed lines
  Added in v.234

  ViewVC Help
Powered by ViewVC 1.1.21