Changeset 7debff for src


Ignore:
Timestamp:
May 18, 2016, 9:56:59 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, 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_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, 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:
b0bc13
Parents:
f0dea0
git-author:
Frederik Heber <heber@…> (03/04/16 14:32:54)
git-committer:
Frederik Heber <heber@…> (05/18/16 21:56:59)
Message:

VMGData additionally stores absolute residual.

  • we check for absolute residual to be less than 1e-5 in any case, otherwise issue a warning.
  • either relative or absolute residual must be less than precision. This is the check used by vmg. Otherwise we may get false failed convergence warnings because not relative but absolute residual reached precision threshold.
Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/FragmentationAction/FragmentationAutomationAction.cpp

    rf0dea0 r7debff  
    122122
    123123std::pair<double, double> getResiduals(const VMGData &_result)
    124 { return std::make_pair(_result.relative_residual, _result.precision); }
     124{
     125  // sensibility check on absolute residual
     126  if (_result.residual > 1e-5)
     127    ELOG(2, "Encountered absolute residual greater than 1e-5: " << _result.residual);
     128  // take smaller value of the two as just one of them needs to be less than precision
     129  const double residual = std::min(_result.relative_residual, _result.residual);
     130  return std::make_pair(residual, _result.precision);
     131}
    125132
    126133template <class ResultClass>
  • src/Fragmentation/Summation/Containers/VMGData.cpp

    rf0dea0 r7debff  
    4747  hasForces(false),
    4848  relative_residual(0.),
     49  residual(0.),
    4950  precision(0.)
    5051{}
     
    5556    hasForces(false),
    5657    relative_residual(0.),
     58    residual(0.),
    5759    precision(0.)
    5860{}
     
    6365  ost << "Electron long-Range energy: " << data.electron_long << std::endl;
    6466  ost << "Nuclei long-Range forces: " << data.forces << std::endl;
     67  ost << "Residual: " << data.residual << std::endl;
    6568  ost << "Relative residual: " << data.relative_residual << std::endl;
    6669  ost << "Desired precision: " << data.precision << std::endl;
  • src/Fragmentation/Summation/Containers/VMGData.hpp

    rf0dea0 r7debff  
    5757  //!> relative residual
    5858  double relative_residual;
     59  //!> absolute residual
     60  double residual;
    5961  //!> desired precision
    6062  double precision;
     
    7981    if (version > 3) {
    8082      ar & relative_residual;
     83      ar & residual;
    8184      ar & precision;
    8285    }
  • src/Jobs/InterfaceVMGJob.cpp

    rf0dea0 r7debff  
    402402  const vmg_float rel_res = (init_res != 0.) ? std::fabs(res / init_res) : 0.;
    403403  returndata.precision = precision;
     404  returndata.residual = res;
    404405  returndata.relative_residual = rel_res;
    405406}
  • src/Jobs/VMGJob.cpp

    rf0dea0 r7debff  
    201201  FragmentResult::ptr ptr( new FragmentResult(getId(), returnstream.str()) );
    202202  if (returndata.precision != 0.) {
    203     ptr->exitflag = returndata.relative_residual < returndata.precision ? 0 : 1;
     203    ptr->exitflag =
     204        ((returndata.relative_residual < returndata.precision)
     205        || (returndata.residual < returndata.precision)) ? 0 : 1;
    204206    if (ptr->exitflag != 0)
    205207      ELOG(1, "Job #" << ptr->getId() << " failed to reach desired accuracy.");
Note: See TracChangeset for help on using the changeset viewer.