source: trunk/LMDZ.TITAN/libf/phytitan/cooling.F @ 1243

Last change on this file since 1243 was 888, checked in by slebonnois, 12 years ago

SL: small modifications to the tools, to Venus default .def files and to outputs (including forgotten modifications linked to the 1D); + bug corrections in phytitan

File size: 9.7 KB
RevLine 
[175]1      SUBROUTINE COOLING(NG,NL,PRESS,TEMP,Z,Q0,lwnet,pfluxi,icld)
[3]2
3c=======================================================================
4c
5c   Author :  C. P. Mc Kay            01/02/91
6c   ------
7c
8c   Object :
9c   --------
10c
11C THIS SUBROUTINE RETURNS THE COOLING RATE IN TITAN'S ATMOSPHERE
12C INPUTS ARE PRESS(BARS), TEMP(K), Z(KM)
13C OUTPUT IS: Q(K/SEC)C
14C
15C COOLING RATE COMPUTED NEGLECTING SCATTERING.
16C THE TRICK OF THIS ROUTINE IS THAT IT READS IN THE OPACITIES
17C FOR EACH LAYER AT EACH WAVENUMBER IN THE SPECTRAL DOMAIN
18C THESE OPACITIES ARE HELD CONSTANT WITH TEMPERATURE AND TIME.
19c
20c   Interface:
21c   ----------
22c
23c   Arguments:
24c   ----------
25c
26c      input:
27c      ------
28c
29c      nl               number of levels
30c      press(nl)        pressure levels (layers)
31c      temp(nl)         temperature (layers)
32c      z(nl)            altitude   (m, levels)
33c
34c      output:
35c      -------
36c
37c      q0(nl-1)         radiative cooling in K/sec
38c      lwnet(nl)        net fluxes, (+) upward
39c      pfluxi          IR descendant a la surface (+ vers le bas)
40c
41c   Commons:
42c   --------
43c
44c     COMMON/IRTAUS/dtaui(nlayer,nspeci)
45c     infrared opacities of the differents layers for differents
46c     spectral ranges. This common is initialized by radtitan.
47c   
[495]48c     COMMON /PLANT/ CSUBP,F0PI
[306]49c     This common is initialized by tgmdat.
50c
[3]51c=======================================================================
52c-----------------------------------------------------------------------
53c   Declarations:
54c   ------------
55
[102]56      use dimphy
57      IMPLICIT NONE
[3]58#include "dimensions.h"
59#include "YOMCST.h"
[808]60#include "clesphys.h"
[3]61      INTEGER NLAYER,NSPECI,NSPC1I
62      PARAMETER(NLAYER=llm)
63      PARAMETER (NSPECI=46,NSPC1I=47)
64
[104]65c  ASTUCE POUR EVITER klon... EN ATTENDANT MIEUX
66      INTEGER   ngrid
67      PARAMETER (ngrid=(jjm-1)*iim+2)  ! = klon
68c
[3]69c   Arguments:
70c   ----------
71
[175]72      INTEGER NG,NL,icld
73      REAL PRESS(NG,NL),TEMP(NG,NL)
74      REAL Z(NG,NL),Q0(NG,NL-1)
75      REAL lwnet(NG,NL),UBARI2
76      real pfluxi(NG)
[3]77
78
79c   Common:
80c   -------
81
82C DTAU IS PASSED EN-MASS, SO ITS DEMENSIONS ARE CRITICAL
[175]83      REAL dtaui(ngrid,NLAYER,NSPECI)
84      REAL dtauip(ngrid,NLAYER,NSPECI)
85      COMMON /IRTAUS/ dtaui,dtauip
[3]86
[495]87      COMMON /PLANT/ CSUBP,F0PI
88      REAL CSUBP,F0PI
[306]89
[3]90c   Local:
91c   ------
92
93      REAL WNOI(NSPECI),DWNI(NSPECI)   ! SPECTAL INTERVALS
[104]94      REAL B0(ngrid,llm+1)
95      REAL EM(ngrid,llm+1)
[3]96      REAL DW,WAVEN,TJ,BSURF,QOUT,QIN,eff_g,COLDEN
97
[175]98      INTEGER ig,K,J,I,L
[3]99
100c     EXTERNAL PLNCK
101      REAL PLNCK,zz1,zz2,zz3,zz4,WAVNUM,Xtest
102
103      REAL FNETIS(ngrid,llm+1),FNETI(ngrid,llm+1)
104      REAL FDIS(ngrid,llm+1,nspeci),FUPIS(ngrid,llm+1,nspeci)
105      REAL FDI(ngrid,llm+1), FUPI(ngrid,llm+1)
106
107c   Data:
108c   -----
109
[306]110      REAL RHOP,UBARI
[3]111      DATA RHOP/1.E4/      ! CONVERSION FROM PRESSURE TO MASS
112      DATA UBARI/0.5/      ! MEAN COSINE FOR 2-STREAM
113      DATA WNOI/
114     &    11.500,    20.000,    31.250,    50.000,    75.000,
115     &   100.000,   125.000,   150.000,   175.000,   200.000,
116     &   225.000,   250.000,   275.000,   300.000,   325.000,
117     &   350.000,   375.000,   400.000,   425.000,   450.000,
118     &   475.000,   500.000,   525.000,   550.000,   575.000,
119     &   600.000,   628.750,   662.838,   681.757,   683.919,
120     &   686.541,   689.623,   692.704,   695.786,   715.141,
121     &   733.836,   735.597,   737.358,   739.119,   742.720,
122     &   748.160,   753.600,   834.560,   917.333,   926.400,
123     &   935.466/
124      DATA DWNI/
125     &     7.000,    10.000,    12.500,    25.000,    25.000,
126     &    25.000,    25.000,    25.000,    25.000,    25.000,
127     &    25.000,    25.000,    25.000,    25.000,    25.000,
128     &    25.000,    25.000,    25.000,    25.000,    25.000,
129     &    25.000,    25.000,    25.000,    25.000,    25.000,
130     &    25.000,    32.500,    35.676,     2.162,     2.162,
131     &     3.082,     3.082,     3.082,     3.082,    35.629,
132     &     1.761,     1.761,     1.761,     1.761,     5.440,
133     &     5.440,     5.440,   156.480,     9.067,     9.067,
134     &     9.067/
135
136
[306]137      save RHOP,UBARI,WNOI,DWNI
[3]138
[888]139      REAL effg    ! effg est une fonction(z en m)
140
[3]141c-----------------------------------------------------------------------
142
143c   Initialisations:
144c   ----------------
145
146      UBARI2=1./1.66
147      UBARI2=UBARI
148
149C ZERO THE NET FLUXES
150         Q0    = 0.0
151         lwnet = 0.0
152
153c-----------------------------------------------------------------------
154C WE NOW ENTER A MAJOR LOOP OVER SPECRAL INTERVALS IN THE INFRARED
155C TO CALCULATE THE NET FLUX IN EACH SPECTRAL INTERVAL
156c-----------------------------------------------------------------------
157
158       DO 2000 K=1,NSPECI    ! *** START OF SPECTRAL LOOP
159
160c-----------------------------------------------------------------------
161C SET UP ALTITIDUE PARAMETERS
162
163          WAVEN=WNOI(K)
164          DW=DWNI(K)
165          zz1=DW/(2.*2)
166          EM = 0.
167          B0 = 0.
168
[175]169          DO J=1,NL-1
170             DO ig=1,NG
[3]171                TJ=TEMP(ig,J)
172
173   
174C  Modif: in-lining de la fonction planck pour vectorisation
175C               B0(ig,J)=PLNCK(WAVEN,TJ,DW)
176C     FUNCTION PLNCK(WAV,T,DW)
177C* PLNCK FUNCTION RETURNS B IN CGS UNITS, ERGS CM-2 WAVENUMBER-1
178C* WAVNUM IS WAVENUMBER IN CM-1
179C* T IS IN KELVIN
180                PLNCK=0.
181                DO I=-2,2,1
182                   WAVNUM=WAVEN + I*zz1
183                   zz2=EXP(-1.4388 * WAVNUM/TEMP(ig,J))
184                   zz3=WAVNUM*WAVNUM*WAVNUM
185                   PLNCK=PLNCK+1.191E-5* zz3*zz2/(1.-zz2)
186                ENDDO
187                B0(ig,J)=.2*PLNCK
188             ENDDO
189
[175]190             IF (ICLD.EQ.1) THEN
191               DO ig=1,NG
192                 zz4=EXP(-DTAUI(ig,J,K)/UBARI2)
193                 EM(ig,J)=zz4
194               ENDDO
195             ELSE
196               DO ig=1,NG
197                 zz4=EXP(-DTAUIP(ig,J,K)/UBARI2)
198                 EM(ig,J)=zz4
199               ENDDO
200             ENDIF
[3]201          ENDDO
202
203c-----------------------------------------------------------------------
204C CALCULATE THE DOWNWELLING RADIATION AT THE TOP OF THE MODEL
205C OR THE TOP LAYER WILL COOL TO SPACE UNPHYSICALLY
206
207           FDI  =0.
208           FDIS =0.
209           FUPI =0.
210           FUPIS=0.
211
[175]212        DO 2220 J=1,NL-1
213           DO 2230 ig=1,NG
[3]214              FDI(ig,J+1) = FDI(ig,J)*EM(ig,J) + 2.*RPI*UBARI*
215     &        B0(ig,J)*(1.-EM(ig,J))
216              FDIS(ig,J+1,K) = FDIS(ig,J,K)*EM(ig,J) + 2.*RPI*UBARI*
217     &        B0(ig,J)*(1.-EM(ig,J))
2182230       CONTINUE
2192220    CONTINUE
220c     write(*,*)
221c     write(*,*) 'cooling : EM  =' ,
222c    & ((EM(i,l),l=1,nl),i=1,ngrid)
223c     write(*,*)
224c     write(*,*) 'cooling : B0  =' ,
225c    & ((B0(i,l),l=1,nl),i=1,ngrid)
226c     write(*,*)
227c     write(*,*) 'cooling : FDI =' ,
228c    & ((FDI(i,l),l=1,nl),i=1,ngrid)
229
230c-----------------------------------------------------------------------
231C UPWARD FLUXES: SURFACE EMISSIONS
232
[175]233        DO 2310 ig=1,NG
[3]234          PLNCK=0.
235          DO I=-2,2,1
236             WAVNUM=WAVEN + I*zz1
[175]237             zz2=EXP(-1.4388 * WAVNUM/TEMP(ig,NL))
[3]238             zz3=WAVNUM*WAVNUM*WAVNUM
239             PLNCK=PLNCK+1.191E-5* zz3*zz2/(1.-zz2)
240          ENDDO
[175]241c          BSURF=PLNCK( WAVEN, TEMP(ig,NL), DW)
[495]242           BSURF=.2*PLNCK*emis
243        FUPI(ig,NL)   =BSURF*2.*RPI*UBARI+(1-emis)*FDI(ig,NL)
244        FUPIS(ig,NL,K)=BSURF*2.*RPI*UBARI+(1-emis)*FDIS(ig,NL,K)
[3]2452310    CONTINUE
246c     write(*,*)
[175]247c     write(*,*) 'cooling : FUPI/NL =' ,
248c    & ((FUPI(i,l),l=nl,nl),i=1,NG)
[3]249c     write(*,*)
[175]250c     write(*,*) 'cooling : FDI/NL =' ,
251c    & ((FDI(i,l),l=nl,nl),i=1,NG)
[3]252
[175]253        DO 2320 J=NL-1,1,-1
254           DO 2330 ig=1,NG
[3]255              FUPI(ig,J) = FUPI(ig,J+1)*EM(ig,J) + 2.*RPI*UBARI*
256     &        B0(ig,J)*(1.-EM(ig,J))
257              FUPIS(ig,J,K) = FUPIS(ig,J+1,K)*EM(ig,J)+2.*RPI*UBARI*
258     &        B0(ig,J)*(1.-EM(ig,J))
2592330       CONTINUE
2602320    CONTINUE
261c     write(*,*)
262c     write(*,*) 'cooling : EM  =' ,
263c    & ((EM(i,l),l=1,nl),i=1,ngrid)
264c     write(*,*)
265c     write(*,*) 'cooling : B0  =' ,
266c    & ((B0(i,l),l=1,nl),i=1,ngrid)
267c     write(*,*)
268c     write(*,*) 'cooling : FUPI =' ,
269c    & ((FUPI(i,l),l=1,nl),i=1,ngrid)
270
271c compute the downward IR flux at the surface:
272c
[175]273          DO 3520 ig=1,NG
274             pfluxi(ig)=pfluxi(ig)+ DWNI(K)*FDI(ig,NL)
[3]2753520      CONTINUE
276
277c compute the net IR flux, (+) upward:
278c
[175]279          DO J=1,NL
280          DO ig=1,NG
[3]281             lwnet(ig,J)= lwnet(ig,J)+ DWNI(K)*(FUPI(ig,J)-FDI(ig,J))
282          ENDDO
283          ENDDO
284         
[175]285          DO 3210 J=1,NL-1
286             DO 3220 ig=1,NG
[3]287                QOUT=FUPI(ig,J) + FDI(ig,J+1)   ! OUT OF LAYER
288                QIN =FDI(ig,J)  + FUPI(ig,J+1)  ! INTO LAYER
289                Q0(ig,J)=Q0(ig,J)+(QOUT-QIN)*DWNI(K)
2903220         CONTINUE
2913210      CONTINUE
292
293c     write(*,*)
294c     write(*,*) 'cooling/loop : FUPI =' ,
295c    & ((FUPI(i,l),l=1,nl),i=1,ngrid)
296c     write(*,*)
297c     write(*,*) 'cooling : FDI  =' ,
298c    & ((FDI(i,l),l=1,nl),i=1,ngrid)
299c     write(*,*)
300c     write(*,*) 'cooling : Q0 =' ,
301c    & ((Q0(i,l),l=1,nl-1),i=1,ngrid)
302
303
304c-----------------------------------------------------------------------
305
3062000  CONTINUE ! *** END SPECTRAL INTERVAL COMPUTATIONS
307
308
309c-----------------------------------------------------------------------
310
311c   convertion erg/cm2 -> J/m2
[175]312      DO 3550 ig=1,NG
[3]313         pfluxi(ig)  = 1.e-3*pfluxi(ig)
314         lwnet(ig,:) = 1.e-3*lwnet(ig,:)
3153550  CONTINUE
316
317c     PRINT*,'flux IR'
318c     WRITE(*,'(8e10.2)') pfluxi
319
320C COMPUTE THE BASELINE COOLING RATE
321
[175]322       DO 3000 J=1,NL-1
[3]323C TURN THE Q'S INTO TIMESCALES.....
[175]324          DO 3300 ig=1,NG
[888]325          COLDEN = RHOP*(PRESS(ig,J+1)-PRESS(ig,J))/effg(Z(ig,J))
[3]326c            Q0(J) = (COLDEN * CSUBP )/Q0(J)
327             Q0(ig,J) = Q0(ig,J) / (COLDEN*CSUBP)
3283300      CONTINUE
3293000  CONTINUE
330
331c     write(*,*)
332c     write(*,*) 'cooling/end : Q0 ='
333c     write(*,*) ((Q0(k,l)*1e7,l=1,nl-1),k=1,ngrid)
334c-----------------------------------------------------------------------
335
336      RETURN
337      END
Note: See TracBrowser for help on using the repository browser.