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

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

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

trunk/libf/phylmd/coefkz2.f90 revision 57 by guez, Mon Jan 30 12:54:02 2012 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, 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
32    PARAMETER (seuil=-0.02)      integer, intent(in):: nsrf
33        REAL, intent(in):: paprs(klon, klev+1), pplay(klon, klev)
34    ! Variables locales:      REAL, intent(in):: t(klon, klev)
35    
36    INTEGER i, k, invb(knon)      REAL, intent(out):: pcfm(:, 2:), pcfh(:, 2:) ! (knon, 2:klev)
37    REAL zl2(knon)  
38    REAL zdthmin(knon), zdthdp      ! Quelques constantes et options:
39    
40    !----------------------------------------------------------      REAL prandtl
41        PARAMETER (prandtl=0.4)
42    ! Initialiser les sorties      REAL kstable
43    DO k = 1, klev      PARAMETER (kstable=0.002)
44       DO i = 1, knon      REAL mixlen ! constante controlant longueur de melange
45          pcfm(i, k) = 0.0      PARAMETER (mixlen=35.0)
46          pcfh(i, k) = 0.0      REAL seuil ! au-dela l'inversion est consideree trop faible
47       ENDDO      PARAMETER (seuil=-0.02)
48    ENDDO  
49        ! Variables locales:
50    ! Chercher la zone d'inversion forte  
51        INTEGER i, k, invb(knon)
52    DO i = 1, knon      REAL zl2(knon)
53       invb(i) = klev      REAL zdthmin(knon), zdthdp
54       zdthmin(i)=0.0  
55    ENDDO      !----------------------------------------------------------
56    DO k = 2, klev/ 2 - 1  
57       DO i = 1, knon      ! Initialiser les sorties
58          zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &      DO k = 2, klev
59               - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)         DO i = 1, knon
60          zdthdp = zdthdp * 100.            pcfm(i, k) = 0.0
61          IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN            pcfh(i, k) = 0.0
62             zdthmin(i) = zdthdp         ENDDO
63             invb(i) = k      ENDDO
64          ENDIF  
65       ENDDO      ! Chercher la zone d'inversion forte
66    ENDDO  
67        DO i = 1, knon
68    ! Introduire une diffusion:         invb(i) = klev
69    DO k = 2, klev         zdthmin(i)=0.0
70       DO i = 1, knon      ENDDO
71          ! si on est sur ocean et s'il n'y a pas d'inversion ou si      DO k = 2, klev/ 2 - 1
72          ! l'inversion est trop faible:         DO i = 1, knon
73          IF ((nsrf.EQ.is_oce) .AND.  &              zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
74               ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN                 - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
75             zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &            zdthdp = zdthdp * 100.
76                  /(paprs(i, 2)-paprs(i, klev+1))))**2            IF (pplay(i, k) > 0.8 * paprs(i, 1) .AND. zdthdp < zdthmin(i)) THEN
77             pcfm(i, k)= zl2(i)* kstable               zdthmin(i) = zdthdp
78             pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different               invb(i) = k
79          ENDIF            ENDIF
80       ENDDO         ENDDO
81    ENDDO      ENDDO
82    
83        ! Introduire une diffusion:
84        DO k = 2, klev
85           DO i = 1, knon
86              ! si on est sur ocean et s'il n'y a pas d'inversion ou si
87              ! l'inversion est trop faible:
88              IF ((nsrf.EQ.is_oce) .AND.  &  
89                   ((invb(i).EQ.klev) .OR. (zdthmin(i) > seuil))) THEN
90                 zl2(i)=(mixlen*MAX(0.0, (paprs(i, k)-paprs(i, klev+1)) &
91                      /(paprs(i, 2)-paprs(i, klev+1))))**2
92                 pcfm(i, k)= zl2(i)* kstable
93                 pcfh(i, k) = pcfm(i, k) /prandtl ! h et m different
94              ENDIF
95           ENDDO
96        ENDDO
97    
98      END SUBROUTINE coefkz2
99    
100  END SUBROUTINE coefkz2  end module coefkz2_m

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

  ViewVC Help
Powered by ViewVC 1.1.21