Ignore:
Timestamp:
Feb 15, 2013, 5:09:58 PM (12 years ago)
Author:
Frederik Heber <heber@…>
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:
1f1f80
Parents:
fb3485
git-author:
Frederik Heber <heber@…> (01/31/13 13:26:34)
git-committer:
Frederik Heber <heber@…> (02/15/13 17:09:58)
Message:

SamplingGrid::operator*=() can now deal with incongruent windows.

  • new functions shrinkWindow() and AddIntoWindow() help to allow for shrinking the window to the minimum size of either window, copying the old values onto and multiplying with the other ones from a possibly larger window.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Jobs/Grid/SamplingGrid.hpp

    rfb3485 r313f83  
    128128  /** Element-wise multiplication operator with another SamplingGrid instance \a other.
    129129   *
     130   * With non-zero windows we have to pay some more attention here.
     131   * Now, the windows may not be congruent but we have to find the intersection
     132   * of the two windows and then construct the new window only of this size and
     133   * multiply. The trick then is not to copy&change the other grid but to
     134   * access it properly.
     135   *
    130136   * \param other other instance to sum onto this one.
    131137   * \return ref to this instance
     
    251257  void extendWindow(const double _begin_window[3], const double _end_window[3]);
    252258
    253   /** Adds another window onto the one in this instance.
     259  /** Shrinks the window while keeping the values.
     260   *
     261   * \param _begin_window new start of window
     262   * \param _end_window new end of window
     263   */
     264  void shrinkWindow(const double _begin_window[3], const double _end_window[3]);
     265
     266  /** Adds another (smaller) window onto the one in this instance.
    254267   *
    255268   * \note We assume here that the given window fits on the this one.
     
    266279      const double prefactor);
    267280
     281  /** Adds another (larger) window into the one in this instance.
     282   *
     283   * \note We assume here that the given window is larger than this one.
     284   *
     285   * \param _begin_window start of other window
     286   * \param _end_window end of other window
     287   * \param _sampled_grid other set of sampled values
     288   * @param prefactor +1. is then addition, -1. is subtraction.
     289   */
     290  void addIntoWindow(
     291      const double _begin_window[3],
     292      const double _end_window[3],
     293      const sampledvalues_t &_sampled_grid,
     294      const double prefactor);
     295
    268296  /** Enum to help in addWindowOntoWindow() decide which iterator needs to be
    269297   * advanced.
    270298   */
    271   enum LargerWindow {
    272     thiswindow,
    273     otherwindow
     299  enum eLargerWindow {
     300    destwindow,
     301    sourcewindow
    274302  };
    275303
     
    280308   * one of them being constant, hence the source values
    281309   *
    282    * \param wbegin start of larger window
    283    * \param wend end of larger window
    284    * \param other_wbegin start of smaller window
    285    * \param other_wend end of smaller window
    286    * \param sampled_grid larger set of sampled values
    287    * \param other_sampled_grid smaller set of sampled values
     310   * \param larger_wbegin start of larger window
     311   * \param larger_wend end of larger window
     312   * \param smaller_wbegin start of smaller window
     313   * \param smaller_wend end of smaller window
     314   * \param dest_sampled_grid larger set of sampled values
     315   * \param source_sampled_grid smaller set of sampled values
    288316   * \param op operation to perform with the two elements
    289    * \param choice indicates which is the larger window
     317   * \param larger_window indicates which is the larger window
    290318   */
    291319  void addWindowOntoWindow(
    292       const double wbegin[3],
    293       const double wend[3],
    294       const double other_wbegin[3],
    295       const double other_wend[3],
    296       sampledvalues_t &sampled_grid,
    297       const sampledvalues_t &other_sampled_grid,
     320      const double larger_wbegin[3],
     321      const double larger_wend[3],
     322      const double smaller_wbegin[3],
     323      const double smaller_wend[3],
     324      sampledvalues_t &dest_sampled_grid,
     325      const sampledvalues_t &source_sampled_grid,
    298326      boost::function<void (double &, const double &)> op,
    299       enum LargerWindow choice);
     327      enum eLargerWindow larger_window);
    300328
    301329  /** Helper function that contains all the logic of how to superpose two
Note: See TracChangeset for help on using the changeset viewer.