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 | |
---|
17 | c rad=.525 |
---|
18 | c 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.) |
---|
35 | c 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 |
---|
60 | c print*,s11(j)/s11(1),s11(j),qsca |
---|
61 | c print*,si1(j),si2(j),theta(j) |
---|
62 | |
---|
63 | enddo |
---|
64 | c print*,'******************************' |
---|
65 | c verification que integrale de la fonction de phase= qsca. |
---|
66 | c write(*,*) tot,tot1,'int' |
---|
67 | c write(*,*) 'asymetrie:',g,s,gg |
---|
68 | c print*,'******************************' |
---|
69 | return |
---|
70 | end |
---|
71 | |
---|
72 | c------------------------------------------------------------ |
---|
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 |
---|
90 | c 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 | |
---|
131 | c *************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 | |
---|
148 | c print*,rn,cabs(an),cabs(bn) |
---|
149 | c ***************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 | |
---|