Skip to content
Snippets Groups Projects
Commit 8bd360da authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Update definition of SphereIterationData structure

parent a9d7c207
No related branches found
No related tags found
No related merge requests found
...@@ -348,5 +348,146 @@ public: ...@@ -348,5 +348,146 @@ public:
}; };
// >>> END OF InclusionIterationData CLASS DEFINITION <<< // // >>> 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_ #endif // INCLUDE_ITERATION_DATA_H_
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment