Dudom
Former-commit-id: ade18052fd1fbc4c02557c8fad65d66ad0272f47
This commit is contained in:
parent
4b7797edaf
commit
2cab9c1307
|
@ -1473,6 +1473,54 @@ Mie decomposition of Green's function for single nanoparticle
|
||||||
Translation of spherical waves: getting insane
|
Translation of spherical waves: getting insane
|
||||||
\end_layout
|
\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
|
\begin_layout Chapter
|
||||||
Multiple scattering: nice linear algebra born from all the mess
|
Multiple scattering: nice linear algebra born from all the mess
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -1484,7 +1532,7 @@ Quantisation of quasistatic modes of a sphere
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
\begin_inset CommandInset bibtex
|
\begin_inset CommandInset bibtex
|
||||||
LatexCommand bibtex
|
LatexCommand bibtex
|
||||||
bibfiles "Electrodynamics,/home/mmn/repo/qpms/Electrodynamics"
|
bibfiles "/l/necadam1/repo/qpms/Electrodynamics"
|
||||||
options "plain"
|
options "plain"
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <gsl/gsl_sf_bessel.h>
|
#include <gsl/gsl_sf_bessel.h>
|
||||||
#include "assert_cython_workaround.h"
|
#include "assert_cython_workaround.h"
|
||||||
#include <stdlib.h> //abort()
|
#include <stdlib.h> //abort()
|
||||||
|
#include <gsl/gsl_sf_coupling.h>
|
||||||
|
|
||||||
// if defined, the pointer B_multipliers[y] corresponds to the q = 1 element;
|
// 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
|
// 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)
|
// [Xu_old], eq. (83)
|
||||||
complex double qpms_trans_single_B_Xu(int m, int n, int mu, int nu, sph_t kdlj,
|
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) {
|
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;
|
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
|
||||||
double costheta = cos(kdlj.theta);
|
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,
|
complex double qpms_trans_single_B(qpms_normalisation_t norm,
|
||||||
int m, int n, int mu, int nu, sph_t kdlj,
|
int m, int n, int mu, int nu, sph_t kdlj,
|
||||||
bool r_ge_d, qpms_bessel_t J) {
|
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;
|
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
|
||||||
double costheta = cos(kdlj.theta);
|
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,
|
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) {
|
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;
|
if(r_ge_d) J = QPMS_BESSEL_REGULAR;
|
||||||
double costheta = cos(kdlj.theta);
|
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,
|
qpms_normalisation_t norm,
|
||||||
complex double *dest, int m, int n, int mu, int nu, int Qmax){
|
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));
|
assert(Qmax == gauntB_Q_max(-m,n,mu,nu));
|
||||||
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
|
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
|
||||||
// assert(Qmax == q2max);
|
// assert(Qmax == q2max);
|
||||||
|
@ -607,6 +631,7 @@ static void qpms_trans_calculator_multipliers_A_Taylor(
|
||||||
|
|
||||||
static void qpms_trans_calculator_multipliers_B_Taylor(
|
static void qpms_trans_calculator_multipliers_B_Taylor(
|
||||||
complex double *dest, int m, int n, int mu, int nu, int Qmax) {
|
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));
|
assert(Qmax == gauntB_Q_max(-m,n,mu,nu));
|
||||||
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
|
int q2max = gaunt_q_max(-m-1,n+1,mu+1,nu);
|
||||||
//assert(Qmax == q2max);
|
//assert(Qmax == q2max);
|
||||||
|
|
Loading…
Reference in New Issue