Loading src/include/IterationData.h +141 −0 Original line number Diff line number Diff line Loading @@ -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_ Loading
src/include/IterationData.h +141 −0 Original line number Diff line number Diff line Loading @@ -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_