source: src/Potentials/ParticleTypeCheckers.cpp@ d24750

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator 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_ChronosMutex Fix_ParseParticles Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg ThirdParty_MPQC_rebuilt_buildsystem TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes stable
Last change on this file since d24750 was b760bc3, checked in by Frederik Heber <heber@…>, 12 years ago

Added ParticleTypeChecker functions in own namespace and added checks to every specific potential.

  • these check whether typesin argument_t matches with potential's ParticleTypes.
  • replaced row of Asserts with ParticleTypeChecker call in all specific potentials.
  • Property mode set to 100644
File size: 3.2 KB
RevLine 
[b760bc3]1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2012 University of Bonn. All rights reserved.
5 * Please see the COPYING file or "Copyright notice" in builder.cpp for details.
6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * ParticleTypeCheckers.cpp
26 *
27 * Created on: Nov 28, 2012
28 * Author: heber
29 */
30
31
32// include config.h
33#ifdef HAVE_CONFIG_H
34#include <config.h>
35#endif
36
37#include "CodePatterns/MemDebug.hpp"
38
39#include "ParticleTypeCheckers.hpp"
40
41#include <algorithm>
42
43#include "CodePatterns/Assert.hpp"
44#include "CodePatterns/Log.hpp"
45
46bool ParticleTypeChecker::checkArgumentsAgainstParticleTypesStrictOrdering(
47 const FunctionModel::arguments_t &args,
48 const SerializablePotential::ParticleTypes_t &types
49 )
50{
51 // check size
52 if (types.size() != types.size())
53 return false;
54 // check step-wise each
55 FunctionModel::arguments_t::const_iterator iter = args.begin();
56 SerializablePotential::ParticleTypes_t::const_iterator firstcheckiter = types.begin();
57 SerializablePotential::ParticleTypes_t::const_iterator secondcheckiter = types.begin();
58 ++secondcheckiter;
59 for(; iter != args.end(); ++iter){
60 if ((iter->types.first != *firstcheckiter)
61 && (iter->types.second != *secondcheckiter)) {
62 ELOG(1, iter->types.first << "," << iter->types.second << " does not match with "
63 << *firstcheckiter << "," << *secondcheckiter << ".");
64 return false;
65 }
66 ++secondcheckiter;
67 if (secondcheckiter == types.end()) {
68 ++firstcheckiter;
69 ASSERT( firstcheckiter != types.end(),
70 "checkArgumentsAgainstParticleTypesStrictOrdering() - not enough types?");
71 secondcheckiter = firstcheckiter+1;
72 }
73 }
74 return true;
75}
76
77bool ParticleTypeChecker::checkArgumentsAgainstParticleTypes(
78 const FunctionModel::arguments_t &args,
79 const SerializablePotential::ParticleTypes_t &types
80 )
81{
82 // check size
83 if (types.size() != types.size())
84 return false;
85 // check step-wise each
86 bool status = true;
87 for(FunctionModel::arguments_t::const_iterator iter = args.begin();
88 iter != args.end(); ++iter) {
89 const SerializablePotential::ParticleTypes_t::const_iterator firstcheckiter =
90 std::find( types.begin(), types.end(), iter->types.first );
91 const SerializablePotential::ParticleTypes_t::const_iterator secondcheckiter =
92 std::find( types.begin(), types.end(), iter->types.second );
93 status &= (firstcheckiter != types.end()) && (secondcheckiter != types.end());
94 if (!status)
95 break;
96 }
97 return status;
98}
Note: See TracBrowser for help on using the repository browser.