Commit 526ff9ce authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Finish implementation of ClusterOutputInfo constructor, destroyer and static size estimator

parent 6ed7aa89
Loading
Loading
Loading
Loading
+94 −83
Original line number Original line Diff line number Diff line
@@ -41,8 +41,6 @@
 */
 */
class ClusterOutputInfo {
class ClusterOutputInfo {
protected:
protected:
  //! \brief Number of scales included in the output.
  int _xi_length;
  //! \brief Number of azimuth directional calculations.
  //! \brief Number of azimuth directional calculations.
  int _num_thetas;
  int _num_thetas;
  //! \brief Number of elevation directional calculations.
  //! \brief Number of elevation directional calculations.
@@ -144,13 +142,13 @@ public:
  //! \brief Vector of sphere radiation pressure forces (all configurations for every scale).
  //! \brief Vector of sphere radiation pressure forces (all configurations for every scale).
  double *vec_raprs;
  double *vec_raprs;
  //! \brief Vector of extinction contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  //! \brief Vector of extinction contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  dcomplex *vec_tqek1;
  double *vec_tqek1;
  //! \brief Vector of scattering contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  //! \brief Vector of scattering contributions to radiation torques along k for parallel linear polarization (all configurations for every scale).
  dcomplex *vec_tqsk1;
  double *vec_tqsk1;
  //! \brief Vector of extinction contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  //! \brief Vector of extinction contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  dcomplex *vec_tqek2;
  double *vec_tqek2;
  //! \brief Vector of scattering contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  //! \brief Vector of scattering contributions to radiation torques along k for perpendicular linear polarization (all configurations for every scale).
  dcomplex *vec_tqsk2;
  double *vec_tqsk2;
  //! \brief Vector of total forward scattering amplitudes (one for each scale).
  //! \brief Vector of total forward scattering amplitudes (one for each scale).
  dcomplex *vec_fsat;
  dcomplex *vec_fsat;
  //! \brief Vector of total QSCHU (one for each scale).
  //! \brief Vector of total QSCHU (one for each scale).
@@ -205,17 +203,17 @@ public:
  double *vec_dir_psdg;
  double *vec_dir_psdg;
  //! \brief Vector of scattering angles (one per direction).
  //! \brief Vector of scattering angles (one per direction).
  double *vec_dir_scand;
  double *vec_dir_scand;
  //! \brief Control parameter for incidence plane referred to meridional plane.
  //! \brief Control parameter for incidence plane referred to meridional plane (one per direction).
  double *vec_dir_cfmp;
  double *vec_dir_cfmp;
  //! \brief Control parameter for scattering plane referred to meridional plane.
  //! \brief Control parameter for scattering plane referred to meridional plane (one per direction).
  double *vec_dir_sfmp;
  double *vec_dir_sfmp;
  //! \brief Control parameter for incidence plane referred to scattering plane.
  //! \brief Control parameter for incidence plane referred to scattering plane (one per direction).
  double *vec_dir_cfsp;
  double *vec_dir_cfsp;
  //! \brief Control parameter for scattering plane referred to scattering plane.
  //! \brief Control parameter for scattering plane referred to scattering plane (one per direction).
  double *vec_dir_sfsp;
  double *vec_dir_sfsp;
  //! \brief Components of the unitary vector perpendicular to incidence plane.
  //! \brief Components of the unitary vector perpendicular to incidence plane (three per direction).
  double *vec_dir_uni;
  double *vec_dir_uni;
  //! \brief Components of the unitary vector perpendicular to scattering plane.
  //! \brief Components of the unitary vector perpendicular to scattering plane (three per direction).
  double *vec_dir_uns;
  double *vec_dir_uns;
  //! \brief Vector of sphere differential scattering amplitude with polarization parallel to parallel incidence field.
  //! \brief Vector of sphere differential scattering amplitude with polarization parallel to parallel incidence field.
  dcomplex *vec_dir_sas11;
  dcomplex *vec_dir_sas11;
@@ -226,95 +224,95 @@ public:
  //! \brief Vector of sphere differential scattering amplitude with polarization parallel the perpendicular incidence field.
  //! \brief Vector of sphere differential scattering amplitude with polarization parallel the perpendicular incidence field.
  dcomplex *vec_dir_sas22;
  dcomplex *vec_dir_sas22;
  //! \brief Vector of sphere Mueller transormation matrices referred to meridional plane.
  //! \brief Vector of sphere Mueller transormation matrices referred to meridional plane.
  dcomplex *vec_dir_muls;
  double *vec_dir_muls;
  //! \brief Vector of sphere Mueller transormation matrices referred to scattering plane.
  //! \brief Vector of sphere Mueller transormation matrices referred to scattering plane.
  dcomplex *vec_dir_mulslr;
  double *vec_dir_mulslr;
  //! \brief Vector of sphere total differential scattering amplitude with polarization parallel to parallel incidence field.
  //! \brief Vector of sphere total differential scattering amplitude with polarization parallel to parallel incidence field.
  dcomplex *vec_dir_sat_11;
  dcomplex *vec_dir_sat11;
  //! \brief Vector of sphere total differential scattering amplitude with polarization perpendicular to the parallel incidence field.
  //! \brief Vector of sphere total differential scattering amplitude with polarization perpendicular to the parallel incidence field.
  dcomplex *vec_dir_sat_21;
  dcomplex *vec_dir_sat21;
  //! \brief Vector of sphere total differential scattering amplitude with polarization perpendicular to perpendicular incidence field.
  //! \brief Vector of sphere total differential scattering amplitude with polarization perpendicular to perpendicular incidence field.
  dcomplex *vec_dir_sat_12;
  dcomplex *vec_dir_sat12;
  //! \brief Vector of sphere total differential scattering amplitude with polarization parallel the perpendicular incidence field.
  //! \brief Vector of sphere total differential scattering amplitude with polarization parallel the perpendicular incidence field.
  dcomplex *vec_dir_sat_22;
  dcomplex *vec_dir_sat22;
  //! \brief Vector of cluster differential scattering cross-sections.
  //! \brief Vector of cluster differential scattering cross-sections (two polarization states per direction and scale).
  double *vec_dir_scc;
  double *vec_dir_scc;
  //! \brief Vector of cluster differential absorption cross-sections.
  //! \brief Vector of cluster differential absorption cross-sections (two polarization states per direction and scale).
  double *vec_dir_abc;
  double *vec_dir_abc;
  //! \brief Vector of cluster differential extinction cross-sections.
  //! \brief Vector of cluster differential extinction cross-sections (two polarization states per direction and scale).
  double *vec_dir_exc;
  double *vec_dir_exc;
  //! \brief Vector of cluster differential albedos.
  //! \brief Vector of cluster differential albedos (two polarization states per direction and scale).
  double *vec_dir_albedc;
  double *vec_dir_albedc;
  //! \brief Vector of differential cluster-to-total scattering cross-section ratios.
  //! \brief Vector of differential cluster-to-total scattering cross-section ratios (two polarization states per direction and scale).
  double *vec_dir_sccrt;
  double *vec_dir_sccrt;
  //! \brief Vector of differential cluster-to-total absorption cross-section ratios.
  //! \brief Vector of differential cluster-to-total absorption cross-section ratios (two polarization states per direction and scale).
  double *vec_dir_abcrt;
  double *vec_dir_abcrt;
  //! \brief Vector of differential cluster-to-total extinction cross-section ratios.
  //! \brief Vector of differential cluster-to-total extinction cross-section ratios (two polarization states per direction and scale).
  double *vec_dir_excrt;
  double *vec_dir_excrt;
  //! \brief Vector of differential cluster forward scattering amplitude with polarization parallel to parallel incidence field.
  //! \brief Vector of differential cluster forward scattering amplitude with polarization parallel to parallel incidence field (one per direction and scale).
  dcomplex *vec_dir_fsac11;
  dcomplex *vec_dir_fsac11;
  //! \brief Vector of differential cluster forward scattering amplitude with polarization perpendicular to the parallel incidence field.
  //! \brief Vector of differential cluster forward scattering amplitude with polarization perpendicular to the parallel incidence field (one per direction and scale).
  dcomplex *vec_dir_fsac21;
  dcomplex *vec_dir_fsac21;
  //! \brief Vector of differential cluster forward scattering amplitude with polarization perpendicular to perpendicular incidence field.
  //! \brief Vector of differential cluster forward scattering amplitude with polarization perpendicular to perpendicular incidence field (one per direction and scale).
  dcomplex *vec_dir_fsac12;
  dcomplex *vec_dir_fsac12;
  //! \brief Vector of differential cluster forward scattering amplitude with polarization parallel the perpendicular incidence field.
  //! \brief Vector of differential cluster forward scattering amplitude with polarization parallel the perpendicular incidence field (one per direction and scale).
  dcomplex *vec_dir_fsac22;
  dcomplex *vec_dir_fsac22;
  //! \brief Vector of differential cluster scattering amplitude with polarization parallel to parallel incidence field.
  //! \brief Vector of differential cluster scattering amplitude with polarization parallel to parallel incidence field (one per direction and scale).
  dcomplex *vec_dir_sac11;
  dcomplex *vec_dir_sac11;
  //! \brief Vector of differential cluster scattering amplitude with polarization perpendicular to the parallel incidence field.
  //! \brief Vector of differential cluster scattering amplitude with polarization perpendicular to the parallel incidence field (one per direction and scale).
  dcomplex *vec_dir_sac21;
  dcomplex *vec_dir_sac21;
  //! \brief Vector of differential cluster scattering amplitude with polarization perpendicular to perpendicular incidence field.
  //! \brief Vector of differential cluster scattering amplitude with polarization perpendicular to perpendicular incidence field (one per direction and scale).
  dcomplex *vec_dir_sac12;
  dcomplex *vec_dir_sac12;
  //! \brief Vector of differential cluster scattering amplitude with polarization parallel the perpendicular incidence field.
  //! \brief Vector of differential cluster scattering amplitude with polarization parallel the perpendicular incidence field (one per direction and scale).
  dcomplex *vec_dir_sac22;
  dcomplex *vec_dir_sac22;
  //! \brief Vector of differential cluster QSCHU.
  //! \brief Vector of differential cluster QSCHU (two polarization states per direction and scale).
  double *vec_dir_qschu;
  double *vec_dir_qschuc;
  //! \brief Vector of differential cluster PSCHU.
  //! \brief Vector of differential cluster PSCHU (two polarization states per direction and scale).
  double *vec_dir_pschu;
  double *vec_dir_pschuc;
  //! \brief Vector of differential cluster asymmetry parameters.
  //! \brief Vector of differential cluster asymmetry parameters (two polarization states per direction and scale).
  double *vec_dir_cosav;
  double *vec_dir_cosavc;
  //! \brief Vector of differential cluster radiation pressure forces.
  //! \brief Vector of differential cluster radiation pressure forces (two polarization states per direction and scale).
  double *vec_dir_rapr;
  double *vec_dir_raprc;
  //! \brief Vector of differential radiation pressure force components along the polarization direction.
  //! \brief Vector of differential radiation pressure force components along the polarization direction (two polarization states per direction and scale).
  double *vec_dir_fl;
  double *vec_dir_flc;
  //! \brief Vector of differential radiation pressure force components perpendicular to the polarization direction.
  //! \brief Vector of differential radiation pressure force components perpendicular to the polarization direction (two polarization states per direction and scale).
  double *vec_dir_fr;
  double *vec_dir_frc;
  //! \brief Vector of differential radiation pressure force components along the incidence direction.
  //! \brief Vector of differential radiation pressure force components along the incidence direction (two polarization states per direction and scale).
  double *vec_dir_fk;
  double *vec_dir_fkc;
  //! \brief Vector of differential radiation pressure force components along the X axis.
  //! \brief Vector of differential radiation pressure force components along the X axis (two polarization states per direction and scale).
  double *vec_dir_fx;
  double *vec_dir_fxc;
  //! \brief Vector of differential radiation pressure force components along the Y axis.
  //! \brief Vector of differential radiation pressure force components along the Y axis (two polarization states per direction and scale).
  double *vec_dir_fy;
  double *vec_dir_fyc;
  //! \brief Vector of differential radiation pressure force components along the Z axis.
  //! \brief Vector of differential radiation pressure force components along the Z axis (two polarization states per direction and scale).
  double *vec_dir_fx;
  double *vec_dir_fzc;
  //! \brief Vector of differential extinction contribution to radiation torque components along the polarization direction.
  //! \brief Vector of differential extinction contribution to radiation torque components along the polarization direction (two polarization states per direction and scale).
  double *vec_dir_tqer;
  double *vec_dir_tqelc;
  //! \brief Vector of differential extinction contribution to radiation torque components perpendicular to the polarization direction.
  //! \brief Vector of differential extinction contribution to radiation torque components perpendicular to the polarization direction (two polarization states per direction and scale).
  double *vec_dir_tqel;
  double *vec_dir_tqerc;
  //! \brief Vector of differential extinction contribution to radiation torque components along the incidence direction.
  //! \brief Vector of differential extinction contribution to radiation torque components along the incidence direction (two polarization states per direction and scale).
  double *vec_dir_tqek;
  double *vec_dir_tqekc;
  //! \brief Vector of differential extinction contribution to radiation torque components along the X axis.
  //! \brief Vector of differential extinction contribution to radiation torque components along the X axis (two polarization states per direction and scale).
  double *vec_dir_tqex;
  double *vec_dir_tqexc;
  //! \brief Vector of differential extinction contribution to radiation torque components along the Y axis.
  //! \brief Vector of differential extinction contribution to radiation torque components along the Y axis (two polarization states per direction and scale).
  double *vec_dir_tqey;
  double *vec_dir_tqeyc;
  //! \brief Vector of differential extinction contribution to radiation torque components along the Z axis.
  //! \brief Vector of differential extinction contribution to radiation torque components along the Z axis (two polarization states per direction and scale).
  double *vec_dir_tqez;
  double *vec_dir_tqezc;
  //! \brief Vector of differential scattering contribution to radiation torque components along the polarization direction.
  //! \brief Vector of differential scattering contribution to radiation torque components along the polarization direction (two polarization states per direction and scale).
  double *vec_dir_tqsr;
  double *vec_dir_tqslc;
  //! \brief Vector of differential scattering contribution to radiation torque components perpendicular to the polarization direction.
  //! \brief Vector of differential scattering contribution to radiation torque components perpendicular to the polarization direction (two polarization states per direction and scale).
  double *vec_dir_tqsl;
  double *vec_dir_tqsrc;
  //! \brief Vector of differential scattering contribution to radiation torque components along the incidence direction.
  //! \brief Vector of differential scattering contribution to radiation torque components along the incidence direction (two polarization states per direction and scale).
  double *vec_dir_tqsk;
  double *vec_dir_tqskc;
  //! \brief Vector of differential scattering contribution to radiation torque components along X axis.
  //! \brief Vector of differential scattering contribution to radiation torque components along X axis (two polarization states per direction and scale).
  double *vec_dir_tqsx;
  double *vec_dir_tqsxc;
  //! \brief Vector of differential scattering contribution to radiation torque components along Y axis.
  //! \brief Vector of differential scattering contribution to radiation torque components along Y axis (two polarization states per direction and scale).
  double *vec_dir_tqsy;
  double *vec_dir_tqsyc;
  //! \brief Vector of differential scattering contribution to radiation torque components along Z axis.
  //! \brief Vector of differential scattering contribution to radiation torque components along Z axis (two polarization states per direction and scale).
  double *vec_dir_tqsz;
  double *vec_dir_tqszc;
  //! \brief Vector of cluster Mueller transormation matrices referred to meridional plane.
  //! \brief Vector of cluster Mueller transormation matrices referred to meridional plane (16 per direction per scale).
  dcomplex *vec_dir_mulc;
  double *vec_dir_mulc;
  //! \brief Vector of cluster Mueller transormation matrices referred to scattering plane.
  //! \brief Vector of cluster Mueller transormation matrices referred to scattering plane (16 per direction per scale).
  dcomplex *vec_dir_mulclr;
  double *vec_dir_mulclr;
  
  
  /*! \brief `ClusterOutputInfo` default instance constructor.
  /*! \brief `ClusterOutputInfo` default instance constructor.
   *
   *
@@ -332,5 +330,18 @@ public:
  /*! \brief `ClusterOutputInfo` instance destroyer.
  /*! \brief `ClusterOutputInfo` instance destroyer.
   */
   */
  ~ClusterOutputInfo();
  ~ClusterOutputInfo();

  /*! \brief Estimate the size of the structure that would be built for given input.
   *
   * \param sc: `ScattererConfiguration *` Pointer to a `ScattererConfiguration` instance.
   * \param gc: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` instance.
   * \param first_xi: `int` Index of the first scale in output (optional, default is 0).
   * \param xi_length: `int` Number of scales tobe included in output (optional, default is all).
   * \return size: `long` Estimated instance size in bytes.
   */   
  static long compute_size(
    ScattererConfiguration *sc, GeometryConfiguration *gc,
    int first_xi = 0, int xi_length = 0
  );
};
};
#endif // INCLUDE_OUTPUTS_H_
#endif // INCLUDE_OUTPUTS_H_
+167 −6
Original line number Original line Diff line number Diff line
@@ -23,14 +23,14 @@
#include "../include/types.h"
#include "../include/types.h"
#endif
#endif


#ifndef INCLUDE_COMMONS_H_
#include "../include/Commons.h"
#endif

#ifndef INCLUDE_CONFIGURATION_H_
#ifndef INCLUDE_CONFIGURATION_H_
#include "../include/Configuration.h"
#include "../include/Configuration.h"
#endif
#endif


#ifndef INCLUDE_COMMONS_H_
#include "../include/Commons.h"
#endif

#ifndef INCLUDE_OUTPUTS_H_
#ifndef INCLUDE_OUTPUTS_H_
#include "../include/outputs.h"
#include "../include/outputs.h"
#endif
#endif
@@ -49,7 +49,7 @@ ClusterOutputInfo::ClusterOutputInfo(
  mxndm = gc->mxndm;
  mxndm = gc->mxndm;
  inpol = gc->in_pol;
  inpol = gc->in_pol;
  npnt = gc->npnt;
  npnt = gc->npnt;
  npnnts = gc->npnnts;
  npntts = gc->npntts;
  iavm = gc->iavm;
  iavm = gc->iavm;
  isam = gc->isam;
  isam = gc->isam;
  jwtm = gc->jwtm;
  jwtm = gc->jwtm;
@@ -132,6 +132,61 @@ ClusterOutputInfo::ClusterOutputInfo(
  vec_dir_tsdg = new double[ndirs]();
  vec_dir_tsdg = new double[ndirs]();
  vec_dir_psdg = new double[ndirs]();
  vec_dir_psdg = new double[ndirs]();
  vec_dir_scand = new double[ndirs]();
  vec_dir_scand = new double[ndirs]();
  vec_dir_cfmp = new double[ndirs]();
  vec_dir_sfmp = new double[ndirs]();
  vec_dir_cfsp = new double[ndirs]();
  vec_dir_sfsp = new double[ndirs]();
  vec_dir_uni = new double[3 * ndirs]();
  vec_dir_uns = new double[3 * ndirs]();
  vec_dir_sas11 = new dcomplex[ndirs * configurations * xi_block_size]();
  vec_dir_sas21 = new dcomplex[ndirs * configurations * xi_block_size]();
  vec_dir_sas12 = new dcomplex[ndirs * configurations * xi_block_size]();
  vec_dir_sas22 = new dcomplex[ndirs * configurations * xi_block_size]();
  vec_dir_muls = new double[16 * ndirs * configurations * xi_block_size]();
  vec_dir_mulslr = new double[16 * ndirs * configurations * xi_block_size]();
  vec_dir_sat11 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sat21 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sat12 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sat22 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_scc = new double[2 * ndirs * xi_block_size]();
  vec_dir_abc = new double[2 * ndirs * xi_block_size]();
  vec_dir_exc = new double[2 * ndirs * xi_block_size]();
  vec_dir_albedc = new double[2 * ndirs * xi_block_size]();
  vec_dir_sccrt = new double[2 * ndirs * xi_block_size]();
  vec_dir_abcrt = new double[2 * ndirs * xi_block_size]();
  vec_dir_excrt = new double[2 * ndirs * xi_block_size]();
  vec_dir_fsac11 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_fsac21 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_fsac12 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_fsac22 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sac11 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sac21 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sac12 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_sac22 = new dcomplex[ndirs * xi_block_size]();
  vec_dir_qschuc = new double[2 * ndirs * xi_block_size]();
  vec_dir_pschuc = new double[2 * ndirs * xi_block_size]();
  vec_dir_cosavc = new double[2 * ndirs * xi_block_size]();
  vec_dir_raprc = new double[2 * ndirs * xi_block_size]();
  vec_dir_flc = new double[2 * ndirs * xi_block_size]();
  vec_dir_frc = new double[2 * ndirs * xi_block_size]();
  vec_dir_fkc = new double[2 * ndirs * xi_block_size]();
  vec_dir_fxc = new double[2 * ndirs * xi_block_size]();
  vec_dir_fyc = new double[2 * ndirs * xi_block_size]();
  vec_dir_fzc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqelc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqerc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqekc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqexc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqeyc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqezc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqslc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqsrc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqskc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqsxc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqsyc = new double[2 * ndirs * xi_block_size]();
  vec_dir_tqszc = new double[2 * ndirs * xi_block_size]();
  vec_dir_mulc = new double[16 * ndirs * xi_block_size]();
  vec_dir_mulclr = new double[16 * ndirs * xi_block_size]();
}
}


ClusterOutputInfo::~ClusterOutputInfo() {
ClusterOutputInfo::~ClusterOutputInfo() {
@@ -172,7 +227,7 @@ ClusterOutputInfo::~ClusterOutputInfo() {
  delete[] vec_fsac11;
  delete[] vec_fsac11;
  delete[] vec_fsac21;
  delete[] vec_fsac21;
  delete[] vec_fsac22;
  delete[] vec_fsac22;
  delete[] vec_fsac21;
  delete[] vec_fsac12;
  delete[] vec_qschuc;
  delete[] vec_qschuc;
  delete[] vec_pschuc;
  delete[] vec_pschuc;
  delete[] vec_s0magc;
  delete[] vec_s0magc;
@@ -184,5 +239,111 @@ ClusterOutputInfo::~ClusterOutputInfo() {
  delete[] vec_dir_tsdg;
  delete[] vec_dir_tsdg;
  delete[] vec_dir_psdg;
  delete[] vec_dir_psdg;
  delete[] vec_dir_scand;
  delete[] vec_dir_scand;
  delete[] vec_dir_cfmp;
  delete[] vec_dir_sfmp;
  delete[] vec_dir_cfsp;
  delete[] vec_dir_sfsp;
  delete[] vec_dir_uni;
  delete[] vec_dir_uns;
  delete[] vec_dir_sas11;
  delete[] vec_dir_sas21;
  delete[] vec_dir_sas12;
  delete[] vec_dir_sas22;
  delete[] vec_dir_muls;
  delete[] vec_dir_mulslr;
  delete[] vec_dir_sat11;
  delete[] vec_dir_sat21;
  delete[] vec_dir_sat12;
  delete[] vec_dir_sat22;
  delete[] vec_dir_scc;
  delete[] vec_dir_abc;
  delete[] vec_dir_exc;
  delete[] vec_dir_albedc;
  delete[] vec_dir_sccrt;
  delete[] vec_dir_abcrt;
  delete[] vec_dir_excrt;
  delete[] vec_dir_fsac11;
  delete[] vec_dir_fsac21;
  delete[] vec_dir_fsac12;
  delete[] vec_dir_fsac22;
  delete[] vec_dir_sac11;
  delete[] vec_dir_sac21;
  delete[] vec_dir_sac12;
  delete[] vec_dir_sac22;
  delete[] vec_dir_qschuc;
  delete[] vec_dir_pschuc;
  delete[] vec_dir_cosavc;
  delete[] vec_dir_raprc;
  delete[] vec_dir_flc;
  delete[] vec_dir_frc;
  delete[] vec_dir_fkc;
  delete[] vec_dir_fxc;
  delete[] vec_dir_fyc;
  delete[] vec_dir_fzc;
  delete[] vec_dir_tqelc;
  delete[] vec_dir_tqerc;
  delete[] vec_dir_tqekc;
  delete[] vec_dir_tqexc;
  delete[] vec_dir_tqeyc;
  delete[] vec_dir_tqezc;
  delete[] vec_dir_tqslc;
  delete[] vec_dir_tqsrc;
  delete[] vec_dir_tqskc;
  delete[] vec_dir_tqsxc;
  delete[] vec_dir_tqsyc;
  delete[] vec_dir_tqszc;
  delete[] vec_dir_mulc;
  delete[] vec_dir_mulclr;
}

long ClusterOutputInfo::compute_size(
  ScattererConfiguration *sc, GeometryConfiguration *gc,
  int first_xi, int xi_length
) {
  long result = sizeof(np_int);
  result += 16 * sizeof(int);
  result += 14 * sizeof(double);
  result += 104 * sizeof(long);
  int _nsph = gc->number_of_spheres;
  double _th = gc->in_theta_start;
  double _thstp = gc->in_theta_step;
  double _thlst = gc->in_theta_end;
  double _ths = gc->sc_theta_start;
  double _thsstp = gc->sc_theta_step;
  double _thslst = gc->sc_theta_end;
  int num_thetas = 1 + int((_thlst - _th) / _thstp) + int((_thslst - _ths) / _thsstp);
  double _ph = gc->in_phi_start;
  double _phstp = gc->in_phi_step;
  double _phlst = gc->in_phi_end;
  double _phs = gc->sc_phi_start;
  double _phsstp = gc->sc_phi_step;
  double _phslst = gc->sc_phi_end;
  int num_phis = 1 + int((_phlst - _ph) / _phstp) + int((_phslst - _phs) / _phsstp);
  int _ndirs = num_thetas * num_phis;
  int _nxi = sc->number_of_scales;
  int _xi_block_size = (xi_length == 0) ? _nxi : xi_length;
  int _configurations = sc->configurations;
  result += 3 * _nsph * sizeof(double); // sphere coordinate vectors
  result += _xi_block_size * sizeof(int); // scale index vector
  result += 2 * _xi_block_size * sizeof(double); // scale vectors
  result += _xi_block_size * _configurations * sizeof(dcomplex); // refraction indices vector
  result += 5 * _xi_block_size * _configurations; // sphere sizes, albedos and cross-sections
  result += _configurations * sizeof(double); // sphere geometric sections
  result += _xi_block_size * _configurations * sizeof(dcomplex); // fsas vector
  result += 9 * _xi_block_size * _configurations * sizeof(double); // up to tqsk2 vector
  result += _xi_block_size * sizeof(dcomplex); // fsat vector
  result += 3 * _xi_block_size * sizeof(double); // up to s0magt vector
  result += 14 * _xi_block_size * sizeof(double); // up to excrtt vector
  result += 4 * _xi_block_size * sizeof(dcomplex); // up to fsac12 vector
  result += 12 * _xi_block_size * sizeof(double); // up to fkc vector
  result += 15 * _ndirs * sizeof(double); // up to dir_uns vector
  result += 4 * _ndirs * _configurations * _xi_block_size * sizeof(dcomplex); // up to dir_sas22 vector
  result += 32 * _ndirs * _configurations * _xi_block_size * sizeof(double); // up to dir_mulslr vector
  result += 4 * _ndirs * _xi_block_size * sizeof(dcomplex); // up to dir_sat22 vector
  result += 14 * _ndirs * _xi_block_size * sizeof(double); // up to dir_excrt vector
  result += 8 * _ndirs * _xi_block_size * sizeof(dcomplex); // up to dir_sac22 vector
  result += 78 * _ndirs * _xi_block_size * sizeof(double); // up to dir_milclr vector
  
  return result;
}
}
// >> END OF ClusterOutputInfo CLASS IMPLEMENTATION <<
// >> END OF ClusterOutputInfo CLASS IMPLEMENTATION <<