|  | @@ -1394,6 +1394,7 @@ c    MM       + 1  and - 1, alternately
 | 
	
		
			
				|  |  |      for (int n = 0; n < nmax_; n++) {
 | 
	
		
			
				|  |  |        double rn = static_cast<double>(n + 1);
 | 
	
		
			
				|  |  |        std::complex<double> zn = bj[n+1] + c_i*by[n+1];
 | 
	
		
			
				|  |  | +      // using BH 4.12 and 4.50
 | 
	
		
			
				|  |  |        std::complex<double> xxip = Rho*(bj[n] + c_i*by[n]) - rn*zn;
 | 
	
		
			
				|  |  |        
 | 
	
		
			
				|  |  |        using std::sin;
 | 
	
	
		
			
				|  | @@ -1456,6 +1457,80 @@ c    MM       + 1  and - 1, alternately
 | 
	
		
			
				|  |  |    // ********************************************************************** //
 | 
	
		
			
				|  |  |    // ********************************************************************** //
 | 
	
		
			
				|  |  |    // ********************************************************************** //
 | 
	
		
			
				|  |  | +  void MultiLayerMie::fieldInt(const double Rho, const double Phi, const double Theta, const  std::vector<double>& Pi, const std::vector<double>& Tau, std::vector<std::complex<double> >& E, std::vector<std::complex<double> >& H)  {
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    std::complex<double> c_zero(0.0, 0.0), c_i(0.0, 1.0);
 | 
	
		
			
				|  |  | +    std::vector<std::complex<double> > vm3o1n(3), vm3e1n(3), vn3o1n(3), vn3e1n(3);
 | 
	
		
			
				|  |  | +    std::vector<std::complex<double> > vm1o1n(3), vm1e1n(3), vn1o1n(3), vn1e1n(3);
 | 
	
		
			
				|  |  | +    std::vector<std::complex<double> > El(3,c_zero), Hl(3,c_zero);
 | 
	
		
			
				|  |  | +    std::vector<std::complex<double> > bj(nmax_+1), by(nmax_+1), bd(nmax_+1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //%TODO  find layer from Rho
 | 
	
		
			
				|  |  | +    int l=0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Calculate spherical Bessel and Hankel functions
 | 
	
		
			
				|  |  | +    sphericalBessel(Rho,bj, by, bd);    
 | 
	
		
			
				|  |  | +    for (int n = 0; n < nmax_; n++) {
 | 
	
		
			
				|  |  | +      double rn = static_cast<double>(n + 1);
 | 
	
		
			
				|  |  | +      std::complex<double> zn = bj[n+1] + c_i*by[n+1];
 | 
	
		
			
				|  |  | +      // using BH 4.12 and 4.50
 | 
	
		
			
				|  |  | +      std::complex<double> xxip = Rho*(bj[n] + c_i*by[n]) - rn*zn;
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      using std::sin;
 | 
	
		
			
				|  |  | +      using std::cos;
 | 
	
		
			
				|  |  | +      vm3o1n[0] = c_zero;
 | 
	
		
			
				|  |  | +      vm3o1n[1] = cos(Phi)*Pi[n]*zn;
 | 
	
		
			
				|  |  | +      vm3o1n[2] = -sin(Phi)*Tau[n]*zn;
 | 
	
		
			
				|  |  | +      vm3e1n[0] = c_zero;
 | 
	
		
			
				|  |  | +      vm3e1n[1] = -sin(Phi)*Pi[n]*zn;
 | 
	
		
			
				|  |  | +      vm3e1n[2] = -cos(Phi)*Tau[n]*zn;
 | 
	
		
			
				|  |  | +      vn3o1n[0] = sin(Phi)*rn*(rn + 1.0)*sin(Theta)*Pi[n]*zn/Rho;
 | 
	
		
			
				|  |  | +      vn3o1n[1] = sin(Phi)*Tau[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn3o1n[2] = cos(Phi)*Pi[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn3e1n[0] = cos(Phi)*rn*(rn + 1.0)*sin(Theta)*Pi[n]*zn/Rho;
 | 
	
		
			
				|  |  | +      vn3e1n[1] = cos(Phi)*Tau[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn3e1n[2] = -sin(Phi)*Pi[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      zn = bj[n+1];
 | 
	
		
			
				|  |  | +      xxip = Rho*(bj[n]) - rn*zn;
 | 
	
		
			
				|  |  | +      vm1o1n[0] = c_zero;
 | 
	
		
			
				|  |  | +      vm1o1n[1] = cos(Phi)*Pi[n]*zn;
 | 
	
		
			
				|  |  | +      vm1o1n[2] = -sin(Phi)*Tau[n]*zn;
 | 
	
		
			
				|  |  | +      vm1e1n[0] = c_zero;
 | 
	
		
			
				|  |  | +      vm1e1n[1] = -sin(Phi)*Pi[n]*zn;
 | 
	
		
			
				|  |  | +      vm1e1n[2] = -cos(Phi)*Tau[n]*zn;
 | 
	
		
			
				|  |  | +      vn1o1n[0] = sin(Phi)*rn*(rn + 1.0)*sin(Theta)*Pi[n]*zn/Rho;
 | 
	
		
			
				|  |  | +      vn1o1n[1] = sin(Phi)*Tau[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn1o1n[2] = cos(Phi)*Pi[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn1e1n[0] = cos(Phi)*rn*(rn + 1.0)*sin(Theta)*Pi[n]*zn/Rho;
 | 
	
		
			
				|  |  | +      vn1e1n[1] = cos(Phi)*Tau[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      vn1e1n[2] = -sin(Phi)*Pi[n]*xxip/Rho;
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      // scattered field: BH p.94 (4.45)
 | 
	
		
			
				|  |  | +      std::complex<double> encap = std::pow(c_i, rn)*(2.0*rn + 1.0)/(rn*rn + rn);
 | 
	
		
			
				|  |  | +      for (int i = 0; i < 3; i++) {
 | 
	
		
			
				|  |  | +	El[i] = El[i] + encap*(cl_n_[l][n]*vm1o1n[i] - c_i*dl_n_[l][n]*vm1e1n[i]
 | 
	
		
			
				|  |  | +			       + c_i*al_n_[l][n]*vn3e1n[i] - bl_n_[l][n]*vm3o1n[i]);
 | 
	
		
			
				|  |  | +	Hl[i] = Hl[i] + encap*(-dl_n_[l][n]*vm1e1n[i] - c_i*cl_n_[l][n]*vn1o1n[i]
 | 
	
		
			
				|  |  | +			       + c_i*bl_n_[l][n]*vn3o1n[i] + al_n_[l][n]*vm3e1n[i]);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // magnetic field
 | 
	
		
			
				|  |  | +    double hffact = 1.0/(cc_*mu_);
 | 
	
		
			
				|  |  | +    for (int i = 0; i < 3; i++) {
 | 
	
		
			
				|  |  | +      Hl[i] = hffact*Hl[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    for (int i = 0; i < 3; i++) {
 | 
	
		
			
				|  |  | +      // electric field E [V m-1] = EF*E0
 | 
	
		
			
				|  |  | +      E[i] = El[i];
 | 
	
		
			
				|  |  | +      H[i] = Hl[i];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +   }  // end of void fieldExt(...)
 | 
	
		
			
				|  |  | +  // ********************************************************************** //
 | 
	
		
			
				|  |  | +  // ********************************************************************** //
 | 
	
		
			
				|  |  | +  // ********************************************************************** //
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    //**********************************************************************************//
 | 
	
		
			
				|  |  |    // This function calculates complex electric and magnetic field in the surroundings //
 | 
	
	
		
			
				|  | @@ -1519,11 +1594,8 @@ c    MM       + 1  and - 1, alternately
 | 
	
		
			
				|  |  |        if (Rho >= outer_size) {
 | 
	
		
			
				|  |  |  	fieldExt(Rho, Phi, Theta, Pi, Tau, Es, Hs);
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  | -    	// TODO, for now just set all the fields to zero
 | 
	
		
			
				|  |  | -    	for (int i = 0; i < 3; i++) {
 | 
	
		
			
				|  |  | -    	  Es[i] = std::complex<double>(0.0, 0.0);
 | 
	
		
			
				|  |  | -    	  Hs[i] = std::complex<double>(0.0, 0.0);
 | 
	
		
			
				|  |  | -    	}
 | 
	
		
			
				|  |  | +	printf("in.. \n");
 | 
	
		
			
				|  |  | +	fieldInt(Rho, Phi, Theta, Pi, Tau, Es, Hs);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        std::complex<double>& Ex = E_field_[point][0];
 | 
	
		
			
				|  |  |        std::complex<double>& Ey = E_field_[point][1];
 |