source: trunk/mars/libf/phymars/lwi.F @ 38

Last change on this file since 38 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 5.2 KB
Line 
1      subroutine lwi (ig0,kdlon,kflev
2     .                ,psi,zdblay,pdp
3     .                ,newpcolc )
4
5
6      implicit none
7
8
9#include "dimensions.h"
10#include "dimphys.h"
11#include "dimradmars.h"
12#include "comg1d.h"
13#include "callkeys.h"
14#include "comcstfi.h"
15#include "yomlw.h"
16 
17CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
18C
19C                             -   lwi    -   
20C
21C     PURPOSE:       Shema semi - implicite
22C
23C
24CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
25
26
27c************************************************************************
28c
29c        0.    Declarations
30c              ------------
31c
32c-------------------------------------------------------------------------
33c        0.1   Arguments
34c              ---------
35c
36 
37      integer ig0,kdlon,kflev
38
39      real    psi(ndlo2,kflev)
40     .     ,  zdblay(ndlo2,nir,kflev)
41     .     ,  pdp(ndlo2,kflev)
42
43
44      real    newpcolc(ndlo2,kflev)
45
46c-------------------------------------------------------------------------
47c        0.2   local arrays
48c              ------------
49c
50      real    di(ndlon,nflev)
51     .      , hi(ndlon,nflev)
52     .      , bi(ndlon,nflev)
53
54      real    ci(ndlon,nflev)
55     .      , ai(ndlon,nflev)
56      real    deltat
57
58      real   semit, denom
59
60      integer i, jl
61
62c************************************************************************
63c
64c        1.    Initialisations
65c              ---------------
66c
67c-----------------------------------------------------------------------
68 
69        deltat = dtphys * iradia
70c       print*,'SEMI = ',semi, '(expl:0  semi-implicite:0.5  impl:1)'
71        semit = semi * deltat
72c       semi = 0.
73
74c       print*,'dtphys,iradia,deltat,semit:',dtphys,iradia,deltat,semit
75c       print*,'g,cpp',g,cpp
76
77
78c************************************************************************
79c
80c        2.   
81c              ---------------
82c
83c-------------------------------------------------------------------------
84c        2.1   Calcul des di
85c              -------------
86c
87
88
89      do i = 1 , nlaylte-1
90        do jl = 1 , kdlon
91c     -------------------
92      di(jl,i) =  1 + semit * (g / pdp(jl,i) / cpp) * (
93     .    ( xi(ig0+jl,1,i,nlaylte+1)
94     .    + xi(ig0+jl,1,i,i+1)
95     .    + xi(ig0+jl,1,i,i-1) )
96     .    *    zdblay(jl,1,i)
97     .  + ( xi(ig0+jl,2,i,nlaylte+1)
98     .    + xi(ig0+jl,2,i,i+1)
99     .    + xi(ig0+jl,2,i,i-1) )
100     .    *    zdblay(jl,2,i)
101     .     )
102c     -------------------
103        enddo
104      enddo
105
106c couche nlaylte
107c ------------
108c      , on enleve i,i+1 sinon on a 2 fois le cooling2space
109
110      do jl = 1 , kdlon
111c     -------------------
112      di(jl,nlaylte) =  1 + semit * (g / pdp(jl,nlaylte) / cpp) * (
113     .    ( xi(ig0+jl,1,nlaylte,nlaylte+1)
114     .    + xi(ig0+jl,1,nlaylte,nlaylte-1) )
115     .    *    zdblay(jl,1,nlaylte)
116     .  + ( xi(ig0+jl,2,nlaylte,nlaylte+1)
117     .    + xi(ig0+jl,2,nlaylte,nlaylte-1) )
118     .    *    zdblay(jl,2,nlaylte)
119     .     )
120c     -------------------
121      enddo
122
123c-------------------------------------------------------------------------
124c        2.2   Calcul des hi
125c              -------------
126c
127
128      do i = 1 , nlaylte-1
129        do jl = 1 , kdlon
130c     -------------------
131      hi(jl,i) =    - semit * (g / pdp(jl,i) / cpp) *
132     .            (    xi(ig0+jl,1,i,i+1) * zdblay(jl,1,i+1)   
133     .               + xi(ig0+jl,2,i,i+1) * zdblay(jl,2,i+1)   )
134c     -------------------
135        enddo
136      enddo
137
138c-------------------------------------------------------------------------
139c        2.3   Calcul des bi
140c              -------------
141c
142
143
144      do i = 2 , nlaylte
145        do jl = 1 , kdlon
146c     -------------------
147      bi(jl,i) =   - semit * (g / pdp(jl,i) / cpp) *
148     .           (     xi(ig0+jl,1,i,i-1) * zdblay(jl,1,i-1)   
149     .               + xi(ig0+jl,2,i,i-1) * zdblay(jl,2,i-1)   )
150c     -------------------
151        enddo
152      enddo
153
154
155c couche 1
156c --------
157c  tant qu'on a pas un calcul propre de zdblay(0) qui tienne compte de
158c    la discontinuite de temperature au sol , on met  b1 = 0
159
160
161      do jl = 1 , kdlon
162        bi(jl,1) = 0
163      enddo
164
165c-------------------------------------------------------------------------
166c        2.4   
167c              -------------
168c
169
170c couche nlaylte
171c ------------
172
173      do jl = 1 , kdlon
174c     -------------------
175      ci(jl,nlaylte) = (gcp * psi(jl,nlaylte) / pdp(jl,nlaylte))
176     .                   / di(jl,nlaylte)
177
178      ai(jl,nlaylte) = - bi(jl,nlaylte) / di(jl,nlaylte)
179c     -------------------
180      enddo
181
182
183
184      do i = nlaylte-1 , 1 , -1
185        do jl = 1 , kdlon
186c     -------------------
187      denom = di(jl,i) + hi(jl,i) * ai(jl,i+1)
188
189      ci(jl,i) = (  gcp * psi(jl,i) / pdp(jl,i)
190     .             - hi(jl,i) * ci(jl,i+1)  )  / denom
191 
192      ai(jl,i) = -bi(jl,i) / denom
193c     -------------------
194        enddo
195      enddo
196
197
198c-------------------------------------------------------------------------
199c        2.5   
200c              -------------
201c
202
203c couche 1
204c -------
205      do jl = 1 , kdlon
206        newpcolc(jl,1) = ci(jl,1)
207      enddo
208
209
210      do i = 2 , nlaylte
211        do jl = 1 , kdlon
212           newpcolc(jl,i) = ci(jl,i) + ai(jl,i) * newpcolc(jl,i-1)
213        enddo
214      enddo
215
216
217
218c-------------------------------------------------------------------------
219      RETURN
220      END
Note: See TracBrowser for help on using the repository browser.