source: trunk/LMDZ.VENUS/libf/phyvenus/molvis.F @ 1396

Last change on this file since 1396 was 1310, checked in by slebonnois, 11 years ago

SL: VENUS VERTICAL EXTENSION. NLTE and thermospheric processes, to be run with 78 levels and specific inputs.

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