Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/builder.cpp

    • Property mode changed from 100644 to 100755
    rf66195 rbe90f1  
    5050using namespace std;
    5151
    52 #include "atom.hpp"
    53 #include "bond.hpp"
    5452#include "boundary.hpp"
    55 #include "config.hpp"
    56 #include "element.hpp"
    5753#include "ellipsoid.hpp"
    5854#include "helpers.hpp"
    59 #include "leastsquaremin.hpp"
    60 #include "linkedcell.hpp"
    6155#include "memoryusageobserverunittest.hpp"
    62 #include "molecule.hpp"
    63 #include "periodentafel.hpp"
    64 
     56#include "molecules.hpp"
    6557/********************************************* Subsubmenu routine ************************************/
    6658
     
    10261018      cin >> nr;
    10271019      count = 1;
    1028       for(MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
     1020      for( MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
    10291021        if (nr == (*ListRunner)->IndexNr) {
    10301022          mol = *ListRunner;
    10311023          molecules->ListOfMolecules.erase(ListRunner);
    10321024          delete(mol);
    1033           break;
    10341025        }
    10351026      break;
     
    10841075
    10851076    case 'e':
    1086       {
    1087         int src, dest;
    1088         molecule *srcmol = NULL, *destmol = NULL;
    1089         do {
    1090           cout << Verbose(0) << "Enter index of matrix molecule (the variable one): ";
    1091           cin >> src;
    1092           srcmol = molecules->ReturnIndex(src);
    1093         } while ((srcmol == NULL) && (src != -1));
    1094         do {
    1095           cout << Verbose(0) << "Enter index of molecule to merge into (the fixed one): ";
    1096           cin >> dest;
    1097           destmol = molecules->ReturnIndex(dest);
    1098         } while ((destmol == NULL) && (dest != -1));
    1099         if ((src != -1) && (dest != -1))
    1100           molecules->EmbedMerge(destmol, srcmol);
    1101       }
     1077      cout << Verbose(0) << "Not implemented yet." << endl;
    11021078      break;
    11031079
     
    13901366            cout << "\t-p <file>\tParse given xyz file and create raw config file from it." << endl;
    13911367            cout << "\t-P <file>\tParse given forces file and append as an MD step to config file via Verlet." << endl;
    1392             cout << "\t-r <id>\t\tRemove an atom with given id." << endl;
    1393             cout << "\t-R <id> <radius>\t\tRemove all atoms out of sphere around a given one." << endl;
     1368            cout << "\t-r\t\tConvert file from an old pcp syntax." << endl;
     1369            cout << "\t-R\t\tRemove all atoms out of sphere around a given one." << endl;
    13941370            cout << "\t-s x1 x2 x3\tScale all atom coordinates by this vector (x1,x2,x3)." << endl;
    13951371            cout << "\t-S <file> Store temperatures from the config file in <file>." << endl;
     
    14881464          switch(argv[argptr-1][1]) {
    14891465            case 'p':
    1490               if (ExitFlag == 0) ExitFlag = 1;
     1466              ExitFlag = 1;
    14911467              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
    14921468                ExitFlag = 255;
     
    15041480              break;
    15051481            case 'a':
    1506               if (ExitFlag == 0) ExitFlag = 1;
     1482              ExitFlag = 1;
    15071483              if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1]))) {
    15081484                ExitFlag = 255;
     
    15431519              break;
    15441520            case 'D':
    1545               if (ExitFlag == 0) ExitFlag = 1;
     1521              ExitFlag = 1;
    15461522              {
    15471523                cout << Verbose(1) << "Depth-First-Search Analysis." << endl;
     
    15761552              break;
    15771553            case 'E':
    1578               if (ExitFlag == 0) ExitFlag = 1;
     1554              ExitFlag = 1;
    15791555              if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (argv[argptr+1][0] == '-')) {
    15801556                ExitFlag = 255;
     
    15891565              break;
    15901566            case 'F':
    1591               if (ExitFlag == 0) ExitFlag = 1;
     1567              ExitFlag = 1;
    15921568              if (argptr+5 >=argc) {
    15931569                ExitFlag = 255;
     
    16271603              break;
    16281604            case 'A':
    1629               if (ExitFlag == 0) ExitFlag = 1;
     1605              ExitFlag = 1;
    16301606              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
    16311607                ExitFlag =255;
     
    16401616              break;
    16411617            case 'N':
    1642               if (ExitFlag == 0) ExitFlag = 1;
     1618              ExitFlag = 1;
    16431619              if ((argptr+1 >= argc) || (argv[argptr+1][0] == '-')){
    16441620                ExitFlag = 255;
     
    16501626                cout << Verbose(0) << "Evaluating non-convex envelope.";
    16511627                cout << Verbose(1) << "Using rolling ball of radius " << atof(argv[argptr]) << " and storing tecplot data in " << argv[argptr+1] << "." << endl;
    1652                 start = clock();
     1628                start = clock();
    16531629                LinkedCell LCList(mol, atof(argv[argptr])*2.);
    1654                 FindNonConvexBorder((ofstream *)&cout, mol, &LCList, atof(argv[argptr]), argv[argptr+1]);
     1630                FindNonConvexBorder((ofstream *)&cout, mol, &LCList, argv[argptr+1], atof(argv[argptr]));
    16551631                //FindDistributionOfEllipsoids((ofstream *)&cout, &T, &LCList, N, number, filename.c_str());
    1656                 end = clock();
    1657                 cout << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl;
     1632                end = clock();
     1633                cout << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl;
    16581634                argptr+=2;
    16591635              }
    16601636              break;
    16611637            case 'S':
    1662               if (ExitFlag == 0) ExitFlag = 1;
     1638              ExitFlag = 1;
    16631639              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
    16641640                ExitFlag = 255;
     
    16771653              break;
    16781654            case 'L':
    1679               if (ExitFlag == 0) ExitFlag = 1;
    1680               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
    1681                 ExitFlag = 255;
    1682                 cerr << "Not enough or invalid arguments given for storing tempature: -L <step0> <step1> <prefix> <identity mapping?>" << endl;
    1683               } else {
    1684                 SaveFlag = true;
    1685                 cout << Verbose(1) << "Linear interpolation between configuration " << argv[argptr] << " and " << argv[argptr+1] << "." << endl;
    1686                 if (atoi(argv[argptr+3]) == 1)
    1687                   cout << Verbose(1) << "Using Identity for the permutation map." << endl;
    1688                 if (!mol->LinearInterpolationBetweenConfiguration((ofstream *)&cout, atoi(argv[argptr]), atoi(argv[argptr+1]), argv[argptr+2], configuration, atoi(argv[argptr+3])) == 1 ? true : false)
    1689                   cout << Verbose(2) << "Could not store " << argv[argptr+2] << " files." << endl;
    1690                 else
    1691                   cout << Verbose(2) << "Steps created and " << argv[argptr+2] << " files stored." << endl;
    1692                 argptr+=4;
    1693               }
     1655              ExitFlag = 1;
     1656              SaveFlag = true;
     1657              cout << Verbose(1) << "Linear interpolation between configuration " << argv[argptr] << " and " << argv[argptr+1] << "." << endl;
     1658              if (!mol->LinearInterpolationBetweenConfiguration((ofstream *)&cout, atoi(argv[argptr]), atoi(argv[argptr+1]), argv[argptr+2], configuration))
     1659                cout << Verbose(2) << "Could not store " << argv[argptr+2] << " files." << endl;
     1660              else
     1661                cout << Verbose(2) << "Steps created and " << argv[argptr+2] << " files stored." << endl;
     1662              argptr+=3;
    16941663              break;
    16951664            case 'P':
    1696               if (ExitFlag == 0) ExitFlag = 1;
     1665              ExitFlag = 1;
    16971666              if ((argptr >= argc) || (argv[argptr][0] == '-')) {
    16981667                ExitFlag = 255;
     
    17091678              break;
    17101679            case 'R':
    1711               if (ExitFlag == 0) ExitFlag = 1;
    1712               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])))  {
     1680              ExitFlag = 1;
     1681              if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])))  {
    17131682                ExitFlag = 255;
    17141683                cerr << "Not enough or invalid arguments given for removing atoms: -R <id> <distance>" << endl;
     
    17341703              break;
    17351704            case 't':
    1736               if (ExitFlag == 0) ExitFlag = 1;
    1737               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
     1705              ExitFlag = 1;
     1706              if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
    17381707                ExitFlag = 255;
    17391708                cerr << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl;
    17401709              } else {
    1741                 if (ExitFlag == 0) ExitFlag = 1;
     1710                ExitFlag = 1;
    17421711                SaveFlag = true;
    1743                 cout << Verbose(1) << "Translating all ions by given vector." << endl;
     1712                cout << Verbose(1) << "Translating all ions to new origin." << endl;
    17441713                for (int i=NDIM;i--;)
    17451714                  x.x[i] = atof(argv[argptr+i]);
     
    17471716                argptr+=3;
    17481717              }
    1749               break;
    17501718            case 'T':
    1751               if (ExitFlag == 0) ExitFlag = 1;
    1752               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
     1719              ExitFlag = 1;
     1720              if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
    17531721                ExitFlag = 255;
    17541722                cerr << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl;
    17551723              } else {
    1756                 if (ExitFlag == 0) ExitFlag = 1;
     1724                ExitFlag = 1;
    17571725                SaveFlag = true;
    1758                 cout << Verbose(1) << "Translating all ions periodically by given vector." << endl;
     1726                cout << Verbose(1) << "Translating all ions periodically to new origin." << endl;
    17591727                for (int i=NDIM;i--;)
    17601728                  x.x[i] = atof(argv[argptr+i]);
     
    17641732              break;
    17651733            case 's':
    1766               if (ExitFlag == 0) ExitFlag = 1;
    1767               if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) ) {
     1734              ExitFlag = 1;
     1735              if ((argptr >= argc) || (!IsValidNumber(argv[argptr])) ) {
    17681736                ExitFlag = 255;
    17691737                cerr << "Not enough or invalid arguments given for scaling: -s <factor/[factor_x]> [factor_y] [factor_z]" << endl;
     
    17911759              break;
    17921760            case 'b':
    1793               if (ExitFlag == 0) ExitFlag = 1;
    1794               if ((argptr+5 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
     1761              ExitFlag = 1;
     1762              if ((argptr+5 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
    17951763                ExitFlag = 255;
    17961764                cerr << "Not enough or invalid arguments given for centering in box: -b <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
     
    18081776              break;
    18091777            case 'B':
    1810               if (ExitFlag == 0) ExitFlag = 1;
    1811               if ((argptr+5 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
     1778              ExitFlag = 1;
     1779              if ((argptr+5 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
    18121780                ExitFlag = 255;
    18131781                cerr << "Not enough or invalid arguments given for bounding in box: -B <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
     
    18251793              break;
    18261794            case 'c':
    1827               if (ExitFlag == 0) ExitFlag = 1;
    1828               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
     1795              ExitFlag = 1;
     1796              if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
    18291797                ExitFlag = 255;
    18301798                cerr << "Not enough or invalid arguments given for centering with boundary: -c <boundary_x> <boundary_y> <boundary_z>" << endl;
     
    18491817              break;
    18501818            case 'O':
    1851               if (ExitFlag == 0) ExitFlag = 1;
     1819              ExitFlag = 1;
    18521820              SaveFlag = true;
    18531821              cout << Verbose(1) << "Centering atoms on edge and setting box dimensions." << endl;
     
    18581826              break;
    18591827            case 'r':
    1860               if (ExitFlag == 0) ExitFlag = 1;
    1861               if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])))  {
    1862                 ExitFlag = 255;
    1863                 cerr << "Not enough or invalid arguments given for removing atoms: -r <id>" << endl;
    1864               } else {
    1865                 SaveFlag = true;
    1866                 cout << Verbose(1) << "Removing atom " << argv[argptr] << "." << endl;
    1867                 atom *first = mol->FindAtom(atoi(argv[argptr]));
    1868                 mol->RemoveAtom(first);
    1869                 argptr+=1;
    1870               }
     1828              ExitFlag = 1;
     1829              SaveFlag = true;
     1830              cout << Verbose(1) << "Converting config file from supposed old to new syntax." << endl;
    18711831              break;
    18721832            case 'f':
    1873               if (ExitFlag == 0) ExitFlag = 1;
    1874               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1]))) {
     1833              ExitFlag = 1;
     1834              if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1]))) {
    18751835                ExitFlag = 255;
    18761836                cerr << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl;
     
    18901850              break;
    18911851            case 'm':
    1892               if (ExitFlag == 0) ExitFlag = 1;
     1852              ExitFlag = 1;
    18931853              j = atoi(argv[argptr++]);
    18941854              if ((j<0) || (j>1)) {
     
    19041864              break;
    19051865            case 'o':
    1906               if (ExitFlag == 0) ExitFlag = 1;
    1907               if ((argptr+1 >= argc) || (argv[argptr][0] == '-')){
     1866              ExitFlag = 1;
     1867              if ((argptr >= argc) || (argv[argptr][0] == '-')){
    19081868                ExitFlag = 255;
    1909                 cerr << "Not enough or invalid arguments given for convex envelope: -o <convex output file> <non-convex output file>" << endl;
     1869                cerr << "Not enough or invalid arguments given for convex envelope: -o <tecplot output file>" << endl;
    19101870              } else {
    19111871                cout << Verbose(0) << "Evaluating volume of the convex envelope.";
    1912                 cout << Verbose(1) << "Storing tecplot convex data in " << argv[argptr] << "." << endl;
    1913                 cout << Verbose(1) << "Storing tecplot non-convex data in " << argv[argptr+1] << "." << endl;
     1872                cout << Verbose(1) << "Storing tecplot data in " << argv[argptr] << "." << endl;
    19141873                LinkedCell LCList(mol, 10.);
    19151874                //FindConvexBorder((ofstream *)&cout, mol, &LCList, argv[argptr]);
    1916                 FindNonConvexBorder((ofstream *)&cout, mol, &LCList, 5., argv[argptr+1]);
    1917 //                RemoveAllBoundaryPoints((ofstream *)&cout, mol->TesselStruct, mol, argv[argptr]);
     1875                FindNonConvexBorder((ofstream *)&cout, mol, &LCList, argv[argptr], 10.);
     1876
    19181877                double volumedifference = ConvexizeNonconvexEnvelope((ofstream *)&cout, mol->TesselStruct, mol, argv[argptr]);
    19191878                double clustervolume = VolumeOfConvexEnvelope((ofstream *)&cout, mol->TesselStruct, &configuration);
    19201879                cout << Verbose(0) << "The tesselated volume area is " << clustervolume << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl;
    19211880                cout << Verbose(0) << "The non-convex tesselated volume area is " << clustervolume-volumedifference << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl;
    1922                 argptr+=2;
     1881                argptr+=1;
    19231882              }
    19241883              break;
    19251884            case 'U':
    1926               if (ExitFlag == 0) ExitFlag = 1;
    1927               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) ) {
     1885              ExitFlag = 1;
     1886              if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) ) {
    19281887                ExitFlag = 255;
    19291888                cerr << "Not enough or invalid arguments given for suspension with specified volume: -U <volume> <density>" << endl;
     
    19341893              }
    19351894            case 'u':
    1936               if (ExitFlag == 0) ExitFlag = 1;
    1937               if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) ) {
     1895              ExitFlag = 1;
     1896              if ((argptr >= argc) || (!IsValidNumber(argv[argptr])) ) {
    19381897                if (volume != -1)
    19391898                  ExitFlag = 255;
     
    19581917              break;
    19591918            case 'd':
    1960               if (ExitFlag == 0) ExitFlag = 1;
    1961               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
     1919              ExitFlag = 1;
     1920              if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
    19621921                ExitFlag = 255;
    19631922                cerr << "Not enough or invalid arguments given for repeating cells: -d <repeat_x> <repeat_y> <repeat_z>" << endl;
     
    20732032      return 0;
    20742033      break;
    2075     case 2:  // just for -f option
    2076       delete(molecules); // also free's all molecules contained
    2077       delete(periode);
    2078       cout << Verbose(0) <<  "Maximum of allocated memory: "
    2079         << MemoryUsageObserver::getInstance()->getMaximumUsedMemory() << endl;
    2080       cout << Verbose(0) <<  "Remaining non-freed memory: "
    2081         << MemoryUsageObserver::getInstance()->getUsedMemorySize() << endl;
    2082       return 2;
    2083       break;
    20842034    default:
    20852035      break;
Note: See TracChangeset for help on using the changeset viewer.