Changes in src/builder.cpp [f66195:be90f1]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/builder.cpp
-
Property mode
changed from
100644
to100755
rf66195 rbe90f1 50 50 using namespace std; 51 51 52 #include "atom.hpp"53 #include "bond.hpp"54 52 #include "boundary.hpp" 55 #include "config.hpp"56 #include "element.hpp"57 53 #include "ellipsoid.hpp" 58 54 #include "helpers.hpp" 59 #include "leastsquaremin.hpp"60 #include "linkedcell.hpp"61 55 #include "memoryusageobserverunittest.hpp" 62 #include "molecule.hpp" 63 #include "periodentafel.hpp" 64 56 #include "molecules.hpp" 65 57 /********************************************* Subsubmenu routine ************************************/ 66 58 … … 1026 1018 cin >> nr; 1027 1019 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++) 1029 1021 if (nr == (*ListRunner)->IndexNr) { 1030 1022 mol = *ListRunner; 1031 1023 molecules->ListOfMolecules.erase(ListRunner); 1032 1024 delete(mol); 1033 break;1034 1025 } 1035 1026 break; … … 1084 1075 1085 1076 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; 1102 1078 break; 1103 1079 … … 1390 1366 cout << "\t-p <file>\tParse given xyz file and create raw config file from it." << endl; 1391 1367 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; 1394 1370 cout << "\t-s x1 x2 x3\tScale all atom coordinates by this vector (x1,x2,x3)." << endl; 1395 1371 cout << "\t-S <file> Store temperatures from the config file in <file>." << endl; … … 1488 1464 switch(argv[argptr-1][1]) { 1489 1465 case 'p': 1490 if (ExitFlag == 0)ExitFlag = 1;1466 ExitFlag = 1; 1491 1467 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1492 1468 ExitFlag = 255; … … 1504 1480 break; 1505 1481 case 'a': 1506 if (ExitFlag == 0)ExitFlag = 1;1482 ExitFlag = 1; 1507 1483 if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1]))) { 1508 1484 ExitFlag = 255; … … 1543 1519 break; 1544 1520 case 'D': 1545 if (ExitFlag == 0)ExitFlag = 1;1521 ExitFlag = 1; 1546 1522 { 1547 1523 cout << Verbose(1) << "Depth-First-Search Analysis." << endl; … … 1576 1552 break; 1577 1553 case 'E': 1578 if (ExitFlag == 0)ExitFlag = 1;1554 ExitFlag = 1; 1579 1555 if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (argv[argptr+1][0] == '-')) { 1580 1556 ExitFlag = 255; … … 1589 1565 break; 1590 1566 case 'F': 1591 if (ExitFlag == 0)ExitFlag = 1;1567 ExitFlag = 1; 1592 1568 if (argptr+5 >=argc) { 1593 1569 ExitFlag = 255; … … 1627 1603 break; 1628 1604 case 'A': 1629 if (ExitFlag == 0)ExitFlag = 1;1605 ExitFlag = 1; 1630 1606 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1631 1607 ExitFlag =255; … … 1640 1616 break; 1641 1617 case 'N': 1642 if (ExitFlag == 0)ExitFlag = 1;1618 ExitFlag = 1; 1643 1619 if ((argptr+1 >= argc) || (argv[argptr+1][0] == '-')){ 1644 1620 ExitFlag = 255; … … 1650 1626 cout << Verbose(0) << "Evaluating non-convex envelope."; 1651 1627 cout << Verbose(1) << "Using rolling ball of radius " << atof(argv[argptr]) << " and storing tecplot data in " << argv[argptr+1] << "." << endl; 1652 1628 start = clock(); 1653 1629 LinkedCell LCList(mol, atof(argv[argptr])*2.); 1654 FindNonConvexBorder((ofstream *)&cout, mol, &LCList, a tof(argv[argptr]), argv[argptr+1]);1630 FindNonConvexBorder((ofstream *)&cout, mol, &LCList, argv[argptr+1], atof(argv[argptr])); 1655 1631 //FindDistributionOfEllipsoids((ofstream *)&cout, &T, &LCList, N, number, filename.c_str()); 1656 1657 1632 end = clock(); 1633 cout << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl; 1658 1634 argptr+=2; 1659 1635 } 1660 1636 break; 1661 1637 case 'S': 1662 if (ExitFlag == 0)ExitFlag = 1;1638 ExitFlag = 1; 1663 1639 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1664 1640 ExitFlag = 255; … … 1677 1653 break; 1678 1654 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; 1694 1663 break; 1695 1664 case 'P': 1696 if (ExitFlag == 0)ExitFlag = 1;1665 ExitFlag = 1; 1697 1666 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1698 1667 ExitFlag = 255; … … 1709 1678 break; 1710 1679 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]))) { 1713 1682 ExitFlag = 255; 1714 1683 cerr << "Not enough or invalid arguments given for removing atoms: -R <id> <distance>" << endl; … … 1734 1703 break; 1735 1704 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])) ) { 1738 1707 ExitFlag = 255; 1739 1708 cerr << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl; 1740 1709 } else { 1741 if (ExitFlag == 0)ExitFlag = 1;1710 ExitFlag = 1; 1742 1711 SaveFlag = true; 1743 cout << Verbose(1) << "Translating all ions by given vector." << endl;1712 cout << Verbose(1) << "Translating all ions to new origin." << endl; 1744 1713 for (int i=NDIM;i--;) 1745 1714 x.x[i] = atof(argv[argptr+i]); … … 1747 1716 argptr+=3; 1748 1717 } 1749 break;1750 1718 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])) ) { 1753 1721 ExitFlag = 255; 1754 1722 cerr << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl; 1755 1723 } else { 1756 if (ExitFlag == 0)ExitFlag = 1;1724 ExitFlag = 1; 1757 1725 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; 1759 1727 for (int i=NDIM;i--;) 1760 1728 x.x[i] = atof(argv[argptr+i]); … … 1764 1732 break; 1765 1733 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])) ) { 1768 1736 ExitFlag = 255; 1769 1737 cerr << "Not enough or invalid arguments given for scaling: -s <factor/[factor_x]> [factor_y] [factor_z]" << endl; … … 1791 1759 break; 1792 1760 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])) ) { 1795 1763 ExitFlag = 255; 1796 1764 cerr << "Not enough or invalid arguments given for centering in box: -b <xx> <xy> <xz> <yy> <yz> <zz>" << endl; … … 1808 1776 break; 1809 1777 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])) ) { 1812 1780 ExitFlag = 255; 1813 1781 cerr << "Not enough or invalid arguments given for bounding in box: -B <xx> <xy> <xz> <yy> <yz> <zz>" << endl; … … 1825 1793 break; 1826 1794 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])) ) { 1829 1797 ExitFlag = 255; 1830 1798 cerr << "Not enough or invalid arguments given for centering with boundary: -c <boundary_x> <boundary_y> <boundary_z>" << endl; … … 1849 1817 break; 1850 1818 case 'O': 1851 if (ExitFlag == 0)ExitFlag = 1;1819 ExitFlag = 1; 1852 1820 SaveFlag = true; 1853 1821 cout << Verbose(1) << "Centering atoms on edge and setting box dimensions." << endl; … … 1858 1826 break; 1859 1827 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; 1871 1831 break; 1872 1832 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]))) { 1875 1835 ExitFlag = 255; 1876 1836 cerr << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl; … … 1890 1850 break; 1891 1851 case 'm': 1892 if (ExitFlag == 0)ExitFlag = 1;1852 ExitFlag = 1; 1893 1853 j = atoi(argv[argptr++]); 1894 1854 if ((j<0) || (j>1)) { … … 1904 1864 break; 1905 1865 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] == '-')){ 1908 1868 ExitFlag = 255; 1909 cerr << "Not enough or invalid arguments given for convex envelope: -o < convex output file> <non-convexoutput file>" << endl;1869 cerr << "Not enough or invalid arguments given for convex envelope: -o <tecplot output file>" << endl; 1910 1870 } else { 1911 1871 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; 1914 1873 LinkedCell LCList(mol, 10.); 1915 1874 //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 1918 1877 double volumedifference = ConvexizeNonconvexEnvelope((ofstream *)&cout, mol->TesselStruct, mol, argv[argptr]); 1919 1878 double clustervolume = VolumeOfConvexEnvelope((ofstream *)&cout, mol->TesselStruct, &configuration); 1920 1879 cout << Verbose(0) << "The tesselated volume area is " << clustervolume << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl; 1921 1880 cout << Verbose(0) << "The non-convex tesselated volume area is " << clustervolume-volumedifference << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl; 1922 argptr+= 2;1881 argptr+=1; 1923 1882 } 1924 1883 break; 1925 1884 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])) ) { 1928 1887 ExitFlag = 255; 1929 1888 cerr << "Not enough or invalid arguments given for suspension with specified volume: -U <volume> <density>" << endl; … … 1934 1893 } 1935 1894 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])) ) { 1938 1897 if (volume != -1) 1939 1898 ExitFlag = 255; … … 1958 1917 break; 1959 1918 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])) ) { 1962 1921 ExitFlag = 255; 1963 1922 cerr << "Not enough or invalid arguments given for repeating cells: -d <repeat_x> <repeat_y> <repeat_z>" << endl; … … 2073 2032 return 0; 2074 2033 break; 2075 case 2: // just for -f option2076 delete(molecules); // also free's all molecules contained2077 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;2084 2034 default: 2085 2035 break; -
Property mode
changed from
Note:
See TracChangeset
for help on using the changeset viewer.