Changeset 7b019a for src/Potentials/Specifics/SaturationPotential.cpp
- Timestamp:
- Feb 27, 2013, 12:39:03 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:
- d52819
- Parents:
- 69fcba
- git-author:
- Frederik Heber <heber@…> (11/30/12 15:33:58)
- git-committer:
- Frederik Heber <heber@…> (02/27/13 12:39:03)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Potentials/Specifics/SaturationPotential.cpp
r69fcba r7b019a 47 47 #include "CodePatterns/Log.hpp" 48 48 49 #include "FunctionApproximation/Extractors.hpp" 49 50 #include "Potentials/helpers.hpp" 50 51 #include "Potentials/ParticleTypeCheckers.hpp" 52 53 class Fragment; 51 54 52 55 using namespace boost::assign; … … 75 78 triplefunction(_triplefunction), 76 79 saturation_cutoff(_saturation_cutoff) 77 {} 80 { 81 // have some decent defaults for parameter_derivative checking 82 // Morse and Angle have their own defaults, offset is set 83 ASSERT( _ParticleTypes.size() == (size_t)2, 84 "SaturationPotential::SaturationPotential() - exactly two types must be given."); 85 ASSERT( _ParticleTypes[1] == 1, 86 "SaturationPotential::SaturationPotential() - second type must be hydrogen."); 87 } 78 88 79 89 SaturationPotential::SaturationPotential( … … 94 104 saturation_cutoff(_saturation_cutoff) 95 105 { 106 ASSERT( _ParticleTypes.size() == (size_t)2, 107 "SaturationPotential::SaturationPotential() - exactly two types must be given."); 108 ASSERT( _ParticleTypes[1] == 1, 109 "SaturationPotential::SaturationPotential() - second type must be hydrogen."); 96 110 parameters_t morse_params(morse.getParameterDimension()); 97 111 morse_params[PairPotential_Morse::spring_constant] = _morse_spring_constant; … … 303 317 return ist; 304 318 } 319 320 FunctionModel::extractor_t 321 SaturationPotential::getFragmentSpecificExtractor( 322 const charges_t &charges) const 323 { 324 ASSERT(charges.size() == (size_t)2, 325 "SaturationPotential::getFragmentSpecificExtractor() - requires 2 charges."); 326 FunctionModel::extractor_t returnfunction; 327 if (charges[0] == charges[1]) { 328 // In case both types are equal there is only a single pair of possible 329 // type combinations. 330 returnfunction = 331 boost::bind(&Extractors::gatherAllDistancesFromFragment, 332 boost::bind(&Fragment::getPositions, _1), 333 boost::bind(&Fragment::getCharges, _1), 334 boost::cref(charges), 335 _2); 336 } else { 337 // we have to chain here a rather complex "tree" of functions 338 // as we only have a couple of ParticleTypes but need to get 339 // all possible three pairs of the set of the two types. 340 // Finally, we also need to arrange them in correct order 341 // (for PairPotentiale_Angle). 342 charges_t firstpair(2, boost::cref(charges[0])); 343 charges_t secondpair(2, boost::cref(charges[1])); 344 const charges_t &thirdpair = charges; 345 returnfunction = 346 boost::bind(&Extractors::reorderArgumentsByParticleTypes, 347 boost::bind(&Extractors::combineArguments, 348 boost::bind(&Extractors::combineArguments, 349 boost::bind(&Extractors::gatherAllDistancesFromFragment, 350 boost::bind(&Fragment::getPositions, _1), 351 boost::bind(&Fragment::getCharges, _1), 352 firstpair, // no crefs here as are temporaries! 353 _2), 354 boost::bind(&Extractors::gatherAllDistancesFromFragment, 355 boost::bind(&Fragment::getPositions, _1), 356 boost::bind(&Fragment::getCharges, _1), 357 secondpair, // no crefs here as are temporaries! 358 _2) 359 ), 360 boost::bind(&Extractors::gatherAllDistancesFromFragment, 361 boost::bind(&Fragment::getPositions, _1), 362 boost::bind(&Fragment::getCharges, _1), 363 boost::cref(thirdpair), // only the last one is no temporary 364 _2) 365 ), 366 boost::cref(angle.getParticleTypes()) 367 ); 368 } 369 return returnfunction; 370 }
Note:
See TracChangeset
for help on using the changeset viewer.