Changeset e1fe7e for src/Potentials/Specifics/FourBodyPotential_Torsion.cpp
- Timestamp:
- Jun 27, 2014, 9:32:55 PM (11 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:
- 550f2a
- Parents:
- 16227a
- git-author:
- Frederik Heber <heber@…> (02/27/14 20:15:41)
- git-committer:
- Frederik Heber <heber@…> (06/27/14 21:32:55)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Potentials/Specifics/FourBodyPotential_Torsion.cpp
r16227a re1fe7e 140 140 FourBodyPotential_Torsion::results_t 141 141 FourBodyPotential_Torsion::operator()( 142 const arguments_t &arguments142 const list_of_arguments_t &listarguments 143 143 ) const 144 144 { 145 ASSERT( arguments.size() == getSpecificArgumentCount(), 146 "FourBodyPotential_Torsion::operator() - requires exactly three arguments."); 147 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 148 arguments, getParticleTypes()), 149 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 150 const argument_t &r_ij = arguments[0]; // 01 151 const argument_t &r_ik = arguments[1]; // 02 152 const argument_t &r_il = arguments[2]; // 03 153 const argument_t &r_jk = arguments[3]; // 12 154 const argument_t &r_jl = arguments[4]; // 13 155 const argument_t &r_kl = arguments[5]; // 23 156 const result_t result = 157 params[spring_constant] 158 * Helpers::pow( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance], 2 ); 159 return std::vector<result_t>(1, result); 145 result_t result = 0.; 146 for(list_of_arguments_t::const_iterator iter = listarguments.begin(); 147 iter != listarguments.end(); ++iter) { 148 const arguments_t &arguments = *iter; 149 ASSERT( arguments.size() == getSpecificArgumentCount(), 150 "FourBodyPotential_Torsion::operator() - requires exactly three arguments."); 151 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 152 arguments, getParticleTypes()), 153 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 154 const argument_t &r_ij = arguments[0]; // 01 155 const argument_t &r_ik = arguments[1]; // 02 156 const argument_t &r_il = arguments[2]; // 03 157 const argument_t &r_jk = arguments[3]; // 12 158 const argument_t &r_jl = arguments[4]; // 13 159 const argument_t &r_kl = arguments[5]; // 23 160 result += 161 params[spring_constant] 162 * Helpers::pow( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) 163 - params[equilibrium_distance], 2 ); 164 } 165 return results_t(1, result); 160 166 } 161 167 162 168 FourBodyPotential_Torsion::derivative_components_t 163 169 FourBodyPotential_Torsion::derivative( 164 const arguments_t &arguments170 const list_of_arguments_t &listarguments 165 171 ) const 166 172 { 167 ASSERT( arguments.size() == getSpecificArgumentCount(), 168 "FourBodyPotential_Torsion::operator() - requires exactly three arguments."); 169 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 170 arguments, getParticleTypes()), 171 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 172 derivative_components_t result; 173 const argument_t &r_ij = arguments[0]; // 01 174 const argument_t &r_ik = arguments[1]; // 02 175 const argument_t &r_il = arguments[2]; // 03 176 const argument_t &r_jk = arguments[3]; // 12 177 const argument_t &r_jl = arguments[4]; // 13 178 const argument_t &r_kl = arguments[5]; // 23 179 result.push_back( 2. * params[spring_constant] * ( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance]) ); 180 ASSERT( result.size() == 1, 181 "FourBodyPotential_Torsion::operator() - we did not create exactly one component."); 182 return result; 173 result_t result = 0.; 174 for(list_of_arguments_t::const_iterator iter = listarguments.begin(); 175 iter != listarguments.end(); ++iter) { 176 const arguments_t &arguments = *iter; 177 ASSERT( arguments.size() == getSpecificArgumentCount(), 178 "FourBodyPotential_Torsion::operator() - requires exactly three arguments."); 179 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 180 arguments, getParticleTypes()), 181 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 182 const argument_t &r_ij = arguments[0]; // 01 183 const argument_t &r_ik = arguments[1]; // 02 184 const argument_t &r_il = arguments[2]; // 03 185 const argument_t &r_jk = arguments[3]; // 12 186 const argument_t &r_jl = arguments[4]; // 13 187 const argument_t &r_kl = arguments[5]; // 23 188 result += 189 2. * params[spring_constant] * 190 ( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) 191 - params[equilibrium_distance]); 192 } 193 return derivative_components_t(1, result); 183 194 } 184 195 185 196 FourBodyPotential_Torsion::results_t 186 197 FourBodyPotential_Torsion::parameter_derivative( 187 const arguments_t &arguments,198 const list_of_arguments_t &listarguments, 188 199 const size_t index 189 200 ) const 190 201 { 191 ASSERT( arguments.size() == getSpecificArgumentCount(), 192 "FourBodyPotential_Torsion::parameter_derivative() - requires exactly three arguments."); 193 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 194 arguments, getParticleTypes()), 195 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 196 const argument_t &r_ij = arguments[0]; // 01 197 const argument_t &r_ik = arguments[1]; // 02 198 const argument_t &r_il = arguments[2]; // 03 199 const argument_t &r_jk = arguments[3]; // 12 200 const argument_t &r_jl = arguments[4]; // 13 201 const argument_t &r_kl = arguments[5]; // 23 202 switch (index) { 203 case spring_constant: 204 { 205 const result_t result = 206 Helpers::pow( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance], 2 ); 207 return std::vector<result_t>(1, result); 208 break; 202 result_t result = 0.; 203 for(list_of_arguments_t::const_iterator iter = listarguments.begin(); 204 iter != listarguments.end(); ++iter) { 205 const arguments_t &arguments = *iter; 206 ASSERT( arguments.size() == getSpecificArgumentCount(), 207 "FourBodyPotential_Torsion::parameter_derivative() - requires exactly three arguments."); 208 ASSERT( ParticleTypeChecker::checkArgumentsAgainstParticleTypes( 209 arguments, getParticleTypes()), 210 "FourBodyPotential_Torsion::operator() - types don't match with ones in arguments."); 211 const argument_t &r_ij = arguments[0]; // 01 212 const argument_t &r_ik = arguments[1]; // 02 213 const argument_t &r_il = arguments[2]; // 03 214 const argument_t &r_jk = arguments[3]; // 12 215 const argument_t &r_jl = arguments[4]; // 13 216 const argument_t &r_kl = arguments[5]; // 23 217 switch (index) { 218 case spring_constant: 219 { 220 result += 221 Helpers::pow( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance], 2 ); 222 break; 223 } 224 case equilibrium_distance: 225 { 226 result += 227 -2. * params[spring_constant] 228 * ( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance]); 229 break; 230 } 231 default: 232 ASSERT(0, "FourBodyPotential_Torsion::parameter_derivative() - derivative to unknown parameter desired."); 233 break; 209 234 } 210 case equilibrium_distance:211 {212 const result_t result =213 -2. * params[spring_constant]214 * ( function_theta(r_ij.distance, r_ik.distance, r_il.distance, r_jk.distance, r_jl.distance, r_kl.distance) - params[equilibrium_distance]);215 return std::vector<result_t>(1, result);216 break;217 }218 default:219 ASSERT(0, "FourBodyPotential_Torsion::parameter_derivative() - derivative to unknown parameter desired.");220 break;221 235 } 222 return std::vector<result_t>(1);236 return results_t(1, result); 223 237 } 224 238
Note:
See TracChangeset
for help on using the changeset viewer.