Commit c1e87a8e authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Begin implementation of ClusterOutputInfo default constructor

parent 3a486d56
Loading
Loading
Loading
Loading
+61 −109
Original line number Diff line number Diff line
@@ -43,6 +43,10 @@ class ClusterOutputInfo {
protected:
  //! \brief Number of scales included in the output.
  int _xi_length;
  //! \brief Number of azimuth directional calculations.
  int _num_thetas;
  //! \brief Number of elevation directional calculations.
  int _num_phis;
  
public:
  //! \brief Number of spheres in the aggregate.
@@ -95,16 +99,14 @@ public:
  double phsstp;
  //! \brief Last scattered radiation elevation angle.
  double phslst;
  //! \brief Number of computed directions.
  int num_angles;
  //! \brief Number of directions to be explicitly solved.
  int ndirs;
  //! \brief Refractive index of external medium.
  double exri;
  //! \brief Number of scales (wavelengths)
  int nxi;
  //! \brief Number of scales handled by the current process.
  int xi_block_size;
  //! \brief Number of directions to be explicitly solved.
  int ndirs;
  //! \brief Index of the wavelength for T-matrix output.
  int jwtm;
  //! \brief Vector of scale (wavelength) indices.
@@ -115,143 +117,93 @@ public:
  double *vec_xi;
  //! \brief Number of sphere configurations.
  int configurations;
  //! \brief Vector of sphere sizes.
  //! \brief Vector of sphere sizes (all configurations for every scale).
  double *vec_sphere_sizes;
  //! \brief Sphere sizes arranged for scale (rows) and configurations (columns).
  double **sphere_sizes;
  //! \brief Vector of sphere refractive indices.
  //! \brief Vector of sphere refractive indices  (all configurations for every scale).
  dcomplex *vec_sphere_ref_indices;
  //! \brief Sphere refractive indices arranged for scale (rows) and configurations (columns).
  dcomplex **sphere_ref_indices;
  //! \brief Vector of sphere scattering cross-sections.
  //! \brief Vector of sphere scattering cross-sections (all configurations for every scale).
  double *vec_sphere_scs;
  //! \brief Sphere scattering cross-sections for scale (rows) and configurations (columns).
  double **sphere_scs;
  //! \brief Vector of sphere absorption cross-sections.
  //! \brief Vector of sphere absorption cross-sections (all configurations for every scale).
  double *vec_sphere_abs;
  //! \brief Sphere scattering cross-sections for scale (rows) and configurations (columns).
  double **sphere_scs;
  //! \brief Vector of sphere extinction cross-sections.
  //! \brief Vector of sphere extinction cross-sections (all configurations for every scale).
  double *vec_sphere_exs;
  //! \brief Sphere extinction cross-sections for scale (rows) and configurations (columns).
  double **sphere_exs;
  //! \brief Vector of sphere albedos.
  //! \brief Vector of sphere albedos (all configurations for every scale).
  double *vec_sphere_albs;
  //! \brief Sphere albedos for scale (rows) and configurations (columns).
  double **sphere_albeds;
  //! \brief Sphere geometric cross-sections for configurations.
  double *gs;
  //! \brief Vector of sphere forward scattering amplitudes.
  //! \brief Vector of sphere geometric cross-sections for configurations.
  double *vec_gs;
  //! \brief Vector of sphere forward scattering amplitudes (all configurations for every scale).
  dcomplex *vec_fsas;
  //! \brief Sphere forward scattering amplitudes for scale (rows) and configuration (columns).
  dcomplex **fsas;
  //! \brief Vector of QSCHU = 4 pi IMAG(FSAS) / TOTAL_GEOM_SECTION.
  dcomplex *vec_qschus;
  //! \brief Sphere QSCHU for scale (rows) and configuration (columns).
  dcomplex **qschus;
  //! \brief Vector of PSCHU = 4 pi REAL(FSAS) / TOTAL_GEOM_SECTION.
  dcomplex *vec_pschus;
  //! \brief Sphere PSCHU for scale (rows) and configuration (columns).
  dcomplex **pschus;
  //! \brief Vector of S0MAG = ABS(FSAS) / (4 pi k^3).
  dcomplex *vec_s0mags;
  //! \brief Sphere S0MAG for scale (rows) and configuration (columns).
  dcomplex **s0mags;
  //! \brief Vector of asymmetry parameters.
  dcomplex *vec_cosavs;
  //! \brief Sphere asymmetry parameters for scale (rows) and configuration (columns).
  dcomplex **cosavs;
  //! \brief Vector of extinction contributions to radiation torques along k for parallel linear polarization.
  //! \brief Vector of QSCHU = 4 pi IMAG(FSAS) / TOTAL_GEOM_SECTION (all configurations for every scale).
  double *vec_qschus;
  //! \brief Vector of PSCHU = 4 pi REAL(FSAS) / TOTAL_GEOM_SECTION (all configurations for every scale).
  double *vec_pschus;
  //! \brief Vector of S0MAG = ABS(FSAS) / (4 pi k^3) (all configurations for every scale).
  double *vec_s0mags;
  //! \brief Vector of sphere asymmetry parameters (all configurations for every scale).
  double *vec_cosavs;
  //! \brief Vector of sphere radiation pressure forces (all configurations for every scale).
  double *vec_raprs;
  //! \brief Vector of extinction contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  dcomplex *vec_tqek1;
  //! \brief Sphere extinction contributions to radiation torques along k for parallel linear polarization (scales along rows, configurations along columns).
  dcomplex **tqek1;
  //! \brief Vector of scattering contributions to radiation torques along k for parallel linear polarization.
  //! \brief Vector of scattering contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  dcomplex *vec_tqsk1;
  //! \brief Sphere scattering contributions to radiation torques along k for parallel linear polarization (scales along rows, configurations along columns).
  dcomplex **tqsk1;
  //! \brief Vector of extinction contributions to radiation torques along k for perpendicular linear polarization.
  //! \brief Vector of extinction contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  dcomplex *vec_tqek2;
  //! \brief Sphere extinction contributions to radiation torques along k for perpendicular linear polarization (scales along rows, configurations along columns).
  dcomplex **tqek2;
  //! \brief Vector of scattering contributions to radiation torques along k for perpendicular linear polarization.
  //! \brief Vector of scattering contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  dcomplex *vec_tqsk2;
  //! \brief Sphere scattering contributions to radiation torques along k for perpendicular linear polarization (scales along rows, configurations along columns).
  dcomplex **tqsk2;
  //! \brief Vector of total forward scattering amplitudes.
  //! \brief Vector of total forward scattering amplitudes (one for each scale).
  dcomplex *vec_fsat;
  //! \brief Vector of total QSCHU.
  //! \brief Vector of total QSCHU (one for each scale).
  double *vec_qschut;
  //! \brief Vector of total PSCHU.
  //! \brief Vector of total PSCHU (one for each scale).
  double *vec_pschut;
  //! \brief Vector of total S0MAG.
  //! \brief Vector of total S0MAG (one for each scale).
  double *vec_s0magt;
  //! \brief Total geometric section.
  double tgs;
  //! \brief Vector of cluster scattering cross-sections.
  //! \brief Vector of cluster scattering cross-sections (two polarization states per scale).
  double *vec_scc;
  //! \brief Cluster scattering cross-sections for scales (rows) and polarization (columns)
  double **scc;
  //! \brief Vector of cluster absorption cross-sections.
  //! \brief Vector of cluster absorption cross-sections (two polarization states per scale).
  double *vec_abc;
  //! \brief Cluster absorption cross-sections for scales (rows) and polarization (columns)
  double **abc;
  //! \brief Vector of cluster extinction cross-sections.
  //! \brief Vector of cluster extinction cross-sections (two polarization states per scale).
  double *vec_exc;
  //! \brief Cluster extinction cross-sections for scales (rows) and polarization (columns)
  double **exc;
  //! \brief Vector of cluster albedos.
  //! \brief Vector of cluster albedos (two polarization states per scale).
  double *vec_albedc;
  //! \brief Cluster albedos for scales (rows) and polarization (columns)
  double **albedc;
  //! \brief Vector of cluster-to-sum-of-spheres scattering cross-section ratios.
  //! \brief Vector of cluster-to-sum-of-spheres scattering cross-section ratios (two polarization states per scale).
  double *vec_sccrt;
  //! \brief Cluster-to-sum-of-spheres scattering cross-section ratios for scales (rows) and polarization (columns).
  double **sccrt;
  //! \brief Vector of cluster-to-sum-of-spheres absorption cross-section ratios.
  //! \brief Vector of cluster-to-sum-of-spheres absorption cross-section ratios (two polarization states per scale).
  double *vec_abcrt;
  //! \brief Cluster-to-sum-of-spheres absorption cross-section ratios for scales (rows) and polarization (columns).
  double **abcrt;
  //! \brief Vector of cluster-to-sum-of-spheres extinction cross-section ratios.
  //! \brief Vector of cluster-to-sum-of-spheres extinction cross-section ratios (two polarization states per scale).
  double *vec_excrt;
  //! \brief Cluster-to-sum-of-spheres extinction cross-section ratios for scales (rows) and polarization (columns).
  double **excrt;
  //! \brief Vector of forward scattering amplitudes for polarization parallel to incidence.
  //! \brief Vector of forward scattering amplitudes for polarization parallel to incidence (one per scale).
  dcomplex *vec_fsac11;
  //! \brief Vector of forward scattering amplitudes for polarization perpendicular to incidence.
  //! \brief Vector of forward scattering amplitudes for polarization perpendicular to incidence (one per scale).
  dcomplex *vec_fsac21;
  //! \brief Vector of forward scattering amplitudes for polarization parallel to incidence.
  //! \brief Vector of forward scattering amplitudes for polarization parallel to incidence (one per scale).
  dcomplex *vec_fsac22;
  //! \brief Vector of forward scattering amplitudes for polarization perpendicular to incidence.
  //! \brief Vector of forward scattering amplitudes for polarization perpendicular to incidence (one per scale).
  dcomplex *vec_fsac12;
  //! \brief Vector of cluster QSCHU.
  dcomplex *vec_qschuc;
  //! \brief Cluster QSCHU for scales (rows) and polarization (columns).
  dcomplex **qschuc;
  //! \brief Vector of cluster PSCHU.
  dcomplex *vec_pschuc;
  //! \brief Cluster PSCHU for scales (rows) and polarization (columns).
  dcomplex **pschuc;
  //! \brief Vector of cluster S0MAG.
  dcomplex *vec_s0magc;
  //! \brief Cluster S0MAG for scales (rows) and polarization (columns).
  dcomplex **s0magc;
  //! \brief Vector of cluster asymmetry parameters.
  dcomplex *vec_cosavc;
  //! \brief Cluster asymmetry parameters for scales (rows) and polarization (columns).
  dcomplex **cosavc;
  //! \brief Vector of optical forces along incidence direction [N].
  dcomplex *vec_fkc;
  //! \brief Optical forces along incidence direction for scales (rows) and polarization (columns).
  dcomplex **fkc;
  //! \brief Vector of incidence azimuth directions.
  //! \brief Vector of cluster QSCHU (two polarization states per scale).
  double *vec_qschuc;
  //! \brief Vector of cluster PSCHU (two polarization states per scale).
  double *vec_pschuc;
  //! \brief Vector of cluster S0MAG (two polarization states per scale).
  double *vec_s0magc;
  //! \brief Vector of cluster asymmetry parameters (two polarization states per scale).
  double *vec_cosavc;
  //! \brief Vector of cluster radiation pressure forces (two polarization states per scale).
  double *vec_raprc;
  //! \brief Vector of optical forces along incidence direction [N] (two polarization states per scale).
  double *vec_fkc;
  //! \brief Vector of incidence azimuth directions (one per direction).
  double *vec_dir_tidg;
  //! \brief Vector of incidence elevation directions.
  //! \brief Vector of incidence elevation directions (one per direction).
  double *vec_dir_pidg;
  //! \brief Vector of scattering azimuth directions.
  //! \brief Vector of scattering azimuth directions (one per direction).
  double *vec_dir_tsdg;
  //! \brief Vector of scattering elevation directions.
  //! \brief Vector of scattering elevation directions (one per direction).
  double *vec_dir_psdg;
  //! \brief Vector of scattering angles.
  //! \brief Vector of scattering angles (one per direction).
  double *vec_dir_scand;
  //! \brief Control parameter for incidence plane referred to meridional plane.
  double *vec_dir_cfmp;
+115 −0
Original line number Diff line number Diff line
@@ -63,11 +63,126 @@ ClusterOutputInfo::ClusterOutputInfo(
    vec_z_coords[nsi] = gc->get_sph_z(nsi);
  }
  // Get directional information
  th = gc->in_theta_start;
  thstp = gc->in_theta_step;
  thlst = gc->in_theta_end;
  ths = gc->sc_theta_start;
  thsstp = gc->sc_theta_step;
  thslst = gc->sc_theta_end;
  _num_thetas = 1 + int((thlst - th) / thstp) + int((thslst - ths) / thsstp);
  ph = gc->in_phi_start;
  phstp = gc->in_phi_step;
  phlst = gc->in_phi_end;
  phs = gc->sc_phi_start;
  phsstp = gc->sc_phi_step;
  phslst = gc->sc_phi_end;
  _num_phis = 1 + int((phlst - ph) / phstp) + int((phslst - phs) / phsstp);
  ndirs = _num_thetas * _num_phis;
  // Get scattering problem configuration
  jwtm = gc->jwtm;
  double exdc = sc->exdc;
  exri = sqrt(exdc);
  nxi = sc->number_of_scales;
  xi_block_size = (xi_length == 0) ? nxi : xi_length;
  vec_jxi = new int[xi_block_size]();
  vec_vk = new double[xi_block_size]();
  vec_xi = new double[xi_block_size]();
  configurations = sc->configurations;
  vec_sphere_sizes = new double[xi_block_size * configurations]();
  vec_sphere_ref_indices = new dcomplex[xi_block_size * configurations]();
  vec_sphere_scs = new double[xi_block_size * configurations]();
  vec_sphere_abs = new double[xi_block_size * configurations]();
  vec_sphere_exs = new double[xi_block_size * configurations]();
  vec_sphere_albs = new double[xi_block_size * configurations]();
  vec_gs = new double[configurations]();
  vec_fsas = new dcomplex[xi_block_size * configurations]();
  vec_qschus = new double[xi_block_size * configurations]();
  vec_pschus = new double[xi_block_size * configurations]();
  vec_s0mags = new double[xi_block_size * configurations]();
  vec_cosavs = new double[xi_block_size * configurations]();
  vec_raprs = new double[xi_block_size * configurations]();
  vec_tqek1 = new double[xi_block_size * configurations]();
  vec_tqsk1 = new double[xi_block_size * configurations]();
  vec_tqek2 = new double[xi_block_size * configurations]();
  vec_tqsk2 = new double[xi_block_size * configurations]();
  vec_fsat = new dcomplex[xi_block_size]();
  vec_qschut = new double[xi_block_size]();
  vec_pschut = new double[xi_block_size]();
  vec_s0magt = new double[xi_block_size]();
  tgs = 0.0;
  vec_scc = new double[2 * xi_block_size]();
  vec_abc = new double[2 * xi_block_size]();
  vec_exc = new double[2 * xi_block_size]();
  vec_albedc = new double[2 * xi_block_size]();
  vec_sccrt = new double[2 * xi_block_size]();
  vec_abcrt = new double[2 * xi_block_size]();
  vec_excrt = new double[2 * xi_block_size]();
  vec_fsac11 = new dcomplex[xi_block_size]();
  vec_fsac21 = new dcomplex[xi_block_size]();
  vec_fsac22 = new dcomplex[xi_block_size]();
  vec_fsac12 = new dcomplex[xi_block_size]();
  vec_qschuc = new double[2 * xi_block_size]();
  vec_pschuc = new double[2 * xi_block_size]();
  vec_s0magc = new double[2 * xi_block_size]();
  vec_cosavc = new double[2 * xi_block_size]();
  vec_raprc = new double[2 * xi_block_size]();
  vec_fkc = new double[2 * xi_block_size]();
  vec_dir_tidg = new double[ndirs]();
  vec_dir_pidg = new double[ndirs]();
  vec_dir_tsdg = new double[ndirs]();
  vec_dir_psdg = new double[ndirs]();
  vec_dir_scand = new double[ndirs]();
}

ClusterOutputInfo::~ClusterOutputInfo() {
  delete[] vec_x_coords;
  delete[] vec_y_coords;
  delete[] vec_z_coords;
  delete[] vec_jxi;
  delete[] vec_vk;
  delete[] vec_xi;
  delete[] vec_sphere_sizes;
  delete[] vec_sphere_ref_indices;
  delete[] vec_sphere_scs;
  delete[] vec_sphere_abs;
  delete[] vec_sphere_exs;
  delete[] vec_sphere_albs;
  delete[] vec_gs;
  delete[] vec_fsas;
  delete[] vec_qschus;
  delete[] vec_pschus;
  delete[] vec_s0mags;
  delete[] vec_cosavs;
  delete[] vec_raprs;
  delete[] vec_tqek1;
  delete[] vec_tqsk1;
  delete[] vec_tqek2;
  delete[] vec_tqsk2;
  delete[] vec_fsat;
  delete[] vec_qschut;
  delete[] vec_pschut;
  delete[] vec_s0magt;
  delete[] vec_scc;
  delete[] vec_abc;
  delete[] vec_exc;
  delete[] vec_albedc;
  delete[] vec_sccrt;
  delete[] vec_abcrt;
  delete[] vec_excrt;
  delete[] vec_fsac11;
  delete[] vec_fsac21;
  delete[] vec_fsac22;
  delete[] vec_fsac21;
  delete[] vec_qschuc;
  delete[] vec_pschuc;
  delete[] vec_s0magc;
  delete[] vec_cosavc;
  delete[] vec_raprc;
  delete[] vec_fkc;
  delete[] vec_dir_tidg;
  delete[] vec_dir_pidg;
  delete[] vec_dir_tsdg;
  delete[] vec_dir_psdg;
  delete[] vec_dir_scand;
}
// >> END OF ClusterOutputInfo CLASS IMPLEMENTATION <<