|
@@ -556,10 +556,15 @@ int ScattCoeff_std(double x[], complex m[], complex **an, complex **bn,
|
|
|
if (n_max != tmp_n_max) printf("n_max mismatch 2\n");
|
|
|
}
|
|
|
|
|
|
- complex z1, z2, cn;
|
|
|
- complex Num, Denom;
|
|
|
- complex G1, G2;
|
|
|
- complex Temp;
|
|
|
+ // complex z1, z2, cn;
|
|
|
+ // complex Num, Denom;
|
|
|
+ // complex G1, G2;
|
|
|
+ // complex Temp;
|
|
|
+ std::complex<double> z1, z2, cn;
|
|
|
+ std::complex<double> Num, Denom;
|
|
|
+ std::complex<double> G1, G2;
|
|
|
+ std::complex<double> Temp;
|
|
|
+
|
|
|
double Tmp;
|
|
|
|
|
|
int n, l, t;
|
|
@@ -573,49 +578,81 @@ int ScattCoeff_std(double x[], complex m[], complex **an, complex **bn,
|
|
|
//**************************************************************************//
|
|
|
|
|
|
// Allocate memory to the arrays
|
|
|
- complex **D1_mlxl = (complex **) malloc(L*sizeof(complex *));
|
|
|
- complex **D1_mlxlM1 = (complex **) malloc(L*sizeof(complex *));
|
|
|
-
|
|
|
- complex **D3_mlxl = (complex **) malloc(L*sizeof(complex *));
|
|
|
- complex **D3_mlxlM1 = (complex **) malloc(L*sizeof(complex *));
|
|
|
-
|
|
|
- complex **Q = (complex **) malloc(L*sizeof(complex *));
|
|
|
-
|
|
|
- complex **Ha = (complex **) malloc(L*sizeof(complex *));
|
|
|
- complex **Hb = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ //complex **D1_mlxl = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ //complex **D1_mlxlM1 = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ std::vector< std::vector< std::complex<double> > > D1_mlxl;
|
|
|
+ D1_mlxl.resize(L);
|
|
|
+ std::vector< std::vector< std::complex<double> > >D1_mlxlM1;
|
|
|
+ D1_mlxlM1.resize(L);
|
|
|
+
|
|
|
+ // complex **D3_mlxl = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ // complex **D3_mlxlM1 = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ std::vector< std::vector< std::complex<double> > > D3_mlxl;
|
|
|
+ D3_mlxl.resize(L);
|
|
|
+ std::vector< std::vector< std::complex<double> > > D3_mlxlM1;
|
|
|
+ D3_mlxlM1.resize(L);
|
|
|
+
|
|
|
+ //complex **Q = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ std::vector< std::vector< std::complex<double> > > Q;
|
|
|
+ Q.resize(L);
|
|
|
+
|
|
|
+ //complex **Ha = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ std::vector< std::vector< std::complex<double> > > Ha;
|
|
|
+ Ha.resize(L);
|
|
|
+ //complex **Hb = (complex **) malloc(L*sizeof(complex *));
|
|
|
+ std::vector< std::vector< std::complex<double> > > Hb;
|
|
|
+ Hb.resize(L);
|
|
|
|
|
|
for (l = 0; l < L; l++) {
|
|
|
- D1_mlxl[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
- D1_mlxlM1[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
-
|
|
|
- D3_mlxl[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
- D3_mlxlM1[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
-
|
|
|
- Q[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
-
|
|
|
- Ha[l] = (complex *) malloc(n_max*sizeof(complex));
|
|
|
- Hb[l] = (complex *) malloc(n_max*sizeof(complex));
|
|
|
+ // D1_mlxl[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ // D1_mlxlM1[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ D1_mlxl[l].resize(n_max +1);
|
|
|
+ D1_mlxlM1[l].resize(n_max +1);
|
|
|
+
|
|
|
+ // D3_mlxl[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ // D3_mlxlM1[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ D3_mlxl[l].resize(n_max +1);
|
|
|
+ D3_mlxlM1[l].resize(n_max +1);
|
|
|
+
|
|
|
+ //Q[l] = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ Q[l].resize(n_max + 1);
|
|
|
+
|
|
|
+ // Ha[l] = (complex *) malloc(n_max*sizeof(complex));
|
|
|
+ // Hb[l] = (complex *) malloc(n_max*sizeof(complex));
|
|
|
+ Ha[l].resize(n_max);
|
|
|
+ Hb[l].resize(n_max);
|
|
|
}
|
|
|
|
|
|
(*an) = (complex *) malloc(n_max*sizeof(complex));
|
|
|
(*bn) = (complex *) malloc(n_max*sizeof(complex));
|
|
|
+ an_std.resize(n_max);
|
|
|
+ bn_std.resize(n_max);
|
|
|
|
|
|
- complex *D1XL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
- complex *D3XL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ // complex *D1XL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ // complex *D3XL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ std::vector< std::complex<double> > D1XL;
|
|
|
+ D1XL.resize(n_max+1);
|
|
|
+ std::vector< std::complex<double> > D3XL;
|
|
|
+ D3XL.resize(n_max+1);
|
|
|
|
|
|
- complex *PsiXL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
- complex *ZetaXL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+
|
|
|
+ // complex *PsiXL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ // complex *ZetaXL = (complex *) malloc((n_max + 1)*sizeof(complex));
|
|
|
+ std::vector< std::complex<double> > PsiXL;
|
|
|
+ PsiXL.resize(n_max+1);
|
|
|
+ std::vector< std::complex<double> > ZetaXL;
|
|
|
+ ZetaXL.resize(n_max+1);
|
|
|
|
|
|
//*************************************************//
|
|
|
// Calculate D1 and D3 for z1 in the first layer //
|
|
|
//*************************************************//
|
|
|
if (fl == pl) { // PEC layer
|
|
|
for (n = 0; n <= n_max; n++) {
|
|
|
- D1_mlxl[fl][n] = Complex(0, -1);
|
|
|
- D3_mlxl[fl][n] = C_I;
|
|
|
+ D1_mlxl[fl][n] = std::complex<double>(0, -1);
|
|
|
+ D3_mlxl[fl][n] = std::complex<double>(0, 1);
|
|
|
}
|
|
|
} else { // Regular layer
|
|
|
- z1 = RCmul(x[fl], m[fl]);
|
|
|
+ z1 = x_std[fl]* m_std[fl];
|
|
|
|
|
|
// Calculate D1 and D3
|
|
|
calcD1D3(z1, n_max, &(D1_mlxl[fl]), &(D3_mlxl[fl]));
|
|
@@ -715,6 +752,7 @@ int ScattCoeff_std(double x[], complex m[], complex **an, complex **bn,
|
|
|
// first layer is 0 (zero), in future versions all arrays will follow //
|
|
|
// this convention to save memory. (13 Nov, 2014) //
|
|
|
//*********************************************************************//
|
|
|
+ // TODO: Check an, bn and an_std, bn_std are equal
|
|
|
for (n = 0; n < n_max; n++) {
|
|
|
//********************************************************************//
|
|
|
//Expressions for calculating an and bn coefficients are not valid if //
|