Changeset 89c8b2 for src


Ignore:
Timestamp:
Aug 20, 2009, 3:40:49 PM (15 years ago)
Author:
Saskia Metzler <metzler@…>
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:
0227a9, 29812d
Parents:
78b73c
Message:

Ticket 17: Write new function molecule::CopyMoleculeFromSubRegion()

Location:
src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/atom.cpp

    r78b73c r89c8b2  
    3838  previous = NULL;
    3939  next = NULL;
    40   father = this;  // generally, father is itself
     40  father = pointer;  // generally, father is itself
    4141  Ancestor = NULL;
    4242  GraphNr = -1;
     
    5353  nr = -1;
    5454  sort = &nr;
     55  node = &x;
    5556}
    5657
  • src/molecules.cpp

    r78b73c r89c8b2  
    176176 * Increases molecule::last_atom and gives last number to added atom.
    177177 * \param *pointer allocated and set atom
    178  * \return true - succeeded, false - atom not found in list
     178 * \return pointer to the newly added atom
    179179 */
    180180atom * molecule::AddCopyAtom(atom *pointer)
     
    612612  return copy;
    613613};
     614
     615
     616/**
     617 * Copies all atoms of a molecule which are within the defined parallelepiped.
     618 *
     619 * @param offest for the origin of the parallelepiped
     620 * @param three vectors forming the matrix that defines the shape of the parallelpiped
     621 */
     622molecule* molecule::CopyMoleculeFromSubRegion(Vector offset, double *parallelepiped) {
     623  molecule *copy = new molecule(elemente);
     624  atom *Walker = start;
     625
     626  while(Walker->next != end) {
     627    Walker = Walker->next;
     628    if (Walker->x.IsInParallelepiped(offset, parallelepiped)) {
     629      cout << "Adding atom " << *Walker << endl;
     630      copy->AddCopyAtom(Walker);
     631    }
     632  }
     633
     634  //TODO: copy->BuildInducedSubgraph((ofstream *)&cout, this);
     635
     636  return copy;
     637}
    614638
    615639/** Adds a bond to a the molecule specified by two atoms, \a *first and \a *second.
  • src/molecules.hpp

    r78b73c r89c8b2  
    207207
    208208  molecule *CopyMolecule();
     209  molecule* CopyMoleculeFromSubRegion(Vector offset, double *parallelepiped);
    209210
    210211  /// Fragment molecule by two different approaches:
  • src/vector.cpp

    r78b73c r89c8b2  
    12211221  return true;
    12221222};
     1223
     1224/**
     1225 * Checks whether this vector is within the parallelepiped defined by the given three vectors and
     1226 * their offset.
     1227 *
     1228 * @param offest for the origin of the parallelepiped
     1229 * @param three vectors forming the matrix that defines the shape of the parallelpiped
     1230 */
     1231bool Vector::IsInParallelepiped(Vector offset, double *parallelepiped)
     1232{
     1233  Vector a;
     1234  a.CopyVector(this);
     1235  a.SubtractVector(&offset);
     1236  a.InverseMatrixMultiplication(parallelepiped);
     1237  bool isInside = true;
     1238
     1239  for (int i=NDIM;i--;)
     1240    isInside = isInside && ((a.x[i] <= 1) && (a.x[i] >= 0));
     1241
     1242  return isInside;
     1243}
  • src/vector.hpp

    r78b73c r89c8b2  
    6868  void AskPosition(double *cell_size, bool check);
    6969  bool Output(ofstream *out) const;
     70  bool IsInParallelepiped(Vector offset, double *parallelepiped);
    7071};
    7172
  • src/vectorunittest.cpp

    r78b73c r89c8b2  
    258258}
    259259
     260/**
     261 * UnitTest for Vector::IsInParallelepiped().
     262 */
     263void VectorTest::IsInParallelepipedTest()
     264{
     265  double parallelepiped[NDIM*NDIM];
     266  parallelepiped[0] = 1;
     267  parallelepiped[1] = 0;
     268  parallelepiped[2] = 0;
     269  parallelepiped[3] = 0;
     270  parallelepiped[4] = 1;
     271  parallelepiped[5] = 0;
     272  parallelepiped[6] = 0;
     273  parallelepiped[7] = 0;
     274  parallelepiped[8] = 1;
     275
     276  fixture.CopyVector(zero);
     277  CPPUNIT_ASSERT_EQUAL( false, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     278  fixture.Init(2.5,2.5,2.5);
     279  CPPUNIT_ASSERT_EQUAL( true, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     280  fixture.Init(1.,1.,1.);
     281  CPPUNIT_ASSERT_EQUAL( false, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     282  fixture.Init(3.5,3.5,3.5);
     283  CPPUNIT_ASSERT_EQUAL( false, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     284  fixture.Init(2.,2.,2.);
     285  CPPUNIT_ASSERT_EQUAL( true, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     286  fixture.Init(2.,3.,2.);
     287  CPPUNIT_ASSERT_EQUAL( true, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     288  fixture.Init(-2.,2.,-1.);
     289  CPPUNIT_ASSERT_EQUAL( false, fixture.IsInParallelepiped(Vector(2.,2.,2.), parallelepiped) );
     290}
     291
    260292
    261293/********************************************** Main routine **************************************/
  • src/vectorunittest.hpp

    r78b73c r89c8b2  
    2828    CPPUNIT_TEST ( LineIntersectionTest );
    2929    CPPUNIT_TEST ( VectorRotationTest );
     30    CPPUNIT_TEST ( IsInParallelepipedTest );
    3031    CPPUNIT_TEST_SUITE_END();
    3132
     
    4445    void LineIntersectionTest();
    4546    void VectorRotationTest();
     47    void IsInParallelepipedTest();
    4648
    4749private:
Note: See TracChangeset for help on using the changeset viewer.