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

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

Sebastien:

  • correction de bugs dans phytitan suite a compil avec -debug sur gnome
  • elimination de nbetat* dans gcm.F et leapfrog.F (et dans le parallele)
  • correction rday -> rjour dans sortvarc.F
  • ajustement des arch-GNOME*
File size: 8.3 KB
Line 
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
9c   Arguments:
10c   ---------
11      REAL    ykim(klon,klev,nqtot)
12      real    qaer(klon,klev,nqtot)
13      integer nmicro
14c   ---------
15
16c  ASTUCE POUR EVITER klon... EN ATTENDANT MIEUX
17      INTEGER   ngrid
18      PARAMETER (ngrid=(jjm-1)*iim+2)  ! = klon
19c
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
91C THE PRESSURE INDUCED TRANSITIONS ARE FROM REGIS
92C THE LAST SEVENTEEN INTERVALS ARE THE BANDS FROM GNF.
93C
94C THIS SUBROUTINE SETS THE OPTICAL CONSTANTS IN THE INFRARED
95C IT CALCUALTES FOR EACH LAYER, FOR EACH SPECRAL INTERVAL IN THE IR
96C LAYER: WBAR, DTAU, COSBAR
97C LEVEL: TAU
98C
99       print*,'START OPTCI'
100
101c Diagnostic eventuellement:
102c      if (nmicro.gt.0) then
103c      sum=0.
104c      do nng=2,klon
105c        do i=1,klev
106c         do j=1,nmicro
107c          print*,'j,rj',j,rayon(j)
108c          print*,'paer',qaer(nng,i,j)
109c           sum=sum+qaer(nng,i,j)*rayon(j)**3.*1.3333*3.1415*1000.
110c         enddo
111c        enddo
112c        enddo
113c      print*,sum/(klon-1),'SOMME COLONNE/OPTCI'
114c      endif
115
116
117c      do inq=1,nrad
118c          print*,inq,rayon(inq),vrat,qaer(12,25,inq)
119c      enddo
120             
121C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
122c INITIALISATIONS UNE SEULE FOIS
123C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
124
125      if (iopti.eq.0) then
126
127c verif pour taille zqaer_1pt, sachant que si microfi=0 et nqtot=1,
128c il faut quand meme qu on lise la look-up table de dim nrad=10
129c 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
138C 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
142C SET UP THE OPTICAL CONSTANTS FOR THE CLOUD
143          RCLDI(K)=1.27
144          XICLDI(K)=REFLIQ(WNOI(K))
145 420  CONTINUE
146
147C
148C ZERO ALL OPTICAL DEPTHS.
149C ??FLAG? FOR SOME APPLCIATIONS THE TOP OPACITY MAY NOT VANISH
150
151c      open  (unit=1,file='xsetupi')
152c      do i=1,klev
153c       read(1,*) a
154c        do j=1,nspeci
155c            read(1,*) xv1(i,j),xv2(i,j),xv3(i,j)
156c        enddo
157c       enddo
158c       close(1)
159
160      endif    ! fin initialisations premier appel
161
162c************************************************************************
163c************************************************************************
164      DO 79 ig=1,klon      ! BOUCLE SUR GRILLE HORIZONTALE   
165c      print*,'ig NEW optci',ig
166c************************************************************************
167c************************************************************************
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
192c     if ((.not.ylellouch).and.(ig.eq.klon/2)) then
193c        print*,' LAYER      C2H2         C2H6       HCN masmix ratios'
194c        do j=1,nlayer
195c            print*,j,C2H2(j),C2H6(j),HCN(j)
196c        enddo
197c     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
207c initialisation zqaer_1pt a partir d une look-up table (uniforme en ig)
208c 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)
217c ici, les tableaux definissant la structure des aerosols sont
218c remplis: rf,df(nq),rayon(nq,)v(nq)......
219       call rdf()
220         endif
221        endif
222
223c        if ((ig.eq.klon/2).or.(microfi.eq.0))  then
224c       print*,"Q01=",zqaer_1pt(:,1)
225c       print*,"Q05=",zqaer_1pt(:,5)
226c       print*,"Q10=",zqaer_1pt(:,10)
227c       stop
228c        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
237c Pas de microphysique, ni de composition variable: un seul passage
238c 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
253c************************************************************************
254c************************************************************************
255  79  CONTINUE   ! FIN BOUCLE GRILLE HORIZONTALE
256c************************************************************************
257c************************************************************************
258
259      print*, 'FIN OPTCI'
260
261      RETURN
262      END
263
Note: See TracBrowser for help on using the repository browser.