Loading src/include/Commons.h +23 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,14 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "cluster descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(int inner_order, int outer_order); }; /*! \brief The data structure describing a particle model for a sphere with inclusions. Loading Loading @@ -493,6 +501,14 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "inclusion descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(int inner_order, int outer_order) { return 0; } }; /*! \brief The data structure describing a spherical particle model. Loading Loading @@ -535,6 +551,13 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "sphere descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param order: `int` The new expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_order(int order) { return 0; } }; /*! \brief A data structure representing the angles to be evaluated in the problem. Loading src/include/IterationData.h +9 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,15 @@ public: /*! \brief `ClusterIterationData` instance destroyer. */ ~ClusterIterationData(); /*! \brief Update field expansion orders. * * \param rcf: `double **` Matrix of sphere fractional radii. * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(double** rcf, int inner_order, int outer_order); }; // >>> END OF ClusterIterationData CLASS DEFINITION <<< Loading src/libnptm/Commons.cpp +86 −0 Original line number Diff line number Diff line Loading @@ -982,6 +982,92 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const mixMPI *mpidata) : Pa MPI_Bcast(rac3j, _lmtpo, MPI_DOUBLE, 0, MPI_COMM_WORLD); } #endif // MPI_VERSION int ParticleDescriptorCluster::update_orders(int inner_order, int outer_order) { int result = 0; bool changed_li = false; bool changed_le = false; if (inner_order != _li) { _li = inner_order; changed_li = true; delete[] vec_rmi; delete[] rmi; vec_rmi = new dcomplex[_li * _nsph](); rmi = new dcomplex*[_li]; delete[] vec_rei; delete[] rei; vec_rei = new dcomplex[_li * _nsph](); rei = new dcomplex*[_li]; for (int ri = 0; ri < _li; ri++) { rmi[ri] = vec_rmi + (_nsph * ri); rei[ri] = vec_rei + (_nsph * ri); } _litpo = _li + _li + 1; _litpos = _litpo * _litpo; delete[] vh; vh = new dcomplex[_ncou * _litpo](); delete[] vyhj; vyhj = new dcomplex[_ncou * _litpos](); } if (outer_order != _le) { _le = outer_order; changed_le = true; _nlem = _le * (_le + 2); _nlemt = 2 * _nlem; delete[] vec_am0m; vec_am0m = new dcomplex[_nlemt * _nlemt](); delete[] am0m; am0m = new dcomplex*[_nlemt]; for (int ai = 0; ai < _nlemt; ai++) am0m[ai] = vec_am0m + (ai * _nlemt); } if (changed_li || changed_le) { _lm = (_li > _le) ? _li : _le; _lmpo = _lm + 1; _lmtpo = _li + _le + 1; _lmtpos = _lmtpo * _lmtpo; _nv3j = (_lm * (_lm + 1) * (2 * _lm + 7)) / 6; _nlim = _li * (_le + 2); _ndi = _nsph * _nlim; _ndit = 2 * _nsph * _nlim; delete[] vec_ind3j; vec_ind3j = new int[(_lm + 1) * _lm](); delete[] vj0; vj0 = new dcomplex[_nsph * _lmtpo](); delete[] vyj0; vyj0 = new dcomplex[_nsph * _lmtpos](); delete[] v3j0; v3j0 = new double[_nv3j](); delete[] ind3j; ind3j = new int*[_lm + 1]; for (int ii = 0; ii <= _lm; ii++) ind3j[ii] = vec_ind3j + (_lm * ii); delete[] rac3j; rac3j = new double[_lmtpo](); delete[] vec_gis; vec_gis = new dcomplex[_ndi * _nlem](); delete[] gis; gis = new dcomplex*[_ndi]; delete[] vec_gls; vec_gls = new dcomplex[_ndi * _nlem](); delete[] gls; gls = new dcomplex*[_ndi]; for (int gi = 0; gi < _ndi; gi++) { gis[gi] = vec_gis + (gi * _nlem); gls[gi] = vec_gls + (gi * _nlem); } delete[] vec_sam; vec_sam = new dcomplex[_ndit * _nlemt](); delete[] sam; sam = new dcomplex*[_ndit]; for (int si = 0; si < _ndit; si++) sam[si] = vec_sam + (si * _nlemt); int nllt = (_nlemt == 0) ? 2 * _nsph * _li * (_li + 2) : _nlemt; delete[] vec_w; delete[] w; vec_w = new dcomplex[nllt * 4](); w = new dcomplex*[nllt]; for (int wi = 0; wi < nllt; wi++) w[wi] = vec_w + (4 * wi); } return result; } // >>> End of ParticleDescriptorCluster class implementation. <<< // // >>> ParticleDescriptorInclusion class implementation. <<< // Loading Loading
src/include/Commons.h +23 −0 Original line number Diff line number Diff line Loading @@ -451,6 +451,14 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "cluster descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(int inner_order, int outer_order); }; /*! \brief The data structure describing a particle model for a sphere with inclusions. Loading Loading @@ -493,6 +501,14 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "inclusion descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(int inner_order, int outer_order) { return 0; } }; /*! \brief The data structure describing a spherical particle model. Loading Loading @@ -535,6 +551,13 @@ public: * \return descriptor_type: `string` The descriptor type name. */ std::string get_descriptor_type() override { return "sphere descriptor"; } /*! \brief Interface function to update field expansion orders. * * \param order: `int` The new expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_order(int order) { return 0; } }; /*! \brief A data structure representing the angles to be evaluated in the problem. Loading
src/include/IterationData.h +9 −0 Original line number Diff line number Diff line Loading @@ -178,6 +178,15 @@ public: /*! \brief `ClusterIterationData` instance destroyer. */ ~ClusterIterationData(); /*! \brief Update field expansion orders. * * \param rcf: `double **` Matrix of sphere fractional radii. * \param inner_order: `int` The new inner expansion order to be set. * \param outer_order: `int` The new outer expansion order to be set. * \return result: `int` An exit code (0 if successful). */ int update_orders(double** rcf, int inner_order, int outer_order); }; // >>> END OF ClusterIterationData CLASS DEFINITION <<< Loading
src/libnptm/Commons.cpp +86 −0 Original line number Diff line number Diff line Loading @@ -982,6 +982,92 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const mixMPI *mpidata) : Pa MPI_Bcast(rac3j, _lmtpo, MPI_DOUBLE, 0, MPI_COMM_WORLD); } #endif // MPI_VERSION int ParticleDescriptorCluster::update_orders(int inner_order, int outer_order) { int result = 0; bool changed_li = false; bool changed_le = false; if (inner_order != _li) { _li = inner_order; changed_li = true; delete[] vec_rmi; delete[] rmi; vec_rmi = new dcomplex[_li * _nsph](); rmi = new dcomplex*[_li]; delete[] vec_rei; delete[] rei; vec_rei = new dcomplex[_li * _nsph](); rei = new dcomplex*[_li]; for (int ri = 0; ri < _li; ri++) { rmi[ri] = vec_rmi + (_nsph * ri); rei[ri] = vec_rei + (_nsph * ri); } _litpo = _li + _li + 1; _litpos = _litpo * _litpo; delete[] vh; vh = new dcomplex[_ncou * _litpo](); delete[] vyhj; vyhj = new dcomplex[_ncou * _litpos](); } if (outer_order != _le) { _le = outer_order; changed_le = true; _nlem = _le * (_le + 2); _nlemt = 2 * _nlem; delete[] vec_am0m; vec_am0m = new dcomplex[_nlemt * _nlemt](); delete[] am0m; am0m = new dcomplex*[_nlemt]; for (int ai = 0; ai < _nlemt; ai++) am0m[ai] = vec_am0m + (ai * _nlemt); } if (changed_li || changed_le) { _lm = (_li > _le) ? _li : _le; _lmpo = _lm + 1; _lmtpo = _li + _le + 1; _lmtpos = _lmtpo * _lmtpo; _nv3j = (_lm * (_lm + 1) * (2 * _lm + 7)) / 6; _nlim = _li * (_le + 2); _ndi = _nsph * _nlim; _ndit = 2 * _nsph * _nlim; delete[] vec_ind3j; vec_ind3j = new int[(_lm + 1) * _lm](); delete[] vj0; vj0 = new dcomplex[_nsph * _lmtpo](); delete[] vyj0; vyj0 = new dcomplex[_nsph * _lmtpos](); delete[] v3j0; v3j0 = new double[_nv3j](); delete[] ind3j; ind3j = new int*[_lm + 1]; for (int ii = 0; ii <= _lm; ii++) ind3j[ii] = vec_ind3j + (_lm * ii); delete[] rac3j; rac3j = new double[_lmtpo](); delete[] vec_gis; vec_gis = new dcomplex[_ndi * _nlem](); delete[] gis; gis = new dcomplex*[_ndi]; delete[] vec_gls; vec_gls = new dcomplex[_ndi * _nlem](); delete[] gls; gls = new dcomplex*[_ndi]; for (int gi = 0; gi < _ndi; gi++) { gis[gi] = vec_gis + (gi * _nlem); gls[gi] = vec_gls + (gi * _nlem); } delete[] vec_sam; vec_sam = new dcomplex[_ndit * _nlemt](); delete[] sam; sam = new dcomplex*[_ndit]; for (int si = 0; si < _ndit; si++) sam[si] = vec_sam + (si * _nlemt); int nllt = (_nlemt == 0) ? 2 * _nsph * _li * (_li + 2) : _nlemt; delete[] vec_w; delete[] w; vec_w = new dcomplex[nllt * 4](); w = new dcomplex*[nllt]; for (int wi = 0; wi < nllt; wi++) w[wi] = vec_w + (4 * wi); } return result; } // >>> End of ParticleDescriptorCluster class implementation. <<< // // >>> ParticleDescriptorInclusion class implementation. <<< // Loading