Changeset 5466f3 for src/molecules.cpp


Ignore:
Timestamp:
Jul 10, 2009, 2:29:56 PM (16 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:
6cb412
Parents:
21c017
Message:

XYZ and config files now store the atoms in the same order as they are loaded.

changed functions: molecule::OutputXYZ, molecule::OutputTrajectoriesXYZ, molecule::OutputTrajectories, molecule::Output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/molecules.cpp

    r21c017 r5466f3  
    14691469bool molecule::Output(ofstream *out)
    14701470{
    1471         element *runner;
    14721471        atom *walker = NULL;
    1473         int ElementNo, AtomNo;
     1472        int ElementNo[MAX_ELEMENTS], AtomNo[MAX_ELEMENTS];
     1473        int CurrentMaxElement = 0;
    14741474        CountElements();
    14751475
     1476        for (int i=0;i<MAX_ELEMENTS;++i) {
     1477          AtomNo[i] = 0;
     1478          ElementNo[i] = 0;
     1479        }
    14761480        if (out == NULL) {
    14771481                return false;
    14781482        } else {
    14791483                *out << "#Ion_TypeNr._Nr.R[0]           R[1]            R[2]            MoveType (0 MoveIon, 1 FixedIon)" << endl;
    1480                 ElementNo = 0;
    1481                 runner = elemente->start;
    1482                 while (runner->next != elemente->end) { // go through every element
    1483                         runner = runner->next;
    1484                         if (ElementsInMolecule[runner->Z]) { // if this element got atoms
    1485                                 ElementNo++;
    1486                                 AtomNo = 0;
    1487                                 walker = start;
    1488                                 while (walker->next != end) { // go through every atom of this element
    1489                                         walker = walker->next;
    1490                                         if (walker->type == runner) { // if this atom fits to element
    1491                                                 AtomNo++;
    1492                                                 walker->Output(ElementNo, AtomNo, out); // removed due to trajectories
    1493                                         }
    1494                                 }
    1495                         }
    1496                 }
     1484    walker = start;
     1485    while (walker->next != end) { // go through every atom of this element
     1486      walker = walker->next;
     1487      if (ElementNo[walker->type->Z] == 0) // new element
     1488        ElementNo[walker->type->Z] = CurrentMaxElement++;
     1489      AtomNo[walker->type->Z]++;
     1490      walker->Output(ElementNo[walker->type->Z], AtomNo[walker->type->Z], out); // removed due to trajectories
     1491    }
    14971492                return true;
    14981493        }
     
    15041499bool molecule::OutputTrajectories(ofstream *out)
    15051500{
    1506         element *runner = NULL;
    15071501        atom *walker = NULL;
    1508         int ElementNo, AtomNo;
     1502  int ElementNo[MAX_ELEMENTS], AtomNo[MAX_ELEMENTS];
     1503  int CurrentMaxElement = 0;
    15091504        CountElements();
    15101505
     
    15181513                                *out << "# ====== MD step " << step << " =========" << endl;
    15191514                        }
    1520                         ElementNo = 0;
    1521                         runner = elemente->start;
    1522                         while (runner->next != elemente->end) { // go through every element
    1523                                 runner = runner->next;
    1524                                 if (ElementsInMolecule[runner->Z]) { // if this element got atoms
    1525                                         ElementNo++;
    1526                                         AtomNo = 0;
    1527                                         walker = start;
    1528                                         while (walker->next != end) { // go through every atom of this element
    1529                                                 walker = walker->next;
    1530                                                 if (walker->type == runner) { // if this atom fits to element
    1531                                                         AtomNo++;
    1532                                                         *out << "Ion_Type" << ElementNo << "_" << AtomNo << "\t"        << fixed << setprecision(9) << showpoint;
    1533                                                         *out << Trajectories[walker].R.at(step).x[0] << "\t" << Trajectories[walker].R.at(step).x[1] << "\t" << Trajectories[walker].R.at(step).x[2];
    1534                                                         *out << "\t" << walker->FixedIon;
    1535                                                         if (Trajectories[walker].U.at(step).Norm() > MYEPSILON)
    1536                                                                 *out << "\t" << scientific << setprecision(6) << Trajectories[walker].U.at(step).x[0] << "\t" << Trajectories[walker].U.at(step).x[1] << "\t" << Trajectories[walker].U.at(step).x[2] << "\t";
    1537                                                         if (Trajectories[walker].F.at(step).Norm() > MYEPSILON)
    1538                                                                 *out << "\t" << scientific << setprecision(6) << Trajectories[walker].F.at(step).x[0] << "\t" << Trajectories[walker].F.at(step).x[1] << "\t" << Trajectories[walker].F.at(step).x[2] << "\t";
    1539                                                         *out << "\t# Number in molecule " << walker->nr << endl;
    1540                                                 }
    1541                                         }
    1542                                 }
    1543                         }
     1515                  for (int i=0;i<MAX_ELEMENTS;++i) {
     1516                    AtomNo[i] = 0;
     1517                    ElementNo[i] = 0;
     1518                  }
     1519      walker = start;
     1520      while (walker->next != end) { // go through every atom of this element
     1521        walker = walker->next;
     1522        if (ElementNo[walker->type->Z] == 0) // new element
     1523          ElementNo[walker->type->Z] = CurrentMaxElement++;
     1524        AtomNo[walker->type->Z]++;
     1525        *out << "Ion_Type" << ElementNo[walker->type->Z] << "_" << AtomNo[walker->type->Z] << "\t"      << fixed << setprecision(9) << showpoint;
     1526        *out << Trajectories[walker].R.at(step).x[0] << "\t" << Trajectories[walker].R.at(step).x[1] << "\t" << Trajectories[walker].R.at(step).x[2];
     1527        *out << "\t" << walker->FixedIon;
     1528        if (Trajectories[walker].U.at(step).Norm() > MYEPSILON)
     1529          *out << "\t" << scientific << setprecision(6) << Trajectories[walker].U.at(step).x[0] << "\t" << Trajectories[walker].U.at(step).x[1] << "\t" << Trajectories[walker].U.at(step).x[2] << "\t";
     1530        if (Trajectories[walker].F.at(step).Norm() > MYEPSILON)
     1531          *out << "\t" << scientific << setprecision(6) << Trajectories[walker].F.at(step).x[0] << "\t" << Trajectories[walker].F.at(step).x[1] << "\t" << Trajectories[walker].F.at(step).x[2] << "\t";
     1532        *out << "\t# Number in molecule " << walker->nr << endl;
     1533      }
    15441534                }
    15451535                return true;
     
    16131603{
    16141604        atom *walker = NULL;
    1615         int AtomNo = 0, ElementNo;
     1605        int AtomNo = 0;
    16161606        time_t now;
    1617         element *runner = NULL;
    16181607
    16191608        now = time((time_t *)NULL);      // Get the system time and put it into 'now' as 'calender time'
     
    16251614        if (out != NULL) {
    16261615                *out << AtomNo << "\n\tCreated by molecuilder on " << ctime(&now);
    1627                 ElementNo = 0;
    1628                 runner = elemente->start;
    1629                 while (runner->next != elemente->end) { // go through every element
    1630                         runner = runner->next;
    1631                         if (ElementsInMolecule[runner->Z]) { // if this element got atoms
    1632                                 ElementNo++;
    1633                                 walker = start;
    1634                                 while (walker->next != end) { // go through every atom of this element
    1635                                         walker = walker->next;
    1636                                         if (walker->type == runner) { // if this atom fits to element
    1637                                                 walker->OutputXYZLine(out);
    1638                                         }
    1639                                 }
    1640                         }
    1641                 }
     1616    walker = start;
     1617    while (walker->next != end) { // go through every atom of this element
     1618      walker = walker->next;
     1619      walker->OutputXYZLine(out);
     1620    }
    16421621                return true;
    16431622        } else
Note: See TracChangeset for help on using the changeset viewer.