-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3310e5c
Showing
17 changed files
with
1,303 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
function At = A(m,n,mu,nu,kd,theta0,phi0) | ||
format long | ||
|
||
j = @(n,x) sqrt(pi/(2*x))*besselj(n+0.5,x); %spherical bessel | ||
h = @(n,x) sqrt(pi/(2*x))*(besselj(n+0.5,x) + 1i*bessely(n+0.5,x)); %spherical Hankel | ||
qmax = min([n,nu,0.5*(n+nu-abs(m-mu))]); | ||
Qmax = min([n+1,nu,0.5*(n+1+nu-abs(m-mu))]); | ||
%calculate Gaunt coefficient 0-->1 | ||
%calculate the denominator of a1q | ||
%a1(1) = (pochhammer(n+1,n)*pochhammer(nu+1,nu)*factorial(n+nu--m-mu))... | ||
% /(pochhammer(n+nu+1,n+nu)*factorial(n--m)*factorial(nu-mu)); | ||
a1(1) = 1; | ||
a0 = a1(1); | ||
%calculate the normalized a1q | ||
for q=2:Qmax+1 | ||
p = n+nu-2*(q-1); | ||
n4 = n+nu--m-mu; | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-n,2*k-2)*poc(mu-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-n+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a1(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a1(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate A coefficient | ||
A1 = exp(1i*(mu-m)*(phi0))*((-1)^m*(1i)^(nu+n)*poc(n+2,n-1)*poc(nu+2,nu+1)*factorial(n+nu+m-mu))... | ||
/(4*n*poc(n+nu+1,n+nu)*factorial(n-m)*factorial(nu+mu)); | ||
%A1 = (-1)^(m+n)*a0*((2*n+1)/(2*n*(n+1)))*exp(1i*(mu-m)*phi0); | ||
A2 = 0; | ||
for q=1:qmax+1 | ||
p = n+nu-2*(q-1); | ||
sA = (-1)^(q-1)*(n*(n+1)+nu*(nu+1)-p*(p+1))*a1(q)*h(p,kd)*P(mu-m,p,cos(theta0)); | ||
A2 = A2 + sA; | ||
end | ||
At = A1*A2; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
function At = A_(m,n,mu,nu,kd,theta0,phi0) | ||
format long | ||
|
||
J = @(n,x) sqrt(pi/(2*x))*besselj(n+0.5,x); %spherical bessel | ||
h = @(n,x) sqrt(pi/(2*x))*(besselj(n+0.5,x) + 1i*bessely(n+0.5,x)); %spherical Hankel | ||
qmax = min([n,nu,0.5*(n+nu-abs(m-mu))]); | ||
Qmax = min([n+1,nu,0.5*(n+1+nu-abs(m-mu))]); | ||
%calculate Gaunt coefficient 0-->1 | ||
%calculate the denominator of a1q | ||
%a1(1) = (pochhammer(n+1,n)*pochhammer(nu+1,nu)*factorial(n+nu--m-mu))... | ||
% /(pochhammer(n+nu+1,n+nu)*factorial(n--m)*factorial(nu-mu)); | ||
a1(1) = 1; | ||
a0 = a1(1); | ||
%calculate the normalized a1q | ||
for q=2:Qmax+1 | ||
p = n+nu-2*(q-1); | ||
n4 = n+nu--m-mu; | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-n,2*k-2)*poc(mu-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-n+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a1(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a1(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate A coefficient | ||
A1 = exp(1i*(mu-m)*(phi0))*((-1)^m*(1i)^(nu+n)*poc(n+2,n-1)*poc(nu+2,nu+1)*factorial(n+nu+m-mu))... | ||
/(4*n*poc(n+nu+1,n+nu)*factorial(n-m)*factorial(nu+mu)); | ||
%A1 = (-1)^(m+n)*a0*((2*n+1)/(2*n*(n+1)))*exp(1i*(mu-m)*phi0); | ||
A2 = 0; | ||
for q=1:qmax+1 | ||
p = n+nu-2*(q-1); | ||
sA = (-1)^(q-1)*(n*(n+1)+nu*(nu+1)-p*(p+1))*a1(q)*J(p,kd)*P(mu-m,p,cos(theta0)); | ||
A2 = A2 + sA; | ||
end | ||
At = A1*A2; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
function Atot = At(m,n,mu,nu,k2d,tetalj,philj) | ||
format long | ||
|
||
%Bessel Functions | ||
sphj= @(n,kr) sqrt(pi./(2*kr)).*besselj(n+0.5,kr); | ||
sphy=@(n,kr) (sqrt(pi./(2*kr)).*(bessely(n+0.5,kr))); | ||
sphh=@(n,kr) sphj(n,kr)+(1i.*sphy(n,kr)); | ||
|
||
%Translation coefficient function | ||
Amn=@(m,n,mu,nu,phi)((((-1).^m).*((1i).^(nu+n)).*(gamma((2.*n)+1)./gamma(n+2)).*(gamma((2.*nu)+3)./gamma(nu+2)).*factorial(n+nu+m-mu))./(4.*n.*(gamma((2.*n)+(2.*nu)+1)./gamma(n+nu+1)).*factorial(n-m).*factorial(nu+mu)))*exp((1i).*(mu-m).*(philj+pi)); | ||
amn=@(n,nu,d,p,q,A,leg) ((-1).^q).*((n.*(n+1))+(nu.*(nu+1))-(p.*(p+1))).*A.*sphh(p,d).*leg; | ||
|
||
%Gaunt coefficient function (Version1) | ||
a1 = @(p,q) gamma(p+(2.*q)+0.5)./gamma(p+0.5); | ||
a2 = @(m,n,mu,nu,q) gamma(n+nu+m-mu+1)./(((-1).^(2.*q)).*gamma(n+nu+m-mu-(2.*q)+1)); | ||
a3 = @(m,n,k) gamma(m+n+1)./(((-1).^(2.*k)).*gamma(m+n-2.*k+1)); | ||
a4 = @(mu,nu,q,k) gamma(nu-mu+1)./(((-1).^((2.*q)-(2.*k))).*gamma(nu-mu-(2.*q)+(2.*k)+1)); | ||
a5 = @(n,k) gamma(n+0.5)./(((-1).^k).*gamma(n-k+0.5)); | ||
a6 = @(nu,q,k) gamma(nu+0.5)./(((-1).^(q-k)).*gamma(nu-q+k+0.5)); | ||
a7 = @(p,q,j) gamma(p+q-j+0.5)./(((-1).^(q-j)).*gamma(p+0.5)); | ||
|
||
%Addition Coefficients | ||
M = n+nu; | ||
qmax = (n+nu-abs(m-mu))/2; | ||
for i =0:1:qmax | ||
pp(i+1) = M-(2.*i); | ||
end | ||
A = zeros(floor(qmax)+1,1); | ||
A(1)=1; | ||
for q=1:1:qmax | ||
a12= a1(pp(q+1),q)./a2(m,n,mu,nu,q); | ||
aa = 0; | ||
bb = 0; | ||
for k=0:1:q | ||
aa = aa+((a3(m,n,k).*a4(mu,nu,q,k))./(factorial(k).*factorial(q-k).*a5(n,k).*a6(nu,q,k))); | ||
end | ||
for j=0:1:q-1 | ||
bb = bb +(((a7(pp(q+1),q,j))./factorial(q-j)).*A(j+1)); | ||
end | ||
aq=(a12.*aa)-bb; | ||
A(q+1) = aq; | ||
end | ||
|
||
asum = 0; | ||
for q=0:1:qmax | ||
leg = legendrePP(pp(q+1),mu-m,cos(tetalj)); | ||
asum = asum+ amn(n,nu,k2d,pp(q+1),q,A(q+1),leg); | ||
end | ||
|
||
Atot = Amn(m,n,mu,nu,philj).*asum; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
function Bt = B(m,n,mu,nu,kd,theta0,phi0) | ||
|
||
j = @(n,x) sqrt(pi/(2*x))*besselj(n+0.5,x); %spherical bessel | ||
h = @(n,x) sqrt(pi/(2*x))*(besselj(n+0.5,x) + 1i*bessely(n+0.5,x)); %spherical Hankel | ||
qmax = min([n,nu,0.5*(n+nu-abs(m-mu))]); | ||
Qmax = min([n+1,nu,0.5*(n+1+nu-abs(m-mu))]); | ||
% if m == -mu & n == nu | ||
% Bt = 0; | ||
% elseif m == -n & mu == -nu | ||
% Bt = 0; | ||
% elseif m == n & mu == nu | ||
% Bt = 0; | ||
% else | ||
%calculate Gaunt coefficient 0-->1 | ||
%calculate the denominator of a2q and a3q | ||
%a2(1) = (pochhammer(n+1+1,n+1)*pochhammer(nu+1,nu)*factorial(n+1+nu-(-m-1)-(mu+1)))... | ||
% /(pochhammer(n+1+nu+1,n+1+nu)*factorial(n+1-(-m-1))*factorial(nu-(mu+1))); | ||
%a3(1) = (pochhammer(n+1+1,n+1)*pochhammer(nu+1,nu)*factorial(n+1+nu--m-mu))... | ||
% /(pochhammer(n+1+nu+1,n+1+nu)*factorial(n+1--m)*factorial(nu-mu)); | ||
a2(1) = 1; a3(1) = 1; | ||
%b0 = ((2*n+1)*(n+nu+m-mu+1))/((2*n+2*nu+1)*(n+m+1)); | ||
%calculate the normalized a2q | ||
for q=2:Qmax+1 | ||
p = n+1+nu-2*(q-1); | ||
n4 = n+1+nu-(-m-1)-(mu+1); | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-1-(n+1),2*k-2)*poc(mu+1-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-(n+1)+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a2(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a2(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate the normalized a3q | ||
for q=2:Qmax+1 | ||
p = n+1+nu-2*(q-1); | ||
n4 = n+1+nu--m-mu; | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-(n+1),2*k-2)*poc(mu-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-(n+1)+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a3(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a3(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate B coefficient | ||
|
||
B1 = exp(1i*(mu-m)*(phi0))*((-1)^m*(1i)^(nu+n+1)*poc(n+2,n+1)*poc(nu+2,nu+1)*factorial(n+nu+m-mu+1))... | ||
/(4*n*(n+1)*(n+m+1)*poc(n+nu+2,n+nu+1)*factorial(n-m)*factorial(nu+mu)); | ||
%B1 = (-1)^(m+n)*1i*a0*b0*((2*n+1)/(2*n*(n+1)))*exp(1i*(mu-m)*phi0); | ||
B2 = 0; | ||
for q=1:Qmax+1 | ||
p = n+nu-2*(q-1); | ||
sB = (-1)^(q-1)*(2*(n+1)*(nu-mu)*a2(q)-(p*(p+3)-nu*(nu+1)-n*(n+3)-2*mu*(n+1))*a3(q))... | ||
*h(p+1,kd)*P(mu-m,p+1,cos(theta0)); | ||
B2 = B2 + sB; | ||
end | ||
Bt = B1*B2; | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
function Bt = B(m,n,mu,nu,kd,theta0,phi0) | ||
|
||
J = @(n,x) sqrt(pi/(2*x))*besselj(n+0.5,x); %spherical bessel | ||
h = @(n,x) sqrt(pi/(2*x))*(besselj(n+0.5,x) + 1i*bessely(n+0.5,x));; %spherical Hankel | ||
qmax = min([n,nu,0.5*(n+nu-abs(m-mu))]); | ||
Qmax = min([n+1,nu,0.5*(n+1+nu-abs(m-mu))]); | ||
% if m == -mu & n == nu | ||
% Bt = 0; | ||
% elseif m == -n & mu == -nu | ||
% Bt = 0; | ||
% elseif m == n & mu == nu | ||
% Bt = 0; | ||
% else | ||
%calculate Gaunt coefficient 0-->1 | ||
%calculate the denominator of a2q and a3q | ||
%a2(1) = (pochhammer(n+1+1,n+1)*pochhammer(nu+1,nu)*factorial(n+1+nu-(-m-1)-(mu+1)))... | ||
% /(pochhammer(n+1+nu+1,n+1+nu)*factorial(n+1-(-m-1))*factorial(nu-(mu+1))); | ||
%a3(1) = (pochhammer(n+1+1,n+1)*pochhammer(nu+1,nu)*factorial(n+1+nu--m-mu))... | ||
% /(pochhammer(n+1+nu+1,n+1+nu)*factorial(n+1--m)*factorial(nu-mu)); | ||
a2(1) = 1; a3(1) = 1; | ||
%b0 = ((2*n+1)*(n+nu+m-mu+1))/((2*n+2*nu+1)*(n+m+1)); | ||
%calculate the normalized a2q | ||
for q=2:Qmax+1 | ||
p = n+1+nu-2*(q-1); | ||
n4 = n+1+nu-(-m-1)-(mu+1); | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-1-(n+1),2*k-2)*poc(mu+1-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-(n+1)+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a2(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a2(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate the normalized a3q | ||
for q=2:Qmax+1 | ||
p = n+1+nu-2*(q-1); | ||
n4 = n+1+nu--m-mu; | ||
S1 = 0; | ||
for k=1:q | ||
s1 = (poc(-m-(n+1),2*k-2)*poc(mu-nu,2*q-2*k))... | ||
/(factorial(k-1)*factorial(q-k)*poc(-(n+1)+0.5,k-1)*poc(-nu+0.5,q-k)); | ||
S1 = S1 + s1; | ||
end | ||
S2 = 0; | ||
for j=1:q-1 | ||
s2 = a3(j)*poc(-p-q+j+0.5,q-j)/factorial(q-j); | ||
S2 = S2 + s2; | ||
end | ||
a3(q) = poc(p+0.5,2*q-2)*S1/poc(-n4,2*q-2)-S2; | ||
end | ||
%calculate B coefficient | ||
|
||
B1 = exp(1i*(mu-m)*(phi0))*((-1)^m*(1i)^(nu+n+1)*poc(n+2,n+1)*poc(nu+2,nu+1)*factorial(n+nu+m-mu+1))... | ||
/(4*n*(n+1)*(n+m+1)*poc(n+nu+2,n+nu+1)*factorial(n-m)*factorial(nu+mu)); | ||
%B1 = (-1)^(m+n)*1i*a0*b0*((2*n+1)/(2*n*(n+1)))*exp(1i*(mu-m)*phi0); | ||
B2 = 0; | ||
for q=1:Qmax+1 | ||
p = n+nu-2*(q-1); | ||
sB = (-1)^(q-1)*(2*(n+1)*(nu-mu)*a2(q)-(p*(p+3)-nu*(nu+1)-n*(n+3)-2*mu*(n+1))*a3(q))... | ||
*J(p+1,kd)*P(mu-m,p+1,cos(theta0)); | ||
B2 = B2 + sB; | ||
end | ||
Bt = B1*B2; | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
function Btot = Bt(m,n,mu,nu,k2d,tetalj,philj) | ||
format long | ||
|
||
%Bessel Functions | ||
sphj=@(n,kr) sqrt(pi./(2*kr)).*besselj(n+0.5,kr); | ||
sphy=@(n,kr) (sqrt(pi./(2*kr)).*(bessely(n+0.5,kr))); | ||
sphh=@(n,kr) sphj(n,kr)+(1i.*sphy(n,kr)); | ||
|
||
%Translation coefficient function | ||
Bmn = @(m,n,mu,nu,phi) ((((-1).^m).*((1i).^(nu+n+1)).*poc(n+2,n+1).*poc(nu+2,nu+1).*factorial(n+nu+m-mu+1))./(4.*n.*(n+1).*(n+m+1).*poc(n+nu+2,n+nu+1).*factorial(n-m).*factorial(nu+mu))).*exp((1i).*(mu-m).*(philj+pi)); | ||
bmn = @(n,mu,nu,d,p,q,E,G,leg) ((-1).^q).*((2.*(n+1).*(nu-mu).*E)-(((p.*(p+3))-(nu.*(nu+1))-(n.*(n+3))-(2.*mu.*(n+1))).*G)).*sphh(p+1,d).*leg; | ||
if m == -mu & n == nu | ||
Btot = 0; | ||
elseif m == -n & mu == -nu | ||
Btot = 0; | ||
elseif m == n & mu == nu | ||
Btot = 0; | ||
else | ||
a1 = @(p,q) poc(p+1.5,2*q); | ||
a2 = @(m,n,mu,nu,q) poc(-n-nu-m+mu-1,2*q); | ||
a3 = @(m,n,k) poc(-m-n-2,2*k); | ||
a4 = @(mu,nu,q,k) poc(mu-nu+1,(2*q)-(2*k)); | ||
a5 = @(n,k) poc(-n+0.5-1,k); | ||
a6 = @(nu,q,k) poc(-nu+0.5,q-k); | ||
a7 = @(p,q,j) poc(-p-q+j+0.5-1,q-j); | ||
|
||
M = n+nu; | ||
qmax = (n+nu-abs(m-mu))/2; | ||
Qmax=(n+nu+1-abs(m-mu))/2; | ||
for i =0:1:floor(Qmax) | ||
pp(i+1) = M-(2.*i); | ||
end | ||
|
||
E = zeros(floor(Qmax)+1,1); | ||
E(1)=1; | ||
G = zeros(floor(Qmax)+1,1); | ||
G(1)=1; | ||
|
||
for q=0:1:floor(Qmax) | ||
a12= a1(pp(q+1),q)./a2(m,n,mu,nu,q); | ||
aa = 0; | ||
bb = 0; | ||
for k=0:1:q | ||
aa = aa+((a3(m,n,k).*a4(mu,nu,q,k))./(factorial(k).*factorial(q-k).*a5(n,k).*a6(nu,q,k))); | ||
end | ||
for j=0:1:q-1 | ||
bb = bb +(((a7(pp(q+1),q,j))./factorial(q-j)).*E(j+1)); | ||
end | ||
aq=(a12.*aa)-bb; | ||
E(q+1) = aq; | ||
end | ||
%Gaunt coefficient function (Version1) | ||
a11 = @(p,q) poc(p+1.5,2*q); | ||
a21 = @(m,n,mu,nu,q) poc(-n-nu-m+mu-1,2*q); | ||
a31 = @(m,n,k) poc(-m-n-1,2*k); | ||
a41 = @(mu,nu,q,k) poc(mu-nu,(2*q)-(2*k)); | ||
a51 = @(n,k) poc(-n+0.5-1,k); | ||
a61 = @(nu,q,k) poc(-nu+0.5,q-k); | ||
a71 = @(p,q,j) poc(-p-q+j+0.5-1,q-j); | ||
|
||
for q=0:1:floor(Qmax) | ||
a12= a11(pp(q+1),q)./a21(m,n,mu,nu,q); | ||
aa = 0; | ||
bb = 0; | ||
for k=0:1:q | ||
aa = aa+((a31(m,n,k).*a41(mu,nu,q,k))./(factorial(k).*factorial(q-k).*a51(n,k).*a61(nu,q,k))); | ||
end | ||
for j=0:1:q-1 | ||
bb = bb +(((a71(pp(q+1),q,j))./factorial(q-j)).*G(j+1)); | ||
end | ||
aq=(a12.*aa)-bb; | ||
G(q+1) = aq; | ||
end | ||
|
||
bsum = 0; | ||
for q=0:1:floor(Qmax); | ||
leg = legendrePP(pp(q+1)+1,mu-m,cos(tetalj)); | ||
bsum = bsum+ bmn(n,mu,nu,k2d,pp(q+1),q,E(q+1),G(q+1),leg); | ||
end | ||
|
||
Bmn(m,n,mu,nu,philj); | ||
Btot =Bmn(m,n,mu,nu,philj).*bsum; | ||
end |
Binary file not shown.
Binary file not shown.
Oops, something went wrong.