source: trunk/libf/phytitan/optci.F @ 110

Last change on this file since 110 was 104, checked in by slebonnois, 14 years ago

SLebonnois: modification de makelmdz et create_make_gcm pour pouvoir
compiler la chimie titan. Pas de raison que ca gene les autres.
Dans cette version, les compilations de Venus et Titan fonctionnent.

Phytitan: modifications pour pouvoir compiler correctement.
Il ne manque plus que physiq.F a faire.

File size: 8.3 KB
Line 
1      SUBROUTINE OPTCI(ykim,qaer,nmicro,IPRINT)
2      use dimphy
3#include "dimensions.h"
4#include "microtab.h"
5#include "numchimrad.h"
6#include "clesphys.h"
7
8c   Arguments:
9c   ---------
10      REAL    ykim(klon,klev,nqtot)
11      real    qaer(klon,nlayer,nqtot)
12      integer nmicro
13c   ---------
14
15c  ASTUCE POUR EVITER klon... EN ATTENDANT MIEUX
16      INTEGER   ngrid
17      PARAMETER (ngrid=(jjm-1)*iim+2)  ! = klon
18c
19      PARAMETER(NLAYER=llm,NLEVEL=NLAYER+1)
20      PARAMETER (NSPECI=46,NSPC1I=47,NSPECV=24,NSPC1V=25)
21
22      COMMON /ATM/ Z(NLEVEL),PRESS(NLEVEL),DEN(NLEVEL),TEMP(NLEVEL)
23
24      COMMON /GASS/ CH4(NLEVEL),XN2(NLEVEL),H2(NLEVEL),AR(NLEVEL)
25     & ,XMU(NLEVEL),GAS1(NLAYER),COLDEN(NLAYER)
26
27      COMMON /STRATO/ C2H2(NLAYER),C2H6(NLAYER)
28      COMMON /STRAT2/ HCN(NLAYER)
29
30      COMMON /AERSOL/ RADIUS(NLAYER), XNUMB(NLAYER)
31     & , REALI(NSPECI), XIMGI(NSPECI), REALV(NSPECV), XIMGV(NSPECV)
32
33      COMMON /CLOUD/ RADCLD(NLAYER), XNCLD(NLAYER)
34     & , RCLDI(NSPECI), XICLDI(NSPECI), RCLDV(NSPECV), XICLDV(NSPECV)
35
36      COMMON /TAUS/   TAUHI(ngrid,NSPECI),TAUCI(ngrid,NSPECI),
37     &                TAUGI(ngrid,NSPECI),TAURV(ngrid,NSPECV),
38     &                TAUHV(ngrid,NSPECV),TAUCV(ngrid,NSPECV),
39     &                TAUGV(ngrid,NSPECV)
40
41      COMMON /TAUD/   TAUHID(ngrid,NLAYER,NSPECI)
42     &               ,TAUGID(ngrid,NLAYER,NSPECI)
43     &               ,TAUHVD(ngrid,NLAYER,NSPECV)
44     &               ,TAUGVD(ngrid,NLAYER,NSPECV)
45
46
47      COMMON /OPTICI/ DTAUI(ngrid,NLAYER,NSPECI)
48     &               ,TAUI (ngrid,NLEVEL,NSPECI)
49     &               ,WBARI(ngrid,NLAYER,NSPECI)
50     &               ,COSBI(ngrid,NLAYER,NSPECI)
51
52      COMMON /SPECTI/ BWNI(NSPC1I), WNOI(NSPECI),
53     &                DWNI(NSPECI), WLNI(NSPECI)
54
55      COMMON /PLANT/ CSUBP,RSFI,RSFV,F0PI
56      COMMON /ADJUST/ RHCH4,FH2,FHAZE,FHVIS,FHIR,TAUFAC,RCLOUD,FARGON
57      COMMON /CONST/RGAS,RHOP,PI,SIGMA
58      COMMON /part/v,rayon,vrat,dr,dv
59
60      DIMENSION PROD(NLEVEL)
61* nrad dans microtab.h
62      real v(nrad),rayon(nrad),vrat,dr(nrad),dv(nrad)
63      real xv1(klev,nspeci),xv2(klev,nspeci)
64      real xv3(klev,nspeci)
65      REAL QF1(nrad,NSPECI),QF2(nrad,NSPECI)
66      REAL QF3(nrad,NSPECI),QF4(nrad,NSPECI)
67      REAL QM1(nrad,NSPECI),QM2(nrad,NSPECI)
68      REAL QM3(nrad,NSPECI),QM4(nrad,NSPECI)
69      real emu
70      REAL TAEROSM1(NSPECI),TAEROSCATM1(NSPECI),DELTAZM1(NSPECI)
71     
72      save qf1,qf2,qf3,qf4,qm1,qm2,qm3,qm4
73
74      integer iopti,iwarning     ! iopti: premier appel, une seule boucle sur les l.d'o.
75      integer ig_,seulmtunpt
76      save iopti,iwarning,seulmtunpt
77      data iopti,iwarning,seulmtunpt/0,0,0/
78
79      real   zqaer_1pt(NLAYER,nrad)
80      real   TAUHID_1pt(NLAYER,NSPECI)
81      real   TAUGID_1pt(NLAYER,NSPECI)
82      real   TAUHI_1pt(NSPECI),TAUCI_1pt(NSPECI)
83      real   TAUGI_1pt(NSPECI)
84      real   DTAUI_1pt(NLAYER,NSPECI),TAUI_1pt(NLEVEL,NSPECI)
85      real   WBARI_1pt(NLAYER,NSPECI)
86      real   COSBI_1pt(NLAYER,NSPECI)
87      character*100 dummy
88      real   dummy2,dummy3
89
90C THE PRESSURE INDUCED TRANSITIONS ARE FROM REGIS
91C THE LAST SEVENTEEN INTERVALS ARE THE BANDS FROM GNF.
92C
93C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE INFRARED
94C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE IR
95C LAYER: WBAR, DTAU, COSBAR
96C LEVEL: TAU
97C
98       print*,'START OPTCI'
99
100c Diagnostic eventuellement:
101c      if (nmicro.gt.0) then
102c      sum=0.
103c      do nng=2,klon
104c        do i=1,klev
105c         do j=1,nmicro
106c          print*,'j,rj',j,rayon(j)
107c          print*,'paer',qaer(nng,i,j)
108c           sum=sum+qaer(nng,i,j)*rayon(j)**3.*1.3333*3.1415*1000.
109c         enddo
110c        enddo
111c        enddo
112c      print*,sum/(klon-1),'SOMME COLONNE/OPTCI'
113c      endif
114
115
116c      do inq=1,nrad
117c          print*,inq,rayon(inq),vrat,qaer(12,25,inq)
118c      enddo
119             
120C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
121c INITIALISATIONS UNE SEULE FOIS
122C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
123
124      if (iopti.eq.0) then
125
126c verif pour taille zqaer_1pt, sachant que si microfi=0 et nqtot=1,
127c il faut quand meme qu on lise la look-up table de dim nrad=10
128c et si microfi=1, on doit avoir nmicro=nrad (dans microtab.h)
129       if ((nmicro.ne.nrad).and.(microfi.eq.1)) then
130          print*,"nmicro.ne.nrad",nmicro,nrad
131          print*,"PROBLEME pour zqaer_1pt dans optci !!"
132          stop
133       endif
134
135     
136      DO 420 K=1,NSPECI
137C LETS USE THE THOLIN OPTICAL CONSTANTS FOR THE HAZE.
138          CALL THOLIN(WLNI(K),TNR,TNI)
139          REALI(K)=TNR
140          XIMGI(K)=TNI*FHIR
141C SET UP THE OPTICAL CONSTANTS FOR THE CLOUD
142          RCLDI(K)=1.27
143          XICLDI(K)=REFLIQ(WNOI(K))
144 420  CONTINUE
145
146C
147C ZERO ALL OPTICAL DEPTHS.
148C ??FLAG? FOR SOME APPLCIATIONS THE TOP OPACITY MAY NOT VANISH
149
150c      open  (unit=1,file='xsetupi')
151c      do i=1,klev
152c       read(1,*) a
153c        do j=1,nspeci
154c            read(1,*) xv1(i,j),xv2(i,j),xv3(i,j)
155c        enddo
156c       enddo
157c       close(1)
158
159      endif    ! fin initialisations premier appel
160
161c************************************************************************
162c************************************************************************
163      DO 79 ig=1,klon      ! BOUCLE SUR GRILLE HORIZONTALE   
164c      print*,'ig NEW optci',ig
165c************************************************************************
166c************************************************************************
167
168        if (.not.ylellouch) then
169       
170            XN2(1) = ykim(ig,1,iradn2)
171            CH4(1) = ykim(ig,1,iradch4)
172             H2(1) = ykim(ig,1,iradh2)
173            do j=2,nlayer
174               XN2(j) = (ykim(ig,j,iradn2)+ykim(ig,j-1,iradn2))/2.
175               CH4(j) = (ykim(ig,j,iradch4)+ykim(ig,j-1,iradch4))/2.
176                H2(j) = (ykim(ig,j,iradh2)+ykim(ig,j-1,iradh2))/2.
177            enddo
178            XN2(nlevel) = ykim(ig,nlayer,iradn2)
179            CH4(nlevel) = ykim(ig,nlayer,iradch4)
180             H2(nlevel) = ykim(ig,nlayer,iradh2)     
181
182            do j=1,nlayer
183               emu = ( xmu(j) + xmu(j+1) )/2.
184               C2H2(j) = ykim(ig,j,iradc2h2) * 26./emu
185               C2H6(j) = ykim(ig,j,iradc2h6) * 30./emu
186                HCN(j) = ykim(ig,j,iradhcn ) * 27./emu
187            enddo
188                 
189        endif
190
191c     if ((.not.ylellouch).and.(ig.eq.klon/2)) then
192c        print*,' LAYER      C2H2         C2H6       HCN masmix ratios'
193c        do j=1,nlayer
194c            print*,j,C2H2(j),C2H6(j),HCN(j)
195c        enddo
196c     endif   
197
198        if (microfi.eq.1) then
199           do iq=1,nrad
200              do j=1,NLAYER
201                 zqaer_1pt(j,iq)=qaer(ig,j,iq)
202              enddo
203           enddo
204        else
205         if (ig.eq.1)  then
206c initialisation zqaer_1pt a partir d une look-up table (uniforme en ig)
207c boucle sur nrad=10 (dans microtab.h)
208           open(10,file="qaer_eq_1d.dat")
209           do iq=1,15
210             read(10,'(A100)') dummy
211           enddo
212           do j=NLAYER,1,-1
213             read(10,*) dummy2,dummy3,(zqaer_1pt(j,iq),iq=1,nrad)
214           enddo
215           close(10)
216c ici, les tableaux definissant la structure des aerosols sont
217c remplis: rf,df(nq),rayon(nq,)v(nq)......
218       call rdf()
219         endif
220        endif
221
222c        if ((ig.eq.klon/2).or.(microfi.eq.0))  then
223c       print*,"Q01=",zqaer_1pt(:,1)
224c       print*,"Q05=",zqaer_1pt(:,5)
225c       print*,"Q10=",zqaer_1pt(:,10)
226c       stop
227c        endif
228       
229        if (seulmtunpt.eq.0) then
230           call optci_1pt(zqaer_1pt,iopti,
231     .            COSBI_1pt,DTAUI_1pt,TAUHI_1pt,TAUHID_1pt,TAUCI_1pt,
232     .            TAUGI_1pt,TAUGID_1pt,WBARI_1pt,TAUI_1pt,IPRINT)
233           iopti = 1
234        endif
235
236c Pas de microphysique, ni de composition variable: un seul passage
237c dans optci_1pt.
238        if ((microfi.eq.0).and.(ylellouch)) then
239           seulmtunpt = 1
240        endif
241       
242        COSBI(ig,:,:)  = COSBI_1pt(:,:)
243        WBARI(ig,:,:)  = WBARI_1pt(:,:)
244        DTAUI(ig,:,:)  = DTAUI_1pt(:,:)
245        TAUHI(ig,:)    = TAUHI_1pt(:)
246        TAUCI(ig,:)    = TAUCI_1pt(:)
247        TAUGI(ig,:)    = TAUGI_1pt(:)
248        TAUI(ig,:,:)   = TAUI_1pt(:,:)
249        TAUHID(ig,:,:) = TAUHID_1pt(:,:)
250        TAUGID(ig,:,:) = TAUGID_1pt(:,:)
251
252c************************************************************************
253c************************************************************************
254  79  CONTINUE   ! FIN BOUCLE GRILLE HORIZONTALE
255c************************************************************************
256c************************************************************************
257
258      print*, 'FIN OPTCI'
259
260      RETURN
261      END
Note: See TracBrowser for help on using the repository browser.