Changeset c5805a for src


Ignore:
Timestamp:
Mar 3, 2010, 9:31:24 AM (15 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:
b34306
Parents:
cb85c2e
Message:

FIX: allowing empty config files, and filling can deal with no molecules being present.

FillBoxWithMolecule():

  • Additional checks whether AtomCount>0
  • FIX: CopyAtoms was not initialised to NULL, hence wrong atoms might get "bonded".
  • if TesselStruct or LCList are NULL, these refer to empty molecules not to an error
  • breaking when atom would be placed was wrong, just continue to next atom of filler molecule.

config::LoadMolecule()

  • we do not performCriticalExit() when MaxTypes==0, indicating present config file with no atoms.
Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/boundary.cpp

    rcb85c2e rc5805a  
    819819  map<molecule *, LinkedCell *> LCList;
    820820
    821   for (MoleculeList::iterator ListRunner = List->ListOfMolecules.begin(); ListRunner != List->ListOfMolecules.end(); ListRunner++) {
    822     Log() << Verbose(1) << "Pre-creating linked cell lists for molecule " << *ListRunner << "." << endl;
    823     LCList[(*ListRunner)] = new LinkedCell((*ListRunner), 10.); // get linked cell list
    824     Log() << Verbose(1) << "Pre-creating tesselation for molecule " << *ListRunner << "." << endl;
    825     TesselStruct[(*ListRunner)] = NULL;
    826     FindNonConvexBorder((*ListRunner), TesselStruct[(*ListRunner)], (const LinkedCell *&)LCList[(*ListRunner)], 5., NULL);
    827   }
     821  for (MoleculeList::iterator ListRunner = List->ListOfMolecules.begin(); ListRunner != List->ListOfMolecules.end(); ListRunner++)
     822    if ((*ListRunner)->AtomCount > 0) {
     823      Log() << Verbose(1) << "Pre-creating linked cell lists for molecule " << *ListRunner << "." << endl;
     824      LCList[(*ListRunner)] = new LinkedCell((*ListRunner), 10.); // get linked cell list
     825      Log() << Verbose(1) << "Pre-creating tesselation for molecule " << *ListRunner << "." << endl;
     826      TesselStruct[(*ListRunner)] = NULL;
     827      FindNonConvexBorder((*ListRunner), TesselStruct[(*ListRunner)], (const LinkedCell *&)LCList[(*ListRunner)], 5., NULL);
     828    }
    828829
    829830  // Center filler at origin
    830   filler->CenterOrigin();
     831  filler->CenterEdge(&Inserter);
    831832  filler->Center.Zero();
    832833
     
    845846
    846847  // go over [0,1]^3 filler grid
    847   for (n[0] = 0; n[0] <= N[0]; n[0]++)
    848     for (n[1] = 0; n[1] <= N[1]; n[1]++)
    849       for (n[2] = 0; n[2] <= N[2]; n[2]++) {
     848  for (n[0] = 0; n[0] < N[0]; n[0]++)
     849    for (n[1] = 0; n[1] < N[1]; n[1]++)
     850      for (n[2] = 0; n[2] < N[2]; n[2]++) {
    850851        // calculate position of current grid vector in untransformed box
    851852        CurrentPosition.Init((double)n[0]/(double)N[0], (double)n[1]/(double)N[1], (double)n[2]/(double)N[2]);
     
    857858
    858859        // go through all atoms
     860        for (int i=0;i<filler->AtomCount;i++)
     861          CopyAtoms[i] = NULL;
    859862        Walker = filler->start;
    860863        while (Walker->next != filler->end) {
     
    900903          for (MoleculeList::iterator ListRunner = List->ListOfMolecules.begin(); ListRunner != List->ListOfMolecules.end(); ListRunner++) {
    901904            // get linked cell list
    902             if (TesselStruct[(*ListRunner)] == NULL) {
    903               eLog() << Verbose(0) << "TesselStruct of " << (*ListRunner) << " is NULL. Didn't we pre-create it?" << endl;
    904               FillIt = false;
    905             } else {
     905            if (TesselStruct[(*ListRunner)] != NULL) {
    906906              const double distance = (TesselStruct[(*ListRunner)]->GetDistanceToSurface(Inserter, LCList[(*ListRunner)]));
    907907              FillIt = FillIt && (distance > boundary) && ((MaxDistance < 0) || (MaxDistance > distance));
     
    919919            Log() << Verbose(1) << "INFO: Position at " << Inserter << " is inner point, within boundary or outside of MaxDistance." << endl;
    920920            CopyAtoms[Walker->nr] = NULL;
    921             break;
     921            continue;
    922922          }
    923923
  • src/config.cpp

    rcb85c2e rc5805a  
    689689  ParseForParameter(verbose,FileBuffer,"MaxTypes", 0, 1, 1, int_type, &(MaxTypes), 1, critical);
    690690  if (MaxTypes == 0) {
    691     eLog() << Verbose(0) << "There are no atoms according to MaxTypes in this config file." << endl;
    692     performCriticalExit();
     691    eLog() << Verbose(1) << "There are no atoms according to MaxTypes in this config file." << endl;
     692    //performCriticalExit();
    693693  } else {
    694694    // prescan number of ions per type
Note: See TracChangeset for help on using the changeset viewer.