source: trunk/LMDZ.TITAN/libf/phytitan/cmie.F @ 1243

Last change on this file since 1243 was 3, checked in by slebonnois, 14 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: 4.8 KB
Line 
1         subroutine cmie(lambda,xn,xk,rad,qext,qsca,qabs,gg)
2
3*  COPIE SUR B&H
4*  lambda: longueur d'onde
5*  xn, xk: indice de refraction reel et imaginaire
6*  rad: rayone de la particule
7*  qsca,qext: coefficient de diffusion et d'absorption
8*  gg: parametre d'assymetrie
9 
10
11       common/angle/theta 
12       parameter (nang=451)
13       complex refrel,s1(20000),s2(20000)
14       real rad,lambda,s11(20000),theta(10000)
15       real si1(20000),si2(20000)
16     
17c      rad=.525
18c      lambda=.6328
19       refrel=cmplx(xn,xk)
20       x=2.*3.14159265*rad/lambda
21       dang=1.570796327/dfloat(nang-1)
22
23          call intmie2(x,refrel,nang,s1,s2,qext,qsca)
24
25          surf=3.1415926*rad**2.*1e4
26          qext=qext*surf
27          qsca=qsca*surf
28          qabs=qext-qsca
29 
30
31       do 355 j=1,2*nang-1
32         s11(j)=cabs(s2(j))*cabs(s2(j))+cabs(s1(j))*cabs(s1(j))
33         scarre=s11(j)
34         s11(j)=s11(j)/(2*x**2.)
35c       print*,scarre,theta(j)*180./3.1415926
36 355   continue
37 
38
39       tot1=0.
40         g1=0.
41         g2=0.
42 
43*  s11(j): fonction de phase
44
45       do 365 j=1,2*nang-2,2
46        tot1=2*dang/6*(s11(j)*sin(theta(j))+s11(j+2)*sin(theta(j+2))
47     &  +4*s11(j+1)*sin(theta(j+1)))*2*3.141592+tot1
48 
49        g1=2*dang/6*(s11(j)*sin(theta(j))+s11(j+2)*sin(theta(j+2))
50     &  +4*s11(j+1)*sin(theta(j+1)))*2*3.141592+g1
51 
52        g2=2*dang/6*(s11(j)*sin(theta(j))*cos(theta(j))
53     &  +s11(j+2)*sin(theta(j+2))*cos(theta(j+2))
54     &  +4*s11(j+1)*sin(theta(j+1))*cos(theta(j+1)))*2*3.141592+g2
55 
56 365    continue
57 
58        gg=g2/g1
59         do j=1,2*nang-1
60c      print*,s11(j)/s11(1),s11(j),qsca
61c      print*,si1(j),si2(j),theta(j)
62
63         enddo
64c       print*,'******************************'
65c      verification que integrale de la fonction de phase= qsca.
66c      write(*,*) tot,tot1,'int'
67c      write(*,*) 'asymetrie:',g,s,gg
68c       print*,'******************************'
69        return
70       end
71
72c------------------------------------------------------------
73        subroutine intmie2(x,refrel,nang,s1,s2,qext,qsca)
74
75       common/angle/theta 
76     
77        real amu(10000),theta(10000),pi(10000)
78        real tau(10000),pi0(10000),pi1(10000)
79        complex d(300000),y,refrel,xi,xi0,xi1,an,bn,s1(20000),s2(20000)
80        double precision psi0,psi1,psi,dn,dx
81
82       dx=x            !dx en double precision ....           
83       y=x*refrel
84
85
86       xstop=x+4*x**.3333+2.
87       nstop=xstop
88       ymod=cabs(y)
89       nmx=amax1(xstop,ymod)+15
90c      print*,nmx,xstop,nstop,ymod
91       dang=1.570796327/dfloat(nang-1)
92
93         do 555 j=1,2*nang-1           
94         theta(j)=(dfloat(j)-1.)*dang
95 555     amu(j)=cos(theta(j))
96
97       d(nmx)=cmplx(0.,0.) 
98       nn=nmx-1
99         
100         do 120 n=1,nn
101         rn=nmx-n+1
102         d(nmx-n)=(rn/y)-(1./(d(nmx-n+1)+rn/y))
103 120     continue
104 
105         do 666 j=1,nang
106         pi0(j)=0.       ! fonction de legendre
107 666     pi1(j)=1.
108   
109       nn=2*nang-1
110       
111         do 777 j=1,nn
112         s1(j)=cmplx(0.,0.)
113 777     s2(j)=cmplx(0.,0.)
114
115
116       psi0=dcos(dx)      !initialisation des fonctions de Bessel
117       psi1=dsin(dx)
118       chi0=-sin(x)
119       chi1=cos(x)
120
121       apsi0=psi0        !psi en double prec. et apsi en simple
122       apsi1=psi1
123
124       xi0=cmplx(apsi0,-chi0)
125       xi1=cmplx(apsi1,-chi1)
126
127       qsca=0.
128
129       n=1
130
131c      *************debut de l'iteration sur n *************
132 200   dn=n
133       rn=n
134       fn=(2.*rn+1.)/(rn*(rn+1.))
135     
136       psi=(2.*dn-1.)*psi1/dx-psi0     ! calcul des fct de Bessel 
137       chi=(2.*rn-1.)*chi1/x-chi0      ! relation recurrente a 2 niveaux
138       apsi=psi
139       xi=cmplx(apsi,-chi)
140
141       an=(d(n)/refrel+rn/x)*apsi-apsi1
142       an=an/((d(n)/refrel+rn/x)*xi-xi1)
143       bn=(refrel*d(n)+rn/x)*apsi-apsi1
144       bn=bn/((refrel*d(n)+rn/x)*xi-xi1)
145     
146       qsca=qsca+(2*rn+1.)*(cabs(an)*cabs(an)+cabs(bn)*cabs(bn))
147 
148c      print*,rn,cabs(an),cabs(bn)
149c     ***************debut de la boucle sur les angles*******
150
151       do 789 j=1,nang
152       jj=2*nang-j
153          pi(j)=pi1(j)                           !
154          tau(j)=rn*amu(j)*pi(j)-(rn+1.)*pi0(j)  ! fonction de legendre
155          s1(j)=s1(j)+fn*(an*pi(j)+bn*tau(j))
156          s2(j)=s2(j)+fn*(an*tau(j)+bn*pi(j))
157          p=(-1)**(n-1)
158          t=(-1)**n
159
160       if (j.eq.jj) goto 789
161            s1(jj)=s1(jj)+fn*(an*pi(j)*p+bn*tau(j)*t)
162            s2(jj)=s2(jj)+fn*(an*tau(j)*t+bn*pi(j)*p)
163 789   continue
164
165       psi0=psi1
166       psi1=psi
167       apsi1=psi1           ! double prec=simple
168
169       chi0=chi1
170       chi1=chi
171       xi1=cmplx(apsi1,-chi1)
172
173       n=n+1
174       rn=n
175
176       do 999 j=1,nang
177        pi1(j)=((2.*rn-1.)/(rn-1.))*amu(j)*pi(j)
178        pi1(j)=pi1(j)-rn*pi0(j)/(rn-1.)
179 999    pi0(j)=pi(j)
180
181       if (n-1-nstop) 200,300,300
182 300   qsca=(2./(x*x))*qsca
183       qext=(4./(x*x))*real(s1(1))
184       
185       return
186       end
187 
188   
189     
Note: See TracBrowser for help on using the repository browser.