| 
					
				 | 
			
			
				@@ -1129,7 +1129,7 @@ namespace nmie { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       cln_[L][n] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       dln_[L][n] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      //printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", L, n, std::real(aln_[L][n]), std::imag(aln_[L][n]), L, n, std::real(bln_[L][n]), std::imag(bln_[L][n]), L, n, std::real(cln_[L][n]), std::imag(cln_[L][n]), L, n, std::real(dln_[L][n]), std::imag(dln_[L][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", L, n, std::real(aln_[L][n]), std::imag(aln_[L][n]), L, n, std::real(bln_[L][n]), std::imag(bln_[L][n]), L, n, std::real(cln_[L][n]), std::imag(cln_[L][n]), L, n, std::real(dln_[L][n]), std::imag(dln_[L][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::vector<std::complex<double> > D1z(nmax_ + 1), D1z1(nmax_ + 1), D3z(nmax_ + 1), D3z1(nmax_ + 1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1173,7 +1173,7 @@ namespace nmie { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // dln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dln_[l][n] = (D3z[n1]*T1 + T3)/denomPsi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", l, n, real(aln_[l][n]), imag(aln_[l][n]), l, n, real(bln_[l][n]), imag(bln_[l][n]), l, n, real(cln_[l][n]), imag(cln_[l][n]), l, n, real(dln_[l][n]), imag(dln_[l][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", l, n, real(aln_[l][n]), imag(aln_[l][n]), l, n, real(bln_[l][n]), imag(bln_[l][n]), l, n, real(cln_[l][n]), imag(cln_[l][n]), l, n, real(dln_[l][n]), imag(dln_[l][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }  // end of all n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }  // end of all l 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1233,16 +1233,21 @@ namespace nmie { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Yang, paragraph under eq. A3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // a^(L + 1)_n = a_n, d^(L + 1) = 1 ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (int i = 0; i < nmax_; ++i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      aln_[L][i] = an_[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      bln_[L][i] = bn_[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      cln_[L][i] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      dln_[L][i] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (int n = 0; n < nmax_; n++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      aln_[L][n] = an_[n]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      bln_[L][n] = bn_[n]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      cln_[L][n] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      dln_[L][n] = c_one; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", L, n, std::real(aln_[L][n]), std::imag(aln_[L][n]), L, n, std::real(bln_[L][n]), std::imag(bln_[L][n]), L, n, std::real(cln_[L][n]), std::imag(cln_[L][n]), L, n, real(dln_[L][n]), std::imag(dln_[L][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::vector<std::complex<double> > D1z(nmax_ + 1), D1z1(nmax_ + 1), D3z(nmax_ + 1), D3z1(nmax_ + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::vector<std::complex<double> > Psiz(nmax_ + 1), Psiz1(nmax_ + 1), Zetaz(nmax_ + 1), Zetaz1(nmax_ + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::complex<double> denomZeta, denomPsi, T1, T2, T3, T4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    std::vector<std::vector<std::complex<double> > > a(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    a[0].resize(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    a[1].resize(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     auto& m = refractive_index_; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     std::vector< std::complex<double> > m1(L); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1263,37 +1268,51 @@ namespace nmie { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       for (int n = 0; n < nmax_; n++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int n1 = n + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        denomZeta = m1[l]*Zetaz[n1]*(D1z[n1] - D3z[n1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        denomPsi  =  m1[l]*Psiz[n1]*(D1z[n1] - D3z[n1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][0] = m1[l]*D3z[n1]*Zetaz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][1] = -m1[l]*D1z[n1]*Psiz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][2] = aln_[l + 1][n]*m[l]*D3z1[n1]*Zetaz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][2] -= dln_[l + 1][n]*m[l]*D1z1[n1]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        T1 = aln_[l + 1][n]*Zetaz1[n1] - dln_[l + 1][n]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        T2 = bln_[l + 1][n]*Zetaz1[n1] - cln_[l + 1][n]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        T3 = D1z1[n1]*dln_[l + 1][n]*Psiz1[n1] - D3z1[n1]*aln_[l + 1][n]*Zetaz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        T4 = D1z1[n1]*cln_[l + 1][n]*Psiz1[n1] - D3z1[n1]*bln_[l + 1][n]*Zetaz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][0] = Zetaz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][1] = -Psiz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][2] = aln_[l + 1][n]*Zetaz1[n1] - dln_[l + 1][n]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // aln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        aln_[l][n] = (D1z[n1]*m1[l]*T1 + m[l]*T3)/denomZeta; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        aln_[l][n] = (a[0][2]*a[1][1] - a[0][1]*a[1][2])/(a[0][0]*a[1][1] - a[0][1]*a[1][0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // dln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        dln_[l][n] = (a[0][2]*a[1][0] - a[0][0]*a[1][2])/(a[0][1]*a[1][0] - a[0][0]*a[0][1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        /*for (int i = 0; i < 2; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          for (int j = 0; j < 3; j++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            printf("a[%i, %i] = %g,%g ", i, j, real(a[i][j]), imag(a[i][j])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          printf("\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        printf("aln_[%i, %i] = %g,%g; dln_[%i, %i] = %g,%g\n\n", l, n, real(aln_[l][n]), imag(aln_[l][n]), l, n, real(dln_[l][n]), imag(dln_[l][n]));*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][0] = D3z[n1]*Zetaz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][1] = -D1z[n1]*Psiz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][2] = bln_[l + 1][n]*D3z1[n1]*Zetaz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[0][2] -= cln_[l + 1][n]*D1z1[n1]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][0] = m1[l]*Zetaz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][1] = -m1[l]*Psiz[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        a[1][2] = bln_[l + 1][n]*m[l]*Zetaz1[n1] - cln_[l + 1][n]*m[l]*Psiz1[n1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // bln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        bln_[l][n] = (D1z[n1]*m[l]*T2 + m1[l]*T4)/denomZeta; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bln_[l][n] = (a[0][2]*a[1][1] - a[0][1]*a[1][2])/(a[0][0]*a[1][1] - a[0][1]*a[1][0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // cln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        cln_[l][n] = (D3z[n1]*m[l]*T2 + m1[l]*T4)/denomPsi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // dln 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        dln_[l][n] = (D3z[n1]*m1[l]*T1 + m[l]*T3)/denomPsi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        cln_[l][n] = (a[0][2]*a[1][0] - a[0][0]*a[1][2])/(a[0][1]*a[1][0] - a[0][0]*a[0][1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        printf("aln_[%02i, %02i] = %g,%g; bln_[%02i, %02i] = %g,%g; cln_[%02i, %02i] = %g,%g; dln_[%02i, %02i] = %g,%g\n", l, n, real(aln_[l][n]), imag(aln_[l][n]), l, n, real(bln_[l][n]), imag(bln_[l][n]), l, n, real(cln_[l][n]), imag(cln_[l][n]), l, n, real(dln_[l][n]), imag(dln_[l][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }  // end of all n 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }  // end of all l 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // Check the result and change  aln_[0][n] and aln_[0][n] for exact zero 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     for (int n = 0; n < nmax_; ++n) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<<<<<<< HEAD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//      printf("n=%d, aln_=%g,%g,   bln_=%g,%g \n", n, real(aln_[0][n]), imag(aln_[0][n]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//         real(bln_[0][n]), imag(bln_[0][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (std::abs(aln_[0][n]) < 1e-1) aln_[0][n] = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-======= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       //printf("n=%d, aln_=%g,%g,   bln_=%g,%g \n", n, real(aln_[0][n]), imag(aln_[0][n]), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       //real(bln_[0][n]), imag(bln_[0][n])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (std::abs(aln_[0][n]) < 1e-10) aln_[0][n] = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				->>>>>>> 5923fbb88f2ef98ab93e91b894e5bf8166ca4a18 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else throw std::invalid_argument("Unstable calculation of aln_[0][n]!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (std::abs(bln_[0][n]) < 1e-10) bln_[0][n] = 0.0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       else throw std::invalid_argument("Unstable calculation of bln_[0][n]!"); 
			 |