Former-commit-id: ade18052fd1fbc4c02557c8fad65d66ad0272f47
This commit is contained in:
Marek Nečada 2018-03-08 00:14:15 +02:00
parent 4b7797edaf
commit 2cab9c1307
2 changed files with 75 additions and 2 deletions

View File

@ -1473,6 +1473,54 @@ Mie decomposition of Green's function for single nanoparticle
Translation of spherical waves: getting insane
\end_layout
\begin_layout Standard
Cruzan's formulation, Xu's normalisation
\begin_inset CommandInset citation
LatexCommand cite
after "(59)"
key "xu_efficient_1998"
\end_inset
:
\begin_inset Formula
\[
B_{m,n,\mu,\nu}=\underbrace{\left(-1\right)^{-m}\frac{\left(2\nu+1\right)\left(n+m\right)!\left(\nu-\mu\right)!}{2n\left(n+1\right)\left(n-m\right)!\left(\nu+\mu\right)!}\sum_{q=1}^{Q_{max}^{-m,n,\mu,\nu}}i^{p+1}\sqrt{\left(\left(p+1\right)^{2}-\left(n-\nu\right)^{2}\right)\left(\left(n+\nu+1\right)^{2}-\left(p+1\right)^{2}\right)}b_{-m,n,\mu,\nu}^{p,p+1}}_{\mbox{(without the \ensuremath{\sum})}\equiv B_{m,n,\mu,\nu}^{q}}z_{p+1}P_{p+1}e^{i\left(\mu-m\right)\phi},
\]
\end_inset
where
\begin_inset CommandInset citation
LatexCommand cite
after "(28,5,60,61)"
key "xu_efficient_1998"
\end_inset
\begin_inset Formula $p\equiv n+\nu-2q$
\end_inset
,
\begin_inset Formula $Q_{max}^{-m,n,\mu,\nu}\equiv\min\left(n,\nu,\frac{n+\nu+1-\left|\mu-m\right|}{2}\right)$
\end_inset
,
\begin_inset Formula
\[
b_{-m,n,\mu,\nu}^{p,p+1}\equiv\left(-1\right)^{\mu-m}\left(2p+3\right)\sqrt{\frac{\left(n-m\right)!\left(\nu+\mu\right)!\left(p+m-\mu+1\right)!}{\left(n+m\right)!\left(\nu-\mu\right)!\left(p-m+\mu+1\right)!}}\begin{pmatrix}n & \nu & p+1\\
-m & \mu & m-\mu
\end{pmatrix}\begin{pmatrix}n & \nu & p\\
0 & 0 & 0
\end{pmatrix}.
\]
\end_inset
\end_layout
\begin_layout Chapter
Multiple scattering: nice linear algebra born from all the mess
\end_layout
@ -1484,7 +1532,7 @@ Quantisation of quasistatic modes of a sphere
\begin_layout Standard
\begin_inset CommandInset bibtex
LatexCommand bibtex
bibfiles "Electrodynamics,/home/mmn/repo/qpms/Electrodynamics"
bibfiles "/l/necadam1/repo/qpms/Electrodynamics"
options "plain"
\end_inset

View File

@ -8,6 +8,7 @@
#include <gsl/gsl_sf_bessel.h>
#include "assert_cython_workaround.h"
#include <stdlib.h> //abort()
#include <gsl/gsl_sf_coupling.h>
// if defined, the pointer B_multipliers[y] corresponds to the q = 1 element;
// otherwise, it corresponds to the q = 0 element, which should be identically zero
@ -228,6 +229,7 @@ complex double qpms_trans_single_A_Taylor(int m, int n, int mu, int nu, sph_t kd
// [Xu_old], eq. (83)
complex double qpms_trans_single_B_Xu(int m, int n, int mu, int nu, sph_t kdlj,
bool r_ge_d, qpms_bessel_t J) {
assert(0); // FIXME probably gives wrong values, do not use.
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
double costheta = cos(kdlj.theta);
@ -287,6 +289,7 @@ complex double qpms_trans_single_B_Xu(int m, int n, int mu, int nu, sph_t kdlj,
complex double qpms_trans_single_B(qpms_normalisation_t norm,
int m, int n, int mu, int nu, sph_t kdlj,
bool r_ge_d, qpms_bessel_t J) {
assert(0); // FIXME probably gives wrong values, do not use.
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
double costheta = cos(kdlj.theta);
@ -348,6 +351,7 @@ complex double qpms_trans_single_B(qpms_normalisation_t norm,
complex double qpms_trans_single_B_Taylor(int m, int n, int mu, int nu, sph_t kdlj,
bool r_ge_d, qpms_bessel_t J) {
assert(0); // FIXME probably gives wrong values, do not use.
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
double costheta = cos(kdlj.theta);
@ -480,9 +484,29 @@ static void qpms_trans_calculator_multipliers_A_general(
}
/*static*/ void qpms_trans_calculator_multipliers_B_general(
void qpms_trans_calculator_multipliers_B_general(
qpms_normalisation_t norm,
complex double *dest, int m, int n, int mu, int nu, int Qmax){
// This is according to the Cruzan-type formula [Xu](59)
assert(Qmax == gauntB_Q_max(-m,n,mu,nu));
int csphase = qpms_normalisation_t_csphase(norm); //TODO FIXME use this
norm = qpms_normalisation_t_normonly(norm);
double normlogfac= qpms_trans_normlogfac(norm,m,n,mu,nu);
double normfac = qpms_trans_normfac(norm,m,n,mu,nu);
// TODO use csphase to modify normfac here!!!!
// normfac = xxx ? -normfac : normfac;
normfac *= min1pow(m);//different from old taylor
}
/*static*/ void qpms_trans_calculator_multipliers_B_general_oldXu(
qpms_normalisation_t norm,
complex double *dest, int m, int n, int mu, int nu, int Qmax) {
assert(0); // FIXME probably gives wrong values, do not use.
assert(Qmax == gauntB_Q_max(-m,n,mu,nu));
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
// assert(Qmax == q2max);
@ -607,6 +631,7 @@ static void qpms_trans_calculator_multipliers_A_Taylor(
static void qpms_trans_calculator_multipliers_B_Taylor(
complex double *dest, int m, int n, int mu, int nu, int Qmax) {
assert(0); // FIXME probably gives wrong values, do not use.
assert(Qmax == gauntB_Q_max(-m,n,mu,nu));
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
//assert(Qmax == q2max);