Changeset cd77fc for src/Jobs/InterfaceVMGJob.cpp
- Timestamp:
- Nov 15, 2012, 3:12:54 PM (12 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- fb69e9
- Parents:
- 092be05
- git-author:
- Frederik Heber <heber@…> (07/26/12 10:17:56)
- git-committer:
- Frederik Heber <heber@…> (11/15/12 15:12:54)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Jobs/InterfaceVMGJob.cpp
r092be05 rcd77fc 32 32 #endif 33 33 34 #ifdef HAVE_MPI 35 #include "mpi.h" 36 #endif 37 34 38 #include "CodePatterns/MemDebug.hpp" 35 39 … … 40 44 41 45 #include "base/vector.hpp" 46 #include "base/math.hpp" 47 #ifdef HAVE_MPI 48 #include "comm/comm_mpi.hpp" 49 #else 50 #include "comm/comm_serial.hpp" 51 #endif 42 52 #include "grid/grid.hpp" 43 53 #include "grid/multigrid.hpp" … … 48 58 using VMGInterfaces::InterfaceVMGJob; 49 59 60 InterfaceVMGJob::InterfaceVMGJob(const std::vector< double > &_sampled_input, 61 std::vector< double > &_sampled_output, 62 const std::vector< std::vector<double> > &_particle_positions, 63 const std::vector< double > &_particle_charges, 64 VMG::Boundary boundary, 65 int levelMin, 66 int levelMax, 67 const VMG::Vector &box_begin, 68 vmg_float box_end, 69 const int& near_field_cells, 70 int coarseningSteps, 71 double alpha) : 72 VMG::Interface(boundary, levelMin, levelMax, 73 box_begin, box_end, coarseningSteps, alpha), 74 spl(near_field_cells, Extent(MaxLevel()).MeshWidth().Max()), 75 sampled_input(_sampled_input), 76 sampled_output(_sampled_output), 77 level(levelMax) 78 { 79 std::vector< std::vector<double> >::const_iterator positer = _particle_positions.begin(); 80 std::vector<double>::const_iterator chargeiter = _particle_charges.begin(); 81 double pos[3]; 82 for (; positer != _particle_positions.end(); ++positer, ++chargeiter) { 83 ASSERT( (*positer).size() == 3, 84 "InterfaceVMGJob::InterfaceVMGJob() - particle " 85 +toString(distance(_particle_positions.begin(), positer))+" has not exactly 3 coordinates."); 86 for (size_t i=0;i<3;++i) 87 pos[i] = (*positer)[i]; 88 particles.push_back(Particle::Particle(pos, *chargeiter)); 89 } 90 } 91 92 InterfaceVMGJob::~InterfaceVMGJob() 93 {} 94 50 95 void InterfaceVMGJob::ImportRightHandSide(Multigrid& multigrid) 51 96 { 52 97 Index i; 53 98 Vector pos; 54 55 // VMG::TempGrid *temp_grid = new VMG::TempGrid(129, 0, 0., 1.); 99 // VMG::TempGrid *temp_grid = new VMG::TempGrid(129, 0, 0., 1.); 56 100 57 101 Grid& grid = multigrid(multigrid.MaxLevel()); 58 102 grid.ClearBoundary(); 103 104 /// 1. assign nuclei as smeared-out charges to the grid 105 106 /* 107 * Charge assignment on the grid 108 */ 109 #ifdef HAVE_MPI 110 CommMPI& comm = *dynamic_cast<CommMPI*>(VMG::MG::GetComm()); 111 #else 112 CommSerial& comm = *dynamic_cast<CommSerial*>(VMG::MG::GetComm()); 113 #endif 114 Grid& particle_grid = comm.GetParticleGrid(); 115 116 particle_grid.Clear(); 117 118 assert(particle_grid.Global().LocalSize().IsComponentwiseGreater( 119 VMG::MG::GetFactory().GetObjectStorageVal<int>("PARTICLE_NEAR_FIELD_CELLS"))); 120 121 for (std::list<Particle::Particle>::iterator iter = particles.begin(); 122 iter != particles.end(); ++iter) 123 spl.SetSpline(particle_grid, *iter); 124 125 // Communicate charges over halo 126 comm.CommFromGhosts(particle_grid); 127 128 // Assign charge values to the right hand side 129 for (int i=0; i<grid.Local().Size().X(); ++i) 130 for (int j=0; j<grid.Local().Size().Y(); ++j) 131 for (int k=0; k<grid.Local().Size().Z(); ++k) 132 grid(grid.Local().Begin().X() + i, 133 grid.Local().Begin().Y() + j, 134 grid.Local().Begin().Z() + k) = 4.0 * VMG::Math::pi * 135 particle_grid.GetVal(particle_grid.Local().Begin().X() + i, 136 particle_grid.Local().Begin().Y() + j, 137 particle_grid.Local().Begin().Z() + k); 138 139 /// 2. add sampled electron density to the grid 59 140 60 141 const Index begin_local = grid.Global().LocalBegin() - grid.Local().HaloSize1(); … … 71 152 << "Z in [" << grid.Local().Begin().Z() << "," << grid.Local().End().Z() << "]."); 72 153 154 const double element_volume = 155 grid.Extent().MeshWidth().X() * grid.Extent().MeshWidth().Y() * grid.Extent().MeshWidth().Z(); 73 156 std::vector<double>::const_iterator sample_iter = sampled_input.begin(); 74 157 for (i.X()=grid.Local().Begin().X(); i.X()<grid.Local().End().X(); ++i.X()) 75 158 for (i.Y()=grid.Local().Begin().Y(); i.Y()<grid.Local().End().Y(); ++i.Y()) 76 for (i.Z()=grid.Local().Begin().Z(); i.Z()<grid.Local().End().Z(); ++i.Z()) { 77 pos = grid.Extent().MeshWidth() * static_cast<Vector>(begin_local + i); 78 // R.x() = pos.X(); 79 // R.y() = pos.Y(); 80 // R.z() = pos.Z(); 81 grid(i) = *sample_iter; //temp_grid(i); 82 ++sample_iter; 83 } 159 for (i.Z()=grid.Local().Begin().Z(); i.Z()<grid.Local().End().Z(); ++i.Z()) 160 grid(i) -= (*sample_iter++) * element_volume; //temp_grid(i); 84 161 assert( sample_iter == sampled_input.end() ); 85 162
Note:
See TracChangeset
for help on using the changeset viewer.