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

Last change on this file since 91 was 3, checked in by slebonnois, 15 years ago

Creation de repertoires:

  • chantiers : pour communiquer sur nos projets de modifs
  • documentation : pour stocker les docs

Ajout de:

  • libf/phytitan : physique de Titan
  • libf/chimtitan: chimie de Titan
  • libf/phyvenus : physique de Venus
File size: 8.2 KB
Line 
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
8c   Arguments:
9c   ---------
10      REAL    ykim(klon,klev,nqmx)
11      integer nmicro
12c   ---------
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,rayon,vrat,dr,dv
55
56      DIMENSION PROD(NLEVEL)
57* nrad dans microtab.h
58      real qaer(klon,nlayer,nqmx)
59      real v(nrad),rayon(nrad),vrat,dr(nrad),dv(nrad)
60      real xv1(klev,nspeci),xv2(klev,nspeci)
61      real xv3(klev,nspeci)
62      REAL QF1(nrad,NSPECI),QF2(nrad,NSPECI)
63      REAL QF3(nrad,NSPECI),QF4(nrad,NSPECI)
64      REAL QM1(nrad,NSPECI),QM2(nrad,NSPECI)
65      REAL QM3(nrad,NSPECI),QM4(nrad,NSPECI)
66      real emu
67      REAL TAEROSM1(NSPECI),TAEROSCATM1(NSPECI),DELTAZM1(NSPECI)
68     
69      save qf1,qf2,qf3,qf4,qm1,qm2,qm3,qm4
70
71      integer iopti,iwarning     ! iopti: premier appel, une seule boucle sur les l.d'o.
72      integer ig_,seulmtunpt
73      save iopti,iwarning,seulmtunpt
74      data iopti,iwarning,seulmtunpt/0,0,0/
75
76      real   zqaer_1pt(NLAYER,nrad)
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      character*100 dummy
85      real   dummy2,dummy3
86
87C THE PRESSURE INDUCED TRANSITIONS ARE FROM REGIS
88C THE LAST SEVENTEEN INTERVALS ARE THE BANDS FROM GNF.
89C
90C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE INFRARED
91C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE IR
92C LAYER: WBAR, DTAU, COSBAR
93C LEVEL: TAU
94C
95       print*,'START OPTCI'
96
97c Diagnostic eventuellement:
98c      if (nmicro.gt.0) then
99c      sum=0.
100c      do nng=2,klon
101c        do i=1,klev
102c         do j=1,nmicro
103c          print*,'j,rj',j,rayon(j)
104c          print*,'paer',qaer(nng,i,j)
105c           sum=sum+qaer(nng,i,j)*rayon(j)**3.*1.3333*3.1415*1000.
106c         enddo
107c        enddo
108c        enddo
109c      print*,sum/(klon-1),'SOMME COLONNE/OPTCI'
110c      endif
111
112
113c      do inq=1,nrad
114c          print*,inq,rayon(inq),vrat,qaer(12,25,inq)
115c      enddo
116             
117C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
118c INITIALISATIONS UNE SEULE FOIS
119C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
120
121      if (iopti.eq.0) then
122
123c verif pour taille zqaer_1pt, sachant que si microfi=0 et nqmx=1,
124c il faut quand meme qu on lise la look-up table de dim nrad=10
125c et si microfi=1, on doit avoir nmicro=nrad (dans microtab.h)
126       if ((nmicro.ne.nrad).and.(microfi.eq.1)) then
127          print*,"nmicro.ne.nrad",nmicro,nrad
128          print*,"PROBLEME pour zqaer_1pt dans optci !!"
129          stop
130       endif
131
132     
133      DO 420 K=1,NSPECI
134C LETS USE THE THOLIN OPTICAL CONSTANTS FOR THE HAZE.
135          CALL THOLIN(WLNI(K),TNR,TNI)
136          REALI(K)=TNR
137          XIMGI(K)=TNI*FHIR
138C SET UP THE OPTICAL CONSTANTS FOR THE CLOUD
139          RCLDI(K)=1.27
140          XICLDI(K)=REFLIQ(WNOI(K))
141 420  CONTINUE
142
143C
144C ZERO ALL OPTICAL DEPTHS.
145C ??FLAG? FOR SOME APPLCIATIONS THE TOP OPACITY MAY NOT VANISH
146
147c      open  (unit=1,file='xsetupi')
148c      do i=1,klev
149c       read(1,*) a
150c        do j=1,nspeci
151c            read(1,*) xv1(i,j),xv2(i,j),xv3(i,j)
152c        enddo
153c       enddo
154c       close(1)
155
156      endif    ! fin initialisations premier appel
157
158c************************************************************************
159c************************************************************************
160      DO 79 ig=1,klon      ! BOUCLE SUR GRILLE HORIZONTALE   
161c      print*,'ig NEW optci',ig
162c************************************************************************
163c************************************************************************
164
165        if (.not.ylellouch) then
166       
167            XN2(1) = ykim(ig,1,iradn2)
168            CH4(1) = ykim(ig,1,iradch4)
169             H2(1) = ykim(ig,1,iradh2)
170            do j=2,nlayer
171               XN2(j) = (ykim(ig,j,iradn2)+ykim(ig,j-1,iradn2))/2.
172               CH4(j) = (ykim(ig,j,iradch4)+ykim(ig,j-1,iradch4))/2.
173                H2(j) = (ykim(ig,j,iradh2)+ykim(ig,j-1,iradh2))/2.
174            enddo
175            XN2(nlevel) = ykim(ig,nlayer,iradn2)
176            CH4(nlevel) = ykim(ig,nlayer,iradch4)
177             H2(nlevel) = ykim(ig,nlayer,iradh2)     
178
179            do j=1,nlayer
180               emu = ( xmu(j) + xmu(j+1) )/2.
181               C2H2(j) = ykim(ig,j,iradc2h2) * 26./emu
182               C2H6(j) = ykim(ig,j,iradc2h6) * 30./emu
183                HCN(j) = ykim(ig,j,iradhcn ) * 27./emu
184            enddo
185                 
186        endif
187
188c     if ((.not.ylellouch).and.(ig.eq.klon/2)) then
189c        print*,' LAYER      C2H2         C2H6       HCN masmix ratios'
190c        do j=1,nlayer
191c            print*,j,C2H2(j),C2H6(j),HCN(j)
192c        enddo
193c     endif   
194
195        if (microfi.eq.1) then
196           do iq=1,nrad
197              do j=1,NLAYER
198                 zqaer_1pt(j,iq)=qaer(ig,j,iq)
199              enddo
200           enddo
201        else
202         if (ig.eq.1)  then
203c initialisation zqaer_1pt a partir d une look-up table (uniforme en ig)
204c boucle sur nrad=10 (dans microtab.h)
205           open(10,file="qaer_eq_1d.dat")
206           do iq=1,15
207             read(10,'(A100)') dummy
208           enddo
209           do j=NLAYER,1,-1
210             read(10,*) dummy2,dummy3,(zqaer_1pt(j,iq),iq=1,nrad)
211           enddo
212           close(10)
213c ici, les tableaux definissant la structure des aerosols sont
214c remplis: rf,df(nq),rayon(nq,)v(nq)......
215       call rdf()
216         endif
217        endif
218
219c        if ((ig.eq.klon/2).or.(microfi.eq.0))  then
220c       print*,"Q01=",zqaer_1pt(:,1)
221c       print*,"Q05=",zqaer_1pt(:,5)
222c       print*,"Q10=",zqaer_1pt(:,10)
223c       stop
224c        endif
225       
226        if (seulmtunpt.eq.0) then
227           call optci_1pt(zqaer_1pt,iopti,
228     .            COSBI_1pt,DTAUI_1pt,TAUHI_1pt,TAUHID_1pt,TAUCI_1pt,
229     .            TAUGI_1pt,TAUGID_1pt,WBARI_1pt,TAUI_1pt,IPRINT)
230           iopti = 1
231        endif
232
233c Pas de microphysique, ni de composition variable: un seul passage
234c dans optci_1pt.
235        if ((microfi.eq.0).and.(ylellouch)) then
236           seulmtunpt = 1
237        endif
238       
239        COSBI(ig,:,:)  = COSBI_1pt(:,:)
240        WBARI(ig,:,:)  = WBARI_1pt(:,:)
241        DTAUI(ig,:,:)  = DTAUI_1pt(:,:)
242        TAUHI(ig,:)    = TAUHI_1pt(:)
243        TAUCI(ig,:)    = TAUCI_1pt(:)
244        TAUGI(ig,:)    = TAUGI_1pt(:)
245        TAUI(ig,:,:)   = TAUI_1pt(:,:)
246        TAUHID(ig,:,:) = TAUHID_1pt(:,:)
247        TAUGID(ig,:,:) = TAUGID_1pt(:,:)
248
249c************************************************************************
250c************************************************************************
251  79  CONTINUE   ! FIN BOUCLE GRILLE HORIZONTALE
252c************************************************************************
253c************************************************************************
254
255      print*, 'FIN OPTCI'
256
257      RETURN
258      END
Note: See TracBrowser for help on using the repository browser.