source: trunk/libf/phyvenus/lwi.F @ 101

Last change on this file since 101 was 101, checked in by slebonnois, 14 years ago

SL: modifications pour arriver a compiler le gcm VENUS !
Ca marche !
A noter: modifs de makelmdz

File size: 4.6 KB
Line 
1      subroutine lwi(nl,netrad,deltapsi,deltap,temp,coolrate)
2
3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4c §§§§!!!  VERSION utilisable avec load_psi, 
5c          differente des versions *.1mat 
6c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7      use dimphy
8      implicit none
9
10
11#include "dimensions.h"
12#include "comg1d.h"  !pour grads 1D
13#include "YOMCST.h"
14#include "timerad.h"
15     
16CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
17C
18C                             -   lwi    -   
19C
20C     PURPOSE:       Schema semi - implicite
21C
22C
23CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
24
25
26c************************************************************************
27c
28c        0.    Declarations
29c              ------------
30c
31c-------------------------------------------------------------------------
32c        0.1   Arguments
33c              ---------
34c Inputs
35c.......
36
37      integer nl
38      real    deltapsi(0:nl+1,0:nl+1) ! Dpsi/DT = sum(nu)[ksi DB/DT]
39      real    netrad(0:nl)     ! radiative budget (W/m**2)
40      real    deltap(nl) !epaisseur de la couche en pression (Pa)
41! ADAPTATION GCM POUR CP(T)
42      real    temp(nl)   !temperature de la couche
43     
44c Outputs
45c........
46
47      real    coolrate(nl)
48     
49c-------------------------------------------------------------------------
50c        0.2   local arrays
51c              ------------
52c
53      real    di(nl)
54     .      , spec(nl)
55     .      , hi(nl)
56     .      , bi(nl)
57
58      real    ci(nl)
59     .      , ai(nl)
60
61      real    deltat
62
63      real    semi,semit,denom
64
65      integer i,jl,band
66
67c************************************************************************
68c
69c        1.    Initialisations
70c              ---------------
71c
72c-----------------------------------------------------------------------
73        deltat = dtimerad
74c       print*,'SEMI = ',semi, '(expl:0  semi-implicite:0.5  impl:1)'
75c        semi  = 0.5
76c       semi = 0.5
77        semi = 1.
78        semit = semi * deltat
79
80c       print*,'dtimerad,deltat,semit:',dtimerad,deltat,semit
81
82c************************************************************************
83c
84c        2.   
85c              ---------------
86c
87c-------------------------------------------------------------------------
88c        2.1   Calcul des di
89c              -------------
90c
91
92      do i = 1 , nl-1
93        spec(i) =
94     .      ( deltapsi(i,nl+1)
95     .      + deltapsi(i,i+1)
96     .      + deltapsi(i,i-1) )
97     
98        di(i) =  1. + semit * (RG/deltap(i)/cpdet(temp(i))) * spec(i)
99c     print*,i,' di(i)=',di(i)
100      enddo
101         
102
103c couche nl
104c ------------
105c      , on enleve i,i+1 sinon on a 2 fois le cooling2space
106 
107        spec(nl) =
108     .      ( deltapsi(nl,nl+1)
109     .      + deltapsi(nl,nl-1) )
110     
111        di(nl) =  1. + semit * (RG/deltap(nl)/cpdet(temp(nl)))*spec(nl)
112
113c-------------------------------------------------------------------------
114c        2.2   Calcul des hi
115c              -------------
116c
117
118      do i = 1 , nl-1
119     
120        spec(i) = deltapsi(i+1,i)
121
122        hi(i) = - semit * (RG/deltap(i)/cpdet(temp(i))) * spec(i)
123
124      enddo
125                       
126c     print*,'hi(i)',hi(i)
127
128c-------------------------------------------------------------------------
129c        2.3   Calcul des bi
130c              -------------
131c
132
133
134      do i = 2 , nl
135     
136        spec(i) = deltapsi(i-1,i)
137       
138        bi(i) = - semit * (RG/deltap(i)/cpdet(temp(i))) * spec(i)
139       
140      enddo
141
142c     print*,'bi(i)',bi(i)
143
144c couche 1
145c --------
146c  tant qu'on a pas un calcul propre de deltab(0) qui tienne compte de
147c    la discontinuite de temperature au sol , on met  b1 = 0
148
149     
150        bi(1) = 0
151
152c-------------------------------------------------------------------------
153c        2.4   
154c              -------------
155c
156
157c couche nl
158c ------------
159
160c     ci(nl) = ((RG/CP) * netrad(nl) / deltap(nl))
161c    .                   / di(nl)
162      ci(nl) = netrad(nl) *RG/cpdet(temp(nl)) / deltap(nl)
163
164      ai(nl) = - bi(nl) / di(nl)
165
166      do i = nl-1 , 1 , -1
167        denom = di(i) + hi(i) * ai(i+1)
168
169c       ci(i) = (  (RG/CP) * netrad(i) / deltap(i)
170c    .               - hi(i) * ci(i+1)  )  / denom
171        ci(i) = netrad(i) *RG/cpdet(temp(i)) / deltap(i)
172 
173        ai(i) = -bi(i) / denom
174      enddo
175
176c-------------------------------------------------------------------------
177c        2.5   
178c              -------------
179c
180
181      coolrate(1) = ci(1)
182
183      do i = 2 , nl
184           coolrate(i) = ci(i) + ai(i) * coolrate(i-1)
185c       print*,i,' coolrate(i)=',coolrate(i)
186      enddo
187
188c-------------------------------------------------------------------------
189
190      RETURN
191      END
Note: See TracBrowser for help on using the repository browser.