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