Commit 8bd360da authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Update definition of SphereIterationData structure

parent a9d7c207
Loading
Loading
Loading
Loading
+141 −0
Original line number Diff line number Diff line
@@ -348,5 +348,146 @@ public:
};
// >>> END OF InclusionIterationData CLASS DEFINITION <<< //

// >>> DEFINITION OF SphereIterationData CLASS <<<
/*! \brief A data structure representing the information used for a single scale
 * of the SPHERE case.
 */
class SphereIterationData {
protected:
  //! \brief Number of spheres
  int _nsph;
  //! \brief Maximum field expansion order.
  int _lm;
  //! \brief Vector of Mueller matrix components.
  double *vec_cmul;
  //! \brief Vector of Mueller matrix components referred to meridional plane.
  double *vec_cmullr;
  //! Vectorized TQSPE.
  dcomplex *vec_tqspe;
  //! Vectorized TQSPS.
  dcomplex *vec_tqsps;
  //! Vectorized TQSE.
  double *vec_tqse;
  //! Vectorized TQSS.
  double *vec_tqss;
  //! Vectorized ZPV.
  double *vec_zpv;
  
public:
  //! \brief Vacuum magnitude of wave vector.
  double vk;
  //! \brief Wave number.
  double wn;
  //! \brief Normalization scale. QUESTION: correct?
  double xip;
  //! \brief Number of scales (wavelengths) to be computed.
  int number_of_scales;
  //! \brief Size of the block of scales handled by the current process.
  int xiblock;
  //! \brief Index of the first scale handled by the current process.
  int firstxi;
  //! \brief Index of the last scale handled by the current process.
  int lastxi;
  //! \brief Argument of harmonic functions.
  dcomplex arg;
  //! \brief S0 = FSAS / (4 PI K^3).
  dcomplex s0;
  //! \brief Total forward scattering amplitude of the spheres.
  dcomplex tfsas;
  //! \brief Pointer to a sphere particle descriptor.
  ParticleDescriptor *c1;
  //! \brief Imaginary part of `arg`.
  double *argi;
  //! \brief `arg` squared.
  double *args;
  //! \brief Scattering angle.
  double scan;
  //! \brief Control parameter on incidence direction referred to meridional plane.
  double cfmp;
  //! \brief Control parameter on scattering direction referred to meridional plane.
  double sfmp;
  //! \brief Control parameter on incidence direction referred to scattering plane.
  double cfsp;
  //! \brief Control parameter on scattering direction referred to scattering plane.
  double sfsp;
  //! \brief Geometry asymmetry parameter for spheres.
  double *gaps;
  //! \brief Variation of unitary wave vector.
  double *duk;
  //! \brief Incidence direction unitary vector.
  double *u;
  //! \brief Scattering direction unitary vector.
  double *us;
  //! \brief Normal direction unitary vector.
  double *un;
  //! \brief Scattering normal direction unitary vector.
  double *uns;
  //! \brief Polarization direction unitary vector.
  double *up;
  //! \brief Scattered polarization direction unitary vector.
  double *ups;
  //! \brief Polarization direction unitary vector referred to meridional plane.
  double *upmp;
  //! \brief Scattered polarization direction unitary vector referred to meridional plane.
  double *upsmp;
  //! \brief Normal direction unitary vector referred to meridional plane.
  double *unmp;
  //! \brief Scattering normal direction unitary vector referred to meridional plane.
  double *unsmp;
  //! \brief Mueller matrix components.
  double **cmul;
  //! \brief Mueller matrix components referred to meridional plane.
  double **cmullr;
  //! \brief Polarization-dependent extinction contribution to torque for each sphere.
  dcomplex **tqspe;
  //! \brief Polarization-dependent scattering contribution to torque for each sphere.
  dcomplex **tqsps;
  //! \brief Extinction contribution to torque for each sphere.
  double **tqse;
  //! \brief Scattering contribution to torque for each sphere.
  double **tqss;
  //! \brief Scattering coefficients tensor.
  double ****zpv;
  
  /*! \brief `SphereIterationData` default instance constructor.
   *
   * \param gconf: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` object.
   * \param sconf: `ScattererConfiguration *` Pointer to a `ScattererConfiguration` object.
   * \param mpidata: `mixMPI *` Pointer to a `mixMPI` object.
   * \param device_count: `const int` Number of offload devices available on the system.
   */
  SphereIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count);
  
  /*! \brief `SphereIterationData` copy constructor.
   *
   * \param rhs: `const SphereIterationData &` Reference to the object to be copied.
   */
  SphereIterationData(const SphereIterationData& rhs);

#ifdef MPI_VERSION
  /*! \brief `SphereIterationData` MPI constructor.
   *
   * \param mpidata: `const mixMPI *` Pointer to a `mixMPI` instance.
   * \param device_count: `const int` Number of offload devices available on the system.
   */
  SphereIterationData(const mixMPI *mpidata, const int device_count);

  /*! \brief Broadcast over MPI the `SphereIterationData` instance from MPI process 0 to all others.
   *
   * When using MPI, the initial InclusionIterationData instance created by
   * MPI process 0 needs to be replicated on all other processes. This
   * function sends it using MPI broadcast calls. The MPI broadcast calls in
   * this function must match those in the constructor using the mixMPI pointer.
   *
   * \param mpidata: `mixMPI *` Pointer to `mixMPI` instance.
   */
  int mpibcast(const mixMPI *mpidata);
#endif // MPI_VERSION

  /*! \brief `SphereIterationData` instance destroyer.
   */
  ~SphereIterationData();
};
// >>> END OF SphereIterationData CLASS DEFINITION <<<

#endif // INCLUDE_ITERATION_DATA_H_