source: trunk/LMDZ.VENUS/libf/phyvenus/lwi.multimat @ 402

Last change on this file since 402 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.5 KB
Line 
1      subroutine lwi(nl,netrad,deltapsi,deltap,coolrate)
2
3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
4c §§§§!!!  VERSION utilisable avec load_psi, 
5c          differente des versions *.1mat 
6c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
7      implicit none
8
9
10#include "dimensions.h"
11#include "dimphy.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     
42c Outputs
43c........
44
45      real    coolrate(nl)
46     
47c-------------------------------------------------------------------------
48c        0.2   local arrays
49c              ------------
50c
51      real    di(nl)
52     .      , spec(nl)
53     .      , hi(nl)
54     .      , bi(nl)
55
56      real    ci(nl)
57     .      , ai(nl)
58
59      real    deltat
60
61      real    semi,semit,denom
62
63      integer i,jl,band
64
65c************************************************************************
66c
67c        1.    Initialisations
68c              ---------------
69c
70c-----------------------------------------------------------------------
71        deltat = dtimerad
72c       print*,'SEMI = ',semi, '(expl:0  semi-implicite:0.5  impl:1)'
73c        semi  = 0.5
74c       semi = 0.5
75        semi = 1.
76        semit = semi * deltat
77
78c       print*,'dtimerad,deltat,semit:',dtimerad,deltat,semit
79
80c************************************************************************
81c
82c        2.   
83c              ---------------
84c
85c-------------------------------------------------------------------------
86c        2.1   Calcul des di
87c              -------------
88c
89
90      do i = 1 , nl-1
91        spec(i) =
92     .      ( deltapsi(i,nl+1)
93     .      + deltapsi(i,i+1)
94     .      + deltapsi(i,i-1) )
95     
96        di(i) =  1. + semit * (RG / deltap(i) / RCPD) * spec(i)
97c     print*,i,' di(i)=',di(i)
98      enddo
99         
100
101c couche nl
102c ------------
103c      , on enleve i,i+1 sinon on a 2 fois le cooling2space
104 
105        spec(nl) =
106     .      ( deltapsi(nl,nl+1)
107     .      + deltapsi(nl,nl-1) )
108     
109        di(nl) =  1. + semit * (RG / deltap(nl) / RCPD) * spec(nl)
110
111c-------------------------------------------------------------------------
112c        2.2   Calcul des hi
113c              -------------
114c
115
116      do i = 1 , nl-1
117     
118        spec(i) = deltapsi(i+1,i)
119
120        hi(i) = - semit * (RG / deltap(i) / RCPD) * spec(i)
121
122      enddo
123                       
124c     print*,'hi(i)',hi(i)
125
126c-------------------------------------------------------------------------
127c        2.3   Calcul des bi
128c              -------------
129c
130
131
132      do i = 2 , nl
133     
134        spec(i) = deltapsi(i-1,i)
135       
136        bi(i) = - semit * (RG / deltap(i) / RCPD) * spec(i)
137       
138      enddo
139
140c     print*,'bi(i)',bi(i)
141
142c couche 1
143c --------
144c  tant qu'on a pas un calcul propre de deltab(0) qui tienne compte de
145c    la discontinuite de temperature au sol , on met  b1 = 0
146
147     
148        bi(1) = 0
149
150c-------------------------------------------------------------------------
151c        2.4   
152c              -------------
153c
154
155c couche nl
156c ------------
157
158c     ci(nl) = ((RG/RCPD) * netrad(nl) / deltap(nl))
159c    .                   / di(nl)
160      ci(nl) = netrad(nl) *RG/RCPD / deltap(nl)
161
162      ai(nl) = - bi(nl) / di(nl)
163
164      do i = nl-1 , 1 , -1
165        denom = di(i) + hi(i) * ai(i+1)
166
167c       ci(i) = (  (RG/RCPD) * netrad(i) / deltap(i)
168c    .               - hi(i) * ci(i+1)  )  / denom
169        ci(i) = netrad(i) *RG/RCPD / deltap(i)
170 
171        ai(i) = -bi(i) / denom
172      enddo
173
174c-------------------------------------------------------------------------
175c        2.5   
176c              -------------
177c
178
179      coolrate(1) = ci(1)
180
181      do i = 2 , nl
182           coolrate(i) = ci(i) + ai(i) * coolrate(i-1)
183c       print*,i,' coolrate(i)=',coolrate(i)
184      enddo
185
186c-------------------------------------------------------------------------
187
188      RETURN
189      END
Note: See TracBrowser for help on using the repository browser.