Changeset 666e9e


Ignore:
Timestamp:
May 7, 2016, 7:05:19 AM (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, 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:
a9099d
Parents:
0ba27c9
git-author:
Frederik Heber <heber@…> (02/17/16 18:24:55)
git-committer:
Frederik Heber <heber@…> (05/07/16 07:05:19)
Message:

VMGFragmentController and FragmentationAutomationAction accept UseImplicitCharge.

  • this causes nuclei charges for the full solution to be taken from the ParticleRegistry that contains partial charges table and not the elementary charges.
Files:
7 edited

Legend:

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

    r0ba27c9 r666e9e  
    6262
    6363#include "Descriptors/AtomIdDescriptor.hpp"
     64#include "Atom/atom.hpp"
     65#include "Element/element.hpp"
    6466#include "Fragmentation/Summation/Containers/FragmentationChargeDensity.hpp"
    6567#include "Fragmentation/Summation/Containers/FragmentationResultContainer.hpp"
     
    8688#endif
    8789#include "Helpers/defs.hpp"
     90#include "Potentials/Particles/ParticleRegistry.hpp"
    8891#include "World.hpp"
    8992
     
    672675
    673676    // Final phase: sum up and print result
     677    IndexedVectors::indices_t implicit_indices;
     678    if (params.UseImplicitCharges.get()) {
     679      // place all in implicit charges that are not selected but contained in ParticleRegistry
     680      const World &world = const_cast<const World &>(World::getInstance());
     681      const ParticleRegistry &registry = const_cast<const ParticleRegistry &>(ParticleRegistry::getInstance());
     682      const World::ConstAtomComposite &atoms = world.getAllAtoms();
     683      for (World::ConstAtomComposite::const_iterator iter = atoms.begin();
     684          iter != atoms.end(); ++iter) {
     685        const atomId_t atomid = (*iter)->getId();
     686        if (!world.isAtomSelected(atomid)) {
     687          const std::string &symbol = (*iter)->getElement().getSymbol();
     688          if (registry.isPresentByName(symbol))
     689            implicit_indices.push_back(atomid);
     690        }
     691      }
     692      LOG(2, "INFO: We added " << implicit_indices.size() << " indices due to implicit charges.");
     693    }
     694
    674695    FragmentationLongRangeResults longrangeresults(
    675696        shortrangedata,longrangeData,keysets, forcekeysets);
     
    678699        longrangeData,
    679700        fullsolutionData,
    680         full_sample);
     701        full_sample,
     702        implicit_indices);
    681703    printReceivedFullResults(longrangeresults);
    682704
     
    698720    std::map<JobId_t, VMGData> longrangeData;
    699721    FragmentationLongRangeResults longrangeresults(
    700         shortrangedata,longrangeData,keysets, forcekeysets);
     722        shortrangedata, longrangeData, keysets, forcekeysets);
    701723    appendToHomologies(shortrangeresults, longrangeresults, false);
    702724  }
  • src/Actions/FragmentationAction/AnalyseFragmentationResultsAction.def

    r0ba27c9 r666e9e  
    1515// ValueStorage by the token "Z" -> first column: int, Z, "Z"
    1616// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
    17 #define paramtypes (boost::filesystem::path)(bool)(std::string)
    18 #define paramtokens ("fragment-resultfile")("store-grids")("fragment-prefix")
    19 #define paramdescriptions ("parse fragment results from the given file")("whether to store sampled grids in homology files")("prefix of each fragment file")
    20 #define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT("0"))(PARAM_DEFAULT("BondFragment"))
    21 #define paramreferences (resultsfile)(DoStoreGrids)(prefix)
     17#define paramtypes (boost::filesystem::path)(bool)(std::string)(bool)
     18#define paramtokens ("fragment-resultfile")("store-grids")("fragment-prefix")("UseImplicitCharges")
     19#define paramdescriptions ("parse fragment results from the given file")("whether to store sampled grids in homology files")("prefix of each fragment file")("whether to model any non-selected atoms by partial charges implicitly")
     20#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT("0"))(PARAM_DEFAULT("BondFragment"))(PARAM_DEFAULT("0"))
     21#define paramreferences (resultsfile)(DoStoreGrids)(prefix)(UseImplicitCharges)
    2222#define paramvalids \
    2323(DummyValidator< boost::filesystem::path >()) \
    2424(DummyValidator< bool >()) \
    25 (DummyValidator< std::string >())
     25(DummyValidator< std::string >()) \
     26(DummyValidator< bool >())
    2627
    2728#undef statetypes
  • src/Actions/FragmentationAction/FragmentationAutomationAction.cpp

    r0ba27c9 r666e9e  
    261261        params.DoPrintDebug.get(),
    262262        OpenBoundaryConditions,
    263         params.DoSmearCharges.get())) {
     263        params.DoSmearCharges.get(),
     264        false)) {
    264265      STATUS("Could not create long-range jobs for electronic charge distribution.");
    265266      return Action::failure;
     
    292293          params.DoPrintDebug.get(),
    293294          OpenBoundaryConditions,
    294           params.DoSmearCharges.get())) {
     295          params.DoSmearCharges.get(),
     296          params.UseImplicitCharges.get())) {
    295297        STATUS("Could not create long-range jobs for nuclei charge distribution.");
    296298        return Action::failure;
  • src/Actions/FragmentationAction/FragmentationAutomationAction.def

    r0ba27c9 r666e9e  
    1818// ValueStorage by the token "Z" -> first column: int, Z, "Z"
    1919// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
    20 #define paramtypes (std::string)(std::string)(boost::filesystem::path)(unsigned int)(unsigned int)(unsigned int)(bool)(boost::filesystem::path)(bool)(bool)(bool)
    21 #define paramtokens ("server-address")("server-port")("fragment-executable")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("fragment-resultfile")("DoValenceOnly")("DoPrintDebug")("DoSmearElectronicCharges")
    22 #define paramdescriptions ("hostname of server")("controller port of server")("executable to launch on clients")("resolution of multigrid")("number of cells used in smearing out core charge")("interpolation degree for getting the nuclei potential from the grid")("whether to calculate long-range contributions")("parse fragment results from the given file")("whether the sampling uses only the valence electron and nuclei charge")("whether to print grids for debug visualization")("whether to smear out electronic charge distributions with bsplines or not")
    23 #define paramdefaults (PARAM_DEFAULT("127.0.0.1"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("mpqc"))(PARAM_DEFAULT(5))(PARAM_DEFAULT(3))(PARAM_DEFAULT(3))(PARAM_DEFAULT("0"))(PARAM_DEFAULT(""))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))
    24 #define paramreferences (host)(port)(executable)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(resultsfile)(DoValenceOnly)(DoPrintDebug)(DoSmearCharges)
     20#define paramtypes (std::string)(std::string)(boost::filesystem::path)(unsigned int)(unsigned int)(unsigned int)(bool)(boost::filesystem::path)(bool)(bool)(bool)(bool)
     21#define paramtokens ("server-address")("server-port")("fragment-executable")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("fragment-resultfile")("DoValenceOnly")("DoPrintDebug")("DoSmearElectronicCharges")("UseImplicitCharges")
     22#define paramdescriptions ("hostname of server")("controller port of server")("executable to launch on clients")("resolution of multigrid")("number of cells used in smearing out core charge")("interpolation degree for getting the nuclei potential from the grid")("whether to calculate long-range contributions")("parse fragment results from the given file")("whether the sampling uses only the valence electron and nuclei charge")("whether to print grids for debug visualization")("whether to smear out electronic charge distributions with bsplines or not")("whether to model any non-selected atoms by partial charges implicitly")
     23#define paramdefaults (PARAM_DEFAULT("127.0.0.1"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("mpqc"))(PARAM_DEFAULT(5))(PARAM_DEFAULT(3))(PARAM_DEFAULT(3))(PARAM_DEFAULT("0"))(PARAM_DEFAULT(""))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))
     24#define paramreferences (host)(port)(executable)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(resultsfile)(DoValenceOnly)(DoPrintDebug)(DoSmearCharges)(UseImplicitCharges)
    2525#define paramvalids \
    2626(DummyValidator< std::string >()) \
     
    3232(DummyValidator< bool >()) \
    3333(DummyValidator< boost::filesystem::path >()) \
     34(DummyValidator< bool >()) \
    3435(DummyValidator< bool >()) \
    3536(DummyValidator< bool >()) \
  • src/Fragmentation/Automation/VMGFragmentController.cpp

    r0ba27c9 r666e9e  
    4747#include "Jobs/VMGJob.hpp"
    4848#include "molecule.hpp"
     49#include "Potentials/Particles/Particle.hpp"
     50#include "Potentials/Particles/ParticleRegistry.hpp"
    4951#include "World.hpp"
    5052
     
    7779    const bool _DoPrintDebug,
    7880    const bool _OpenBoundaryConditions,
    79     const bool _DoSmearCharges)
     81    const bool _DoSmearCharges,
     82    const bool _UseImplicitCharges)
    8083{
    8184  std::vector<FragmentJob::ptr> jobs;
     
    110113  std::vector< std::vector<double> > positions;
    111114  std::vector<double> charges;
     115  const World &world = const_cast<const World &>(World::getInstance());
     116  const ParticleRegistry &registry = const_cast<const ParticleRegistry &>(ParticleRegistry::getInstance());
    112117  {
    113     const World::ConstAtomComposite &atoms = const_cast<const World &>(World::getInstance()).
    114         getAllAtoms();
     118    const World::ConstAtomComposite &atoms = world.getAllAtoms();
    115119    positions.reserve(atoms.size());
    116120    charges.reserve(atoms.size());
     
    118122    for (World::ConstAtomComposite::const_iterator iter = atoms.begin();
    119123        iter != atoms.end(); ++iter) {
     124      // set position for this atom
    120125      const Vector &pos = (*iter)->getPosition();
    121126      // convert positions to atomic length units
    122       for (size_t i=0;i<3;++i) position[i] = pos[i]/AtomicLengthToAngstroem;
    123       positions.push_back(position);
    124       int charge = (*iter)->getElement().getAtomicNumber();
    125       // subtract core electron charge from nuclei charge if only valence sampled
    126       if (_DoValenceOnly == MPQCData::DoSampleValenceOnly)
    127         charge -= getCoreElectrons(charge);
    128       charges.push_back((double)charge);
     127      for (size_t i=0;i<3;++i)
     128        position[i] = pos[i]/AtomicLengthToAngstroem;
     129
     130      // use partial charges ...
     131      const atomId_t atomid = (*iter)->getId();
     132      if ((!world.isAtomSelected(atomid)) && (_UseImplicitCharges)) {
     133        // ... for all unselected particles ...
     134        const std::string &symbol = (*iter)->getElement().getSymbol();
     135        if (registry.isPresentByName(symbol)) {
     136          // ... that are present in ParticleRegistry
     137          const Particle * const particle = registry.getByName(symbol);
     138          LOG(3, "DEBUG: Using implicit charge " << particle->charge << " for atom " << atomid);
     139          positions.push_back(position);
     140          charges.push_back(particle->charge);
     141        }
     142      } else {
     143        double charge = (*iter)->getElement().getAtomicNumber();
     144        // subtract core electron charge from nuclei charge if only valence sampled
     145        if (_DoValenceOnly == MPQCData::DoSampleValenceOnly)
     146          charge -= getCoreElectrons(charge);
     147        positions.push_back(position);
     148        charges.push_back((double)charge);
     149      }
    129150    }
    130151  }
  • src/Fragmentation/Automation/VMGFragmentController.hpp

    r0ba27c9 r666e9e  
    6464   *        boundary conditions
    6565   * \param _DoSmearCharges whether to smear out electronic charge distributions with bsplines or not
     66   * \param _UseImplicitCharges use implicit charges in potential storage if
     67   *            element is found
    6668   */
    6769  bool createLongRangeJobs(
     
    7577      const bool _DoPrintDebug,
    7678      const bool _OpenBoundaryConditions = false,
    77       const bool _DoSmearCharges = false);
     79      const bool _DoSmearCharges = false,
     80      const bool _UseImplicitCharges = false);
    7881
    7982  void waitforResults(const size_t NoExpectedResults)
  • tests/Python/AllActions/options.dat

    r0ba27c9 r666e9e  
    252252unselect-molecules-by-name      "water"
    253253unselect-shape-by-name  "cube42"
     254UseImplicitCharges      "1"
    254255verbose "3"
    255256verlet-integration      "forces.dat"
Note: See TracChangeset for help on using the changeset viewer.