Loading src/cluster/cluster.cpp +28 −28 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ void cluster(const string& config_file, const string& data_file, const string& o p_output->append_line(virtual_line); sprintf(virtual_line, " \n"); p_output->append_line(virtual_line); str(sconf, cid->c1, cid->c3, cid->c6); str(sconf, cid->c1, cid->c6); thdps(cid->c1->lm, cid->zpv); double exdc = sconf->exdc; double exri = sqrt(exdc); Loading Loading @@ -895,7 +895,7 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf double cs0 = 0.25 * cid->vk * cid->vk * cid->vk / acos(0.0); double csch = 0.0, qschu = 0.0, pschu = 0.0, s0mag = 0.0; dcomplex s0 = 0.0 + 0.0 * I; scr0(cid->vk, exri, cid->c1, cid->c3); scr0(cid->vk, exri, cid->c1); double sqk = cid->vk * cid->vk * exdc; aps(cid->zpv, cid->c1->li, nsph, cid->c1, sqk, cid->gaps); rabas(inpol, cid->c1->li, nsph, cid->c1, cid->tqse, cid->tqspe, cid->tqss, cid->tqsps); Loading Loading @@ -952,10 +952,10 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf output->append_line(virtual_line); } } // i170 loop sprintf(virtual_line, " FSAT=%15.7lE%15.7lE\n", real(cid->c3->tfsas), imag(cid->c3->tfsas)); sprintf(virtual_line, " FSAT=%15.7lE%15.7lE\n", real(cid->c1->tfsas), imag(cid->c1->tfsas)); output->append_line(virtual_line); csch = 2.0 * cid->vk * cid->sqsfi / cid->c3->gcs; s0 = cid->c3->tfsas * exri; csch = 2.0 * cid->vk * cid->sqsfi / cid->c1->gcs; s0 = cid->c1->tfsas * exri; qschu = imag(s0) * csch; pschu = real(s0) * csch; s0mag = cabs(s0) * cs0; Loading Loading @@ -1124,23 +1124,23 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ipol = (ilr210 % 2 == 0) ? 1 : -1; if (ilr210 == 2) jlr = 1; double extsm = cid->c1->ecscm[ilr210 - 1]; double qextm = extsm * cid->sqsfi / cid->c3->gcs; double extrm = extsm / cid->c3->ecs; double qextm = extsm * cid->sqsfi / cid->c1->gcs; double extrm = extsm / cid->c1->ecs; double scasm = cid->c1->scscm[ilr210 - 1]; double albdm = scasm / extsm; double qscam = scasm * cid->sqsfi / cid->c3->gcs; double scarm = scasm / cid->c3->scs; double qscam = scasm * cid->sqsfi / cid->c1->gcs; double scarm = scasm / cid->c1->scs; double abssm = extsm - scasm; double qabsm = abssm * cid->sqsfi / cid->c3->gcs; double absrm = abssm / cid->c3->acs; double acsecs = cid->c3->acs / cid->c3->ecs; double qabsm = abssm * cid->sqsfi / cid->c1->gcs; double absrm = abssm / cid->c1->acs; double acsecs = cid->c1->acs / cid->c1->ecs; if (acsecs >= -1.0e-6 && acsecs <= 1.0e-6) absrm = 1.0; dcomplex s0m = cid->c1->fsacm[ilr210 - 1][ilr210 - 1] * exri; double qschum = imag(s0m) * csch; double pschum = real(s0m) * csch; double s0magm = cabs(s0m) * cs0; double rfinrm = real(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / real(cid->c3->tfsas); double extcrm = imag(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / imag(cid->c3->tfsas); double rfinrm = real(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / real(cid->c1->tfsas); double extcrm = imag(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / imag(cid->c1->tfsas); if (inpol == 0) { sprintf(virtual_line, " LIN %2d\n", ipol); output->append_line(virtual_line); Loading Loading @@ -1224,7 +1224,7 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf output->append_line(virtual_line); } // label 224 scr2(cid->vk, vkarg, exri, cid->duk, cid->c1, cid->c3); scr2(cid->vk, vkarg, exri, cid->duk, cid->c1); if (cid->c1->li != cid->c1->le) { sprintf(virtual_line, " SPHERES; LMX=MIN0(LI,LE)\n"); output->append_line(virtual_line); Loading Loading @@ -1271,14 +1271,14 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf } // i226 loop sprintf( virtual_line, " SAT(1,1)=%15.7lE%15.7lE, SAT(2,1)=%15.7lE%15.7lE\n", real(cid->c3->tsas[0][0]), imag(cid->c3->tsas[0][0]), real(cid->c3->tsas[1][0]), imag(cid->c3->tsas[1][0]) real(cid->c1->tsas[0][0]), imag(cid->c1->tsas[0][0]), real(cid->c1->tsas[1][0]), imag(cid->c1->tsas[1][0]) ); output->append_line(virtual_line); sprintf( virtual_line, " SAT(1,2)=%15.7lE%15.7lE, SAT(2,2)=%15.7lE%15.7lE\n", real(cid->c3->tsas[0][1]), imag(cid->c3->tsas[0][1]), real(cid->c3->tsas[1][1]), imag(cid->c3->tsas[1][1]) real(cid->c1->tsas[0][1]), imag(cid->c1->tsas[0][1]), real(cid->c1->tsas[1][1]), imag(cid->c1->tsas[1][1]) ); output->append_line(virtual_line); sprintf(virtual_line, " CLUSTER\n"); Loading Loading @@ -1388,23 +1388,23 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ipol = (ilr290 % 2 == 0) ? 1 : -1; if (ilr290 == 2) jlr = 1; double extsec = cid->c1->ecsc[ilr290 - 1]; double qext = extsec * cid->sqsfi / cid->c3->gcs; double extrat = extsec / cid->c3->ecs; double qext = extsec * cid->sqsfi / cid->c1->gcs; double extrat = extsec / cid->c1->ecs; double scasec = cid->c1->scsc[ilr290 - 1]; double albedc = scasec / extsec; double qsca = scasec * cid->sqsfi / cid->c3->gcs; double scarat = scasec / cid->c3->scs; double qsca = scasec * cid->sqsfi / cid->c1->gcs; double scarat = scasec / cid->c1->scs; double abssec = extsec - scasec; double qabs = abssec * cid->sqsfi / cid->c3->gcs; double qabs = abssec * cid->sqsfi / cid->c1->gcs; double absrat = 1.0; double ratio = cid->c3->acs / cid->c3->ecs; if (ratio < -1.0e-6 || ratio > 1.0e-6) absrat = abssec / cid->c3->acs; double ratio = cid->c1->acs / cid->c1->ecs; if (ratio < -1.0e-6 || ratio > 1.0e-6) absrat = abssec / cid->c1->acs; s0 = cid->c1->fsac[ilr290 - 1][ilr290 - 1] * exri; double qschu = imag(s0) * csch; double pschu = real(s0) * csch; s0mag = cabs(s0) * cs0; double refinr = real(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / real(cid->c3->tfsas); double extcor = imag(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / imag(cid->c3->tfsas); double refinr = real(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / real(cid->c1->tfsas); double extcor = imag(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / imag(cid->c1->tfsas); if (inpol == 0) { sprintf(virtual_line, " LIN %2d\n", ipol); output->append_line(virtual_line); Loading src/include/Commons.h +65 −47 Original line number Diff line number Diff line Loading @@ -40,50 +40,53 @@ class ParticleDescriptor; class mixMPI; /*! \brief Representation of the FORTRAN C3 blocks. */ class C3 { public: //! \brief QUESTION: definition? dcomplex tfsas; //! \brief QUESTION: definition? dcomplex **tsas; //! \brief Total geometric cross-section. double gcs; //! \brief Total scattering cross-section. double scs; //! \brief Total extinction cross-section. double ecs; //! \brief Total absorption cross-section. double acs; /*! \brief C3 instance constructor. */ C3(); /*! \brief C3 instance constructor copying its contents from a preexisting object. */ C3(const C3& rhs); /*! \brief C3 instance destroyer. */ ~C3(); #ifdef MPI_VERSION /*! \brief C3 instance constructor copying all contents off MPI broadcast from MPI process 0 * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ C3(const mixMPI *mpidata); /*! \brief send C3 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. // */ // class C3 { // protected: // dcomplex *vec_tsas; // public: // //! \brief Total forward scattering amplitude. // dcomplex tfsas; // //! \brief Total scattering amplitude. // dcomplex **tsas; // //! \brief Total geometric cross-section. // double gcs; // //! \brief Total scattering cross-section. // double scs; // //! \brief Total extinction cross-section. // double ecs; // //! \brief Total absorption cross-section. // double acs; // /*! \brief C3 instance constructor. // */ // C3(); // /*! \brief C3 instance constructor copying its contents from a preexisting object. // */ // C3(const C3& rhs); // /*! \brief C3 instance destroyer. // */ // ~C3(); // #ifdef MPI_VERSION // /*! \brief C3 instance constructor copying all contents off MPI broadcast from MPI process 0 // * // * \param mpidata: `mixMPI *` pointer to MPI data structure. // */ // C3(const mixMPI *mpidata); // /*! \brief send C3 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 C6 blocks. */ Loading Loading @@ -218,10 +221,8 @@ public: */ class ClusterIterationData { public: //! \brief Pointer to a C1 structure. //! \brief Pointer to a ParticleDescriptor structure. ParticleDescriptor *c1; //! \brief Pointer to a C3 structure. C3 *c3; //! \brief Pointer to a C6 structure. C6 *c6; //! \brief Pointer to a C9 structure. Loading Loading @@ -354,6 +355,10 @@ protected: dcomplex *vec_vints; // >>> END OF SECTION NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY CLUSTER <<< // dcomplex *vec_tsas; // >>> END OF SECTION NEEDED BY CLUSTER <<< // // >>> NEEDED BY CLUSTER AND INCLU <<< //! \brief Maximum external field expansion order. int _le; Loading Loading @@ -478,7 +483,20 @@ public: // >>> END OF SECTION NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY CLUSTER <<< // \brief Vector of field intensity components. dcomplex *vintt; //! \brief Total forward scattering amplitude. dcomplex tfsas; //! \brief Total scattering amplitude. dcomplex **tsas; //! \brief Total geometric cross-section. double gcs; //! \brief Total scattering cross-section. double scs; //! \brief Total extinction cross-section. double ecs; //! \brief Total absorption cross-section. double acs; // >>> END OF SECTION NEEDED BY CLUSTER <<< // // >>> NEEDED BY CLUSTER AND INCLU <<< Loading src/include/clu_subs.h +3 −7 Original line number Diff line number Diff line Loading @@ -348,9 +348,8 @@ void rftr( * \param vk: `double` Wave number * \param exri: `double` External medium refractive index. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. */ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3); void scr0(double vk, double exri, ParticleDescriptor *c1); /*! \brief Compute the scattering amplitude for a single sphere in an aggregate. * Loading @@ -362,11 +361,9 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3); * \param exri: `double` External medium refractive index. * \param duk: `double *` QUESTION: definition? * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. */ void scr2( double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1, C3 *c3 double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1 ); /*! \brief Transform sphere Cartesian coordinates to spherical coordinates. Loading @@ -377,10 +374,9 @@ void scr2( * * \param sconf: `ScattererConfiguration *` Pointer to scatterer configuration object. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. * \param c6: `C6 *` Pointer to a C6 instance. */ void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6); void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C6 *c6); /*! \brief Compute radiation torques on particles on a k-vector oriented system. * Loading src/libnptm/Commons.cpp +90 −56 Original line number Diff line number Diff line Loading @@ -36,61 +36,61 @@ #include <mpi.h> #endif C3::C3() { tsas = new dcomplex*[2]; tsas[0] = new dcomplex[2]; tsas[1] = new dcomplex[2]; tfsas = 0.0 + 0.0 * I; gcs = 0.0; scs = 0.0; ecs = 0.0; acs = 0.0; } C3::C3(const C3& rhs) { tsas = new dcomplex*[2]; for (int ti=0; ti<2; ti++) { tsas[ti] = new dcomplex[2]; for (int tj=0; tj<2; tj++) tsas[ti][tj] = rhs.tsas[ti][tj]; } tfsas = rhs.tfsas; gcs = rhs.gcs; scs = rhs.scs; ecs = rhs.ecs; acs = rhs.acs; } C3::~C3() { delete[] tsas[1]; delete[] tsas[0]; delete[] tsas; } #ifdef MPI_VERSION C3::C3(const mixMPI *mpidata) { tsas = new dcomplex*[2]; for (int ti=0; ti<2; ti++) { tsas[ti] = new dcomplex[2]; MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } void C3::mpibcast(const mixMPI *mpidata) { for (int ti=0; ti<2; ti++) { MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } #endif // C3::C3() { // tsas = new dcomplex*[2]; // tsas[0] = new dcomplex[2]; // tsas[1] = new dcomplex[2]; // tfsas = 0.0 + 0.0 * I; // gcs = 0.0; // scs = 0.0; // ecs = 0.0; // acs = 0.0; // } // C3::C3(const C3& rhs) { // tsas = new dcomplex*[2]; // for (int ti=0; ti<2; ti++) { // tsas[ti] = new dcomplex[2]; // for (int tj=0; tj<2; tj++) tsas[ti][tj] = rhs.tsas[ti][tj]; // } // tfsas = rhs.tfsas; // gcs = rhs.gcs; // scs = rhs.scs; // ecs = rhs.ecs; // acs = rhs.acs; // } // C3::~C3() { // delete[] tsas[1]; // delete[] tsas[0]; // delete[] tsas; // } // #ifdef MPI_VERSION // C3::C3(const mixMPI *mpidata) { // tsas = new dcomplex*[2]; // for (int ti=0; ti<2; ti++) { // tsas[ti] = new dcomplex[2]; // MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // } // MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // } // void C3::mpibcast(const mixMPI *mpidata) { // for (int ti=0; ti<2; ti++) { // MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // } // MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // } // #endif C6::C6(int _lmtpo) { lmtpo = _lmtpo; Loading Loading @@ -234,7 +234,6 @@ mixMPI::~mixMPI() { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(gconf, sconf); c3 = new C3(); c6 = new C6(c1->lmtpo); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -338,7 +337,6 @@ ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, Scatter ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c3 = new C3(*(rhs.c3)); c6 = new C6(*(rhs.c6)); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -486,7 +484,6 @@ ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { #ifdef MPI_VERSION ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(mpidata); c3 = new C3(mpidata); c6 = new C6(mpidata); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -622,7 +619,6 @@ ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int devi void ClusterIterationData::mpibcast(const mixMPI *mpidata) { c1->mpibcast(mpidata); c3->mpibcast(mpidata); c6->mpibcast(mpidata); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -707,7 +703,6 @@ ClusterIterationData::~ClusterIterationData() { } delete[] zpv; delete c1; delete c3; delete c6; delete c9; delete[] gaps; Loading Loading @@ -853,7 +848,14 @@ ParticleDescriptor::ParticleDescriptor(GeometryConfiguration *gconf, ScattererCo sqabs = NULL; gcsv = NULL; // >>> NEEDED BY CLUSTER <<< vec_tsas = NULL; vintt = NULL; tfsas = 0.0 + I * 0.0; tsas = NULL; gcs = 0.0; scs = 0.0; ecs = 0.0; acs = 0.0; // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = NULL; vec_fsac = NULL; Loading Loading @@ -1158,6 +1160,12 @@ void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { // >>> NEEDED BY CLUSTER <<< // if (_class_type == CLUSTER_TYPE) { MPI_Bcast(vintt, 16, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vec_tsas, 4, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } // >>> NEEDED BY CLUSTER AND INCLU <<< // if (_class_type == CLUSTER_TYPE || _class_type == INCLUSION_TYPE) { Loading Loading @@ -1280,6 +1288,8 @@ ParticleDescriptor::~ParticleDescriptor() { // Cluster class members, destroyed only if sub-class is CLUSTER if (_class_type == CLUSTER_TYPE) { delete[] vintt; delete[] vec_tsas; delete[] tsas; } } Loading Loading @@ -1311,6 +1321,10 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(GeometryConfiguration *gcon // Needed by CLUSTER vintt = new dcomplex[16](); vec_tsas = new dcomplex[4](); tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; // Needed by CLUSTER and INCLU _le = gconf->le; Loading Loading @@ -1395,6 +1409,16 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const ParticleDescriptorClu // >>> NEEDED BY CLUSTER <<< vintt = new dcomplex[16]; for (int ti = 0; ti < 16; ti++) vintt[ti] = rhs.vintt[ti]; vec_tsas = new dcomplex[4]; for (int si = 0; si < 4; si++) vec_tsas[si] = rhs.vec_tsas[si]; tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; tfsas = rhs.tfsas; gcs = rhs.gcs; scs = rhs.scs; ecs = rhs.ecs; acs = rhs.acs; // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = new dcomplex[_nlemt * _nlemt]; np_int nlemts = _nlemt * _nlemt; Loading Loading @@ -1490,6 +1514,16 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const mixMPI *mpidata) : Pa // >>> NEEDED BY CLUSTER <<< // vintt = new dcomplex[16]; MPI_Bcast(vintt, 16, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vec_tsas = new dcomplex[4]; MPI_Bcast(vec_tsas, 4, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = new dcomplex[_nlemt * _nlemt]; int nlemts = _nlemt * _nlemt; Loading src/libnptm/clu_subs.cpp +14 −14 Original line number Diff line number Diff line Loading @@ -2179,7 +2179,7 @@ void rftr( fz = u[2] * extins - gapv[2]; } void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { void scr0(double vk, double exri, ParticleDescriptor *c1) { const dcomplex cc0 = 0.0 + 0.0 * I; double exdc = exri * exri; double ccs = 4.0 * acos(0.0) / (vk * vk); Loading Loading @@ -2256,10 +2256,10 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { acs += c1->sabs[iogi - 1]; tfsas += c1->fsas[iogi - 1]; } c3->scs = scs; c3->ecs = ecs; c3->acs = acs; c3->tfsas = tfsas; c1->scs = scs; c1->ecs = ecs; c1->acs = acs; c1->tfsas = tfsas; #ifdef USE_NVTX nvtxRangePop(); #endif Loading @@ -2267,7 +2267,7 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { void scr2( double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1, C3 *c3 ParticleDescriptor *c1 ) { #ifdef USE_NVTX nvtxRangePush("scr2 starts"); Loading Loading @@ -2377,10 +2377,10 @@ void scr2( tsas01 += (c1->sas[iogi - 1][0][1] * phas); tsas11 += (c1->sas[iogi - 1][1][1] * phas); } // i14 loop c3->tsas[0][0] = tsas00; c3->tsas[1][0] = tsas10; c3->tsas[0][1] = tsas01; c3->tsas[1][1] = tsas11; c1->tsas[0][0] = tsas00; c1->tsas[1][0] = tsas10; c1->tsas[0][1] = tsas01; c1->tsas[1][1] = tsas11; #ifdef USE_NVTX nvtxRangePop(); //#endif Loading Loading @@ -2429,7 +2429,7 @@ void scr2( for (int ipo2 = 1; ipo2 <= 2; ipo2++) { for (int jpo2 = 1; jpo2 <= 2; jpo2++) { int j = jpo2-1 + (ipo2-1)*2 + (jpo1-1)*4 + (ipo1-1)*8; c1->vintt[j] = c3->tsas[jpo2 - 1][ipo2 - 1] * dconjg(c3->tsas[jpo1 - 1][ipo1 - 1]) * cfsq; c1->vintt[j] = c1->tsas[jpo2 - 1][ipo2 - 1] * dconjg(c1->tsas[jpo1 - 1][ipo1 - 1]) * cfsq; } // jpo2 loop } // ipo2 loop } // jpo1 loop Loading @@ -2442,11 +2442,11 @@ void scr2( #endif } void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6) { void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C6 *c6) { dcomplex *ylm; const double pi = acos(-1.0); int last_configuration; c3->gcs = 0.0; c1->gcs = 0.0; double gcss = 0.0; last_configuration = 0; for (int i18 = 1; i18 <= c1->nsph; i18++) { Loading @@ -2460,7 +2460,7 @@ void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6) c1->rc[last_configuration - 1][j16 - 1] = sconf->get_rcf(last_configuration - 1, j16 - 1) * c1->ros[last_configuration - 1]; } // j16 loop } c3->gcs += gcss; c1->gcs += gcss; } // i18 loop int ylm_size = (c1->litpos > c1->lmtpos) ? c1->litpos : c1->lmtpos; ylm = new dcomplex[ylm_size](); Loading Loading
src/cluster/cluster.cpp +28 −28 Original line number Diff line number Diff line Loading @@ -270,7 +270,7 @@ void cluster(const string& config_file, const string& data_file, const string& o p_output->append_line(virtual_line); sprintf(virtual_line, " \n"); p_output->append_line(virtual_line); str(sconf, cid->c1, cid->c3, cid->c6); str(sconf, cid->c1, cid->c6); thdps(cid->c1->lm, cid->zpv); double exdc = sconf->exdc; double exri = sqrt(exdc); Loading Loading @@ -895,7 +895,7 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf double cs0 = 0.25 * cid->vk * cid->vk * cid->vk / acos(0.0); double csch = 0.0, qschu = 0.0, pschu = 0.0, s0mag = 0.0; dcomplex s0 = 0.0 + 0.0 * I; scr0(cid->vk, exri, cid->c1, cid->c3); scr0(cid->vk, exri, cid->c1); double sqk = cid->vk * cid->vk * exdc; aps(cid->zpv, cid->c1->li, nsph, cid->c1, sqk, cid->gaps); rabas(inpol, cid->c1->li, nsph, cid->c1, cid->tqse, cid->tqspe, cid->tqss, cid->tqsps); Loading Loading @@ -952,10 +952,10 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf output->append_line(virtual_line); } } // i170 loop sprintf(virtual_line, " FSAT=%15.7lE%15.7lE\n", real(cid->c3->tfsas), imag(cid->c3->tfsas)); sprintf(virtual_line, " FSAT=%15.7lE%15.7lE\n", real(cid->c1->tfsas), imag(cid->c1->tfsas)); output->append_line(virtual_line); csch = 2.0 * cid->vk * cid->sqsfi / cid->c3->gcs; s0 = cid->c3->tfsas * exri; csch = 2.0 * cid->vk * cid->sqsfi / cid->c1->gcs; s0 = cid->c1->tfsas * exri; qschu = imag(s0) * csch; pschu = real(s0) * csch; s0mag = cabs(s0) * cs0; Loading Loading @@ -1124,23 +1124,23 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ipol = (ilr210 % 2 == 0) ? 1 : -1; if (ilr210 == 2) jlr = 1; double extsm = cid->c1->ecscm[ilr210 - 1]; double qextm = extsm * cid->sqsfi / cid->c3->gcs; double extrm = extsm / cid->c3->ecs; double qextm = extsm * cid->sqsfi / cid->c1->gcs; double extrm = extsm / cid->c1->ecs; double scasm = cid->c1->scscm[ilr210 - 1]; double albdm = scasm / extsm; double qscam = scasm * cid->sqsfi / cid->c3->gcs; double scarm = scasm / cid->c3->scs; double qscam = scasm * cid->sqsfi / cid->c1->gcs; double scarm = scasm / cid->c1->scs; double abssm = extsm - scasm; double qabsm = abssm * cid->sqsfi / cid->c3->gcs; double absrm = abssm / cid->c3->acs; double acsecs = cid->c3->acs / cid->c3->ecs; double qabsm = abssm * cid->sqsfi / cid->c1->gcs; double absrm = abssm / cid->c1->acs; double acsecs = cid->c1->acs / cid->c1->ecs; if (acsecs >= -1.0e-6 && acsecs <= 1.0e-6) absrm = 1.0; dcomplex s0m = cid->c1->fsacm[ilr210 - 1][ilr210 - 1] * exri; double qschum = imag(s0m) * csch; double pschum = real(s0m) * csch; double s0magm = cabs(s0m) * cs0; double rfinrm = real(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / real(cid->c3->tfsas); double extcrm = imag(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / imag(cid->c3->tfsas); double rfinrm = real(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / real(cid->c1->tfsas); double extcrm = imag(cid->c1->fsacm[ilr210 - 1][ilr210 - 1]) / imag(cid->c1->tfsas); if (inpol == 0) { sprintf(virtual_line, " LIN %2d\n", ipol); output->append_line(virtual_line); Loading Loading @@ -1224,7 +1224,7 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf output->append_line(virtual_line); } // label 224 scr2(cid->vk, vkarg, exri, cid->duk, cid->c1, cid->c3); scr2(cid->vk, vkarg, exri, cid->duk, cid->c1); if (cid->c1->li != cid->c1->le) { sprintf(virtual_line, " SPHERES; LMX=MIN0(LI,LE)\n"); output->append_line(virtual_line); Loading Loading @@ -1271,14 +1271,14 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf } // i226 loop sprintf( virtual_line, " SAT(1,1)=%15.7lE%15.7lE, SAT(2,1)=%15.7lE%15.7lE\n", real(cid->c3->tsas[0][0]), imag(cid->c3->tsas[0][0]), real(cid->c3->tsas[1][0]), imag(cid->c3->tsas[1][0]) real(cid->c1->tsas[0][0]), imag(cid->c1->tsas[0][0]), real(cid->c1->tsas[1][0]), imag(cid->c1->tsas[1][0]) ); output->append_line(virtual_line); sprintf( virtual_line, " SAT(1,2)=%15.7lE%15.7lE, SAT(2,2)=%15.7lE%15.7lE\n", real(cid->c3->tsas[0][1]), imag(cid->c3->tsas[0][1]), real(cid->c3->tsas[1][1]), imag(cid->c3->tsas[1][1]) real(cid->c1->tsas[0][1]), imag(cid->c1->tsas[0][1]), real(cid->c1->tsas[1][1]), imag(cid->c1->tsas[1][1]) ); output->append_line(virtual_line); sprintf(virtual_line, " CLUSTER\n"); Loading Loading @@ -1388,23 +1388,23 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf int ipol = (ilr290 % 2 == 0) ? 1 : -1; if (ilr290 == 2) jlr = 1; double extsec = cid->c1->ecsc[ilr290 - 1]; double qext = extsec * cid->sqsfi / cid->c3->gcs; double extrat = extsec / cid->c3->ecs; double qext = extsec * cid->sqsfi / cid->c1->gcs; double extrat = extsec / cid->c1->ecs; double scasec = cid->c1->scsc[ilr290 - 1]; double albedc = scasec / extsec; double qsca = scasec * cid->sqsfi / cid->c3->gcs; double scarat = scasec / cid->c3->scs; double qsca = scasec * cid->sqsfi / cid->c1->gcs; double scarat = scasec / cid->c1->scs; double abssec = extsec - scasec; double qabs = abssec * cid->sqsfi / cid->c3->gcs; double qabs = abssec * cid->sqsfi / cid->c1->gcs; double absrat = 1.0; double ratio = cid->c3->acs / cid->c3->ecs; if (ratio < -1.0e-6 || ratio > 1.0e-6) absrat = abssec / cid->c3->acs; double ratio = cid->c1->acs / cid->c1->ecs; if (ratio < -1.0e-6 || ratio > 1.0e-6) absrat = abssec / cid->c1->acs; s0 = cid->c1->fsac[ilr290 - 1][ilr290 - 1] * exri; double qschu = imag(s0) * csch; double pschu = real(s0) * csch; s0mag = cabs(s0) * cs0; double refinr = real(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / real(cid->c3->tfsas); double extcor = imag(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / imag(cid->c3->tfsas); double refinr = real(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / real(cid->c1->tfsas); double extcor = imag(cid->c1->fsac[ilr290 - 1][ilr290 - 1]) / imag(cid->c1->tfsas); if (inpol == 0) { sprintf(virtual_line, " LIN %2d\n", ipol); output->append_line(virtual_line); Loading
src/include/Commons.h +65 −47 Original line number Diff line number Diff line Loading @@ -40,50 +40,53 @@ class ParticleDescriptor; class mixMPI; /*! \brief Representation of the FORTRAN C3 blocks. */ class C3 { public: //! \brief QUESTION: definition? dcomplex tfsas; //! \brief QUESTION: definition? dcomplex **tsas; //! \brief Total geometric cross-section. double gcs; //! \brief Total scattering cross-section. double scs; //! \brief Total extinction cross-section. double ecs; //! \brief Total absorption cross-section. double acs; /*! \brief C3 instance constructor. */ C3(); /*! \brief C3 instance constructor copying its contents from a preexisting object. */ C3(const C3& rhs); /*! \brief C3 instance destroyer. */ ~C3(); #ifdef MPI_VERSION /*! \brief C3 instance constructor copying all contents off MPI broadcast from MPI process 0 * * \param mpidata: `mixMPI *` pointer to MPI data structure. */ C3(const mixMPI *mpidata); /*! \brief send C3 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. // */ // class C3 { // protected: // dcomplex *vec_tsas; // public: // //! \brief Total forward scattering amplitude. // dcomplex tfsas; // //! \brief Total scattering amplitude. // dcomplex **tsas; // //! \brief Total geometric cross-section. // double gcs; // //! \brief Total scattering cross-section. // double scs; // //! \brief Total extinction cross-section. // double ecs; // //! \brief Total absorption cross-section. // double acs; // /*! \brief C3 instance constructor. // */ // C3(); // /*! \brief C3 instance constructor copying its contents from a preexisting object. // */ // C3(const C3& rhs); // /*! \brief C3 instance destroyer. // */ // ~C3(); // #ifdef MPI_VERSION // /*! \brief C3 instance constructor copying all contents off MPI broadcast from MPI process 0 // * // * \param mpidata: `mixMPI *` pointer to MPI data structure. // */ // C3(const mixMPI *mpidata); // /*! \brief send C3 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 C6 blocks. */ Loading Loading @@ -218,10 +221,8 @@ public: */ class ClusterIterationData { public: //! \brief Pointer to a C1 structure. //! \brief Pointer to a ParticleDescriptor structure. ParticleDescriptor *c1; //! \brief Pointer to a C3 structure. C3 *c3; //! \brief Pointer to a C6 structure. C6 *c6; //! \brief Pointer to a C9 structure. Loading Loading @@ -354,6 +355,10 @@ protected: dcomplex *vec_vints; // >>> END OF SECTION NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY CLUSTER <<< // dcomplex *vec_tsas; // >>> END OF SECTION NEEDED BY CLUSTER <<< // // >>> NEEDED BY CLUSTER AND INCLU <<< //! \brief Maximum external field expansion order. int _le; Loading Loading @@ -478,7 +483,20 @@ public: // >>> END OF SECTION NEEDED BY SPHERE AND CLUSTER <<< // // >>> NEEDED BY CLUSTER <<< // \brief Vector of field intensity components. dcomplex *vintt; //! \brief Total forward scattering amplitude. dcomplex tfsas; //! \brief Total scattering amplitude. dcomplex **tsas; //! \brief Total geometric cross-section. double gcs; //! \brief Total scattering cross-section. double scs; //! \brief Total extinction cross-section. double ecs; //! \brief Total absorption cross-section. double acs; // >>> END OF SECTION NEEDED BY CLUSTER <<< // // >>> NEEDED BY CLUSTER AND INCLU <<< Loading
src/include/clu_subs.h +3 −7 Original line number Diff line number Diff line Loading @@ -348,9 +348,8 @@ void rftr( * \param vk: `double` Wave number * \param exri: `double` External medium refractive index. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. */ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3); void scr0(double vk, double exri, ParticleDescriptor *c1); /*! \brief Compute the scattering amplitude for a single sphere in an aggregate. * Loading @@ -362,11 +361,9 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3); * \param exri: `double` External medium refractive index. * \param duk: `double *` QUESTION: definition? * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. */ void scr2( double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1, C3 *c3 double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1 ); /*! \brief Transform sphere Cartesian coordinates to spherical coordinates. Loading @@ -377,10 +374,9 @@ void scr2( * * \param sconf: `ScattererConfiguration *` Pointer to scatterer configuration object. * \param c1: `ParticleDescriptor *` Pointer to a ParticleDescriptor instance. * \param c3: `C3 *` Pointer to a C3 instance. * \param c6: `C6 *` Pointer to a C6 instance. */ void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6); void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C6 *c6); /*! \brief Compute radiation torques on particles on a k-vector oriented system. * Loading
src/libnptm/Commons.cpp +90 −56 Original line number Diff line number Diff line Loading @@ -36,61 +36,61 @@ #include <mpi.h> #endif C3::C3() { tsas = new dcomplex*[2]; tsas[0] = new dcomplex[2]; tsas[1] = new dcomplex[2]; tfsas = 0.0 + 0.0 * I; gcs = 0.0; scs = 0.0; ecs = 0.0; acs = 0.0; } C3::C3(const C3& rhs) { tsas = new dcomplex*[2]; for (int ti=0; ti<2; ti++) { tsas[ti] = new dcomplex[2]; for (int tj=0; tj<2; tj++) tsas[ti][tj] = rhs.tsas[ti][tj]; } tfsas = rhs.tfsas; gcs = rhs.gcs; scs = rhs.scs; ecs = rhs.ecs; acs = rhs.acs; } C3::~C3() { delete[] tsas[1]; delete[] tsas[0]; delete[] tsas; } #ifdef MPI_VERSION C3::C3(const mixMPI *mpidata) { tsas = new dcomplex*[2]; for (int ti=0; ti<2; ti++) { tsas[ti] = new dcomplex[2]; MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } void C3::mpibcast(const mixMPI *mpidata) { for (int ti=0; ti<2; ti++) { MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); } MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } #endif // C3::C3() { // tsas = new dcomplex*[2]; // tsas[0] = new dcomplex[2]; // tsas[1] = new dcomplex[2]; // tfsas = 0.0 + 0.0 * I; // gcs = 0.0; // scs = 0.0; // ecs = 0.0; // acs = 0.0; // } // C3::C3(const C3& rhs) { // tsas = new dcomplex*[2]; // for (int ti=0; ti<2; ti++) { // tsas[ti] = new dcomplex[2]; // for (int tj=0; tj<2; tj++) tsas[ti][tj] = rhs.tsas[ti][tj]; // } // tfsas = rhs.tfsas; // gcs = rhs.gcs; // scs = rhs.scs; // ecs = rhs.ecs; // acs = rhs.acs; // } // C3::~C3() { // delete[] tsas[1]; // delete[] tsas[0]; // delete[] tsas; // } // #ifdef MPI_VERSION // C3::C3(const mixMPI *mpidata) { // tsas = new dcomplex*[2]; // for (int ti=0; ti<2; ti++) { // tsas[ti] = new dcomplex[2]; // MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // } // MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // } // void C3::mpibcast(const mixMPI *mpidata) { // for (int ti=0; ti<2; ti++) { // MPI_Bcast(tsas[ti], 2, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // } // MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); // MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // } // #endif C6::C6(int _lmtpo) { lmtpo = _lmtpo; Loading Loading @@ -234,7 +234,6 @@ mixMPI::~mixMPI() { ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, ScattererConfiguration *sconf, const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(gconf, sconf); c3 = new C3(); c6 = new C6(c1->lmtpo); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -338,7 +337,6 @@ ClusterIterationData::ClusterIterationData(GeometryConfiguration *gconf, Scatter ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { c1 = new ParticleDescriptorCluster(reinterpret_cast<ParticleDescriptorCluster &>(*(rhs.c1))); c3 = new C3(*(rhs.c3)); c6 = new C6(*(rhs.c6)); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -486,7 +484,6 @@ ClusterIterationData::ClusterIterationData(const ClusterIterationData& rhs) { #ifdef MPI_VERSION ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int device_count) { c1 = new ParticleDescriptorCluster(mpidata); c3 = new C3(mpidata); c6 = new C6(mpidata); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -622,7 +619,6 @@ ClusterIterationData::ClusterIterationData(const mixMPI *mpidata, const int devi void ClusterIterationData::mpibcast(const mixMPI *mpidata) { c1->mpibcast(mpidata); c3->mpibcast(mpidata); c6->mpibcast(mpidata); const int ndi = c1->nsph * c1->nlim; const np_int ndit = 2 * ndi; Loading Loading @@ -707,7 +703,6 @@ ClusterIterationData::~ClusterIterationData() { } delete[] zpv; delete c1; delete c3; delete c6; delete c9; delete[] gaps; Loading Loading @@ -853,7 +848,14 @@ ParticleDescriptor::ParticleDescriptor(GeometryConfiguration *gconf, ScattererCo sqabs = NULL; gcsv = NULL; // >>> NEEDED BY CLUSTER <<< vec_tsas = NULL; vintt = NULL; tfsas = 0.0 + I * 0.0; tsas = NULL; gcs = 0.0; scs = 0.0; ecs = 0.0; acs = 0.0; // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = NULL; vec_fsac = NULL; Loading Loading @@ -1158,6 +1160,12 @@ void ParticleDescriptor::mpibcast(const mixMPI *mpidata) { // >>> NEEDED BY CLUSTER <<< // if (_class_type == CLUSTER_TYPE) { MPI_Bcast(vintt, 16, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(vec_tsas, 4, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } // >>> NEEDED BY CLUSTER AND INCLU <<< // if (_class_type == CLUSTER_TYPE || _class_type == INCLUSION_TYPE) { Loading Loading @@ -1280,6 +1288,8 @@ ParticleDescriptor::~ParticleDescriptor() { // Cluster class members, destroyed only if sub-class is CLUSTER if (_class_type == CLUSTER_TYPE) { delete[] vintt; delete[] vec_tsas; delete[] tsas; } } Loading Loading @@ -1311,6 +1321,10 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(GeometryConfiguration *gcon // Needed by CLUSTER vintt = new dcomplex[16](); vec_tsas = new dcomplex[4](); tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; // Needed by CLUSTER and INCLU _le = gconf->le; Loading Loading @@ -1395,6 +1409,16 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const ParticleDescriptorClu // >>> NEEDED BY CLUSTER <<< vintt = new dcomplex[16]; for (int ti = 0; ti < 16; ti++) vintt[ti] = rhs.vintt[ti]; vec_tsas = new dcomplex[4]; for (int si = 0; si < 4; si++) vec_tsas[si] = rhs.vec_tsas[si]; tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; tfsas = rhs.tfsas; gcs = rhs.gcs; scs = rhs.scs; ecs = rhs.ecs; acs = rhs.acs; // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = new dcomplex[_nlemt * _nlemt]; np_int nlemts = _nlemt * _nlemt; Loading Loading @@ -1490,6 +1514,16 @@ ParticleDescriptorCluster::ParticleDescriptorCluster(const mixMPI *mpidata) : Pa // >>> NEEDED BY CLUSTER <<< // vintt = new dcomplex[16]; MPI_Bcast(vintt, 16, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); vec_tsas = new dcomplex[4]; MPI_Bcast(vec_tsas, 4, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); tsas = new dcomplex*[2]; tsas[0] = vec_tsas; tsas[1] = vec_tsas + 2; MPI_Bcast(&tfsas, 1, MPI_C_DOUBLE_COMPLEX, 0, MPI_COMM_WORLD); MPI_Bcast(&gcs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&scs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&ecs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); MPI_Bcast(&acs, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); // >>> NEEDED BY CLUSTER AND INCLU <<< vec_am0m = new dcomplex[_nlemt * _nlemt]; int nlemts = _nlemt * _nlemt; Loading
src/libnptm/clu_subs.cpp +14 −14 Original line number Diff line number Diff line Loading @@ -2179,7 +2179,7 @@ void rftr( fz = u[2] * extins - gapv[2]; } void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { void scr0(double vk, double exri, ParticleDescriptor *c1) { const dcomplex cc0 = 0.0 + 0.0 * I; double exdc = exri * exri; double ccs = 4.0 * acos(0.0) / (vk * vk); Loading Loading @@ -2256,10 +2256,10 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { acs += c1->sabs[iogi - 1]; tfsas += c1->fsas[iogi - 1]; } c3->scs = scs; c3->ecs = ecs; c3->acs = acs; c3->tfsas = tfsas; c1->scs = scs; c1->ecs = ecs; c1->acs = acs; c1->tfsas = tfsas; #ifdef USE_NVTX nvtxRangePop(); #endif Loading @@ -2267,7 +2267,7 @@ void scr0(double vk, double exri, ParticleDescriptor *c1, C3 *c3) { void scr2( double vk, double vkarg, double exri, double *duk, ParticleDescriptor *c1, C3 *c3 ParticleDescriptor *c1 ) { #ifdef USE_NVTX nvtxRangePush("scr2 starts"); Loading Loading @@ -2377,10 +2377,10 @@ void scr2( tsas01 += (c1->sas[iogi - 1][0][1] * phas); tsas11 += (c1->sas[iogi - 1][1][1] * phas); } // i14 loop c3->tsas[0][0] = tsas00; c3->tsas[1][0] = tsas10; c3->tsas[0][1] = tsas01; c3->tsas[1][1] = tsas11; c1->tsas[0][0] = tsas00; c1->tsas[1][0] = tsas10; c1->tsas[0][1] = tsas01; c1->tsas[1][1] = tsas11; #ifdef USE_NVTX nvtxRangePop(); //#endif Loading Loading @@ -2429,7 +2429,7 @@ void scr2( for (int ipo2 = 1; ipo2 <= 2; ipo2++) { for (int jpo2 = 1; jpo2 <= 2; jpo2++) { int j = jpo2-1 + (ipo2-1)*2 + (jpo1-1)*4 + (ipo1-1)*8; c1->vintt[j] = c3->tsas[jpo2 - 1][ipo2 - 1] * dconjg(c3->tsas[jpo1 - 1][ipo1 - 1]) * cfsq; c1->vintt[j] = c1->tsas[jpo2 - 1][ipo2 - 1] * dconjg(c1->tsas[jpo1 - 1][ipo1 - 1]) * cfsq; } // jpo2 loop } // ipo2 loop } // jpo1 loop Loading @@ -2442,11 +2442,11 @@ void scr2( #endif } void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6) { void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C6 *c6) { dcomplex *ylm; const double pi = acos(-1.0); int last_configuration; c3->gcs = 0.0; c1->gcs = 0.0; double gcss = 0.0; last_configuration = 0; for (int i18 = 1; i18 <= c1->nsph; i18++) { Loading @@ -2460,7 +2460,7 @@ void str(ScattererConfiguration *sconf, ParticleDescriptor *c1, C3 *c3, C6 *c6) c1->rc[last_configuration - 1][j16 - 1] = sconf->get_rcf(last_configuration - 1, j16 - 1) * c1->ros[last_configuration - 1]; } // j16 loop } c3->gcs += gcss; c1->gcs += gcss; } // i18 loop int ylm_size = (c1->litpos > c1->lmtpos) ? c1->litpos : c1->lmtpos; ylm = new dcomplex[ylm_size](); Loading