/[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/phylmd/coefkz2.f90 revision 76 by guez, Fri Nov 15 18:45:49 2013 UTC trunk/Sources/phylmd/coefkz2.f revision 251 by guez, Mon Jan 8 14:12:02 2018 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, 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 o\`u une
10    ! t--------input-R- temperature (K)      ! forte inversion est pr\'esente. On peut dire que la diffusion
11        ! repr\'esente la convection peu profonde.
12    ! pcfm-----output-R- coefficients a calculer (vitesse)  
13    ! pcfh-----output-R- coefficients a calculer (chaleur et humidite)      use indicesol, only: is_oce
14        use dimphy, only: klev
15    ! Arguments:      use SUPHEC_M, only: RCPD, rd
16    
17    INTEGER knon, nsrf      integer, intent(in):: nsrf ! indicateur de la nature du sol
18    REAL paprs(klon, klev+1), pplay(klon, klev)  
19    REAL t(klon, klev)      REAL, intent(in):: paprs(:, :) ! (knon, klev+1)
20        ! pression a chaque intercouche (en Pa)
21    REAL pcfm(klon, klev), pcfh(klon, klev)  
22        REAL, intent(in):: pplay(:, :) ! (knon, klev)
23    ! Quelques constantes et options:      ! pression au milieu de chaque couche (en Pa)
24        
25    REAL prandtl      REAL, intent(in):: t(:, :) ! (knon, klev) temperature (K)
26    PARAMETER (prandtl=0.4)  
27    REAL kstable      REAL, intent(out):: pcfm(:, 2:) ! (knon, 2:klev) coefficient vitesse
28    PARAMETER (kstable=0.002)  
29    REAL mixlen ! constante controlant longueur de melange      REAL, intent(out):: pcfh(:, 2:) ! (knon, 2:klev)
30    PARAMETER (mixlen=35.0)      ! coefficient chaleur et humidite)
31    REAL seuil ! au-dela l'inversion est consideree trop faible  
32    PARAMETER (seuil=-0.02)      ! Local:
33        
34    ! Variables locales:      ! Quelques constantes et options:
35    
36    INTEGER i, k, invb(knon)      REAL prandtl
37    REAL zl2(knon)      PARAMETER (prandtl=0.4)
38    REAL zdthmin(knon), zdthdp      REAL kstable
39        PARAMETER (kstable=0.002)
40    !----------------------------------------------------------      REAL mixlen ! constante controlant longueur de melange
41        PARAMETER (mixlen=35.0)
42    ! Initialiser les sorties      REAL seuil ! au-dela l'inversion est consideree trop faible
43    DO k = 1, klev      PARAMETER (seuil=-0.02)
44       DO i = 1, knon  
45          pcfm(i, k) = 0.0      INTEGER knon ! nombre de points a traiter
46          pcfh(i, k) = 0.0      INTEGER i, k
47       ENDDO      INTEGER invb(size(paprs, 1)) ! (knon)
48    ENDDO      REAL zl2(size(paprs, 1)) ! (knon)
49        REAL zdthmin(size(paprs, 1)) ! (knon)
50    ! Chercher la zone d'inversion forte      real zdthdp
51    
52    DO i = 1, knon      !----------------------------------------------------------
53       invb(i) = klev  
54       zdthmin(i)=0.0      knon = size(paprs, 1)
55    ENDDO      
56    DO k = 2, klev/ 2 - 1      ! Initialiser les sorties
57       DO i = 1, knon      DO k = 2, 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.251

  ViewVC Help
Powered by ViewVC 1.1.21