source: trunk/LMDZ.TITAN.old/libf/phytitan/optfrac.old @ 3094

Last change on this file since 3094 was 306, checked in by slebonnois, 13 years ago

SLebonnois: correction de bugs dans la physique Titan:

  • effg.F : Z doit etre en km, donc conversion
  • optc*_1pt_2.F : On utilise cfffv11 et plus optfrac Du coup, les fichiers input testag* ne sont plus necessaires.
  • phytrac.F : passage de la tendance aerosols en intensif dans tous les cas


File size: 5.4 KB
Line 
1        subroutine optfrac(XN,WLNV,QEXT,QSCA,QABS,CBAR)
2
3c------------------------------------------------------
4c
5c   -->(  )
6c       XN      : NOMBRE DE MONOMERES
7c       WLNV    : LONGUEUR D'ONDE
8c      (  )-->
9c       TEXT(NLEVEL): TAU_EXT (NLAYER)
10c       TSCA(NLEVEL): TAU-SCA (NLEVEL)
11c       TABS(NLEVEL): TAU-ABS (NLEVEL) 
12c       CBAR(NLEVEL): PARAMETRE D'ASYMETRIE (NLEVEL)
13c
14c------------------------------------------------------
15
16       parameter(NNK=64,nmon=15,iint=5)
17
18     
19
20* declaration des variables INPUT/OUTPUT
21* --------------------------------------
22 
23        real QEXT,QSCA,QABS,CBAR,XN,WLNV
24
25 
26* declaration des variables internes
27* ----------------------------------
28       
29
30        real sfe(nmon,NNK),sfd(nmon,NNK),gn(nmon,NNK)
31
32        real sfe0(nmon,NNK,iint),sfd0(nmon,NNK,iint)
33     & ,gn0(nmon,NNK,iint),l0(NNK)
34
35        real xpoub,xvis,xir
36        integer kkk
37        save kkk,xvis,xir
38
39        real ifi(NNK)
40
41        real gi,h,h1
42 
43        real ex(0:4)
44 
45        integer iprem
46        save iprem
47
48* declaration des blocs communs internes
49*---------------------------------------
50
51        common/thag_thol/sfe0,sfd0,gn0,l0
52
53       data iprem/0/
54 
55
56       pi=3.1415926535
57
58
59
60
61       
62* Longueurs d'ondes et sections efficaces utilisees
63*--------------------------------------------------
64       
65       if(iprem.eq.0) THEN
66           print*,'APPEL OPTIQUE FRACTAL'
67           call agreg_tholin()
68 
69       endif     
70
71
72* restriction en longueur d'o
73*----------------------------
74 
75        if(WLNV.lt.l0(1)) stop 'WLNV < l0(1) '
76 
77      do i=1,NNK-1
78        if(WLNV.gt.l0(i))  index=i+1
79      enddo 
80
81        if(WLNV.gt.l0(NNK)) stop 'WLNV > l0(NNK) '
82
83commentaire:          l0(index-1) < WLNV < l0(index)
84
85
86* limite en nombre de monomeres.
87*------------------------------
88
89        if (XN/.75.lt.1.)       stop 'XN < 1'
90        if (XN/1.5.gt.16384.)   stop 'XN > 16384'
91
92c......tolerance grille #1:   .75  < N <1.5
93c................grille #15:  10922< N < 24576
94c................DONC          .75 < N < 24576
95
96* Calculs preparatoires: intervalles de longueurs d'onde
97*--------------------------------------------------------
98
99       do j=index-1,index         !longueur d'onde
100       ifi(j)=5                   !ifi < iint
101       if (l0(j).lt.0.72)  ifi(j)=4
102       if (l0(j).lt.0.5)  ifi(j)=3
103       if (l0(j).lt.0.4)  ifi(j)=2
104       if (l0(j).lt.0.3)  ifi(j)=1
105       enddo
106
107       
108*  l0(index) <--> l0(index-1)
109       if(iprem.eq.0) then
110       print*,'ouverture du fichier initpar'
111       open (unit=1,file='initpar')
112       read(1,*) xpoub,kkk,xvis,xir
113       read(1,*)
114       read(1,*) xpoub,kkk,xvis,xir
115       close(1)
116       print*,'ouverture du fichier initpar ok'
117       iprem=1
118       print*,'DANS OPTFRAC'
119       print*,'------------'
120       print*,'XVIS=',xvis
121       print*,'XIR=',xir
122       endif
123
124c      stop'Check des valeurs dans optfrac.F'
125
126       k=int(alog(XN/.75)/alog(2.)+1.)
127
128       xcompens=XN/(2.**(k-1))
129     
130
131      do j=index-1,index         !longueur d'onde
132
133       ifich=ifi(j)
134
135         if (WLNV.gt.1.5) then
136
137            sfe(k,j)=sfe0(k,j,ifich)*xir
138     &              +sfd0(k,j,ifich)*(1.-xir)
139            sfd(k,j)=sfd0(k,j,ifich)
140            gn(k,j)=gn0(k,j,ifich)
141
142         else
143
144            sfe(k,j)=sfe0(k,j,ifich)*xvis
145     &              +sfd0(k,j,ifich)*(1.-xvis)
146            sfd(k,j)=sfd0(k,j,ifich)
147            gn(k,j)=gn0(k,j,ifich)
148
149         endif
150
151        enddo
152
153
154         i=k
155
156         XRAT=(WLNV-l0(index-1))/(l0(index)-l0(index-1))
157        CBAR=XRAT*(gn(i,index)-gn(i,index-1))
158     &          +gn(i,index-1) 
159        QEXT=XRAT*(sfe(i,index)-sfe(i,index-1))
160     &          +sfe(i,index-1) 
161        QSCA=XRAT*(sfd(i,index)-sfd(i,index-1))
162     &          +sfd(i,index-1) 
163        QABS=QEXT-QSCA
164
165        QEXT=QEXT*xcompens
166        QSCA=QSCA*xcompens
167        QABS=QABS*xcompens
168
169 
170          return 
171 500    print*,'erreur lecture initfich'
172          stop
173 499    print*,'erreur ouverture initfich'
174          stop
175          end
176
177
178*-------------------------------------------------------------------
179*
180*        DEBUT DU CALCUL D'INTERPOLATION DES DONNEES AGREGAT
181*
182*---------------------------------------------------------------------
183
184      subroutine agreg_tholin()
185 
186
187      common/thag_thol/qext0,qsca0,g0,l
188 
189 
190      parameter(nz=200,nrad=45,NNK=64,nmon=15,iint=5)
191      real l(NNK)
192      real*8 qsca,qext,qg0
193      real qsca0(nmon,NNK,iint),qext0(nmon,NNK,iint)
194     &    ,g0(nmon,NNK,iint)
195
196       do ifich=1,iint
197       print*,'ouverture du fichier tetag',ifich
198       if (ifich.eq.1) open (unit=3,file='testag0')
199       if (ifich.eq.2) open (unit=3,file='testag1')
200       if (ifich.eq.3) open (unit=3,file='testag2')
201       if (ifich.eq.4) open (unit=3,file='testag3')
202       if (ifich.eq.5) open (unit=3,file='testag4')
203       print*,'ouverture du fichier ok'
204
205       do k=NNK,1,-1
206         read (3,*) l(k)
207         do nm=1,nmon
208           read (3,*) qsca,qext,qg0
209c          read (3,*) qsca0(nm,k,ifich),qext0(nm,k,ifich)
210c    &               ,g0(nm,k,ifich)
211           qsca0(nm,k,ifich)=sngl(qsca)*1.e-18
212           qext0(nm,k,ifich)=sngl(qext)*1.e-18
213           g0(nm,k,ifich)=sngl(qg0)
214         enddo
215       enddo
216      close (3)
217
218       enddo
219c          print*,'4*>',qsca0(1,1,1),qsca0(64,15,4)
220     
221       return
222       end
223
224
225
226*---------------------------------------------------------------------
227*
228*        FIN DU CALCUL D'INTERPOLATION DES DONNEES AGREGAT
229*
230*---------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.