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