Changeset a8bcea6 for src/builder.cpp


Ignore:
Timestamp:
Dec 4, 2008, 3:15:00 PM (16 years ago)
Author:
Christian Neuen <neuen@…>
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:
f714979
Parents:
f683fe
Message:

several changes, now output is created, quality unknown

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/builder.cpp

    rf683fe ra8bcea6  
    11/** \file builder.cpp
    2  * 
     2 *
    33 * By stating absolute positions or binding angles and distances atomic positions of a molecule can be constructed.
    44 * The output is the complete configuration file for PCP for direct use.
     
    66 * -# Atomic data is retrieved from a file, if not found requested and stored there for later re-use
    77 * -# step-by-step construction of the molecule beginning either at a centre of with a certain atom
    8  *   
     8 *
    99 */
    1010
    1111/*! \mainpage Molecuilder - a molecular set builder
    12  * 
     12 *
    1313 * This introductory shall briefly make aquainted with the program, helping in installing and a first run.
    14  * 
     14 *
    1515 * \section about About the Program
    16  * 
     16 *
    1717 *  Molecuilder is a short program, written in C++, that enables the construction of a coordinate set for the
    1818 *  atoms making up an molecule by the successive statement of binding angles and distances and referencing to
    1919 *  already constructed atoms.
    20  * 
     20 *
    2121 *  A configuration file may be written that is compatible to the format used by PCP - a parallel Car-Parrinello
    2222 *  molecular dynamics implementation.
    23  * 
     23 *
    2424 * \section install Installation
    25  * 
     25 *
    2626 *  Installation should without problems succeed as follows:
    2727 *  -# ./configure (or: mkdir build;mkdir run;cd build; ../configure --bindir=../run)
    2828 *  -# make
    2929 *  -# make install
    30  * 
     30 *
    3131 *  Further useful commands are
    3232 *  -# make clean uninstall: deletes .o-files and removes executable from the given binary directory\n
    33  *  -# make doxygen-doc: Creates these html pages out of the documented source 
    34  * 
     33 *  -# make doxygen-doc: Creates these html pages out of the documented source
     34 *
    3535 * \section run Running
    36  * 
     36 *
    3737 *  The program can be executed by running: ./molecuilder
    38  * 
     38 *
    3939 *  Note, that it uses a database, called "elements.db", in the executable's directory. If the file is not found,
    4040 *  it is created and any given data on elements of the periodic table will be stored therein and re-used on
    41  *  later re-execution. 
    42  * 
     41 *  later re-execution.
     42 *
    4343 * \section ref References
    44  * 
     44 *
    4545 *  For the special configuration file format, see the documentation of pcp.
    46  * 
     46 *
    4747 */
    4848
     
    8080  cout << Verbose(0) << "INPUT: ";
    8181  cin >> choice;
    82  
     82
    8383  switch (choice) {
    8484      case 'a': // absolute coordinates of atom
     
    8989        mol->AddAtom(first);  // add to molecule
    9090        break;
    91        
     91
    9292      case 'b': // relative coordinates of atom wrt to reference point
    9393        first = new atom;
     
    105105        mol->AddAtom(first);  // add to molecule
    106106        break;
    107        
     107
    108108      case 'c': // relative coordinates of atom wrt to already placed atom
    109109        first = new atom;
     
    111111        do {
    112112          if (!valid) cout << Verbose(0) << "Resulting position out of cell." << endl;
    113           second = mol->AskAtom("Enter atom number: ");               
     113          second = mol->AskAtom("Enter atom number: ");
    114114          cout << Verbose(0) << "Enter relative coordinates." << endl;
    115115          first->x.AskPosition(mol->cell_size, false);
     
    121121        mol->AddAtom(first);  // add to molecule
    122122        break;
    123      
     123
    124124      case 'd': // two atoms, two angles and a distance
    125125        first = new atom;
     
    152152          x.Copyvector(&fourth->x);
    153153          x.SubtractVector(&third->x);
    154          
     154
    155155          if (!z.SolveSystem(&x,&y,&n, b, c, a)) {
    156156            cout << Verbose(0) << "Failure solving self-dependent linear system!" << endl;
     
    167167          cout << "x: ",
    168168          x.Output((ofstream *)&cout);
    169           cout << endl;         
     169          cout << endl;
    170170          z.MakeNormalVector(&second->x,&third->x,&fourth->x);
    171171          cout << "z: ",
    172172          z.Output((ofstream *)&cout);
    173           cout << endl;         
     173          cout << endl;
    174174          y.MakeNormalVector(&x,&z);
    175175          cout << "y: ",
    176176          y.Output((ofstream *)&cout);
    177           cout << endl;         
    178          
     177          cout << endl;
     178
    179179          // rotate vector around first angle
    180180          first->x.CopyVector(&x);
     
    182182          cout << "Rotated vector: ",
    183183          first->x.Output((ofstream *)&cout);
    184           cout << endl;         
     184          cout << endl;
    185185          // remove the projection onto the rotation plane of the second angle
    186186          n.CopyVector(&y);
     
    188188          cout << "N1: ",
    189189          n.Output((ofstream *)&cout);
    190           cout << endl;         
     190          cout << endl;
    191191          first->x.SubtractVector(&n);
    192192          cout << "Subtracted vector: ",
    193193          first->x.Output((ofstream *)&cout);
    194           cout << endl;         
     194          cout << endl;
    195195          n.CopyVector(&z);
    196196          n.Scale(first->x.Projection(&z));
    197197          cout << "N2: ",
    198198          n.Output((ofstream *)&cout);
    199           cout << endl;         
     199          cout << endl;
    200200          first->x.SubtractVector(&n);
    201201          cout << "2nd subtracted vector: ",
    202202          first->x.Output((ofstream *)&cout);
    203           cout << endl;         
    204          
     203          cout << endl;
     204
    205205          // rotate another vector around second angle
    206206          n.CopyVector(&y);
     
    208208          cout << "2nd Rotated vector: ",
    209209          n.Output((ofstream *)&cout);
    210           cout << endl;         
    211          
     210          cout << endl;
     211
    212212          // add the two linear independent vectors
    213213          first->x.AddVector(&n);
    214           first->x.Normalize();         
     214          first->x.Normalize();
    215215          first->x.Scale(a);
    216216          first->x.AddVector(&second->x);
    217          
     217
    218218          cout << Verbose(0) << "resulting coordinates: ";
    219219          first->x.Output((ofstream *)&cout);
     
    241241        } while ((j != -1) && (i<128));
    242242        if (i >= 2) {
    243           first->x.LSQdistance(atoms, i);             
     243          first->x.LSQdistance(atoms, i);
    244244
    245245          first->x.Output((ofstream *)&cout);
     
    261261  Vector x, y;
    262262  char choice;  // menu choice char
    263  
     263
    264264  cout << Verbose(0) << "===========CENTER ATOMS=========================" << endl;
    265265  cout << Verbose(0) << " a - on origin" << endl;
     
    271271  cout << Verbose(0) << "INPUT: ";
    272272  cin >> choice;
    273  
     273
    274274  switch (choice) {
    275275    default:
     
    327327  cout << Verbose(0) << "INPUT: ";
    328328  cin >> choice;
    329  
     329
    330330  switch (choice) {
    331331    default:
     
    346346      second = mol->AskAtom("Enter second atom: ");
    347347
    348       n.CopyVector((const Vector *)&first->x); 
    349       n.SubtractVector((const Vector *)&second->x); 
     348      n.CopyVector((const Vector *)&first->x);
     349      n.SubtractVector((const Vector *)&second->x);
    350350      n.Normalize();
    351       break;       
     351      break;
    352352    case 'd':
    353353      char shorthand[4];
     
    363363        x.x[i] = gsl_vector_get(param.x,i);
    364364        n.x[i] = gsl_vector_get(param.x,i+NDIM);
    365       } 
     365      }
    366366      gsl_vector_free(param.x);
    367367      cout << Verbose(0) << "Offset vector: ";
     
    369369      cout << Verbose(0) << endl;
    370370      n.Normalize();
    371       break;       
     371      break;
    372372  };
    373373  cout << Verbose(0) << "Alignment vector: ";
     
    385385  Vector n;
    386386  char choice;  // menu choice char
    387  
     387
    388388  cout << Verbose(0) << "===========MIRROR ATOMS=========================" << endl;
    389389  cout << Verbose(0) << " a - state three atoms defining mirror plane" << endl;
     
    394394  cout << Verbose(0) << "INPUT: ";
    395395  cin >> choice;
    396  
     396
    397397  switch (choice) {
    398398    default:
     
    413413      second = mol->AskAtom("Enter second atom: ");
    414414
    415       n.CopyVector((const Vector *)&first->x); 
    416       n.SubtractVector((const Vector *)&second->x); 
     415      n.CopyVector((const Vector *)&first->x);
     416      n.SubtractVector((const Vector *)&second->x);
    417417      n.Normalize();
    418       break;         
     418      break;
    419419  };
    420420  cout << Verbose(0) << "Normal vector: ";
     
    433433  double tmp1, tmp2;
    434434  char choice;  // menu choice char
    435  
     435
    436436  cout << Verbose(0) << "===========REMOVE ATOMS=========================" << endl;
    437437  cout << Verbose(0) << " a - state atom for removal by number" << endl;
     
    442442  cout << Verbose(0) << "INPUT: ";
    443443  cin >> choice;
    444  
     444
    445445  switch (choice) {
    446446    default:
     
    475475          mol->RemoveAtom(first);
    476476      }
    477       break;         
     477      break;
    478478  };
    479479  //mol->Output((ofstream *)&cout);
     
    492492  int Z;
    493493  char choice;  // menu choice char
    494  
     494
    495495  cout << Verbose(0) << "===========MEASURE ATOMS=========================" << endl;
    496496  cout << Verbose(0) << " a - calculate bond length between one atom and all others" << endl;
     
    514514      for (int i=MAX_ELEMENTS;i--;)
    515515        min[i] = 0.;
    516        
    517       second = mol->start;   
     516
     517      second = mol->start;
    518518      while ((second->next != mol->end)) {
    519519        second = second->next; // advance
     
    526526        }
    527527        if ((tmp1 != 0.) && ((min[Z] == 0.) || (tmp1 < min[Z]))) min[Z] = tmp1;
    528         //cout << Verbose(0) << "Bond length between Atom " << first->nr << " and " << second->nr << ": " << tmp1 << " a.u." << endl;         
     528        //cout << Verbose(0) << "Bond length between Atom " << first->nr << " and " << second->nr << ": " << tmp1 << " a.u." << endl;
    529529      }
    530530      for (int i=MAX_ELEMENTS;i--;)
    531531        if (min[i] != 0.) cout << Verbose(0) << "Minimum Bond length between " << first->type->name << " Atom " << first->nr << " and next Ion of type " << (periode->FindElement(i))->name << ": " << min[i] << " a.u." << endl;
    532532      break;
    533      
     533
    534534    case 'b':
    535535      first = mol->AskAtom("Enter first atom: ");
     
    556556      y.SubtractVector((const Vector *)&second->x);
    557557      cout << Verbose(0) << "Bond angle between first atom Nr." << first->nr << ", central atom Nr." << second->nr << " and last atom Nr." << third->nr << ": ";
    558       cout << Verbose(0) << (acos(x.ScalarProduct((const Vector *)&y)/(y.Norm()*x.Norm()))/M_PI*180.) << " degrees" << endl;         
     558      cout << Verbose(0) << (acos(x.ScalarProduct((const Vector *)&y)/(y.Norm()*x.Norm()))/M_PI*180.) << " degrees" << endl;
    559559      break;
    560560    case 'd':
     
    600600  int Order1;
    601601  clock_t start, end;
    602  
     602
    603603  cout << Verbose(0) << "Fragmenting molecule with current connection matrix ..." << endl;
    604604  cout << Verbose(0) << "What's the desired bond order: ";
     
    609609    end = clock();
    610610    cout << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl;
    611   } else 
     611  } else
    612612    cout << Verbose(0) << "Connection matrix has not yet been generated!" << endl;
    613613};
     
    623623  atom *Walker = mol->start;
    624624  int i, comp, counter=0;
    625  
     625
    626626  // generate some KeySets
    627627  cout << "Generating KeySets." << endl;
     
    637637  cout << "Testing insertion of already present item in KeySets." << endl;
    638638  KeySetTestPair test;
    639   test = TestSets[mol->AtomCount-1].insert(Walker->nr); 
     639  test = TestSets[mol->AtomCount-1].insert(Walker->nr);
    640640  if (test.second) {
    641641    cout << Verbose(1) << "Insertion worked?!" << endl;
     
    646646  TestSets[mol->AtomCount].insert(mol->end->previous->previous->previous->nr);
    647647
    648   // constructing Graph structure 
     648  // constructing Graph structure
    649649  cout << "Generating Subgraph class." << endl;
    650650  Graph Subgraphs;
     
    657657  cout << "Testing insertion of already present item in Subgraph." << endl;
    658658  GraphTestPair test2;
    659   test2 = Subgraphs.insert(GraphPair (TestSets[mol->AtomCount],pair<int, double>(counter++, 1.))); 
     659  test2 = Subgraphs.insert(GraphPair (TestSets[mol->AtomCount],pair<int, double>(counter++, 1.)));
    660660  if (test2.second) {
    661661    cout << Verbose(1) << "Insertion worked?!" << endl;
     
    663663    cout << Verbose(1) << "Insertion rejected: Present object is " << (*(test2.first)).second.first << "." << endl;
    664664  }
    665  
     665
    666666  // show graphs
    667667  cout << "Showing Subgraph's contents, checking that it's sorted." << endl;
     
    674674      if ((*key) > comp)
    675675        cout << (*key) << " ";
    676       else 
     676      else
    677677        cout << (*key) << "! ";
    678678      comp = (*key);
     
    716716  else
    717717    cout << "failed." << endl;
    718  
     718
    719719  // and save to xyz file
    720720  if (ConfigFileName != NULL) {
     
    727727    strcat(filename, ".xyz");
    728728    output.open(filename, ios::trunc);
    729   } 
     729  }
    730730  cout << Verbose(0) << "Saving of XYZ file ";
    731731  if (mol->MDSteps <= 1) {
     
    742742  output.close();
    743743  output.clear();
    744  
     744
    745745  // and save as MPQC configuration
    746746  if (ConfigFileName != NULL)
     
    753753  else
    754754    cout << "failed." << endl;
    755  
     755
    756756  if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
    757757    cerr << "WARNING: config is found under different path then stated in config file::defaultpath!" << endl;
     
    785785  int argptr;
    786786  PathToDatabases = LocalPath;
    787  
     787
    788788  if (argc > 1) { // config file specified as option
    789789    // 1. : Parse options that just set variables or print help
     
    798798          case '?':
    799799            cout << "MoleCuilder suite" << endl << "==================" << endl << endl;
    800             cout << "Usage: " << argv[0] << "[config file] [-{acefpsthH?vfrp}] [further arguments]" << endl; 
     800            cout << "Usage: " << argv[0] << "[config file] [-{acefpsthH?vfrp}] [further arguments]" << endl;
    801801            cout << "or simply " << argv[0] << " without arguments for interactive session." << endl;
    802802            cout << "\t-a Z x1 x2 x3\tAdd new atom of element Z at coordinates (x1,x2,x3)." << endl;
     803            cout << "\t-A <source>\tCreate adjacenzy list from bonds parsed from 'dbond'-style file." <<endl;
    803804            cout << "\t-b x1 x2 x3\tCenter atoms in domain with given edge lengths of (x1,x2,x3)." << endl;
    804805            cout << "\t-c x1 x2 x3\tCenter atoms in domain with a minimum distance to boundary of (x1,x2,x3)." << endl;
     
    812813            cout << "\t-m <0/1>\tCalculate (0)/ Align in(1) PAS with greatest EV along z axis." << endl;
    813814            cout << "\t-n\tFast parsing (i.e. no trajectories are looked for)." << endl;
    814             cout << "\t-o\tGet volume of the convex envelope (and store to tecplot file)." << endl;
     815            cout << "\t-o <out>\tGet volume of the convex envelope (and store to tecplot file)." << endl;
    815816            cout << "\t-p <file>\tParse given xyz file and create raw config file from it." << endl;
    816817            cout << "\t-P <file>\tParse given forces file and append as an MD step to config file via Verlet." << endl;
    817818            cout << "\t-r\t\tConvert file from an old pcp syntax." << endl;
    818819            cout << "\t-t x1 x2 x3\tTranslate all atoms by this vector (x1,x2,x3)." << endl;
    819             cout << "\t-T <file> Store temperatures from the config file in <file>." << endl; 
     820            cout << "\t-T <file> Store temperatures from the config file in <file>." << endl;
    820821            cout << "\t-s x1 x2 x3\tScale all atom coordinates by this vector (x1,x2,x3)." << endl;
    821             cout << "\t-u rho\tsuspend in water solution and output necessary cell lengths, average density rho and repetition." << endl; 
     822            cout << "\t-u rho\tsuspend in water solution and output necessary cell lengths, average density rho and repetition." << endl;
    822823            cout << "\t-v/-V\t\tGives version information." << endl;
    823824            cout << "Note: config files must not begin with '-' !" << endl;
     
    854855        argptr++;
    855856    } while (argptr < argc);
    856    
     857
    857858    // 2. Parse the element database
    858859    if (periode->LoadPeriodentafel(PathToDatabases)) {
     
    863864      return 1;
    864865    }
    865    
     866
    866867    // 3. Find config file name and parse if possible
    867868    if (argv[1][0] != '-') {
     
    902903    } else
    903904      config_present = absent;
    904    
     905
    905906    // 4. parse again through options, now for those depending on elements db and config presence
    906907    argptr = 1;
     
    946947                    config_present = present;
    947948                } else
    948                   cerr << Verbose(1) << "Could not find the specified element." << endl; 
     949                  cerr << Verbose(1) << "Could not find the specified element." << endl;
    949950                argptr+=4;
    950951              }
     
    956957        if (config_present == present) {
    957958          switch(argv[argptr-1][1]) {
    958             case 'D': 
     959            case 'D':
    959960              ExitFlag = 1;
    960961              {
     
    10021003              }
    10031004              break;
     1005            case 'A':
     1006                ExitFlag = 1;
     1007                if ((argptr >= argc) || (argv[argptr][0] == '-')){
     1008                        ExitFlag =255;
     1009                        cerr << "Missing source file for bonds in molecule: -A <bond sourcefile>" << endl;
     1010                }
     1011                else{
     1012                        cout << "Parsing bonds from " << argv[argptr] << "." << endl;
     1013                    ifstream *input = new ifstream(argv[argptr]);
     1014                        mol->CreateAdjacencyList2((ofstream *)&cout, input);
     1015                        input->close();
     1016                }
     1017                break;
    10041018            case 'T':
    10051019              ExitFlag = 1;
     
    11681182            case 'o':
    11691183              ExitFlag = 1;
    1170               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
     1184              if ((argptr >= argc) || (argv[argptr][0] == '-')){
    11711185                ExitFlag = 255;
    11721186                cerr << "Not enough or invalid arguments given for convex envelope: -o <tecplot output file>" << endl;
    11731187              } else {
    11741188                cout << Verbose(0) << "Evaluating volume of the convex envelope.";
     1189                ofstream *output = new ofstream(argv[argptr], ios::trunc);
     1190                //$$$
    11751191                cout << Verbose(1) << "Storing tecplot data in " << argv[argptr] << "." << endl;
    1176                 ofstream *output = new ofstream(argv[argptr], ios::trunc);
    11771192                VolumeOfConvexEnvelope((ofstream *)&cout, output, &configuration, NULL, mol);
    11781193                output->close();
     
    12691284                      mol->Translate(&x);
    12701285                    }
    1271                     mol->cell_size[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] *= faktor; 
     1286                    mol->cell_size[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] *= faktor;
    12721287                  }
    12731288                }
     
    13321347  if (j == 1) return 0; // just for -v and -h options
    13331348  if (j) return j;  // something went wrong
    1334  
     1349
    13351350  // General stuff
    13361351  if (mol->cell_size[0] == 0.) {
     
    13461361  // now the main construction loop
    13471362  cout << Verbose(0) << endl << "Now comes the real construction..." << endl;
    1348   do {   
     1363  do {
    13491364    cout << Verbose(0) << endl << endl;
    13501365    cout << Verbose(0) << "============Element list=======================" << endl;
     
    13651380    cout << Verbose(0) << "-----------------------------------------------" << endl;
    13661381    cout << Verbose(0) << "d - duplicate molecule/periodic cell" << endl;
    1367     cout << Verbose(0) << "i - realign molecule" << endl; 
    1368     cout << Verbose(0) << "m - mirror all molecules" << endl; 
     1382    cout << Verbose(0) << "i - realign molecule" << endl;
     1383    cout << Verbose(0) << "m - mirror all molecules" << endl;
    13691384    cout << Verbose(0) << "t - translate molecule by vector" << endl;
    13701385    cout << Verbose(0) << "c - scale by unit transformation" << endl;
     
    13771392    cout << Verbose(0) << "Input: ";
    13781393    cin >> choice;
    1379    
     1394
    13801395    switch (choice) {
    13811396      default:
    13821397      case 'a': // add atom
    13831398        AddAtoms(periode, mol);
    1384         choice = 'a'; 
    1385         break;
    1386      
     1399        choice = 'a';
     1400        break;
     1401
    13871402      case 'b': // scale a bond
    13881403        cout << Verbose(0) << "Scaling bond length between two atoms." << endl;
     
    14001415        }
    14011416        //cout << Verbose(0) << "New coordinates of Atom " << second->nr << " are: ";
    1402         //second->Output(second->type->No, 1, (ofstream *)&cout);       
    1403         break;
    1404 
    1405       case 'c': // unit scaling of the metric 
     1417        //second->Output(second->type->No, 1, (ofstream *)&cout);
     1418        break;
     1419
     1420      case 'c': // unit scaling of the metric
    14061421       cout << Verbose(0) << "Angstroem -> Bohrradius: 1.8897261\t\tBohrradius -> Angstroem: 0.52917721" << endl;
    14071422       cout << Verbose(0) << "Enter three factors: ";
     
    14141429       delete[](factor);
    14151430       break;
    1416        
     1431
    14171432      case 'd': // duplicate the periodic cell along a given axis, given times
    14181433        cout << Verbose(0) << "State the axis [(+-)123]: ";
     
    14201435        cout << Verbose(0) << "State the factor: ";
    14211436        cin >> faktor;
    1422        
     1437
    14231438        mol->CountAtoms((ofstream *)&cout);  // recount atoms
    14241439        if (mol->AtomCount != 0) {  // if there is more than none
     
    14611476            mol->Translate(&x);
    14621477          }
    1463           mol->cell_size[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] *= faktor; 
     1478          mol->cell_size[(abs(axis) == 2) ? 2 : ((abs(axis) == 3) ? 5 : 0)] *= faktor;
    14641479        }
    14651480        break;
    1466      
     1481
    14671482      case 'e': // edit each field of the configuration
    14681483       configuration.Edit(mol);
    14691484       break;
    1470  
     1485
    14711486      case 'f':
    14721487        FragmentAtoms(mol, &configuration);
    14731488        break;
    1474        
     1489
    14751490      case 'g': // center the atoms
    14761491        CenterAtoms(mol);
    14771492        break;
    1478        
    1479       case 'i': // align all atoms 
     1493
     1494      case 'i': // align all atoms
    14801495        AlignAtoms(periode, mol);
    14811496        break;
     
    14881503        MirrorAtoms(mol);
    14891504        break;
    1490        
     1505
    14911506      case 'o': // create the connection matrix
    14921507        {
     
    15091524        }
    15101525        break;
    1511        
     1526
    15121527      case 'p': // parse and XYZ file
    15131528        cout << Verbose(0) << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;
     
    15181533        break;
    15191534
    1520       case 'q': // quit 
    1521         break;
    1522        
     1535      case 'q': // quit
     1536        break;
     1537
    15231538      case 'r': // remove atom
    1524         RemoveAtoms(mol);       
    1525         break;
    1526        
     1539        RemoveAtoms(mol);
     1540        break;
     1541
    15271542      case 's': // save to config file
    15281543        SaveConfig(ConfigFileName, &configuration, periode, mol);
     
    15301545
    15311546      case 't': // translate all atoms
    1532        cout << Verbose(0) << "Enter translation vector." << endl;       
     1547       cout << Verbose(0) << "Enter translation vector." << endl;
    15331548       x.AskPosition(mol->cell_size,0);
    15341549       mol->Translate((const Vector *)&x);
    15351550       break;
    1536  
     1551
    15371552      case 'T':
    15381553        testroutine(mol);
    15391554        break;
    1540      
     1555
    15411556      case 'u': // change an atom's element
    15421557        first = NULL;
     
    15451560          cin >> Z;
    15461561        } while ((first = mol->FindAtom(Z)) == NULL);
    1547         cout << Verbose(0) << "New element by atomic number Z: ";       
     1562        cout << Verbose(0) << "New element by atomic number Z: ";
    15481563        cin >> Z;
    15491564        first->type = periode->FindElement(Z);
    1550         cout << Verbose(0) << "Atom " << first->nr << "'s element is " << first->type->name << "." << endl;   
     1565        cout << Verbose(0) << "Atom " << first->nr << "'s element is " << first->type->name << "." << endl;
    15511566        break;
    15521567    };
    15531568  } while (choice != 'q');
    1554  
     1569
    15551570  // save element data base
    15561571  if (periode->StorePeriodentafel(ElementsFileName)) //ElementsFileName
Note: See TracChangeset for help on using the changeset viewer.