- Timestamp:
- Oct 19, 2014, 5:13:10 PM (10 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:
- e26c35
- Parents:
- 32d7e4
- git-author:
- Frederik Heber <heber@…> (10/07/14 07:55:26)
- git-committer:
- Frederik Heber <heber@…> (10/19/14 17:13:10)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Tesselation/tesselation.cpp
r32d7e4 rd45a5b 169 169 double Tesselation::getVolumeOfConvexEnvelope(const bool IsAngstroem) const 170 170 { 171 // calculate center of gravity 172 Vector center; 173 if (!PointsOnBoundary.empty()) { 174 for (PointMap::const_iterator iter = PointsOnBoundary.begin(); 175 iter != PointsOnBoundary.end(); ++iter) 176 center += iter->second->node->getPosition(); 177 center *= 1./(double)PointsOnBoundary.size(); 178 } 179 180 // 6a. Every triangle forms a pyramid with the center of gravity as its peak, sum up the volumes 171 181 double volume = 0.; 172 Vector x;173 Vector y;174 175 // 6a. Every triangle forms a pyramid with the center of gravity as its peak, sum up the volumes176 182 for (TriangleMap::const_iterator runner = TrianglesOnBoundary.begin(); runner != TrianglesOnBoundary.end(); runner++) { // go through every triangle, calculate volume of its pyramid with CoG as peak 177 x = runner->second->getEndpoint(0) - runner->second->getEndpoint(1); 178 const double G = runner->second->getArea(); 179 x = runner->second->getPlane().getNormal(); 180 x.Scale(runner->second->getEndpoint(1).ScalarProduct(x)); 181 const double h = x.Norm(); // distance of CoG to triangle 182 const double PyramidVolume = (1. / 3.) * G * h; // this formula holds for _all_ pyramids (independent of n-edge base or (not) centered peak) 183 LOG(1, "INFO: Area of triangle is " << setprecision(10) << G << " " << (IsAngstroem ? "angstrom" : "atomiclength") << "^2, height is " << h << " and the volume is " << PyramidVolume << " " << (IsAngstroem ? "angstrom" : "atomiclength") << "^3."); 184 volume += PyramidVolume; 185 } 186 LOG(0, "RESULT: The summed volume is " << setprecision(6) << volume << " " << (IsAngstroem ? "angstrom" : "atomiclength") << "^3."); 183 const double TetrahedronVolume = CalculateVolumeofGeneralTetraeder( 184 runner->second->endpoints[0]->getPosition(), 185 runner->second->endpoints[1]->getPosition(), 186 runner->second->endpoints[2]->getPosition(), 187 center); 188 LOG(1, "INFO: volume of tetrahedron is " << setprecision(10) << TetrahedronVolume 189 << " " << (IsAngstroem ? "angstrom" : "atomiclength") << "^3."); 190 volume += TetrahedronVolume; 191 } 192 LOG(0, "RESULT: The summed volume is " << setprecision(6) << volume 193 << " " << (IsAngstroem ? "angstrom" : "atomiclength") << "^3."); 187 194 188 195 return volume;
Note:
See TracChangeset
for help on using the changeset viewer.