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

Diff of /trunk/phylmd/cltracrn.f

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

revision 134 by guez, Wed Apr 29 15:47:56 2015 UTC revision 156 by guez, Thu Jul 16 17:39:10 2015 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        ! dtime----input-R- intervalle de temps (en second)
33      REAL u1lay(klon), v1lay(klon)      REAL u1lay(klon), v1lay(klon)
34        ! u1lay----input-R- vent u de la premiere couche (m/s)
35        ! v1lay----input-R- vent v de la premiere couche (m/s)
36      REAL coef(klon, klev)      REAL coef(klon, klev)
37        ! coef-----input-R- le coefficient d'echange (m**2/s) l>1
38      REAL, intent(in):: t(klon, klev) ! temperature (K)      REAL, intent(in):: t(klon, klev) ! temperature (K)
39      real, intent(in):: ftsol(klon, nbsrf), pctsrf(klon, nbsrf)      real, intent(in):: ftsol(klon, nbsrf), pctsrf(klon, nbsrf)
40      REAL tr(klon, klev), trs(klon)      ! ftsol----input-R- temperature du sol (en Kelvin)
41        REAL, intent(in):: tr(klon, klev) ! traceur
42        REAL, intent(in):: trs(:) ! (klon) traceur dans le sol
43      REAL, intent(in):: paprs(klon, klev+1)      REAL, intent(in):: paprs(klon, klev+1)
44        ! paprs----input-R- pression a l'inter-couche (Pa)
45      real, intent(in):: pplay(klon, klev)      real, intent(in):: pplay(klon, klev)
46        ! pplay----input-R- pression au milieu de couche (Pa)
47      real delp(klon, klev)      real delp(klon, klev)
48        ! delp-----input-R- epaisseur de couche (Pa)
49      REAL masktr(klon)      REAL masktr(klon)
50        ! masktr---input-R- Masque reservoir de sol traceur (1 = reservoir)
51      REAL fshtr(klon)      REAL fshtr(klon)
52        ! fshtr----input-R- Flux surfacique de production dans le sol
53      REAL hsoltr      REAL hsoltr
54        ! hsoltr---input-R- Epaisseur equivalente du reservoir de sol
55      REAL tautr      REAL tautr
56      REAL vdeptr      ! tautr----input-R- Constante de decroissance du traceur
57    
58        REAL, intent(in):: vdeptr
59        ! vitesse de d\'ep\^ot sec dans la couche brownienne
60    
61      REAL, intent(in):: lat(klon)      REAL, intent(in):: lat(klon)
62        ! lat-----input-R- latitude en degree
63      REAL d_tr(klon, klev)      REAL d_tr(klon, klev)
64        ! d_tr-----output-R- le changement de "tr"
65    
66      REAL d_trs(klon) ! (diagnostic) traceur ds le sol      REAL, intent(out):: d_trs(:) ! (klon) (diagnostic) changement de "trs"
67    
68      INTEGER i, k, itr, n, l      ! Local:
69        INTEGER i, k, n, l
70      REAL rotrhi(klon)      REAL rotrhi(klon)
71      REAL zx_coef(klon, klev)      REAL zx_coef(klon, klev)
72      REAL zx_buf(klon)      REAL zx_buf(klon)
73      REAL zx_ctr(klon, klev)      REAL zx_ctr(klon, klev)
74      REAL zx_dtr(klon, klev)      REAL zx_dtr(klon, klev)
     REAL zx_trs(klon)  
75      REAL zx_a, zx_b      REAL zx_a, zx_b
76    
77      REAL local_tr(klon, klev)      REAL local_tr(klon, klev)
# Line 105  contains Line 105  contains
105         ENDDO         ENDDO
106      ENDDO      ENDDO
107    
108      DO i = 1, klon      local_trs = trs
        local_trs(i) = trs(i)  
     ENDDO  
109    
110      ! Attention si dans clmain zx_alf1(i) = 1.      ! Attention si dans clmain zx_alf1(i) = 1.
111      ! Il doit y avoir coherence (donc la meme chose ici)      ! Il doit y avoir coherence (donc la meme chose ici)
# Line 169  contains Line 167  contains
167    
168      DO i = 1, klon      DO i = 1, klon
169         IF (NINT(masktr(i)) .EQ. 1) THEN         IF (NINT(masktr(i)) .EQ. 1) THEN
170            zx_trs(i) = local_trs(i)            zx_a = local_trs(i) &
           zx_a = zx_trs(i) &  
171                 +fshtr(i)*dtime*rotrhi(i) &                 +fshtr(i)*dtime*rotrhi(i) &
172                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
173                 *(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)) &
174                 +zx_alpha2(i)*zx_ctr(i, 2))                 +zx_alpha2(i)*zx_ctr(i, 2))
175            ! 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
176            ! comme une decroissance :            ! comme une d\'ecroissance :
177            zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &            zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
178                 * (1.-zx_dtr(i, 1) &                 * (1.-zx_dtr(i, 1) &
179                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &
180                 + dtime / tautr &                 + dtime / tautr &
181                 + dtime * vdeptr / hsoltr                 + dtime * vdeptr / hsoltr
182            zx_trs(i) = zx_a / zx_b            local_trs(i) = zx_a / zx_b
           local_trs(i) = zx_trs(i)  
183         ENDIF         ENDIF
184    
185         ! 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 188  contains
188              .AND.lat(i).LE.70.) .OR. &              .AND.lat(i).LE.70.) .OR. &
189              (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. &
190              .AND.lat(i).LE.70.)) THEN              .AND.lat(i).LE.70.)) THEN
191            zx_trs(i) = local_trs(i)            zx_a = local_trs(i) &
           zx_a = zx_trs(i) &  
192                 +(fshtr(i)/2.)*dtime*rotrhi(i) &                 +(fshtr(i)/2.)*dtime*rotrhi(i) &
193                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &                 +rotrhi(i)*masktr(i)*zx_coef(i, 1)/RG &
194                 *(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 198  contains
198                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &                 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i, 2))) &
199                 + dtime / tautr &                 + dtime / tautr &
200                 + dtime * vdeptr / hsoltr                 + dtime * vdeptr / hsoltr
201            zx_trs(i) = zx_a / zx_b            local_trs(i) = zx_a / zx_b
           local_trs(i) = zx_trs(i)  
202         ENDIF         ENDIF
203    
204         ! Au dessus des oceans et aux hautes latitudes         ! Au dessus des oceans et aux hautes latitudes
# Line 214  contains Line 208  contains
208    
209         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &
210              (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.  
211            local_trs(i) = 0.            local_trs(i) = 0.
212         END IF         END IF
213    
# Line 223  contains Line 216  contains
216    
217         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &         IF ((itr.EQ.1.AND.NINT(masktr(i)).EQ.0) .OR. &
218              (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.  
219            local_trs(i) = 0.            local_trs(i) = 0.
220         END IF         END IF
221    
222         ! Au dessus des oceans la source est nulle         ! Au dessus des oceans la source est nulle
223    
224         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.  
225            local_trs(i) = 0.            local_trs(i) = 0.
226         END IF         END IF
   
227      ENDDO ! sur le i=1, klon      ENDDO ! sur le i=1, klon
228    
229      ! une fois qu'on a zx_trs, on peut faire l'iteration      ! une fois qu'on a local_trs, on peut faire l'iteration
230    
231      DO i = 1, klon      DO i = 1, klon
232         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)
233      ENDDO      ENDDO
234      DO l = 2, klev      DO l = 2, klev
235         DO i = 1, klon         DO i = 1, klon
# Line 255  contains Line 245  contains
245            d_tr(i, l) = local_tr(i, l) - tr(i, l)            d_tr(i, l) = local_tr(i, l) - tr(i, l)
246         ENDDO         ENDDO
247      ENDDO      ENDDO
248      DO i = 1, klon      d_trs = local_trs - trs
        d_trs(i) = local_trs(i) - trs(i)  
     ENDDO  
249    
250    END SUBROUTINE cltracrn    END SUBROUTINE cltracrn
251    

Legend:
Removed from v.134  
changed lines
  Added in v.156

  ViewVC Help
Powered by ViewVC 1.1.21