source: trunk/MESOSCALE/LMDZ.MARS/libf_gcm/aeronomars/conduction.F @ 932

Last change on this file since 932 was 57, checked in by aslmd, 14 years ago

mineur LMD_MM_MARS: ajout du GCM ancienne physique, systeme maintenant complet sur SVN (ne manque que la base de donnees d'etats initiaux)

File size: 4.9 KB
Line 
1       SUBROUTINE conduction(ptimestep,pplay,pplev,pt,pdt,
2     $                   tsurf,zzlev,zzlay,zdtconduc)
3
4      IMPLICIT NONE
5
6c=======================================================================
7c
8c   Molecular thermal conduction
9c   
10c   N. Descamp, F. Forget 05/1999
11c
12c=======================================================================
13
14c-----------------------------------------------------------------------
15c   declarations:
16c-----------------------------------------------------------------------
17
18#include "dimensions.h"
19#include "dimphys.h"
20#include "comcstfi.h"
21#include "surfdat.h"
22#include "chimiedata.h"
23#include "conc.h"
24
25c   arguments:
26c   ----------
27
28      REAL ptimestep
29      REAL pplay(ngridmx,nlayermx)
30      real pplev(ngridmx,nlayermx+1)
31      REAL zzlay(ngridmx,nlayermx)
32      real zzlev(ngridmx,nlayermx+1)
33      REAL pt(ngridmx,nlayermx)
34      real pdt(ngridmx,nlayermx)
35      real tsurf(ngridmx)
36
37      real zdtconduc(ngridmx,nlayermx)
38
39c   local:
40c   ------
41
42      INTEGER i,ig,l, ngrid, nz
43      real Akk,skk,phitop,m,tmean
44      REAL alpha(nlayermx)
45      real zt(nlayermx)
46      REAL lambda(nlayermx)
47      real muvol(nlayermx)
48      REAL C(nlayermx)
49      real D(nlayermx)
50      real den(nlayermx)
51      REAL pdtc(nlayermx)
52      real zlay(nlayermx)
53      real zlev(nlayermx+1)
54
55c   constants used locally
56c    ---------------------
57c     The atmospheric conductivity is a function of temperature T :
58c      conductivity = Akk* T**skk
59      PARAMETER (skk=0.69)
60     
61      logical firstcall
62      save firstcall
63      data firstcall /.true./
64c-----------------------------------------------------------------------
65c   calcul des coefficients alpha et lambda
66c-----------------------------------------------------------------------
67
68      IF (firstcall) THEN
69        write (*,*)'conduction: coeff to compute molecular',
70     &             ' conductivity Akk,skk'
71        write(*,*) Akk,skk
72        firstcall = .false.
73      END IF
74
75! Initialize phitop
76      phitop=0.0
77     
78      ngrid=ngridmx
79      nz=nlayermx
80
81      do ig=1,ngrid
82
83        zt(1)=pt(ig,1)+pdt(ig,1)*ptimestep
84c        zlay(1)=-log(pplay(ig,1)/pplev(ig,1))*Rnew(ig,1)*zt(1)/g
85c        zlev(1)=0.0
86        zlay(1)=zzlay(ig,1)
87        zlev(1)=zzlev(ig,1)
88     
89        do i=2,nz
90
91          zt(i)=pt(ig,i)+pdt(ig,i)*ptimestep
92c          tmean=zt(i)
93c          if(zt(i).ne.zt(i-1))
94c     &    tmean=(zt(i)-zt(i-1))/log(zt(i)/zt(i-1))
95c          zlay(i)= zlay(i-1)
96c     &          -log(pplay(ig,i)/pplay(ig,i-1))*Rnew(ig,i-1)*tmean/g
97c          zlev(i)= zlev(i-1)
98c     &         -log(pplev(ig,i)/pplev(ig,i-1))*Rnew(ig,i-1)*tmean/g
99        zlay(i)=zzlay(ig,i)
100        zlev(i)=zzlev(ig,i)
101        enddo
102       
103c        zlev(nz+1)= zlev(nz)
104c     &         -log(max(pplev(ig,nz+1),1.e-30)/pplev(ig,nz))
105c     &           *Rnew(ig,nz)*tmean/g
106c        if(pplev(ig,nz+1).eq.0.)
107c     &     zlev(nz+1)=zlev(nz)+(zlay(nz)-zlay(nz-1))
108     
109        zlev(nz+1)= zlev(nz)+10000.
110
111        Akk=Akknew(ig,1)
112        lambda(1) = Akk*tsurf(ig)**skk/zlay(1)   
113
114        DO i = 2 , nz
115          Akk=Akknew(ig,i)
116          lambda(i)=Akk*zt(i)**skk/(zlay(i)-zlay(i-1))
117        ENDDO
118        DO i=1,nz-1
119          muvol(i)=pplay(ig,i)/(rnew(ig,i)*zt(i))
120          alpha(i)=cpnew(ig,i)*(muvol(i)/ptimestep)
121     $                        *(zlev(i+1)-zlev(i))
122        ENDDO
123
124        muvol(nz)=pplay(ig,nz)/(rnew(ig,nz)*zt(nz))
125        alpha(nz)=cpnew(ig,i)*(muvol(nz)/ptimestep)
126     $                       *(zlev(nz+1)-zlev(nz))
127
128c--------------------------------------------------------------------
129c
130c     calcul des coefficients C et D
131c
132c-------------------------------------------------------------------
133
134      den(1)=alpha(1)+lambda(2)+lambda(1)
135      C(1)=lambda(1)*(tsurf(ig)-zt(1))+lambda(2)*(zt(2)-zt(1))
136      C(1)=C(1)/den(1)       
137      D(1)=lambda(2)/den(1)           
138   
139      DO i = 2,nz-1
140        den(i)=alpha(i)+lambda(i+1)
141        den(i)=den(i)+lambda(i)*(1-D(i-1))
142         
143        C(i) =lambda(i+1)*(zt(i+1)-zt(i))
144     $       +lambda(i)*(zt(i-1)-zt(i)+C(i-1))   
145        C(i) =C(i)/den(i)           
146
147        D(i) =lambda(i+1) / den(i)
148      ENDDO
149
150      den(nz)=alpha(nz) + lambda(nz) * (1-D(nz-1))
151      C(nz)=C(nz-1)+zt(nz-1)-zt(nz)
152      C(nz)=(C(nz)*lambda(nz)+phitop) / den(nz)
153               
154c----------------------------------------------------------------------
155c
156c      calcul de la nouvelle temperature ptconduc
157c
158c----------------------------------------------------------------------
159
160      DO i=1,nz
161        pdtc(i)=0.
162      ENDDO
163      pdtc(nz)=C(nz)
164      DO i=nz-1,1,-1
165        pdtc(i)=C(i)+D(i)*pdtc(i+1)
166      ENDDO
167c-----------------------------------------------------------------------
168c
169c     calcul de la tendance zdtconduc
170c
171c-----------------------------------------------------------------------
172   
173      DO i=1,nz
174        zdtconduc(ig,i)=pdtc(i)/ptimestep
175      ENDDO
176
177      ENDDO             ! boucle sur ngrid
178      RETURN
179      END
Note: See TracBrowser for help on using the repository browser.