source: trunk/LMDZ.VENUS/libf/phyvenus/lwi.1mat @ 134

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

Creation de repertoires:

  • chantiers : pour communiquer sur nos projets de modifs
  • documentation : pour stocker les docs

Ajout de:

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