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:
336da8
Parents:
c6da5e
git-author:
Frederik Heber <heber@…> (05/27/16 18:34:23)
git-committer:
Frederik Heber <heber@…> (09/14/16 18:42:53)
Message:

Added getDiscreteWindowIndices() and getDiscreteWindowLengthPerAxis() to SamplingGrid.

Location:
src/Fragmentation/Summation/SetValues
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/SetValues/SamplingGrid.cpp

    rc6da5e rc1948c  
    424424      boost::bind(addElements, _1, _2, boost::cref(prefactor)),
    425425      sourcewindow);
     426}
     427
     428void SamplingGrid::getDiscreteWindowIndices(
     429    size_t _wbegin[NDIM],
     430    size_t _wlength[NDIM],
     431    size_t _wend[NDIM]) const
     432{
     433  const double round_offset =
     434      (std::numeric_limits<size_t>::round_style == std::round_toward_zero) ?
     435          0.5 : 0.; // need offset to get to round_toward_nearest behavior
     436  for(size_t index=0;index<NDIM;++index) {
     437    if (fabs(end[index] - begin[index]) > std::numeric_limits<double>::epsilon()*1e4) {
     438      // we refrain from using floor/ceil as the window's starts and ends,
     439      // the grids have to be compatible (equal level), should always be on
     440      // discrete grid point locations.
     441      const double delta = getDeltaPerAxis(index);
     442      // delta is conversion factor from box length to discrete length, i.e. number of points
     443      _wbegin[index] = (begin_window[index] - begin[index])/delta+round_offset;
     444      _wlength[index] = (end_window[index] - begin_window[index])/delta+round_offset;
     445      _wend[index] = (end_window[index] - begin[index])/delta+round_offset;
     446    } else {
     447      _wbegin[index] = 0;
     448      _wlength[index] = 0;
     449      _wend[index] = 0;
     450    }
     451    // total is used as safe-guard against loss due to discrete conversion
     452    ASSERT( (_wend[index] - _wbegin[index]) == _wlength[index],
     453        "SamplingGrid::getDiscreteWindowCopyIndices() - end - begin is not equal to length for "
     454        +toString(index)+"th component.");
     455  }
    426456}
    427457
  • src/Fragmentation/Summation/SetValues/SamplingGrid.hpp

    rc6da5e rc1948c  
    200200  const double getWindowLengthPerAxis(const size_t axis) const;
    201201
     202  /** Returns the discrete length in grid cells of the window for the given \a axis.
     203   *
     204   * \param axis axis for which to get step length
     205   * \return window length in grid cells for the given axis
     206   */
     207  const size_t getDiscreteWindowLengthPerAxis(const size_t axis) const;
     208
    202209  /** Returns the volume of the domain covered by the current window.
    203210   *
     
    236243      size_t *length,
    237244      size_t *total) const;
     245
     246  /** Returns begin, length and end of window relative to the full domain in discrete
     247   * grid points, i.e. begin gives the first grid points with the window and end its
     248   * last plus 1.
     249   */
     250  void getDiscreteWindowIndices(
     251      size_t _wbegin[NDIM],
     252      size_t _wlength[NDIM],
     253      size_t _wend[NDIM]) const;
    238254
    239255  /** Equality operator.
  • src/Fragmentation/Summation/SetValues/SamplingGrid_inline.hpp

    rc6da5e rc1948c  
    3838inline
    3939#endif
     40const size_t SamplingGrid::getDiscreteWindowLengthPerAxis(const size_t axis) const
     41{
     42  const double round_offset =
     43      (std::numeric_limits<size_t>::round_style == std::round_toward_zero) ?
     44          0.5 : 0.; // need offset to get to round_toward_nearest behavior
     45  const double length =
     46    (double)getGridPointsPerAxis()*getWindowLengthPerAxis(axis)/getTotalLengthPerAxis(axis)+round_offset;
     47  return length;
     48}
     49
     50#ifdef HAVE_INLINE
     51inline
     52#endif
    4053const size_t SamplingGrid::getWindowGridPoints() const
    4154{
Note: See TracChangeset for help on using the changeset viewer.