Changeset 2ebfd7 for src/Fragmentation


Ignore:
Timestamp:
Sep 14, 2016, 6:42:53 PM (8 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, 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_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, 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, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, 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, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, Ubuntu_1604_changes, stable
Children:
4a3df8
Parents:
ec1aae
git-author:
Frederik Heber <heber@…> (06/08/16 13:22:46)
git-committer:
Frederik Heber <heber@…> (09/14/16 18:42:53)
Message:

MPQCData::assignWithDownsampledGrid() uses downsample().

  • in order to avoid any unnecessary copying of the grids we implemented an additional assignment-like function that copies all values but the grid which is first cut down to a desired level size. We use full weight restriction as is used in vmg's stencils.hpp.
Location:
src/Fragmentation/Summation/Containers
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/Containers/MPQCData.cpp

    rec1aae r2ebfd7  
    105105}
    106106
     107void MPQCData::assignWithDownsampledGrid(
     108    MPQCData &instance,
     109    const MPQCData &other)
     110{
     111  if (&instance != &other) {
     112    instance.energies = other.energies;
     113    instance.forces = other.forces;
     114    instance.DoLongrange = other.DoLongrange;
     115    instance.DoValenceOnly = other.DoValenceOnly;
     116    /** We need to return from the local grid of the fragment to the global
     117     * grid and change the level in such a way that the gridpoints remain exactly
     118     * the same.
     119     */
     120    SamplingGridProperties domain(instance.sampled_grid);
     121    //!> we need to downsample by the difference in levels and by the smaller grid size
     122    const double surplus_level = instance.sampled_grid.getSurplusLevel(other.sampled_grid);
     123    ASSERT( fabs(surplus_level - round(surplus_level)) < std::numeric_limits<double>::epsilon()*1e4,
     124        "MPQCData::assignWithDownsampledGrid() - surplus level is not integer: "
     125        +toString(surplus_level));
     126    const int downsample_level =
     127        (other.sampled_grid.level - instance.sampled_grid.level) + round(surplus_level);
     128    // downsample the stored grid values to the coarser grid
     129    SamplingGrid::downsample(
     130        instance.sampled_grid, other.sampled_grid,
     131        other.sampled_grid.level - downsample_level);
     132    // then we can simply take over
     133#ifndef NDEBUG
     134    const size_t window_gridpoints = instance.sampled_grid.getWindowGridPoints();
     135#endif
     136    static_cast<SamplingGridProperties &>(instance.sampled_grid) = domain;
     137    ASSERT(instance.sampled_grid.getWindowGridPoints() == window_gridpoints,
     138        "MPQCData::assignWithDownsampledGrid() - number of window gridpoints is "
     139        +toString(instance.sampled_grid.getWindowGridPoints())+" and was "+toString(window_gridpoints));
     140    instance.positions = other.positions;
     141    instance.charges = other.charges;
     142    instance.times = other.times;
     143    instance.accuracy = other.accuracy;
     144    instance.desired_accuracy = other.desired_accuracy;
     145  }
     146}
     147
    107148std::ostream & operator<<(std::ostream &ost, const MPQCData &data)
    108149{
  • src/Fragmentation/Summation/Containers/MPQCData.hpp

    rec1aae r2ebfd7  
    5757    return !(*this == other);
    5858  }
     59
     60  /** Assignment operator with a downsampled grid.
     61   *
     62   * All values are taken over (with self-assignment check), but the grid
     63   * is sampled down to the desired \a _level (left untouched if larger
     64   * than grid level contained in \a other).
     65   *
     66   * \param instance instance to assign, containing desired grid and level
     67   * \param other instance to get values and grid from
     68   */
     69  static void assignWithDownsampledGrid(
     70      MPQCData &instance,
     71      const MPQCData &other);
    5972
    6073  /// Energie structure
Note: See TracChangeset for help on using the changeset viewer.