source: trunk/LMDZ.TITAN/libf/phytitan/optci_1pt_3.F @ 881

Last change on this file since 881 was 808, checked in by slebonnois, 12 years ago

SL: Many changes for VENUS (related to newstart) and TITAN (related to clouds). Please read DOC/chantiers/commit_importants.log (cf v808).

File size: 13.7 KB
Line 
1      SUBROUTINE optci_1pt3(zqaer_1pt,rcdb,xfrb,iopti,IPRINT)
2      use dimphy
3      IMPLICIT NONE
4#include "dimensions.h"
5#include "microtab.h"
6#include "numchimrad.h"
7#include "clesphys.h"
8
9      integer nlayer, nlevel, nspeci, nspc1i, nspecv, nspc1v
10      real z,press, den, temp, ch4, xn2, h2, ar, xmu, gas1,
11     &     colden, c2h2, c2h6, hcn, radius, xnumb, reali
12     &     ximgi, realv, ximgv, rcldi, xicldi, rcldv, xicldv, rcldi2,
13     &     xicldi2, rcldv2, xicldv2,real bwni, wnoi, dwni, wlni, csubp,
14     &     rsfi, rsfv, f0pi, rhch4, fh2, fhaze, fhvis
15     &     reali, ximgi, bwni, fhir, taufac, rcloud, fargon, rgas, rhop,
16     &     pi, sigma, prod,reali,fhvis
17
18      integer k, j,inq
19
20      real tbar, pbar, bmu, coef1, effg, taeros, taeroscat, cbar,
21     &     qext, qsct, qabs, qbar, xmono, xrule, deltaz, tnuext,
22     &     tnuscat, cnbar, qextc, qsctc, qabsc, qbarc, taugas, pnn,
23     &     pcc, pcn, phn, kgas, u, ig, tau2, tlimit
24
25      PARAMETER(NLAYER=llm,NLEVEL=NLAYER+1)
26      PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25)
27
28c   Arguments:
29c   ---------
30      integer IPRINT,iopti
31C iopti: premier appel, on ne calcule qu'une fois les QM et QF
32* nrad dans microtab.h
33      real   zqaer_1pt(NLAYER,2*nrad)
34#include "optci_1pt.h"
35c   ---------
36
37      COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL)
38
39      COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL)
40     & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER)
41
42      COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER)
43      COMMON /STRAT2/ HCN(NLAYER)
44
45      COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER)
46     & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV)
47
48      COMMON /CLOUD/
49     &               RCLDI(NSPECI), XICLDI(NSPECI)
50     &             , RCLDV(NSPECV), XICLDV(NSPECV)
51     &             , RCLDI2(NSPECI), XICLDI2(NSPECI)
52     &             , RCLDV2(NSPECV), XICLDV2(NSPECV)
53
54      COMMON /SPECTI/ BWNI(NSPC1I), WNOI(NSPECI),
55     &                DWNI(NSPECI), WLNI(NSPECI)
56
57      COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI
58      COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON
59      COMMON /CONST/RGAS,RHOP,PI,SIGMA
60      COMMON /part/v,rayon,vrat,dr,dv
61
62      DIMENSION PROD(NLEVEL)
63* nrad dans microtab.h
64      real v(nrad),rayon(nrad),vrat,dr(nrad),dv(nrad)
65      real xv1(klev,nspeci),xv2(klev,nspeci)
66      real xv3(klev,nspeci)
67      REAL QF1(nrad,NSPECI),QF2(nrad,NSPECI)
68      REAL QF3(nrad,NSPECI),QF4(nrad,NSPECI)
69      REAL QM1(nrad,NSPECI),QM2(nrad,NSPECI)
70      REAL QM3(nrad,NSPECI),QM4(nrad,NSPECI)
71      REAL QC1(nrad,NSPECI),QC2(nrad,NSPECI)
72      REAL QC3(nrad,NSPECI),QC4(nrad,NSPECI)
73      real emu
74      REAL TAEROSM1(NSPECI),TAEROSCATM1(NSPECI),DELTAZM1(NSPECI)
75
76c ---- nuages     
77      REAL TNUAGE,TNUAGESCAT
78      REAL rcdb(nlayer),xfrb(nlayer,4)
79
80      save qf1,qf2,qf3,qf4,qm1,qm2,qm3,qm4,qc1,qc2,qc3,qc4
81
82
83C THE PRESSURE INDUCED TRANSITIONS ARE FROM REGIS
84C THE LAST SEVENTEEN INTERVALS ARE THE BANDS FROM GNF.
85C
86C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE INFRARED
87C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE IR
88C LAYER: WBAR, DTAU, COSBAR
89C LEVEL: TAU
90C
91
92        DO 80 K=1,NSPECI
93           TAUHI_1pt(K)=0.
94           TAUCI_1pt(K)=0.
95           TAUGI_1pt(K)=0.
96 80     CONTINUE
97
98c************************************************************************
99          DO 100 J=1,NLAYER    ! BOUCLE SUR L'ALTITUDE
100c************************************************************************
101c      print*,'ig,k,j ',ig,k,j
102
103C SET UP THE COEFFICIENT TO REDUCE MASS PATH TO STP ...SEE NOTES
104C T0 =273.15   PO=1.01325 BAR
105
106        TBAR=0.5*(TEMP(J)+TEMP(J+1))
107        PBAR=SQRT(PRESS(J)*PRESS(J+1))
108        BMU=0.5*(XMU(J+1)+XMU(J))
109c attention ici, Z en km doit etre passe en m
110        COEF1=RGAS*273.15**2*.5E5* (PRESS(J+1)**2 - PRESS(J)**2)
111     & /(1.01325**2 *EFFG(Z(J)*1000.)*TBAR*BMU)
112
113      IF (IPRINT .GT. 9) WRITE(6,21) J,EFFG(Z(J)*1000.),TBAR,BMU,COEF1
114 21   FORMAT(' J, EFFG, TBAR, BMU, COEF1,: ',I3,1P6E10.3)
115
116c------------------------------------------------------------------------
117         DO 101 K=1,NSPECI     ! BOUCLE SUR LES L.D'O
118c------------------------------------------------------------------------
119
120
121C #1:             HAZE
122C---------------------
123
124C FIRST COMPUTE TAU AEROSOL
125
126
127c
128c                    /\
129c                   /  \
130c                  /    \
131c                 / _O   \
132c                / |/     \
133c               /  / \     \
134c              /   |\ \/\   \
135c             /    || /  \   \
136c             ----------------
137c            |     WARNING    |
138c            |    SLOW DOWN   |
139c             ----------------
140
141
142
143
144c*********** EN TRAVAUX ***************************
145
146         TAEROS=0.
147         TAEROSCAT=0.
148         CBAR=0.
149
150
151      DO inq=1,nrad         !BOUCLE SUR LES TAILLE D"AEROSOLS
152
153
154      IF (WNOI(K).lt.wco) THEN    ! lamda > 56 um
155
156           if (iopti.eq.0) then
157
158c          CALL XMIE(rayon(inq)*1.e6,REALI(K),XIMGI(K),
159c    &     QEXT,QSCT,QABS,QBAR,WNOI(K))
160
161           CALL CMIE(1.E-2/WNOI(K),REALI(K),XIMGI(K),rayon(inq),
162     &     QEXT,QSCT,QABS,QBAR)
163
164
165           QM1(inq,K)=QEXT
166           QM2(inq,K)=QSCT
167           QM3(inq,K)=QABS
168           QM4(inq,K)=QBAR
169
170          endif         ! end iopti
171
172
173      TAEROS=QM1(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4+TAEROS
174      TAEROSCAT=QM2(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4+TAEROSCAT
175      CBAR=CBAR+QM4(inq,K)*QM2(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4
176
177
178         ELSE                           ! 0.2 < lambda < 56 um
179
180
181            if(rayon(inq).lt.RF(inq)) THEN
182
183              if (iopti.eq.0) then
184
185                   CALL XMIE(rayon(inq)*1.e6,REALI(K),XIMGI(K),
186     &             QEXT,QSCT,QABS,QBAR,WNOI(K))
187
188              QM1(inq,K)=QEXT
189              QM2(inq,K)=QSCT
190              QM3(inq,K)=QABS
191              QM4(inq,K)=QBAR
192              endif         ! end iopti
193
194
195        TAEROS=QM1(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4+TAEROS
196        TAEROSCAT=QM2(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4+TAEROSCAT
197        CBAR=CBAR+QM4(inq,K)*QM2(inq,K)*zqaer_1pt(nlayer+1-J,inq)*1.e-4
198
199           else
200
201               XMONO=(rayon(inq)/RF(inq))**3.
202               XRULE=1.
203
204            if(XMONO.gt.16384./1.5) then
205             XRULE=(XMONO/16384.)
206             XMONO=16384.
207            endif
208
209
210             if (iopti.eq.0) then
211
212c       CALL OPTFRAC(XMONO,10000./WNOI(K)
213c     &                         ,QEXT,QSCT,QABS,QBAR)
214
215
216       CALL CFFFV11(1.e-2/WNOI(K),REALI(K),XIMGI(K),RF(inq),2.
217     &                ,XMONO,QSCT,QEXT,QABS,QBAR)
218
219
220              QF1(inq,K)=QEXT*XRULE
221              QF2(inq,K)=QSCT*XRULE
222              QF3(inq,K)=QABS*XRULE
223              QF4(inq,K)=QBAR
224             endif         ! end iopti
225
226        TAEROS=QF1(inq,K)*zqaer_1pt(nlayer+1-J,inq)+TAEROS
227        TAEROSCAT=QF2(inq,K)*zqaer_1pt(nlayer+1-J,inq)+TAEROSCAT
228        CBAR=CBAR+QF4(inq,K)*QF2(inq,K)*zqaer_1pt(nlayer+1-J,inq)
229
230           endif
231
232               IF(TAEROS.LT.1.e-10) TAEROS=1.e-10
233
234         ENDIF
235       ENDDO             ! FIN DE LA BOUCLE SUR nrad
236
237
238
239
240        CBAR=CBAR/TAEROSCAT
241
242        DELTAZ=Z(J)-Z(J+1)
243
244c --------------------------------------------------------------------
245c profil brume Pascal: fit T (sauf tropopause) et albedo
246c -------------------
247        if( cutoff.eq.1) then
248         IF(PRESS(J).gt.9.e-3) THEN
249          TAEROS=TAEROSM1(K)*DELTAZ/DELTAZM1(K)*0.85
250          TAEROSCAT=TAEROSCATM1(K)*DELTAZ/DELTAZM1(K)*0.85
251c         TAEROS=0.
252c         TAEROSCAT=0.
253         ENDIF
254
255         IF(PRESS(J).gt.1.e-1) THEN
256          TAEROS=TAEROSM1(K)*DELTAZ/DELTAZM1(K)*1.15
257          TAEROSCAT=TAEROSCATM1(K)*DELTAZ/DELTAZM1(K)*1.15
258c         TAEROS=0.
259c         TAEROSCAT=0.
260         ENDIF
261        endif !cutoff=1
262
263c profil brume pour fit T (y compris tropopause), mais ne fit plus albedo...
264c -----------------------
265        if( cutoff.eq.2) then
266         IF(PRESS(J).gt.1.e-1) THEN
267          TAEROS=0.
268          TAEROSCAT=0.
269         ENDIF
270        endif !cutoff=2
271c --------------------------------------------------------------------
272
273         TAEROSM1(K)=TAEROS
274         TAEROSCATM1(K)=TAEROSCAT
275         DELTAZM1(K)=DELTAZ
276
277
278      IF(TAEROSCAT.le.0.) CBAR=0.
279
280c     print*,'HERE, MCKAY AEROSOLS IR'
281c     TAEROS=xv1(j,k)
282c     TAEROSCAT=xv2(j,k)
283c     CBAR=xv3(j,k)
284
285c     if (ig.eq.1) then
286c     if (k.eq.NSPECV/2) then
287c      print*,'@IR',K,J,TAEROS,TAEROSCAT,CBAR
288c     stop'Pour faire des comparaisons'
289c     endif
290c     endif
291
292
293c*********** EN TRAVAUX ***************************
294
295C #2:         CLOUD
296C------------------
297C NEXT COMPUTE TAU CLOUD
298c
299c  Menu special :
300c  On utilise ici une look-up table afin de calculer
301c  les proprietes optique des nuages.
302c  Le principe est le suivant :
303c  La look-up table contient les proprietes optique d'une goutte
304c  de methane pur de 3 um.
305c  On approxime les proprietes optiques pour une goutte de rayon r a
306c  de la table.
307c
308c
309        TNUEXT=0.
310        TNUSCAT=0.
311        CNBAR=0.
312        IF (clouds.eq.1) THEN
313
314          CALL getoptcld(1.E-2/WNOI(K),rcdb(nlayer+1-J),
315     &                   QEXTC,QSCTC,QABSC,QBARC)
316
317
318c ----- On ne calcule les constante optiques que si Rgoutte > 1e-10
319          IF (rcdb(nlayer+1-J).gt.1.1e-10) THEN
320            TNUEXT =QEXTC/xnuf*SUM(zqaer_1pt(NLAYER+1-J,nrad+1:2*nrad))
321            TNUSCAT=QSCTC/xnuf*SUM(zqaer_1pt(NLAYER+1-J,nrad+1:2*nrad))
322            CNBAR  =QBARC
323          ENDIF
324
325          IF(TNUSCAT.EQ.0.) THEN
326            CNBAR=0.
327          ELSE
328            CNBAR=CNBAR/TNUSCAT
329          ENDIF
330
331        ENDIF    ! Cond CLD
332c
333C #3:          GAZ
334C------------------
335
336C NOW COMPUTE TAUGAS DUE TO THE PIA TERM ONLY FOR LAMDA LT 940
337       TAUGAS=0.0
338       IF (WNOI(K) .LT. 940. ) THEN
339c        if(ig.eq.1.and.k.eq.nspecv/2) print*,'avant PIA'
340                 CALL PIA(K,TBAR,PNN,PCC,PCN,PHN)
341c        if(ig.eq.1.and.k.eq.nspecv/2) print*,'apres PIA'
342C HERE IS WHERE WE COULD SCALE THE PIA COEFFICEINTS TO FIT DATA
343C BASED ON REGIS' NOTES. ---TGM HAS THIS ADJUST IN IT AS DEFAULT
344                 PCN=PCN*MIN(1.75 , AMAX1(1.0,WNOI(K)/200.))
345C***REPLACE ABOVE WITH: PCN=PCN*1.25*MIN(1.75 , AMAX1(1.0,WNOI(K)/200.))
346C 1.25 FACTOR (NOT FROM DATA) SUGGESTED BY TOON et al. (1988)
347                 TAUGAS=COEF1*
348     &           (XN2(J)*XN2(J)*PNN + CH4(J)*CH4(J)*PCC
349     &           + XN2(J)*CH4(J)*PCN + XN2(J)*H2(J)*PHN)
350            IF (J .EQ. NLAYER .AND. IPRINT .GT. 9)
351     &          WRITE (6,22) WNOI(K),TAUGAS,XN2(J),CH4(J),H2(J),
352     &          TBAR, PNN,PCC,PCN, PHN,
353     &          XN2(J)*XN2(J)*PNN , CH4(J)*CH4(J)*PCC ,
354     &          XN2(J)*CH4(J)*PCN , XN2(J)*H2(J)*PHN
355 22             FORMAT(1X,1P8E10.2)
356       ENDIF
357
358       IF (K .GT. 28) THEN
359                KGAS=K-28
360C     ??FLAG? HERE MUST BE WATCHED CAREFULLY
361                     U=COLDEN(J)*6.02204E23/BMU
362          if(ig.eq.1.and.k.eq.nspecv/2) print*,'Avant GAS2'
363                     if((ylellouch).or.(.not.hcnrad)) then
364                       CALL GAS2_NOHCN(J, KGAS,TBAR,PBAR,U,TAU2)
365                     else
366                       CALL GAS2(J, KGAS,TBAR,PBAR,U,TAU2)
367                     endif
368          if(ig.eq.1.and.k.eq.nspecv/2) print*,'Apres GAS2'
369                     TAUGAS=TAUGAS+TAU2
370       ENDIF
371C
372
373      DTAUI_1pt(J,K)=TAUGAS+TAEROS+TNUEXT
374      DTAUIP_1pt(J,K)=TAUGAS+TAEROS
375
376      TAUHI_1pt(K)=TAUHI_1pt(K) + TAEROS
377      TAUHID_1pt(J,K)=TAUHI_1pt(K)
378
379      TAUGI_1pt(K)=TAUGI_1pt(K) + TAUGAS
380      TAUGID_1pt(J,K)=TAUGI_1pt(K)
381
382      TAUCI_1pt(K)=TAUCI_1pt(K) + TNUEXT
383      TAUCID_1pt(J,K)=TAUCI_1pt(K)
384 
385C ??FLAG? SERIOUS PROBLEM WITH THE CODE HERE!
386
387      TLIMIT=1.E-16
388
389
390      IF (TAEROSCAT + TNUSCAT .GT. 0.) THEN
391         COSBI_1pt(J,K)=(CBAR*TAEROSCAT + CNBAR*TNUSCAT )
392     &                     /(TAEROSCAT + TNUSCAT)
393      ELSE
394         COSBI_1pt(J,K)=0.0
395      ENDIF
396
397      IF (TAEROSCAT  .GT. 0.) THEN
398         COSBIP_1pt(J,K)=(CBAR*TAEROSCAT)
399     &                     /(TAEROSCAT)
400      ELSE
401         COSBIP_1pt(J,K)=0.0
402      ENDIF
403
404*---------
405
406      IF (DTAUI_1pt(J,K) .GT.  TLIMIT) THEN
407          WBARI_1pt(J,K)=(TAEROSCAT+TNUSCAT) /DTAUI_1pt(J,K)
408      ELSE
409         WBARI_1pt(J,K)=0.0
410         DTAUI_1pt(J,K)=TLIMIT
411      ENDIF
412
413      IF (DTAUIP_1pt(J,K) .GT.  TLIMIT) THEN
414          WBARIP_1pt(J,K)=(TAEROSCAT) /DTAUIP_1pt(J,K)
415      ELSE
416         WBARIP_1pt(J,K)=0.0
417         DTAUIP_1pt(J,K)=TLIMIT
418      ENDIF
419
420
421c     IF (IPRINT .GT. 9)
422c    & WRITE(6,73)J,K,TAUGAS,TAEROS,QEXT,QSCT
423  73           FORMAT(2I3,1P8E10.3)
424 
425
426c------------------------------------------------------------------------
427 101  CONTINUE   ! FIN BOUCLE L D'O
428c------------------------------------------------------------------------
429 
430      iopti=1
431
432c************************************************************************
433 100  CONTINUE   ! FIN BOUCLE ALTITUDE
434c************************************************************************
435 
436        DO 119 K=1,NSPECI
437           TAUI_1pt(1,K)=0.0
438           TAUIP_1pt(1,K)=0.0
439        DO 119 J=1,NLAYER
440           TAUI_1pt(J+1,K)=TAUI_1pt(J,K)+DTAUI_1pt(J,K)
441           TAUIP_1pt(J+1,K)=TAUIP_1pt(J,K)+DTAUIP_1pt(J,K)
442 119    CONTINUE
443
444c      IF (IPRINT .GT. 2) THEN
445c          WRITE (6,120)
446c  120      FORMAT(///'  OPTICAL CONSTANTS IN THE INFRARED')
447
448c        DO 200 K=1,NSPECI           ! #2
449c          WRITE (6,190)
450c          WRITE (6,210)K,WLNI(K),WNOI(K),BWNI(K)
451c    &    ,BWNI(K)+DWNI(K),DWNI(K)
452c          WRITE (6,230)REALI(K),XIMGI(K)
453
454c        DO 195 J=1,NLAYER         !   #3
455c          WRITE (6,220)XNUMB(J), WBARI_1pt(J,K),COSBI_1pt(J,K)
456c    &                          , DTAUI_1pt(J,K),TAUI_1pt(J,K)
457c 195    CONTINUE
458
459c        IF(ig.eq.12) WRITE (6,240) TAUI_1pt(NLEVEL,K)
460c 200    CONTINUE
461
462c          END IF
463
464
465c  210 FORMAT(1X,I3,F10.3,F10.2,F10.2,'-',F8.2,F10.3)
466c  190 FORMAT(1X//'  SNUM  MICRONS   WAVENU   INTERVAL    DELTA-WN')
467c  230 FORMAT(1X,'NREAL(LAYER)= ',1PE10.3,' NIMG(LAYER)= ',E10.3/
468c     &' #AEROSOLS   WBAR  COSBAR DTAU TAU')
469c  220 FORMAT(5(1X,G9.3))
470c  240 FORMAT(41X,G9.3)
471
472      RETURN
473      END
Note: See TracBrowser for help on using the repository browser.