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

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

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

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

Legend:
Removed from v.233  
changed lines
  Added in v.251

  ViewVC Help
Powered by ViewVC 1.1.21