source: trunk/LMDZ.VENUS/libf/phyvenus/lwi.F @ 937

Last change on this file since 937 was 892, checked in by slebonnois, 12 years ago

SL: Important commit ! Adaptation of Venus physics to parallel computation / template for arch on the LMD servers using ifort / documentation for 1D column physics and for parallel computations

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