Loading src/cluster/cluster.cpp +6 −6 Original line number Original line Diff line number Diff line Loading @@ -754,17 +754,17 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ici = (nsh + 1) / 2; int ici = (nsh + 1) / 2; if (idfc == 0) { if (idfc == 0) { for (int ic = 0; ic < ici; ic++) for (int ic = 0; ic < ici; ic++) cid->c2->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, jxi488 - 1); cid->c1->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, jxi488 - 1); } else { } else { if (jxi488 == 1) { if (jxi488 == 1) { for (int ic = 0; ic < ici; ic++) for (int ic = 0; ic < ici; ic++) cid->c2->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, 0); cid->c1->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, 0); } } } } if (nsh % 2 == 0) cid->c2->dc0[ici] = exdc; if (nsh % 2 == 0) cid->c1->dc0[ici] = exdc; dme( dme( cid->c1->li, i132, npnt, npntts, vkarg, exdc, exri, cid->c1->li, i132, npnt, npntts, vkarg, exdc, exri, cid->c1, cid->c2, jer, lcalc, cid->arg, last_configuration cid->c1, jer, lcalc, cid->arg, last_configuration ); ); if (jer != 0) { if (jer != 0) { sprintf(virtual_line, " STOP IN DME\n"); sprintf(virtual_line, " STOP IN DME\n"); Loading Loading @@ -915,10 +915,10 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf sprintf(virtual_line, " SPHERE %2d\n", i170); sprintf(virtual_line, " SPHERE %2d\n", i170); output->append_line(virtual_line); output->append_line(virtual_line); if (cid->c1->nshl[last_configuration - 1] != 1) { if (cid->c1->nshl[last_configuration - 1] != 1) { sprintf(virtual_line, " SIZE=%15.7lE\n", cid->c2->vsz[i]); sprintf(virtual_line, " SIZE=%15.7lE\n", cid->c1->vsz[i]); output->append_line(virtual_line); output->append_line(virtual_line); } else { // label 162 } else { // label 162 sprintf(virtual_line, " SIZE=%15.7lE, REFRACTIVE INDEX=%15.7lE%15.7lE\n", cid->c2->vsz[i], real(cid->c2->vkt[i]), imag(cid->c2->vkt[i])); sprintf(virtual_line, " SIZE=%15.7lE, REFRACTIVE INDEX=%15.7lE%15.7lE\n", cid->c1->vsz[i], real(cid->c1->vkt[i]), imag(cid->c1->vkt[i])); output->append_line(virtual_line); output->append_line(virtual_line); } } // label 164 // label 164 Loading src/include/Commons.h +26 −58 Original line number Original line Diff line number Diff line Loading @@ -40,62 +40,6 @@ class ParticleDescriptor; class ParticleDescriptor; class mixMPI; class mixMPI; /*! \brief Representation of the FORTRAN C2 blocks. * */ class C2 { protected: //! \brief Number of spheres. int nsph; //! \brief Number of required orders. int nhspo; //! \brief QUESTION: what is nl? int nl; public: //! \brief QUESTION: definition? dcomplex *ris; //! \brief QUESTION: definition? dcomplex *dlri; //! \brief Vector of dielectric constants. dcomplex *dc0; //! \brief QUESTION: definition? dcomplex *vkt; //! Vector of sphere sizes in units of 2*PI/LAMBDA double *vsz; /*! \brief C2 instance constructor. * * \param gconf: `GeometryConfiguration*` Pointer to a GeometryConfiguration instance. * \param sconf: `ScattererConfiguration*` Pointer to a ScattererConfiguration instance. */ C2(GeometryConfiguration *gconf, ScattererConfiguration *sconf); /*! \brief C2 instance constructor copying its contents from preexisting instance. * * \param rhs: `C2` object to copy contents from */ C2(const C2& rhs); //! \brief C2 instance destroyer. ~C2(); #ifdef MPI_VERSION /*! \brief C2 instance constructor copying all contents off MPI broadcast from MPI process 0 * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ C2(const mixMPI *mpidata); /*! \brief send C2 instance from MPI process 0 via MPI broadcasts to all other processes * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ void mpibcast(const mixMPI *mpidata); #endif }; /*! \brief Representation of the FORTRAN C3 blocks. /*! \brief Representation of the FORTRAN C3 blocks. */ */ class C3 { class C3 { Loading Loading @@ -276,8 +220,6 @@ class ClusterIterationData { public: public: //! \brief Pointer to a C1 structure. //! \brief Pointer to a C1 structure. ParticleDescriptor *c1; ParticleDescriptor *c1; //! \brief Pointer to a C2 structure. C2 *c2; //! \brief Pointer to a C3 structure. //! \brief Pointer to a C3 structure. C3 *c3; C3 *c3; //! \brief Pointer to a C6 structure. //! \brief Pointer to a C6 structure. Loading Loading @@ -387,6 +329,14 @@ protected: int _num_configurations; int _num_configurations; //! \brief Total number of layers from all sphere types. //! \brief Total number of layers from all sphere types. int _num_layers; int _num_layers; //! \brief Space for different sphere types. int _nl; //! \brief NHSPO = 2 * MAX(NPNT,NPNTTS) - 1 int _nhspo; //! \brief Number of points for numerical integration in layered spheres. int _npnt; //! \brief Number of points for numerical integration in transition layer. int _npntts; //! \brief Contiguous space for RMI. //! \brief Contiguous space for RMI. dcomplex *vec_rmi; dcomplex *vec_rmi; //! \brief Contiguous space for REI. //! \brief Contiguous space for REI. Loading Loading @@ -462,6 +412,14 @@ public: const int &num_configurations = _num_configurations; const int &num_configurations = _num_configurations; //! \brief Read-only view of total number of layers from all sphere types. //! \brief Read-only view of total number of layers from all sphere types. const int &num_layers = _num_layers; const int &num_layers = _num_layers; //! \brief Read-only view on the space for different sphere configurations. const int &nl = _nl; //! \brief Read-only view of NHSPO. const int &nhspo = _nhspo; //! \brief Read-only view on number of points for numerical integration in layered spheres. const int &npnt = _npnt; //! \brief Read-only view on number of points for numerical integration in transition layer. const int &npntts = _npntts; //! \brief Matrix of inverse radial M coefficients. //! \brief Matrix of inverse radial M coefficients. dcomplex **rmi; dcomplex **rmi; //! \brief Matrix of inverse radial E coefficients. //! \brief Matrix of inverse radial E coefficients. Loading @@ -484,6 +442,16 @@ public: int *iog; int *iog; //! \brief Vector of number of layers in sphere type. //! \brief Vector of number of layers in sphere type. int *nshl; int *nshl; //! \brief TBD dcomplex *ris; //! \brief TBD dcomplex *dlri; //! \brief TBD dcomplex *dc0; //! \brief TBD dcomplex *vkt; //! \brief Vector of sizes in units of 2*PI/LAMBDA double *vsz; // >>> END OF SECTION COMMON TO ALL DESCRIPTOR TYPES <<< // // >>> END OF SECTION COMMON TO ALL DESCRIPTOR TYPES <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // Loading src/include/inclu_subs.h +1 −4 Original line number Original line Diff line number Diff line Loading @@ -71,13 +71,10 @@ void incms(dcomplex **am, dcomplex **at, double enti, ParticleDescriptor *c1, C6 * \param lcalc: `int &` Maximum order achieved in calculation. * \param lcalc: `int &` Maximum order achieved in calculation. * \param arg: `dcomplex &` TBD. * \param arg: `dcomplex &` TBD. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c2: `C2 *` Pointer to a C2 instance. */ */ void indme( void indme( int i, int npnt, int npntts, double vk, dcomplex ent, double enti, int i, int npnt, int npntts, double vk, dcomplex ent, double enti, dcomplex entn, int &jer, int &lcalc, dcomplex &arg, ParticleDescriptor *c1, dcomplex entn, int &jer, int &lcalc, dcomplex &arg, ParticleDescriptor *c1 ); C2 *c2 ); /*! \brief C++ porting of INSTR. /*! \brief C++ porting of INSTR. * * Loading src/include/sph_subs.h +4 −6 Original line number Original line Diff line number Diff line Loading @@ -89,9 +89,8 @@ double cg1(int lmpml, int mu, int l, int m); * \param ic: `int` * \param ic: `int` * \param vk: `double` * \param vk: `double` * \param c1: `ParticleDescriptor *` Pointer to `ParticleDescriptor` data structure. * \param c1: `ParticleDescriptor *` Pointer to `ParticleDescriptor` data structure. * \param c2: `C2 *` Pointer to `C2` data structure. */ */ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, C2 *c2); void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1); /*! \brief Compute Mie scattering coefficients. /*! \brief Compute Mie scattering coefficients. * * Loading @@ -108,7 +107,6 @@ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, * \param exdc: `double` External medium dielectric constant. * \param exdc: `double` External medium dielectric constant. * \param exri: `double` External medium refractive index. * \param exri: `double` External medium refractive index. * \param c1: `ParticleDescriptor *` Pointer to a `ParticleDescriptor` data structure. * \param c1: `ParticleDescriptor *` Pointer to a `ParticleDescriptor` data structure. * \param c2: `C2 *` Pointer to a `C2` data structure. * \param jer: `int &` Reference to integer error code variable. * \param jer: `int &` Reference to integer error code variable. * \param lcalc: `int &` Reference to integer variable recording the maximum expansion order accounted for. * \param lcalc: `int &` Reference to integer variable recording the maximum expansion order accounted for. * \param arg: `complex double &` * \param arg: `complex double &` Loading @@ -116,7 +114,7 @@ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, */ */ void dme( void dme( int li, int i, int npnt, int npntts, double vk, double exdc, double exri, int li, int i, int npnt, int npntts, double vk, double exdc, double exri, ParticleDescriptor *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg, int last_conf=0 ParticleDescriptor *c1, int &jer, int &lcalc, dcomplex &arg, int last_conf=0 ); ); /*! \brief Bessel function calculation control parameters. /*! \brief Bessel function calculation control parameters. Loading Loading @@ -262,11 +260,11 @@ void rkc( * \param y2: `complex double &` * \param y2: `complex double &` * \param dy1: `complex double &` * \param dy1: `complex double &` * \param dy2: `complex double &` * \param dy2: `complex double &` * \param c2: `C2 *` Pointer to a `C2` data structure. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. */ */ void rkt( void rkt( int npntmo, double step, double &x, int lpo, dcomplex &y1, int npntmo, double step, double &x, int lpo, dcomplex &y1, dcomplex &y2, dcomplex &dy1, dcomplex &dy2, C2 *c2 dcomplex &y2, dcomplex &dy1, dcomplex &dy2, ParticleDescriptor *c1 ); ); /*! \brief Spherical Bessel functions. /*! \brief Spherical Bessel functions. Loading src/libnptm/Commons.cpp +60 −77 Original line number Original line Diff line number Diff line Loading @@ -36,78 +36,6 @@ #include <mpi.h> #include <mpi.h> #endif #endif C2::C2(GeometryConfiguration *gconf, ScattererConfiguration *sconf) { nsph = gconf->number_of_spheres; int npnt = gconf->npnt; int npntts = gconf->npntts; int max_n = (npnt > npntts) ? npnt : npntts; nhspo = 2 * max_n - 1; nl = sconf->configurations; if (nsph == 1 && nl == 1) nl = 5; ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); vkt = new dcomplex[nsph](); dc0 = new dcomplex[nl](); vsz = new double[nsph](); } C2::C2(const C2& rhs) { nsph = rhs.nsph; nhspo = rhs.nhspo; nl = rhs.nl; ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); for (int ind=0; ind<nhspo; ind++) { ris[ind] = rhs.ris[ind]; dlri[ind] = rhs.dlri[ind]; } vkt = new dcomplex[nsph](); vsz = new double[nsph](); for (int ind=0; ind<nsph; ind++) { vkt[ind] = rhs.vkt[ind]; vsz[ind] = rhs.vsz[ind]; } dc0 = new dcomplex[nl](); for (int ind=0; ind<nl; ind++) dc0[ind] = rhs.dc0[ind]; } C2::~C2() { delete[] ris; delete[] dlri; delete[] vkt; delete[] dc0; delete[] vsz; } #ifdef MPI_VERSION C2::C2(const mixMPI *mpidata) { MPI_Bcast(&nsph, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nl, 1, MPI_INT, 0, MPI_COMM_WORLD); ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); MPI_Bcast(ris, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vkt = new dcomplex[nsph](); vsz = new double[nsph](); MPI_Bcast(vkt, nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); dc0 = new dcomplex[nl](); MPI_Bcast(dc0, nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } void C2::mpibcast(const mixMPI *mpidata) { MPI_Bcast(&nsph, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nl, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ris, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vkt, nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(dc0, nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } #endif C3::C3() { C3::C3() { tsas = new dcomplex*[2]; tsas = new dcomplex*[2]; tsas[0] = new dcomplex[2]; tsas[0] = new dcomplex[2]; Loading Loading @@ -306,7 +234,6 @@ mixMPI::~mixMPI() { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(gconf, sconf); c1 = new ParticleDescriptorCluster(gconf, sconf); c2 = new C2(gconf, sconf); c3 = new C3(); c3 = new C3(); c6 = new C6(c1->lmtpo); c6 = new C6(c1->lmtpo); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -411,7 +338,6 @@ ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, Scatter ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c2 = new C2(*(rhs.c2)); c3 = new C3(*(rhs.c3)); c3 = new C3(*(rhs.c3)); c6 = new C6(*(rhs.c6)); c6 = new C6(*(rhs.c6)); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -560,7 +486,6 @@ ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { #ifdef MPI_VERSION #ifdef MPI_VERSION ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(mpidata); c1 = new ParticleDescriptorCluster(mpidata); c2 = new C2(mpidata); c3 = new C3(mpidata); c3 = new C3(mpidata); c6 = new C6(mpidata); c6 = new C6(mpidata); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -697,7 +622,6 @@ ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int devi void ClusterIterationData::mpibcast(const mixMPI *mpidata) { void ClusterIterationData::mpibcast(const mixMPI *mpidata) { c1->mpibcast(mpidata); c1->mpibcast(mpidata); c2->mpibcast(mpidata); c3->mpibcast(mpidata); c3->mpibcast(mpidata); c6->mpibcast(mpidata); c6->mpibcast(mpidata); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -783,7 +707,6 @@ ClusterIterationData::~ClusterIterationData() { } } delete[] zpv; delete[] zpv; delete c1; delete c1; delete c2; delete c3; delete c3; delete c6; delete c6; delete c9; delete c9; Loading Loading @@ -906,6 +829,18 @@ ParticleDescriptor::ParticleDescriptor(GeometryConfiguration *gconf, ScattererCo ros[ci] = sconf->get_radius(ci); ros[ci] = sconf->get_radius(ci); nshl[ci] = sconf->get_nshl(ci); nshl[ci] = sconf->get_nshl(ci); } } _npnt = gconf->npnt; _npntts = gconf->npntts; int max_n = (npnt > npntts) ? npnt : npntts; _nhspo = 2 * max_n - 1; _nl = sconf->configurations; if (_nsph == 1 && _nl == 1) _nl = 5; ris = new dcomplex[_nhspo](); dlri = new dcomplex[_nhspo](); vkt = new dcomplex[_nsph](); dc0 = new dcomplex[_nl](); vsz = new double[_nsph](); // >>> NEEDED BY SPHERE AND CLUSTER <<< // >>> NEEDED BY SPHERE AND CLUSTER <<< sas = NULL; sas = NULL; vints = NULL; vints = NULL; Loading Loading @@ -1021,6 +956,26 @@ ParticleDescriptor::ParticleDescriptor(const ParticleDescriptor &rhs) { ros[ci] = rhs.ros[ci]; ros[ci] = rhs.ros[ci]; nshl[ci] = rhs.nshl[ci]; nshl[ci] = rhs.nshl[ci]; } } _npnt = rhs._npnt; _npntts = rhs._npntts; _nhspo = rhs._nhspo; _nl = rhs._nl; ris = new dcomplex[_nhspo](); dlri = new dcomplex[_nhspo](); for (int ri = 0; ri < _nhspo; ri++) { ris[ri] = rhs.ris[ri]; dlri[ri] = rhs.dlri[ri]; } vkt = new dcomplex[_nsph](); vsz = new double[_nsph](); for (int vi = 0; vi < _nsph; vi++) { vkt[vi] = rhs.vkt[vi]; vsz[vi] = rhs.vsz[vi]; } dc0 = new dcomplex[_nl](); for (int di = 0; di < _nl; di++) { dc0[di] = rhs.dc0[di]; } // >>> NEEDED BY SPHERE AND CLUSTER <<< // >>> NEEDED BY SPHERE AND CLUSTER <<< sas = NULL; sas = NULL; vints = NULL; vints = NULL; Loading Loading @@ -1131,6 +1086,20 @@ ParticleDescriptor::ParticleDescriptor(const mixMPI *mpidata) { MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); ros = new double[_num_configurations]; ros = new double[_num_configurations]; MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&_npnt, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_npntts, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nl, 1, MPI_INT, 0, MPI_COMM_WORLD); ris = new dcomplex[_nhspo]; MPI_Bcast(ris, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); dlri = new dcomplex[_nhspo]; MPI_Bcast(dlri, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vkt = new dcomplex[_nsph]; MPI_Bcast(vkt, _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vsz = new double[_nsph]; MPI_Bcast(vsz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); dc0 = new dcomplex[_nl]; MPI_Bcast(dc0, _nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } } void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { Loading Loading @@ -1163,6 +1132,15 @@ void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { MPI_Bcast(rzz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(rzz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&_npnt, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_npntts, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nl, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ris, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vkt, _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(dc0, _nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // >>> NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // if (_class_type == SPHERE_TYPE || _class_type == CLUSTER_TYPE) { if (_class_type == SPHERE_TYPE || _class_type == CLUSTER_TYPE) { MPI_Bcast(vec_sas, 4 * _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vec_sas, 4 * _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); Loading Loading @@ -1237,6 +1215,11 @@ ParticleDescriptor::~ParticleDescriptor() { delete[] vec_rei; delete[] vec_rei; delete[] rmi; delete[] rmi; delete[] vec_rmi; delete[] vec_rmi; delete[] ris; delete[] dlri; delete[] vkt; delete[] dc0; delete[] vsz; // Inclusion class members, destroyed only if sub-class is INCLUSION // Inclusion class members, destroyed only if sub-class is INCLUSION if (_class_type == INCLUSION_TYPE) { if (_class_type == INCLUSION_TYPE) { delete[] rm0; delete[] rm0; Loading Loading
src/cluster/cluster.cpp +6 −6 Original line number Original line Diff line number Diff line Loading @@ -754,17 +754,17 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ici = (nsh + 1) / 2; int ici = (nsh + 1) / 2; if (idfc == 0) { if (idfc == 0) { for (int ic = 0; ic < ici; ic++) for (int ic = 0; ic < ici; ic++) cid->c2->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, jxi488 - 1); cid->c1->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, jxi488 - 1); } else { } else { if (jxi488 == 1) { if (jxi488 == 1) { for (int ic = 0; ic < ici; ic++) for (int ic = 0; ic < ici; ic++) cid->c2->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, 0); cid->c1->dc0[ic] = sconf->get_dielectric_constant(ic, i132 - 1, 0); } } } } if (nsh % 2 == 0) cid->c2->dc0[ici] = exdc; if (nsh % 2 == 0) cid->c1->dc0[ici] = exdc; dme( dme( cid->c1->li, i132, npnt, npntts, vkarg, exdc, exri, cid->c1->li, i132, npnt, npntts, vkarg, exdc, exri, cid->c1, cid->c2, jer, lcalc, cid->arg, last_configuration cid->c1, jer, lcalc, cid->arg, last_configuration ); ); if (jer != 0) { if (jer != 0) { sprintf(virtual_line, " STOP IN DME\n"); sprintf(virtual_line, " STOP IN DME\n"); Loading Loading @@ -915,10 +915,10 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf sprintf(virtual_line, " SPHERE %2d\n", i170); sprintf(virtual_line, " SPHERE %2d\n", i170); output->append_line(virtual_line); output->append_line(virtual_line); if (cid->c1->nshl[last_configuration - 1] != 1) { if (cid->c1->nshl[last_configuration - 1] != 1) { sprintf(virtual_line, " SIZE=%15.7lE\n", cid->c2->vsz[i]); sprintf(virtual_line, " SIZE=%15.7lE\n", cid->c1->vsz[i]); output->append_line(virtual_line); output->append_line(virtual_line); } else { // label 162 } else { // label 162 sprintf(virtual_line, " SIZE=%15.7lE, REFRACTIVE INDEX=%15.7lE%15.7lE\n", cid->c2->vsz[i], real(cid->c2->vkt[i]), imag(cid->c2->vkt[i])); sprintf(virtual_line, " SIZE=%15.7lE, REFRACTIVE INDEX=%15.7lE%15.7lE\n", cid->c1->vsz[i], real(cid->c1->vkt[i]), imag(cid->c1->vkt[i])); output->append_line(virtual_line); output->append_line(virtual_line); } } // label 164 // label 164 Loading
src/include/Commons.h +26 −58 Original line number Original line Diff line number Diff line Loading @@ -40,62 +40,6 @@ class ParticleDescriptor; class ParticleDescriptor; class mixMPI; class mixMPI; /*! \brief Representation of the FORTRAN C2 blocks. * */ class C2 { protected: //! \brief Number of spheres. int nsph; //! \brief Number of required orders. int nhspo; //! \brief QUESTION: what is nl? int nl; public: //! \brief QUESTION: definition? dcomplex *ris; //! \brief QUESTION: definition? dcomplex *dlri; //! \brief Vector of dielectric constants. dcomplex *dc0; //! \brief QUESTION: definition? dcomplex *vkt; //! Vector of sphere sizes in units of 2*PI/LAMBDA double *vsz; /*! \brief C2 instance constructor. * * \param gconf: `GeometryConfiguration*` Pointer to a GeometryConfiguration instance. * \param sconf: `ScattererConfiguration*` Pointer to a ScattererConfiguration instance. */ C2(GeometryConfiguration *gconf, ScattererConfiguration *sconf); /*! \brief C2 instance constructor copying its contents from preexisting instance. * * \param rhs: `C2` object to copy contents from */ C2(const C2& rhs); //! \brief C2 instance destroyer. ~C2(); #ifdef MPI_VERSION /*! \brief C2 instance constructor copying all contents off MPI broadcast from MPI process 0 * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ C2(const mixMPI *mpidata); /*! \brief send C2 instance from MPI process 0 via MPI broadcasts to all other processes * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ void mpibcast(const mixMPI *mpidata); #endif }; /*! \brief Representation of the FORTRAN C3 blocks. /*! \brief Representation of the FORTRAN C3 blocks. */ */ class C3 { class C3 { Loading Loading @@ -276,8 +220,6 @@ class ClusterIterationData { public: public: //! \brief Pointer to a C1 structure. //! \brief Pointer to a C1 structure. ParticleDescriptor *c1; ParticleDescriptor *c1; //! \brief Pointer to a C2 structure. C2 *c2; //! \brief Pointer to a C3 structure. //! \brief Pointer to a C3 structure. C3 *c3; C3 *c3; //! \brief Pointer to a C6 structure. //! \brief Pointer to a C6 structure. Loading Loading @@ -387,6 +329,14 @@ protected: int _num_configurations; int _num_configurations; //! \brief Total number of layers from all sphere types. //! \brief Total number of layers from all sphere types. int _num_layers; int _num_layers; //! \brief Space for different sphere types. int _nl; //! \brief NHSPO = 2 * MAX(NPNT,NPNTTS) - 1 int _nhspo; //! \brief Number of points for numerical integration in layered spheres. int _npnt; //! \brief Number of points for numerical integration in transition layer. int _npntts; //! \brief Contiguous space for RMI. //! \brief Contiguous space for RMI. dcomplex *vec_rmi; dcomplex *vec_rmi; //! \brief Contiguous space for REI. //! \brief Contiguous space for REI. Loading Loading @@ -462,6 +412,14 @@ public: const int &num_configurations = _num_configurations; const int &num_configurations = _num_configurations; //! \brief Read-only view of total number of layers from all sphere types. //! \brief Read-only view of total number of layers from all sphere types. const int &num_layers = _num_layers; const int &num_layers = _num_layers; //! \brief Read-only view on the space for different sphere configurations. const int &nl = _nl; //! \brief Read-only view of NHSPO. const int &nhspo = _nhspo; //! \brief Read-only view on number of points for numerical integration in layered spheres. const int &npnt = _npnt; //! \brief Read-only view on number of points for numerical integration in transition layer. const int &npntts = _npntts; //! \brief Matrix of inverse radial M coefficients. //! \brief Matrix of inverse radial M coefficients. dcomplex **rmi; dcomplex **rmi; //! \brief Matrix of inverse radial E coefficients. //! \brief Matrix of inverse radial E coefficients. Loading @@ -484,6 +442,16 @@ public: int *iog; int *iog; //! \brief Vector of number of layers in sphere type. //! \brief Vector of number of layers in sphere type. int *nshl; int *nshl; //! \brief TBD dcomplex *ris; //! \brief TBD dcomplex *dlri; //! \brief TBD dcomplex *dc0; //! \brief TBD dcomplex *vkt; //! \brief Vector of sizes in units of 2*PI/LAMBDA double *vsz; // >>> END OF SECTION COMMON TO ALL DESCRIPTOR TYPES <<< // // >>> END OF SECTION COMMON TO ALL DESCRIPTOR TYPES <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // Loading
src/include/inclu_subs.h +1 −4 Original line number Original line Diff line number Diff line Loading @@ -71,13 +71,10 @@ void incms(dcomplex **am, dcomplex **at, double enti, ParticleDescriptor *c1, C6 * \param lcalc: `int &` Maximum order achieved in calculation. * \param lcalc: `int &` Maximum order achieved in calculation. * \param arg: `dcomplex &` TBD. * \param arg: `dcomplex &` TBD. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c2: `C2 *` Pointer to a C2 instance. */ */ void indme( void indme( int i, int npnt, int npntts, double vk, dcomplex ent, double enti, int i, int npnt, int npntts, double vk, dcomplex ent, double enti, dcomplex entn, int &jer, int &lcalc, dcomplex &arg, ParticleDescriptor *c1, dcomplex entn, int &jer, int &lcalc, dcomplex &arg, ParticleDescriptor *c1 ); C2 *c2 ); /*! \brief C++ porting of INSTR. /*! \brief C++ porting of INSTR. * * Loading
src/include/sph_subs.h +4 −6 Original line number Original line Diff line number Diff line Loading @@ -89,9 +89,8 @@ double cg1(int lmpml, int mu, int l, int m); * \param ic: `int` * \param ic: `int` * \param vk: `double` * \param vk: `double` * \param c1: `ParticleDescriptor *` Pointer to `ParticleDescriptor` data structure. * \param c1: `ParticleDescriptor *` Pointer to `ParticleDescriptor` data structure. * \param c2: `C2 *` Pointer to `C2` data structure. */ */ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, C2 *c2); void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1); /*! \brief Compute Mie scattering coefficients. /*! \brief Compute Mie scattering coefficients. * * Loading @@ -108,7 +107,6 @@ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, * \param exdc: `double` External medium dielectric constant. * \param exdc: `double` External medium dielectric constant. * \param exri: `double` External medium refractive index. * \param exri: `double` External medium refractive index. * \param c1: `ParticleDescriptor *` Pointer to a `ParticleDescriptor` data structure. * \param c1: `ParticleDescriptor *` Pointer to a `ParticleDescriptor` data structure. * \param c2: `C2 *` Pointer to a `C2` data structure. * \param jer: `int &` Reference to integer error code variable. * \param jer: `int &` Reference to integer error code variable. * \param lcalc: `int &` Reference to integer variable recording the maximum expansion order accounted for. * \param lcalc: `int &` Reference to integer variable recording the maximum expansion order accounted for. * \param arg: `complex double &` * \param arg: `complex double &` Loading @@ -116,7 +114,7 @@ void diel(int npntmo, int ns, int i, int ic, double vk, ParticleDescriptor *c1, */ */ void dme( void dme( int li, int i, int npnt, int npntts, double vk, double exdc, double exri, int li, int i, int npnt, int npntts, double vk, double exdc, double exri, ParticleDescriptor *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg, int last_conf=0 ParticleDescriptor *c1, int &jer, int &lcalc, dcomplex &arg, int last_conf=0 ); ); /*! \brief Bessel function calculation control parameters. /*! \brief Bessel function calculation control parameters. Loading Loading @@ -262,11 +260,11 @@ void rkc( * \param y2: `complex double &` * \param y2: `complex double &` * \param dy1: `complex double &` * \param dy1: `complex double &` * \param dy2: `complex double &` * \param dy2: `complex double &` * \param c2: `C2 *` Pointer to a `C2` data structure. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. */ */ void rkt( void rkt( int npntmo, double step, double &x, int lpo, dcomplex &y1, int npntmo, double step, double &x, int lpo, dcomplex &y1, dcomplex &y2, dcomplex &dy1, dcomplex &dy2, C2 *c2 dcomplex &y2, dcomplex &dy1, dcomplex &dy2, ParticleDescriptor *c1 ); ); /*! \brief Spherical Bessel functions. /*! \brief Spherical Bessel functions. Loading
src/libnptm/Commons.cpp +60 −77 Original line number Original line Diff line number Diff line Loading @@ -36,78 +36,6 @@ #include <mpi.h> #include <mpi.h> #endif #endif C2::C2(GeometryConfiguration *gconf, ScattererConfiguration *sconf) { nsph = gconf->number_of_spheres; int npnt = gconf->npnt; int npntts = gconf->npntts; int max_n = (npnt > npntts) ? npnt : npntts; nhspo = 2 * max_n - 1; nl = sconf->configurations; if (nsph == 1 && nl == 1) nl = 5; ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); vkt = new dcomplex[nsph](); dc0 = new dcomplex[nl](); vsz = new double[nsph](); } C2::C2(const C2& rhs) { nsph = rhs.nsph; nhspo = rhs.nhspo; nl = rhs.nl; ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); for (int ind=0; ind<nhspo; ind++) { ris[ind] = rhs.ris[ind]; dlri[ind] = rhs.dlri[ind]; } vkt = new dcomplex[nsph](); vsz = new double[nsph](); for (int ind=0; ind<nsph; ind++) { vkt[ind] = rhs.vkt[ind]; vsz[ind] = rhs.vsz[ind]; } dc0 = new dcomplex[nl](); for (int ind=0; ind<nl; ind++) dc0[ind] = rhs.dc0[ind]; } C2::~C2() { delete[] ris; delete[] dlri; delete[] vkt; delete[] dc0; delete[] vsz; } #ifdef MPI_VERSION C2::C2(const mixMPI *mpidata) { MPI_Bcast(&nsph, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nl, 1, MPI_INT, 0, MPI_COMM_WORLD); ris = new dcomplex[nhspo](); dlri = new dcomplex[nhspo](); MPI_Bcast(ris, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vkt = new dcomplex[nsph](); vsz = new double[nsph](); MPI_Bcast(vkt, nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); dc0 = new dcomplex[nl](); MPI_Bcast(dc0, nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } void C2::mpibcast(const mixMPI *mpidata) { MPI_Bcast(&nsph, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&nl, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ris, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vkt, nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(dc0, nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } #endif C3::C3() { C3::C3() { tsas = new dcomplex*[2]; tsas = new dcomplex*[2]; tsas[0] = new dcomplex[2]; tsas[0] = new dcomplex[2]; Loading Loading @@ -306,7 +234,6 @@ mixMPI::~mixMPI() { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(gconf, sconf); c1 = new ParticleDescriptorCluster(gconf, sconf); c2 = new C2(gconf, sconf); c3 = new C3(); c3 = new C3(); c6 = new C6(c1->lmtpo); c6 = new C6(c1->lmtpo); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -411,7 +338,6 @@ ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, Scatter ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c2 = new C2(*(rhs.c2)); c3 = new C3(*(rhs.c3)); c3 = new C3(*(rhs.c3)); c6 = new C6(*(rhs.c6)); c6 = new C6(*(rhs.c6)); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -560,7 +486,6 @@ ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { #ifdef MPI_VERSION #ifdef MPI_VERSION ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(mpidata); c1 = new ParticleDescriptorCluster(mpidata); c2 = new C2(mpidata); c3 = new C3(mpidata); c3 = new C3(mpidata); c6 = new C6(mpidata); c6 = new C6(mpidata); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -697,7 +622,6 @@ ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int devi void ClusterIterationData::mpibcast(const mixMPI *mpidata) { void ClusterIterationData::mpibcast(const mixMPI *mpidata) { c1->mpibcast(mpidata); c1->mpibcast(mpidata); c2->mpibcast(mpidata); c3->mpibcast(mpidata); c3->mpibcast(mpidata); c6->mpibcast(mpidata); c6->mpibcast(mpidata); const int ndi = c1->nsph * c1->nlim; const int ndi = c1->nsph * c1->nlim; Loading Loading @@ -783,7 +707,6 @@ ClusterIterationData::~ClusterIterationData() { } } delete[] zpv; delete[] zpv; delete c1; delete c1; delete c2; delete c3; delete c3; delete c6; delete c6; delete c9; delete c9; Loading Loading @@ -906,6 +829,18 @@ ParticleDescriptor::ParticleDescriptor(GeometryConfiguration *gconf, ScattererCo ros[ci] = sconf->get_radius(ci); ros[ci] = sconf->get_radius(ci); nshl[ci] = sconf->get_nshl(ci); nshl[ci] = sconf->get_nshl(ci); } } _npnt = gconf->npnt; _npntts = gconf->npntts; int max_n = (npnt > npntts) ? npnt : npntts; _nhspo = 2 * max_n - 1; _nl = sconf->configurations; if (_nsph == 1 && _nl == 1) _nl = 5; ris = new dcomplex[_nhspo](); dlri = new dcomplex[_nhspo](); vkt = new dcomplex[_nsph](); dc0 = new dcomplex[_nl](); vsz = new double[_nsph](); // >>> NEEDED BY SPHERE AND CLUSTER <<< // >>> NEEDED BY SPHERE AND CLUSTER <<< sas = NULL; sas = NULL; vints = NULL; vints = NULL; Loading Loading @@ -1021,6 +956,26 @@ ParticleDescriptor::ParticleDescriptor(const ParticleDescriptor &rhs) { ros[ci] = rhs.ros[ci]; ros[ci] = rhs.ros[ci]; nshl[ci] = rhs.nshl[ci]; nshl[ci] = rhs.nshl[ci]; } } _npnt = rhs._npnt; _npntts = rhs._npntts; _nhspo = rhs._nhspo; _nl = rhs._nl; ris = new dcomplex[_nhspo](); dlri = new dcomplex[_nhspo](); for (int ri = 0; ri < _nhspo; ri++) { ris[ri] = rhs.ris[ri]; dlri[ri] = rhs.dlri[ri]; } vkt = new dcomplex[_nsph](); vsz = new double[_nsph](); for (int vi = 0; vi < _nsph; vi++) { vkt[vi] = rhs.vkt[vi]; vsz[vi] = rhs.vsz[vi]; } dc0 = new dcomplex[_nl](); for (int di = 0; di < _nl; di++) { dc0[di] = rhs.dc0[di]; } // >>> NEEDED BY SPHERE AND CLUSTER <<< // >>> NEEDED BY SPHERE AND CLUSTER <<< sas = NULL; sas = NULL; vints = NULL; vints = NULL; Loading Loading @@ -1131,6 +1086,20 @@ ParticleDescriptor::ParticleDescriptor(const mixMPI *mpidata) { MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); ros = new double[_num_configurations]; ros = new double[_num_configurations]; MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&_npnt, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_npntts, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nl, 1, MPI_INT, 0, MPI_COMM_WORLD); ris = new dcomplex[_nhspo]; MPI_Bcast(ris, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); dlri = new dcomplex[_nhspo]; MPI_Bcast(dlri, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vkt = new dcomplex[_nsph]; MPI_Bcast(vkt, _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vsz = new double[_nsph]; MPI_Bcast(vsz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); dc0 = new dcomplex[_nl]; MPI_Bcast(dc0, _nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } } void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { Loading Loading @@ -1163,6 +1132,15 @@ void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { MPI_Bcast(rzz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(rzz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(iog, _nsph, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(ros, _num_configurations, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&_npnt, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_npntts, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nhspo, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(&_nl, 1, MPI_INT, 0, MPI_COMM_WORLD); MPI_Bcast(ris, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(dlri, _nhspo, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vkt, _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vsz, _nsph, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(dc0, _nl, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // >>> NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY SPHERE AND CLUSTER <<< // if (_class_type == SPHERE_TYPE || _class_type == CLUSTER_TYPE) { if (_class_type == SPHERE_TYPE || _class_type == CLUSTER_TYPE) { MPI_Bcast(vec_sas, 4 * _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vec_sas, 4 * _nsph, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); Loading Loading @@ -1237,6 +1215,11 @@ ParticleDescriptor::~ParticleDescriptor() { delete[] vec_rei; delete[] vec_rei; delete[] rmi; delete[] rmi; delete[] vec_rmi; delete[] vec_rmi; delete[] ris; delete[] dlri; delete[] vkt; delete[] dc0; delete[] vsz; // Inclusion class members, destroyed only if sub-class is INCLUSION // Inclusion class members, destroyed only if sub-class is INCLUSION if (_class_type == INCLUSION_TYPE) { if (_class_type == INCLUSION_TYPE) { delete[] rm0; delete[] rm0; Loading