[3] | 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 | |
---|