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

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

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

trunk/phylmd/cltracrn.f revision 104 by guez, Thu Sep 4 10:05:52 2014 UTC trunk/Sources/phylmd/cltracrn.f revision 225 by guez, Mon Oct 16 12:35:41 2017 UTC
# Line 10  contains Line 10  contains
10    
11      ! From phylmd/cltracrn.F, version 1.2 2005/05/25 13:10:09      ! From phylmd/cltracrn.F, version 1.2 2005/05/25 13:10:09
12    
13      ! Author: Alex A.      ! Author: Alexandre ARMENGAUD
14      ! Date: february 1999      ! Date: February 1999
15      ! Inspiré de clqh et clvent      ! Inspiré de clqh et clvent
16    
17      ! Objet: diffusion verticale de traceurs avec quantité de traceur      ! Objet: diffusion verticale de traceurs avec quantité de traceur
# Line 25  contains Line 25  contains
25      use dimphy, only: klon, klev      use dimphy, only: klon, klev
26      use SUPHEC_M, only: RD, rg      use SUPHEC_M, only: RD, rg
27    
28      ! Arguments:      INTEGER itr
29      ! itr--- -input-R- le type de traceur 1- Rn 2 - Pb      ! itr--- -input-R- le type de traceur 1- Rn 2 - Pb
     ! dtime----input-R- intervalle de temps (en second)  
     ! u1lay----input-R- vent u de la premiere couche (m/s)  
     ! v1lay----input-R- vent v de la premiere couche (m/s)  
     ! coef-----input-R- le coefficient d'echange (m**2/s) l>1  
     ! paprs----input-R- pression a l'inter-couche (Pa)  
     ! pplay----input-R- pression au milieu de couche (Pa)  
     ! delp-----input-R- epaisseur de couche (Pa)  
     ! ftsol----input-R- temperature du sol (en Kelvin)  
     ! tr-------input-R- traceurs  
     ! trs------input-R- traceurs dans le sol  
     ! masktr---input-R- Masque reservoir de sol traceur (1 = reservoir)  
     ! fshtr----input-R- Flux surfacique de production dans le sol  
     ! tautr----input-R- Constante de decroissance du traceur  
     ! vdeptr---input-R- Vitesse de depot sec dans la couche brownienne  
     ! hsoltr---input-R- Epaisseur equivalente du reservoir de sol  
     ! lat-----input-R- latitude en degree  
     ! d_tr-----output-R- le changement de "tr"  
     ! d_trs----output-R- le changement de "trs"  
30    
31      REAL, intent(in):: dtime      REAL, intent(in):: dtime
32      REAL u1lay(klon), v1lay(klon)      ! dtime----input-R- intervalle de temps (en second)
33        REAL, intent(in):: u1lay(klon), v1lay(klon) ! vent de la premiere
34                                                    ! couche (m/s)
35      REAL coef(klon, klev)      REAL coef(klon, klev)
36        ! coef-----input-R- le coefficient d'echange (m**2/s) l>1
37      REAL, intent(in):: t(klon, klev) ! temperature (K)      REAL, intent(in):: t(klon, klev) ! temperature (K)
38      real, intent(in):: ftsol(klon, nbsrf), pctsrf(klon, nbsrf)      real, intent(in):: ftsol(klon, nbsrf), pctsrf(klon, nbsrf)
39      REAL tr(klon, klev), trs(klon)      ! ftsol----input-R- temperature du sol (en Kelvin)
40        REAL, intent(in):: tr(klon, klev) ! traceur
41        REAL, intent(in):: trs(:) ! (klon) traceur dans le sol
42      REAL, intent(in):: paprs(klon, klev+1)      REAL, intent(in):: paprs(klon, klev+1)
43        ! paprs----input-R- pression a l'inter-couche (Pa)
44      real, intent(in):: pplay(klon, klev)      real, intent(in):: pplay(klon, klev)
45        ! pplay----input-R- pression au milieu de couche (Pa)
46      real delp(klon, klev)      real delp(klon, klev)
47        ! delp-----input-R- epaisseur de couche (Pa)
48      REAL masktr(klon)      REAL masktr(klon)
49        ! masktr---input-R- Masque reservoir de sol traceur (1 = reservoir)
50      REAL fshtr(klon)      REAL fshtr(klon)
51        ! fshtr----input-R- Flux surfacique de production dans le sol
52      REAL hsoltr      REAL hsoltr
53        ! hsoltr---input-R- Epaisseur equivalente du reservoir de sol
54      REAL tautr      REAL tautr
55      REAL vdeptr      ! tautr----input-R- Constante de decroissance du traceur
56    
57        REAL, intent(in):: vdeptr
58        ! vitesse de d\'ep\^ot sec dans la couche brownienne
59    
60      REAL, intent(in):: lat(klon)      REAL, intent(in):: lat(klon)
61        ! lat-----input-R- latitude en degree
62      REAL d_tr(klon, klev)      REAL d_tr(klon, klev)
63        ! d_tr-----output-R- le changement de "tr"
64    
65      REAL d_trs(klon) ! (diagnostic) traceur ds le sol      REAL, intent(out):: d_trs(:) ! (klon) (diagnostic) changement de "trs"
66    
67      INTEGER i, k, itr, n, l      ! Local:
68        INTEGER i, k, n, l
69      REAL rotrhi(klon)      REAL rotrhi(klon)
70      REAL zx_coef(klon, klev)      REAL zx_coef(klon, klev)
71      REAL zx_buf(klon)      REAL zx_buf(klon)
72      REAL zx_ctr(klon, klev)      REAL zx_ctr(klon, klev)
73      REAL zx_dtr(klon, klev)      REAL zx_dtr(klon, klev)
     REAL zx_trs(klon)  
74      REAL zx_a, zx_b      REAL zx_a, zx_b
75    
76      REAL local_tr(klon, klev)      REAL local_tr(klon, klev)
# Line 105  contains Line 104  contains
104         ENDDO         ENDDO
105      ENDDO      ENDDO
106    
107      DO i = 1, klon      local_trs = trs
        local_trs(i) = trs(i)  
     ENDDO  
108    
109      ! Attention si dans clmain zx_alf1(i) = 1.      ! Attention si dans clmain zx_alf1(i) = 1.
110      ! Il doit y avoir coherence (donc la meme chose ici)      ! Il doit y avoir coherence (donc la meme chose ici)
# Line 169  contains Line 166  contains
166    
167      DO i = 1, klon      DO i = 1, klon
168         IF (NINT(masktr(i)) .EQ. 1) THEN         IF (NINT(masktr(i)) .EQ. 1) THEN
169            zx_trs(i) = local_trs(i)            zx_a = local_trs(i) &
           zx_a = zx_trs(i) &  
170                 +fshtr(i)*dtime*rotrhi(i) &                 +fshtr(i)*dtime*rotrhi(i) &
171                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
172                 *(zx_ctr(i, 1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2)) &                 *(zx_ctr(i, 1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2)) &
173                 +zx_alpha2(i)*zx_ctr(i, 2))                 +zx_alpha2(i)*zx_ctr(i, 2))
174            ! Pour l'instant, pour aller vite, le depot sec est traite            ! Pour l'instant, pour aller vite, le d\'ep\^ot sec est trait\'e
175            ! comme une decroissance :            ! comme une d\'ecroissance :
176            zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &            zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
177                 * (1.-zx_dtr(i, 1) &                 * (1.-zx_dtr(i, 1) &
178                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &
179                 + dtime / tautr &                 + dtime / tautr &
180                 + dtime * vdeptr / hsoltr                 + dtime * vdeptr / hsoltr
181            zx_trs(i) = zx_a / zx_b            local_trs(i) = zx_a / zx_b
           local_trs(i) = zx_trs(i)  
182         ENDIF         ENDIF
183    
184         ! Si on est entre 60N et 70N on divise par 2 l'emanation         ! Si on est entre 60N et 70N on divise par 2 l'emanation
# Line 192  contains Line 187  contains
187              .AND.lat(i).LE.70.) .OR. &              .AND.lat(i).LE.70.) .OR. &
188              (itr.eq.2.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60. &              (itr.eq.2.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GE.60. &
189              .AND.lat(i).LE.70.)) THEN              .AND.lat(i).LE.70.)) THEN
190            zx_trs(i) = local_trs(i)            zx_a = local_trs(i) &
           zx_a = zx_trs(i) &  
191                 +(fshtr(i)/2.)*dtime*rotrhi(i) &                 +(fshtr(i)/2.)*dtime*rotrhi(i) &
192                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
193                 *(zx_ctr(i, 1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2)) &                 *(zx_ctr(i, 1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2)) &
# Line 203  contains Line 197  contains
197                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &
198                 + dtime / tautr &                 + dtime / tautr &
199                 + dtime * vdeptr / hsoltr                 + dtime * vdeptr / hsoltr
200            zx_trs(i) = zx_a / zx_b            local_trs(i) = zx_a / zx_b
           local_trs(i) = zx_trs(i)  
201         ENDIF         ENDIF
202    
203         ! Au dessus des oceans et aux hautes latitudes         ! Au dessus des oceans et aux hautes latitudes
# Line 214  contains Line 207  contains
207    
208         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &
209              (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).LT.-60.)) THEN              (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).LT.-60.)) THEN
           zx_trs(i) = 0.  
210            local_trs(i) = 0.            local_trs(i) = 0.
211         END IF         END IF
212    
# Line 223  contains Line 215  contains
215    
216         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &
217              (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GT.70.)) THEN              (itr.EQ.1.AND.NINT(masktr(i)).EQ.1.AND.lat(i).GT.70.)) THEN
           zx_trs(i) = 0.  
218            local_trs(i) = 0.            local_trs(i) = 0.
219         END IF         END IF
220    
221         ! Au dessus des oceans la source est nulle         ! Au dessus des oceans la source est nulle
222    
223         IF (itr.eq.1.AND.NINT(masktr(i)).EQ.0) THEN         IF (itr.eq.1.AND.NINT(masktr(i)).EQ.0) THEN
           zx_trs(i) = 0.  
224            local_trs(i) = 0.            local_trs(i) = 0.
225         END IF         END IF
   
226      ENDDO ! sur le i=1, klon      ENDDO ! sur le i=1, klon
227    
228      ! une fois qu'on a zx_trs, on peut faire l'iteration      ! une fois qu'on a local_trs, on peut faire l'iteration
229    
230      DO i = 1, klon      DO i = 1, klon
231         local_tr(i, 1) = zx_ctr(i, 1)+zx_dtr(i, 1)*zx_trs(i)         local_tr(i, 1) = zx_ctr(i, 1)+zx_dtr(i, 1)*local_trs(i)
232      ENDDO      ENDDO
233      DO l = 2, klev      DO l = 2, klev
234         DO i = 1, klon         DO i = 1, klon
# Line 255  contains Line 244  contains
244            d_tr(i, l) = local_tr(i, l) - tr(i, l)            d_tr(i, l) = local_tr(i, l) - tr(i, l)
245         ENDDO         ENDDO
246      ENDDO      ENDDO
247      DO i = 1, klon      d_trs = local_trs - trs
        d_trs(i) = local_trs(i) - trs(i)  
     ENDDO  
248    
249    END SUBROUTINE cltracrn    END SUBROUTINE cltracrn
250    

Legend:
Removed from v.104  
changed lines
  Added in v.225

  ViewVC Help
Powered by ViewVC 1.1.21