source: trunk/WRF.COMMON/WRFV2/mars_lmd/libf/phymars/lwi.F @ 3094

Last change on this file since 3094 was 11, checked in by aslmd, 14 years ago

spiga@svn-planeto:ajoute le modele meso-echelle martien

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
106
107
108c couche nlaylte
109c ------------
110c      , on enleve i,i+1 sinon on a 2 fois le cooling2space
111
112      do jl = 1 , kdlon
113c     -------------------
114      di(jl,nlaylte) =  1 + semit * (g / pdp(jl,nlaylte) / cpp) * (
115     .    ( xi(ig0+jl,1,nlaylte,nlaylte+1)
116     .    + xi(ig0+jl,1,nlaylte,nlaylte-1) )
117     .    *    zdblay(jl,1,nlaylte)
118     .  + ( xi(ig0+jl,2,nlaylte,nlaylte+1)
119     .    + xi(ig0+jl,2,nlaylte,nlaylte-1) )
120     .    *    zdblay(jl,2,nlaylte)
121     .     )
122c     -------------------
123      enddo
124
125
126c-------------------------------------------------------------------------
127c        2.2   Calcul des hi
128c              -------------
129c
130
131      do i = 1 , nlaylte-1
132        do jl = 1 , kdlon
133c     -------------------
134      hi(jl,i) =    - semit * (g / pdp(jl,i) / cpp) *
135     .            (    xi(ig0+jl,1,i,i+1) * zdblay(jl,1,i+1)
136     .               + xi(ig0+jl,2,i,i+1) * zdblay(jl,2,i+1)   )
137c     -------------------
138        enddo
139      enddo
140
141c-------------------------------------------------------------------------
142c        2.3   Calcul des bi
143c              -------------
144c
145
146
147      do i = 2 , nlaylte
148        do jl = 1 , kdlon
149c     -------------------
150      bi(jl,i) =   - semit * (g / pdp(jl,i) / cpp) *
151     .           (     xi(ig0+jl,1,i,i-1) * zdblay(jl,1,i-1)
152     .               + xi(ig0+jl,2,i,i-1) * zdblay(jl,2,i-1)   )
153c     -------------------
154        enddo
155      enddo
156
157
158c couche 1
159c --------
160c  tant qu'on a pas un calcul propre de zdblay(0) qui tienne compte de
161c    la discontinuite de temperature au sol , on met  b1 = 0
162
163
164      do jl = 1 , kdlon
165        bi(jl,1) = 0
166      enddo
167
168c-------------------------------------------------------------------------
169c        2.4   
170c              -------------
171c
172
173c couche nlaylte
174c ------------
175
176      do jl = 1 , kdlon
177c     -------------------
178      ci(jl,nlaylte) = (gcp * psi(jl,nlaylte) / pdp(jl,nlaylte))
179     .                   / di(jl,nlaylte)
180
181      ai(jl,nlaylte) = - bi(jl,nlaylte) / di(jl,nlaylte)
182c     -------------------
183      enddo
184
185
186
187      do i = nlaylte-1 , 1 , -1
188        do jl = 1 , kdlon
189c     -------------------
190      denom = di(jl,i) + hi(jl,i) * ai(jl,i+1)
191
192      ci(jl,i) = (  gcp * psi(jl,i) / pdp(jl,i)
193     .             - hi(jl,i) * ci(jl,i+1)  )  / denom
194 
195      ai(jl,i) = -bi(jl,i) / denom
196c     -------------------
197        enddo
198      enddo
199
200
201c-------------------------------------------------------------------------
202c        2.5   
203c              -------------
204c
205
206c couche 1
207c -------
208      do jl = 1 , kdlon
209        newpcolc(jl,1) = ci(jl,1)
210      enddo
211
212
213      do i = 2 , nlaylte
214        do jl = 1 , kdlon
215           newpcolc(jl,i) = ci(jl,i) + ai(jl,i) * newpcolc(jl,i-1)
216        enddo
217      enddo
218
219
220
221c-------------------------------------------------------------------------
222      RETURN
223      END
Note: See TracBrowser for help on using the repository browser.