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