|
@@ -211,6 +211,12 @@ namespace nmie {
|
|
|
template <typename FloatType>
|
|
|
void MultiLayerMie<FloatType>::calcFieldByComponents(const FloatType Rho,
|
|
|
const FloatType Theta, const FloatType Phi,
|
|
|
+ const std::vector<std::complex<FloatType> > &Psi,
|
|
|
+ const std::vector<std::complex<FloatType> > &D1n,
|
|
|
+ const std::vector<std::complex<FloatType> > &Zeta,
|
|
|
+ const std::vector<std::complex<FloatType> > &D3n,
|
|
|
+ const std::vector<FloatType> &Pi,
|
|
|
+ const std::vector<FloatType> &Tau,
|
|
|
std::vector<std::complex<FloatType> > &E,
|
|
|
std::vector<std::complex<FloatType> > &H) {
|
|
|
|
|
@@ -219,8 +225,6 @@ namespace nmie {
|
|
|
std::vector<std::complex<FloatType> > ipow = {c_one, c_i, -c_one, -c_i};
|
|
|
std::vector<std::complex<FloatType> > M3o1n(3), M3e1n(3), N3o1n(3), N3e1n(3);
|
|
|
std::vector<std::complex<FloatType> > M1o1n(3), M1e1n(3), N1o1n(3), N1e1n(3);
|
|
|
- std::vector<std::complex<FloatType> > Psi(nmax_ + 1), D1n(nmax_ + 1), Zeta(nmax_ + 1), D3n(nmax_ + 1);
|
|
|
- std::vector<FloatType> Pi(nmax_), Tau(nmax_);
|
|
|
|
|
|
std::complex<FloatType> ml;
|
|
|
|
|
@@ -233,13 +237,13 @@ namespace nmie {
|
|
|
unsigned int l;
|
|
|
GetIndexAtRadius(Rho, ml, l);
|
|
|
|
|
|
- // Calculate logarithmic derivative of the Ricatti-Bessel functions
|
|
|
- calcD1D3(Rho*ml, D1n, D3n);
|
|
|
- // Calculate Ricatti-Bessel functions
|
|
|
- calcPsiZeta(Rho*ml, Psi, Zeta);
|
|
|
-
|
|
|
- // Calculate angular functions Pi and Tau
|
|
|
- calcPiTau(nmm::cos(Theta), Pi, Tau);
|
|
|
+// // Calculate logarithmic derivative of the Ricatti-Bessel functions
|
|
|
+// calcD1D3(Rho*ml, D1n, D3n);
|
|
|
+// // Calculate Ricatti-Bessel functions
|
|
|
+// calcPsiZeta(Rho*ml, Psi, Zeta);
|
|
|
+//
|
|
|
+// // Calculate angular functions Pi and Tau
|
|
|
+// calcPiTau(nmm::cos(Theta), Pi, Tau);
|
|
|
|
|
|
// for (int n = nmax_ - 2; n >= 0; n--) {
|
|
|
for (int n = 0; n < nmax_; n++) {
|
|
@@ -377,7 +381,19 @@ namespace nmie {
|
|
|
std::vector<std::complex<FloatType> > Es(3), Hs(3);
|
|
|
|
|
|
// Do the actual calculation of electric and magnetic field
|
|
|
- calcFieldByComponents(Rho, Theta, Phi, Es, Hs);
|
|
|
+ std::vector<std::complex<FloatType> > Psi(nmax_ + 1), D1n(nmax_ + 1), Zeta(nmax_ + 1), D3n(nmax_ + 1);
|
|
|
+ std::vector<FloatType> Pi(nmax_), Tau(nmax_);
|
|
|
+ std::complex<FloatType> ml;
|
|
|
+ GetIndexAtRadius(Rho, ml);
|
|
|
+
|
|
|
+ // Calculate logarithmic derivative of the Ricatti-Bessel functions
|
|
|
+ calcD1D3(Rho*ml, D1n, D3n);
|
|
|
+ // Calculate Ricatti-Bessel functions
|
|
|
+ calcPsiZeta(Rho*ml, Psi, Zeta);
|
|
|
+ // Calculate angular functions Pi and Tau
|
|
|
+ calcPiTau(nmm::cos(Theta), Pi, Tau);
|
|
|
+
|
|
|
+ calcFieldByComponents(Rho, Theta, Phi, Psi, D1n, Zeta, D3n, Pi, Tau, Es, Hs);
|
|
|
for (int sph_coord = 0; sph_coord<3; ++sph_coord) {
|
|
|
Es_[point][sph_coord] = Es[sph_coord];
|
|
|
Hs_[point][sph_coord] = Hs[sph_coord];
|