Changes in src/builder.cpp [112b09:980dd6]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/builder.cpp
r112b09 r980dd6 47 47 */ 48 48 49 #include "Helpers/MemDebug.hpp"50 49 51 50 #include <boost/bind.hpp> … … 85 84 #include "version.h" 86 85 #include "World.hpp" 87 86 #include "Helpers/MemDebug.hpp" 88 87 89 88 /********************************************* Subsubmenu routine ************************************/ … … 1531 1530 break; 1532 1531 case 'v': 1533 setVerbosity(atoi(argv[argptr])); 1534 ArgcList.insert(argptr-1); 1535 ArgcList.insert(argptr); 1536 argptr++; 1532 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1533 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for specifying verbosity: -v <level>" << endl); 1534 performCriticalExit(); 1535 } else { 1536 setVerbosity(atoi(argv[argptr])); 1537 ArgcList.insert(argptr-1); 1538 ArgcList.insert(argptr); 1539 argptr++; 1540 } 1537 1541 break; 1538 1542 case 'V': … … 1541 1545 break; 1542 1546 case 'B': 1543 ArgcList.insert(argptr-1);1544 ArgcList.insert(argptr);1545 ArgcList.insert(argptr+1);1546 ArgcList.insert(argptr+2);1547 ArgcList.insert(argptr+3);1548 ArgcList.insert(argptr+4);1549 ArgcList.insert(argptr+5);1550 argptr+=6;1551 1547 if (ExitFlag == 0) ExitFlag = 1; 1548 if ((argptr+5 >= argc)) { 1549 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for setting Box: -B <xx> <<xy> <<xz> <yy> <yz> <zz>" << endl); 1550 performCriticalExit(); 1551 } else { 1552 ArgcList.insert(argptr-1); 1553 ArgcList.insert(argptr); 1554 ArgcList.insert(argptr+1); 1555 ArgcList.insert(argptr+2); 1556 ArgcList.insert(argptr+3); 1557 ArgcList.insert(argptr+4); 1558 ArgcList.insert(argptr+5); 1559 argptr+=6; 1560 } 1552 1561 break; 1553 1562 case 'e': … … 1556 1565 performCriticalExit(); 1557 1566 } else { 1558 DoLog(0) && (Log() << Verbose(0) << "Using " << argv[argptr] << " as elements database." << endl); 1559 strncpy (configuration.databasepath, argv[argptr], MAXSTRINGSIZE-1); 1560 DatabasePathGiven = true; 1567 ArgcList.insert(argptr-1); 1568 ArgcList.insert(argptr); 1561 1569 argptr+=1; 1562 1570 } … … 1567 1575 performCriticalExit(); 1568 1576 } else { 1569 BondGraphFileName = argv[argptr];1570 DoLog(0) && (Log() << Verbose(0) << "Using " << BondGraphFileName << " as bond length table." << endl);1577 ArgcList.insert(argptr-1); 1578 ArgcList.insert(argptr); 1571 1579 argptr+=1; 1572 1580 } … … 1578 1586 performCriticalExit(); 1579 1587 } else { 1580 configuration.basis = argv[argptr];1581 DoLog(1) && (Log() << Verbose(1) << "Setting MPQC basis to " << configuration.basis << "." << endl);1588 ArgcList.insert(argptr-1); 1589 ArgcList.insert(argptr); 1582 1590 argptr+=1; 1583 1591 } 1584 1592 break; 1585 1593 case 'n': 1586 DoLog(0) && (Log() << Verbose(0) << "I won't parse trajectories." << endl); 1587 configuration.FastParsing = true; 1594 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1595 ExitFlag = 255; 1596 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for setting fast-parsing: -n <0/1>" << endl); 1597 performCriticalExit(); 1598 } else { 1599 ArgcList.insert(argptr-1); 1600 ArgcList.insert(argptr); 1601 argptr+=1; 1602 } 1588 1603 break; 1589 1604 case 'X': 1590 { 1591 World::getInstance().setDefaultName(argv[argptr]); 1592 DoLog(0) && (Log() << Verbose(0) << "Default name of new molecules set to " << World::getInstance().getDefaultName() << "." << endl); 1605 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1606 ExitFlag = 255; 1607 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for setting default molecule name: -X <name>" << endl); 1608 performCriticalExit(); 1609 } else { 1610 ArgcList.insert(argptr-1); 1611 ArgcList.insert(argptr); 1612 argptr+=1; 1593 1613 } 1594 1614 break; … … 1601 1621 } while (argptr < argc); 1602 1622 1603 // 3a. Parse the element database1604 if (DatabasePathGiven)1605 if (periode->LoadPeriodentafel(configuration.databasepath)) {1606 DoLog(0) && (Log() << Verbose(0) << "Element list loaded successfully." << endl);1607 //periode->Output();1608 } else {1609 DoLog(0) && (Log() << Verbose(0) << "Element list loading failed." << endl);1610 return 1;1611 }1612 1623 // 3b. Find config file name and parse if possible, also BondGraphFileName 1613 1624 if (argv[1][0] != '-') { … … 1664 1675 molecules->insert(mol); 1665 1676 } 1666 if (configuration.BG == NULL) {1667 configuration.BG = new BondGraph(configuration.GetIsAngstroem());1668 if ((!BondGraphFileName.empty()) && (configuration.BG->LoadBondLengthTable(BondGraphFileName))) {1669 DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);1670 } else {1671 DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);1672 }1673 }1674 1677 1675 1678 // 4. parse again through options, now for those depending on elements db and config presence … … 1700 1703 case 'a': 1701 1704 if (ExitFlag == 0) ExitFlag = 1; 1702 if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3]))) {1705 if ((argptr+4 >= argc) || (argv[argptr][0] == '-')) { 1703 1706 ExitFlag = 255; 1704 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for adding atom: -a <element><x> <y> <z>" << endl);1707 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough arguments for adding atom: -a <Z> --position <x> <y> <z>" << endl); 1705 1708 performCriticalExit(); 1706 1709 } else { 1707 SaveFlag = true; 1708 Log() << Verbose(1) << "Adding new atom with element " << argv[argptr] << " at (" << argv[argptr+1] << "," << argv[argptr+2] << "," << argv[argptr+3] << "), "; 1709 first = World::getInstance().createAtom(); 1710 first->type = periode->FindElement(atoi(argv[argptr])); 1711 if (first->type != NULL) 1712 DoLog(2) && (Log() << Verbose(2) << "found element " << first->type->name << endl); 1713 for (int i=NDIM;i--;) 1714 first->x[i] = atof(argv[argptr+1+i]); 1715 if (first->type != NULL) { 1716 mol->AddAtom(first); // add to molecule 1717 if ((configPresent == empty) && (mol->getAtomCount() != 0)) 1718 configPresent = present; 1719 } else 1720 DoeLog(1) && (eLog()<< Verbose(1) << "Could not find the specified element." << endl); 1721 argptr+=4; 1710 ArgcList.insert(argptr-1); 1711 ArgcList.insert(argptr); 1712 ArgcList.insert(argptr+1); 1713 ArgcList.insert(argptr+2); 1714 ArgcList.insert(argptr+3); 1715 ArgcList.insert(argptr+4); 1716 argptr+=5; 1722 1717 } 1723 1718 break; … … 1730 1725 case 'D': 1731 1726 if (ExitFlag == 0) ExitFlag = 1; 1732 { 1733 DoLog(1) && (Log() << Verbose(1) << "Depth-First-Search Analysis." << endl); 1734 MoleculeLeafClass *Subgraphs = NULL; // list of subgraphs from DFS analysis 1735 int *MinimumRingSize = new int[mol->getAtomCount()]; 1736 atom ***ListOfLocalAtoms = NULL; 1737 class StackClass<bond *> *BackEdgeStack = NULL; 1738 class StackClass<bond *> *LocalBackEdgeStack = NULL; 1739 mol->CreateAdjacencyList(atof(argv[argptr]), configuration.GetIsAngstroem(), &BondGraph::CovalentMinMaxDistance, NULL); 1740 Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack); 1741 if (Subgraphs != NULL) { 1742 int FragmentCounter = 0; 1743 while (Subgraphs->next != NULL) { 1744 Subgraphs = Subgraphs->next; 1745 Subgraphs->FillBondStructureFromReference(mol, FragmentCounter, ListOfLocalAtoms, false); // we want to keep the created ListOfLocalAtoms 1746 LocalBackEdgeStack = new StackClass<bond *> (Subgraphs->Leaf->BondCount); 1747 Subgraphs->Leaf->PickLocalBackEdges(ListOfLocalAtoms[FragmentCounter], BackEdgeStack, LocalBackEdgeStack); 1748 Subgraphs->Leaf->CyclicStructureAnalysis(LocalBackEdgeStack, MinimumRingSize); 1749 delete(LocalBackEdgeStack); 1750 delete(Subgraphs->previous); 1751 FragmentCounter++; 1752 } 1753 delete(Subgraphs); 1754 for (int i=0;i<FragmentCounter;i++) 1755 delete[](ListOfLocalAtoms[i]); 1756 delete[](ListOfLocalAtoms); 1757 } 1758 delete(BackEdgeStack); 1759 delete[](MinimumRingSize); 1760 } 1761 //argptr+=1; 1727 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1728 ExitFlag = 255; 1729 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for depth-first-search analysis: -D <max. bond distance>" << endl); 1730 performCriticalExit(); 1731 } else { 1732 ArgcList.insert(argptr-1); 1733 ArgcList.insert(argptr); 1734 argptr+=1; 1735 } 1762 1736 break; 1763 1737 case 'I': 1764 1738 DoLog(1) && (Log() << Verbose(1) << "Dissecting molecular system into a set of disconnected subgraphs ... " << endl); 1765 // @TODO rather do the dissection afterwards 1766 molecules->DissectMoleculeIntoConnectedSubgraphs(periode, &configuration); 1767 mol = NULL; 1768 if (molecules->ListOfMolecules.size() != 0) { 1769 for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++) 1770 if ((*ListRunner)->ActiveFlag) { 1771 mol = *ListRunner; 1772 break; 1773 } 1774 } 1775 if ((mol == NULL) && (!molecules->ListOfMolecules.empty())) { 1776 mol = *(molecules->ListOfMolecules.begin()); 1777 if (mol != NULL) 1778 mol->ActiveFlag = true; 1779 } 1739 ArgcList.insert(argptr-1); 1740 argptr+=0; 1780 1741 break; 1781 1742 case 'C': 1782 1743 { 1783 int ranges[3] = {1, 1, 1};1784 bool periodic = (argv[argptr-1][2] =='p');1785 1744 if (ExitFlag == 0) ExitFlag = 1; 1786 if ((argptr >= argc)) {1745 if ((argptr+11 >= argc)) { 1787 1746 ExitFlag = 255; 1788 1747 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C[p] <type: E/P/S> [more params] <output> <bin output> <BinStart> <BinEnd>" << endl); … … 1791 1750 switch(argv[argptr][0]) { 1792 1751 case 'E': 1793 { 1794 if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+2])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-')) { 1795 ExitFlag = 255; 1796 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C E <Z1> <Z2> <output> <bin output> <binstart> <binend>" << endl); 1797 performCriticalExit(); 1798 } else { 1799 ofstream output(argv[argptr+3]); 1800 ofstream binoutput(argv[argptr+4]); 1801 const double BinStart = atof(argv[argptr+5]); 1802 const double BinEnd = atof(argv[argptr+6]); 1803 1804 const element *elemental = periode->FindElement((const int) atoi(argv[argptr+1])); 1805 const element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+2])); 1806 PairCorrelationMap *correlationmap = NULL; 1807 if (periodic) 1808 correlationmap = PeriodicPairCorrelation(molecules, elemental, elemental2, ranges); 1809 else 1810 correlationmap = PairCorrelation(molecules, elemental, elemental2); 1811 OutputPairCorrelation(&output, correlationmap); 1812 BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd ); 1813 OutputCorrelation ( &binoutput, binmap ); 1814 output.close(); 1815 binoutput.close(); 1816 delete(binmap); 1817 delete(correlationmap); 1818 argptr+=7; 1819 } 1820 } 1752 ArgcList.insert(argptr-1); 1753 ArgcList.insert(argptr); 1754 ArgcList.insert(argptr+1); 1755 ArgcList.insert(argptr+2); 1756 ArgcList.insert(argptr+3); 1757 ArgcList.insert(argptr+4); 1758 ArgcList.insert(argptr+5); 1759 ArgcList.insert(argptr+6); 1760 ArgcList.insert(argptr+7); 1761 ArgcList.insert(argptr+8); 1762 ArgcList.insert(argptr+9); 1763 ArgcList.insert(argptr+10); 1764 ArgcList.insert(argptr+11); 1765 argptr+=12; 1821 1766 break; 1822 1767 1823 1768 case 'P': 1824 { 1825 if ((argptr+8 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+7])) || (!IsValidNumber(argv[argptr+8])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-') || (argv[argptr+5][0] == '-') || (argv[argptr+6][0] == '-')) { 1826 ExitFlag = 255; 1827 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C P <Z1> <x> <y> <z> <output> <bin output> <binstart> <binend>" << endl); 1828 performCriticalExit(); 1829 } else { 1830 ofstream output(argv[argptr+5]); 1831 ofstream binoutput(argv[argptr+6]); 1832 const double BinStart = atof(argv[argptr+7]); 1833 const double BinEnd = atof(argv[argptr+8]); 1834 1835 const element *elemental = periode->FindElement((const int) atoi(argv[argptr+1])); 1836 Vector *Point = new Vector((const double) atof(argv[argptr+1]),(const double) atof(argv[argptr+2]),(const double) atof(argv[argptr+3])); 1837 CorrelationToPointMap *correlationmap = NULL; 1838 if (periodic) 1839 correlationmap = PeriodicCorrelationToPoint(molecules, elemental, Point, ranges); 1840 else 1841 correlationmap = CorrelationToPoint(molecules, elemental, Point); 1842 OutputCorrelationToPoint(&output, correlationmap); 1843 BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd ); 1844 OutputCorrelation ( &binoutput, binmap ); 1845 output.close(); 1846 binoutput.close(); 1847 delete(Point); 1848 delete(binmap); 1849 delete(correlationmap); 1850 argptr+=9; 1851 } 1852 } 1769 ArgcList.insert(argptr-1); 1770 ArgcList.insert(argptr); 1771 ArgcList.insert(argptr+1); 1772 ArgcList.insert(argptr+2); 1773 ArgcList.insert(argptr+3); 1774 ArgcList.insert(argptr+4); 1775 ArgcList.insert(argptr+5); 1776 ArgcList.insert(argptr+6); 1777 ArgcList.insert(argptr+7); 1778 ArgcList.insert(argptr+8); 1779 ArgcList.insert(argptr+9); 1780 ArgcList.insert(argptr+10); 1781 ArgcList.insert(argptr+11); 1782 ArgcList.insert(argptr+12); 1783 ArgcList.insert(argptr+13); 1784 ArgcList.insert(argptr+14); 1785 argptr+=15; 1853 1786 break; 1854 1787 1855 1788 case 'S': 1856 { 1857 if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) { 1858 ExitFlag = 255; 1859 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output> <BinWidth> <BinStart> <BinEnd>" << endl); 1860 performCriticalExit(); 1861 } else { 1862 ofstream output(argv[argptr+2]); 1863 ofstream binoutput(argv[argptr+3]); 1864 const double radius = 4.; 1865 const double BinWidth = atof(argv[argptr+4]); 1866 const double BinStart = atof(argv[argptr+5]); 1867 const double BinEnd = atof(argv[argptr+6]); 1868 double LCWidth = 20.; 1869 if (BinEnd > 0) { 1870 if (BinEnd > 2.*radius) 1871 LCWidth = BinEnd; 1872 else 1873 LCWidth = 2.*radius; 1874 } 1875 1876 // get the boundary 1877 class molecule *Boundary = NULL; 1878 class Tesselation *TesselStruct = NULL; 1879 const LinkedCell *LCList = NULL; 1880 // find biggest molecule 1881 int counter = 0; 1882 for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) { 1883 if ((Boundary == NULL) || (Boundary->getAtomCount() < (*BigFinder)->getAtomCount())) { 1884 Boundary = *BigFinder; 1885 } 1886 counter++; 1887 } 1888 bool *Actives = new bool[counter]; 1889 counter = 0; 1890 for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) { 1891 Actives[counter++] = (*BigFinder)->ActiveFlag; 1892 (*BigFinder)->ActiveFlag = (*BigFinder == Boundary) ? false : true; 1893 } 1894 LCList = new LinkedCell(Boundary, LCWidth); 1895 const element *elemental = periode->FindElement((const int) atoi(argv[argptr+1])); 1896 FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL); 1897 CorrelationToSurfaceMap *surfacemap = NULL; 1898 if (periodic) 1899 surfacemap = PeriodicCorrelationToSurface( molecules, elemental, TesselStruct, LCList, ranges); 1900 else 1901 surfacemap = CorrelationToSurface( molecules, elemental, TesselStruct, LCList); 1902 OutputCorrelationToSurface(&output, surfacemap); 1903 // check whether radius was appropriate 1904 { 1905 double start; double end; 1906 GetMinMax( surfacemap, start, end); 1907 if (LCWidth < end) 1908 DoeLog(1) && (eLog()<< Verbose(1) << "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << "." << endl); 1909 } 1910 BinPairMap *binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd ); 1911 OutputCorrelation ( &binoutput, binmap ); 1912 output.close(); 1913 binoutput.close(); 1914 counter = 0; 1915 for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) 1916 (*BigFinder)->ActiveFlag = Actives[counter++]; 1917 delete[](Actives); 1918 delete(LCList); 1919 delete(TesselStruct); 1920 delete(binmap); 1921 delete(surfacemap); 1922 argptr+=7; 1923 } 1924 } 1789 ArgcList.insert(argptr-1); 1790 ArgcList.insert(argptr); 1791 ArgcList.insert(argptr+1); 1792 ArgcList.insert(argptr+2); 1793 ArgcList.insert(argptr+3); 1794 ArgcList.insert(argptr+4); 1795 ArgcList.insert(argptr+5); 1796 ArgcList.insert(argptr+6); 1797 ArgcList.insert(argptr+7); 1798 ArgcList.insert(argptr+8); 1799 ArgcList.insert(argptr+9); 1800 ArgcList.insert(argptr+10); 1801 ArgcList.insert(argptr+11); 1802 ArgcList.insert(argptr+12); 1803 ArgcList.insert(argptr+13); 1804 ArgcList.insert(argptr+14); 1805 argptr+=15; 1925 1806 break; 1926 1807 … … 1936 1817 case 'E': 1937 1818 if (ExitFlag == 0) ExitFlag = 1; 1938 if ((argptr+ 1 >= argc) || (!IsValidNumber(argv[argptr])) || (argv[argptr+1][0] == '-')) {1819 if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr]))) { 1939 1820 ExitFlag = 255; 1940 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for changing element: -E <atom nr.> <element>" << endl);1821 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for changing element: -E <atom nr.> --element <Z>" << endl); 1941 1822 performCriticalExit(); 1942 1823 } else { 1943 mol->getAtomCount(); 1944 SaveFlag = true; 1945 DoLog(1) && (Log() << Verbose(1) << "Changing atom " << argv[argptr] << " to element " << argv[argptr+1] << "." << endl); 1946 first = mol->FindAtom(atoi(argv[argptr])); 1947 first->type = periode->FindElement(atoi(argv[argptr+1])); 1948 argptr+=2; 1824 ArgcList.insert(argptr-1); 1825 ArgcList.insert(argptr); 1826 ArgcList.insert(argptr+1); 1827 ArgcList.insert(argptr+2); 1828 argptr+=3; 1949 1829 } 1950 1830 break; 1951 1831 case 'F': 1952 1832 if (ExitFlag == 0) ExitFlag = 1; 1953 MaxDistance = -1; 1954 if (argv[argptr-1][2] == 'F') { // option is -FF? 1955 // fetch first argument as max distance to surface 1956 MaxDistance = atof(argv[argptr++]); 1957 DoLog(0) && (Log() << Verbose(0) << "Filling with maximum layer distance of " << MaxDistance << "." << endl); 1958 } 1959 if ((argptr+7 >=argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+7]))) { 1833 if ((argptr+12 >= argc) || (argv[argptr][0] == '-')) { 1960 1834 ExitFlag = 255; 1961 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for filling box with water: -F <xyz of filler> <dist_x> <dist_y> <dist_z> <boundary> <randatom> <randmol> <DoRotate>" << endl);1835 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for filling with molecule: -F <filler xyz file> --MaxDistance <distance or -1> --distances <x> <y> <z> --lengths <surface> <randatm> <randmol> --DoRotate <0/1>" << endl); 1962 1836 performCriticalExit(); 1963 1837 } else { 1964 SaveFlag = true; 1965 DoLog(1) && (Log() << Verbose(1) << "Filling Box with water molecules." << endl); 1966 // construct water molecule 1967 molecule *filler = World::getInstance().createMolecule(); 1968 if (!filler->AddXYZFile(argv[argptr])) { 1969 DoeLog(0) && (eLog()<< Verbose(0) << "Could not parse filler molecule from " << argv[argptr] << "." << endl); 1970 } 1971 filler->SetNameFromFilename(argv[argptr]); 1972 configuration.BG->ConstructBondGraph(filler); 1973 molecule *Filling = NULL; 1974 // call routine 1975 double distance[NDIM]; 1976 for (int i=0;i<NDIM;i++) 1977 distance[i] = atof(argv[argptr+i+1]); 1978 Filling = FillBoxWithMolecule(molecules, filler, configuration, MaxDistance, distance, atof(argv[argptr+4]), atof(argv[argptr+5]), atof(argv[argptr+6]), atoi(argv[argptr+7])); 1979 if (Filling != NULL) { 1980 Filling->ActiveFlag = false; 1981 molecules->insert(Filling); 1982 } 1983 World::getInstance().destroyMolecule(filler); 1984 argptr+=6; 1838 ArgcList.insert(argptr-1); 1839 ArgcList.insert(argptr); 1840 ArgcList.insert(argptr+1); 1841 ArgcList.insert(argptr+2); 1842 ArgcList.insert(argptr+3); 1843 ArgcList.insert(argptr+4); 1844 ArgcList.insert(argptr+5); 1845 ArgcList.insert(argptr+6); 1846 ArgcList.insert(argptr+7); 1847 ArgcList.insert(argptr+8); 1848 ArgcList.insert(argptr+9); 1849 ArgcList.insert(argptr+10); 1850 ArgcList.insert(argptr+11); 1851 ArgcList.insert(argptr+12); 1852 argptr+=13; 1985 1853 } 1986 1854 break; 1987 1855 case 'A': 1856 if (ExitFlag == 0) ExitFlag = 1; 1857 if ((argptr+2 >= argc) || (argv[argptr][0] == '-')) { 1858 ExitFlag =255; 1859 DoeLog(0) && (eLog()<< Verbose(0) << "Missing source file for bonds in molecule: -A <bond sourcefile> --molecule-by-id <molecule_id>" << endl); 1860 performCriticalExit(); 1861 } else { 1862 ArgcList.insert(argptr-1); 1863 ArgcList.insert(argptr); 1864 ArgcList.insert(argptr+1); 1865 ArgcList.insert(argptr+2); 1866 argptr+=3; 1867 } 1868 break; 1869 1870 case 'J': 1871 if (ExitFlag == 0) ExitFlag = 1; 1872 if ((argptr+2 >= argc) || (argv[argptr][0] == '-')) { 1873 ExitFlag =255; 1874 DoeLog(0) && (eLog()<< Verbose(0) << "Missing path of adjacency file: -J <path> --molecule-by-id <molecule_id>" << endl); 1875 performCriticalExit(); 1876 } else { 1877 ArgcList.insert(argptr-1); 1878 ArgcList.insert(argptr); 1879 ArgcList.insert(argptr+1); 1880 ArgcList.insert(argptr+2); 1881 argptr+=3; 1882 } 1883 break; 1884 1885 case 'j': 1988 1886 if (ExitFlag == 0) ExitFlag = 1; 1989 1887 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1990 1888 ExitFlag =255; 1991 DoeLog(0) && (eLog()<< Verbose(0) << "Missing source file for bonds in molecule: -A <bond sourcefile>" << endl);1889 DoeLog(0) && (eLog()<< Verbose(0) << "Missing path of bonds file: -j <path> --molecule-by-id <molecule_id>" << endl); 1992 1890 performCriticalExit(); 1993 1891 } else { 1994 DoLog(0) && (Log() << Verbose(0) << "Parsing bonds from " << argv[argptr] << "." << endl);1995 ifstream input(argv[argptr]);1996 mol->CreateAdjacencyListFromDbondFile(&input);1997 input.close();1998 argptr+= 1;1999 } 2000 break; 2001 2002 case ' J':2003 if (ExitFlag == 0) ExitFlag = 1; 2004 if ((argptr >= argc) || (argv[argptr][0] == '-')){2005 ExitFlag = 255;2006 DoeLog(0) && (eLog()<< Verbose(0) << " Missing path of adjacency file: -j <path>" << endl);1892 ArgcList.insert(argptr-1); 1893 ArgcList.insert(argptr); 1894 ArgcList.insert(argptr+1); 1895 ArgcList.insert(argptr+2); 1896 argptr+=3; 1897 } 1898 break; 1899 1900 case 'N': 1901 if (ExitFlag == 0) ExitFlag = 1; 1902 if ((argptr+4 >= argc) || (argv[argptr][0] == '-')){ 1903 ExitFlag = 255; 1904 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for non-convex envelope: -N <molecule_id> --sphere-radius <radius> --nonconvex-file <output prefix>" << endl); 2007 1905 performCriticalExit(); 2008 1906 } else { 2009 DoLog(0) && (Log() << Verbose(0) << "Storing adjacency to path " << argv[argptr] << "." << endl); 2010 configuration.BG->ConstructBondGraph(mol); 2011 mol->StoreAdjacencyToFile(NULL, argv[argptr]); 2012 argptr+=1; 2013 } 2014 break; 2015 2016 case 'j': 2017 if (ExitFlag == 0) ExitFlag = 1; 2018 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 2019 ExitFlag =255; 2020 DoeLog(0) && (eLog()<< Verbose(0) << "Missing path of bonds file: -j <path>" << endl); 1907 ArgcList.insert(argptr-1); 1908 ArgcList.insert(argptr); 1909 ArgcList.insert(argptr+1); 1910 ArgcList.insert(argptr+2); 1911 ArgcList.insert(argptr+3); 1912 ArgcList.insert(argptr+4); 1913 argptr+=5; 1914 } 1915 break; 1916 case 'S': 1917 if (ExitFlag == 0) ExitFlag = 1; 1918 if ((argptr+2 >= argc) || (argv[argptr][0] == '-')) { 1919 ExitFlag = 255; 1920 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for storing tempature: -S <temperature file> --molecule-by-id 0" << endl); 2021 1921 performCriticalExit(); 2022 1922 } else { 2023 DoLog(0) && (Log() << Verbose(0) << "Storing bonds to path " << argv[argptr] << "." << endl);2024 configuration.BG->ConstructBondGraph(mol);2025 mol->StoreBondsToFile(NULL, argv[argptr]);2026 argptr+=1;2027 }2028 break;2029 2030 case ' N':2031 if (ExitFlag == 0) ExitFlag = 1; 2032 if ((argptr+ 1 >= argc) || (argv[argptr+1][0] == '-')){1923 ArgcList.insert(argptr-1); 1924 ArgcList.insert(argptr); 1925 ArgcList.insert(argptr+1); 1926 ArgcList.insert(argptr+2); 1927 argptr+=3; 1928 } 1929 break; 1930 case 'L': 1931 if (ExitFlag == 0) ExitFlag = 1; 1932 if ((argptr+8 >= argc) || (argv[argptr][0] == '-')) { 2033 1933 ExitFlag = 255; 2034 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for non-convex envelope: -o <radius> <tecplot output file>" << endl);1934 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for linear interpolation: -L <prefix> --start-step <step0> --end-step <step1> --molecule-by-id 0 --id-mapping <0/1>" << endl); 2035 1935 performCriticalExit(); 2036 1936 } else { 2037 class Tesselation *T = NULL; 2038 const LinkedCell *LCList = NULL; 2039 molecule * Boundary = NULL; 2040 //string filename(argv[argptr+1]); 2041 //filename.append(".csv"); 2042 DoLog(0) && (Log() << Verbose(0) << "Evaluating non-convex envelope of biggest molecule."); 2043 DoLog(1) && (Log() << Verbose(1) << "Using rolling ball of radius " << atof(argv[argptr]) << " and storing tecplot data in " << argv[argptr+1] << "." << endl); 2044 // find biggest molecule 2045 int counter = 0; 2046 for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) { 2047 if ((Boundary == NULL) || (Boundary->getAtomCount() < (*BigFinder)->getAtomCount())) { 2048 Boundary = *BigFinder; 2049 } 2050 counter++; 2051 } 2052 DoLog(1) && (Log() << Verbose(1) << "Biggest molecule has " << Boundary->getAtomCount() << " atoms." << endl); 2053 start = clock(); 2054 LCList = new LinkedCell(Boundary, atof(argv[argptr])*2.); 2055 if (!FindNonConvexBorder(Boundary, T, LCList, atof(argv[argptr]), argv[argptr+1])) 2056 ExitFlag = 255; 2057 //FindDistributionOfEllipsoids(T, &LCList, N, number, filename.c_str()); 2058 end = clock(); 2059 DoLog(0) && (Log() << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl); 2060 delete(LCList); 2061 delete(T); 2062 argptr+=2; 2063 } 2064 break; 2065 case 'S': 2066 if (ExitFlag == 0) ExitFlag = 1; 2067 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1937 ArgcList.insert(argptr-1); 1938 ArgcList.insert(argptr); 1939 ArgcList.insert(argptr+1); 1940 ArgcList.insert(argptr+2); 1941 ArgcList.insert(argptr+3); 1942 ArgcList.insert(argptr+4); 1943 ArgcList.insert(argptr+5); 1944 ArgcList.insert(argptr+6); 1945 ArgcList.insert(argptr+7); 1946 ArgcList.insert(argptr+8); 1947 argptr+=9; 1948 } 1949 break; 1950 case 'P': 1951 if (ExitFlag == 0) ExitFlag = 1; 1952 if ((argptr+2 >= argc) || (argv[argptr][0] == '-')) { 2068 1953 ExitFlag = 255; 2069 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for storing tempature: -S <temperature file>" << endl);1954 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for parsing and integrating forces: -P <forces file> --molecule-by-id <molecule_id>" << endl); 2070 1955 performCriticalExit(); 2071 1956 } else { 2072 DoLog(1) && (Log() << Verbose(1) << "Storing temperatures in " << argv[argptr] << "." << endl); 2073 ofstream *output = new ofstream(argv[argptr], ios::trunc); 2074 if (!mol->OutputTemperatureFromTrajectories(output, 0, mol->MDSteps)) 2075 DoLog(2) && (Log() << Verbose(2) << "File could not be written." << endl); 2076 else 2077 DoLog(2) && (Log() << Verbose(2) << "File stored." << endl); 2078 output->close(); 2079 delete(output); 2080 argptr+=1; 2081 } 2082 break; 2083 case 'L': 2084 if (ExitFlag == 0) ExitFlag = 1; 2085 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1957 ArgcList.insert(argptr-1); 1958 ArgcList.insert(argptr); 1959 ArgcList.insert(argptr+1); 1960 ArgcList.insert(argptr+2); 1961 argptr+=3; 1962 } 1963 break; 1964 case 'R': 1965 if (ExitFlag == 0) ExitFlag = 1; 1966 if ((argptr+4 >= argc) || (argv[argptr][0] == '-')) { 2086 1967 ExitFlag = 255; 2087 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for linear interpolation: -L <step0> <step1> <prefix> <identity mapping?>" << endl);1968 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <distance> --position <x> <y> <z>" << endl); 2088 1969 performCriticalExit(); 2089 1970 } else { 2090 SaveFlag = true; 2091 DoLog(1) && (Log() << Verbose(1) << "Linear interpolation between configuration " << argv[argptr] << " and " << argv[argptr+1] << "." << endl); 2092 if (atoi(argv[argptr+3]) == 1) 2093 DoLog(1) && (Log() << Verbose(1) << "Using Identity for the permutation map." << endl); 2094 if (!mol->LinearInterpolationBetweenConfiguration(atoi(argv[argptr]), atoi(argv[argptr+1]), argv[argptr+2], configuration, atoi(argv[argptr+3])) == 1 ? true : false) 2095 DoLog(2) && (Log() << Verbose(2) << "Could not store " << argv[argptr+2] << " files." << endl); 2096 else 2097 DoLog(2) && (Log() << Verbose(2) << "Steps created and " << argv[argptr+2] << " files stored." << endl); 2098 argptr+=4; 2099 } 2100 break; 2101 case 'P': 2102 if (ExitFlag == 0) ExitFlag = 1; 2103 if ((argptr >= argc) || (argv[argptr][0] == '-')) { 1971 ArgcList.insert(argptr-1); 1972 ArgcList.insert(argptr); 1973 ArgcList.insert(argptr+1); 1974 ArgcList.insert(argptr+2); 1975 ArgcList.insert(argptr+3); 1976 ArgcList.insert(argptr+4); 1977 argptr+=5; 1978 } 1979 break; 1980 case 't': 1981 if (ExitFlag == 0) ExitFlag = 1; 1982 if ((argptr+4 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) { 2104 1983 ExitFlag = 255; 2105 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for parsing and integrating forces: -P <forces file>" << endl);1984 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for translation: -t <x> <y> <z> --molecule-by-id <molecule_id> --periodic <0/1>" << endl); 2106 1985 performCriticalExit(); 2107 1986 } else { 2108 SaveFlag = true; 2109 DoLog(1) && (Log() << Verbose(1) << "Parsing forces file and Verlet integrating." << endl); 2110 if (!mol->VerletForceIntegration(argv[argptr], configuration)) 2111 DoLog(2) && (Log() << Verbose(2) << "File not found." << endl); 2112 else 2113 DoLog(2) && (Log() << Verbose(2) << "File found and parsed." << endl); 2114 argptr+=1; 2115 } 2116 break; 2117 case 'R': 2118 if (ExitFlag == 0) ExitFlag = 1; 2119 if ((argptr+3 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3]))) { 2120 ExitFlag = 255; 2121 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <x> <y> <z> <distance>" << endl); 2122 performCriticalExit(); 2123 } else { 2124 SaveFlag = true; 2125 const double radius = atof(argv[argptr+3]); 2126 Vector point(atof(argv[argptr]),atof(argv[argptr+1]),atof(argv[argptr+2])); 2127 DoLog(1) && (Log() << Verbose(1) << "Removing atoms around " << point << " with radius " << radius << "." << endl); 2128 atom *Walker = NULL; 2129 molecule::iterator advancer = mol->begin(); 2130 for(molecule::iterator iter = advancer; advancer != mol->end();) { 2131 iter = advancer++; 2132 if ((*iter)->x.DistanceSquared(point) > radius*radius){ // distance to first above radius ... 2133 Walker = (*iter); 2134 DoLog(1) && (Log() << Verbose(1) << "Removing atom " << *Walker << "." << endl); 2135 mol->RemoveAtom(*(iter)); 2136 World::getInstance().destroyAtom(Walker); 2137 } 2138 } 2139 argptr+=4; 2140 } 2141 break; 2142 case 't': 2143 if (ExitFlag == 0) ExitFlag = 1; 2144 if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) { 2145 ExitFlag = 255; 2146 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl); 2147 performCriticalExit(); 2148 } else { 2149 if (ExitFlag == 0) ExitFlag = 1; 2150 SaveFlag = true; 2151 DoLog(1) && (Log() << Verbose(1) << "Translating all ions by given vector." << endl); 2152 for (int i=NDIM;i--;) 2153 x[i] = atof(argv[argptr+i]); 2154 mol->Translate((const Vector *)&x); 2155 argptr+=3; 2156 } 2157 break; 2158 case 'T': 2159 if (ExitFlag == 0) ExitFlag = 1; 2160 if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) { 2161 ExitFlag = 255; 2162 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl); 2163 performCriticalExit(); 2164 } else { 2165 if (ExitFlag == 0) ExitFlag = 1; 2166 SaveFlag = true; 2167 DoLog(1) && (Log() << Verbose(1) << "Translating all ions periodically by given vector." << endl); 2168 for (int i=NDIM;i--;) 2169 x[i] = atof(argv[argptr+i]); 2170 mol->TranslatePeriodically((const Vector *)&x); 2171 argptr+=3; 1987 ArgcList.insert(argptr-1); 1988 ArgcList.insert(argptr); 1989 ArgcList.insert(argptr+1); 1990 ArgcList.insert(argptr+2); 1991 ArgcList.insert(argptr+3); 1992 ArgcList.insert(argptr+4); 1993 ArgcList.insert(argptr+5); 1994 ArgcList.insert(argptr+6); 1995 argptr+=7; 2172 1996 } 2173 1997 break; … … 2246 2070 performCriticalExit(); 2247 2071 } else { 2248 mol->getAtomCount(); 2249 SaveFlag = true; 2250 DoLog(1) && (Log() << Verbose(1) << "Removing atom " << argv[argptr] << "." << endl); 2251 atom *first = mol->FindAtom(atoi(argv[argptr])); 2252 mol->RemoveAtom(first); 2072 ArgcList.insert(argptr-1); 2073 ArgcList.insert(argptr); 2253 2074 argptr+=1; 2254 2075 } … … 2256 2077 case 'f': 2257 2078 if (ExitFlag == 0) ExitFlag = 1; 2258 if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1]))) {2079 if ((argptr+1 >= argc) || (argv[argptr][0] == '-')) { 2259 2080 ExitFlag = 255; 2260 2081 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl); 2261 2082 performCriticalExit(); 2262 2083 } else { 2263 DoLog(0) && (Log() << Verbose(0) << "Fragmenting molecule with bond distance " << argv[argptr] << " angstroem, order of " << argv[argptr+1] << "." << endl); 2264 DoLog(0) && (Log() << Verbose(0) << "Creating connection matrix..." << endl); 2265 start = clock(); 2266 mol->CreateAdjacencyList(atof(argv[argptr]), configuration.GetIsAngstroem(), &BondGraph::CovalentMinMaxDistance, NULL); 2267 DoLog(0) && (Log() << Verbose(0) << "Fragmenting molecule with current connection matrix ..." << endl); 2268 if (mol->hasBondStructure()) { 2269 ExitFlag = mol->FragmentMolecule(atoi(argv[argptr+1]), &configuration); 2270 } 2271 end = clock(); 2272 DoLog(0) && (Log() << Verbose(0) << "Clocks for this operation: " << (end-start) << ", time: " << ((double)(end-start)/CLOCKS_PER_SEC) << "s." << endl); 2273 argptr+=2; 2084 ArgcList.insert(argptr-1); 2085 ArgcList.insert(argptr); 2086 ArgcList.insert(argptr+1); 2087 ArgcList.insert(argptr+2); 2088 ArgcList.insert(argptr+3); 2089 ArgcList.insert(argptr+4); 2090 argptr+=5; 2274 2091 } 2275 2092 break; … … 2284 2101 SaveFlag = true; 2285 2102 DoLog(0) && (Log() << Verbose(0) << "Converting to prinicipal axis system." << endl); 2103 mol->PrincipalAxisSystem((bool)j); 2286 2104 } else 2287 DoLog(0) && (Log() << Verbose(0) << "Evaluating prinicipal axis." << endl);2288 mol->PrincipalAxisSystem((bool)j);2105 ArgcList.insert(argptr-1); 2106 argptr+=0; 2289 2107 break; 2290 2108 case 'o': 2291 2109 if (ExitFlag == 0) ExitFlag = 1; 2292 if ((argptr+ 1>= argc) || (argv[argptr][0] == '-')){2110 if ((argptr+4 >= argc) || (argv[argptr][0] == '-')){ 2293 2111 ExitFlag = 255; 2294 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for convex envelope: -o < convex output file> <non-convexoutput file>" << endl);2112 DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for convex envelope: -o <molecule_id> --output-file <output file> --output-file <binned output file>" << endl); 2295 2113 performCriticalExit(); 2296 2114 } else { 2297 class Tesselation *TesselStruct = NULL; 2298 const LinkedCell *LCList = NULL; 2299 DoLog(0) && (Log() << Verbose(0) << "Evaluating volume of the convex envelope."); 2300 DoLog(1) && (Log() << Verbose(1) << "Storing tecplot convex data in " << argv[argptr] << "." << endl); 2301 DoLog(1) && (Log() << Verbose(1) << "Storing tecplot non-convex data in " << argv[argptr+1] << "." << endl); 2302 LCList = new LinkedCell(mol, 10.); 2303 //FindConvexBorder(mol, LCList, argv[argptr]); 2304 FindNonConvexBorder(mol, TesselStruct, LCList, 5., argv[argptr+1]); 2305 // RemoveAllBoundaryPoints(TesselStruct, mol, argv[argptr]); 2306 double volumedifference = ConvexizeNonconvexEnvelope(TesselStruct, mol, argv[argptr]); 2307 double clustervolume = VolumeOfConvexEnvelope(TesselStruct, &configuration); 2308 DoLog(0) && (Log() << Verbose(0) << "The tesselated volume area is " << clustervolume << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl); 2309 DoLog(0) && (Log() << Verbose(0) << "The non-convex tesselated volume area is " << clustervolume-volumedifference << " " << (configuration.GetIsAngstroem() ? "angstrom" : "atomiclength") << "^3." << endl); 2310 delete(TesselStruct); 2311 delete(LCList); 2312 argptr+=2; 2115 ArgcList.insert(argptr-1); 2116 ArgcList.insert(argptr); 2117 ArgcList.insert(argptr+1); 2118 ArgcList.insert(argptr+2); 2119 ArgcList.insert(argptr+3); 2120 ArgcList.insert(argptr+4); 2121 argptr+=5; 2313 2122 } 2314 2123 break; … … 2331 2140 performCriticalExit(); 2332 2141 } else { 2333 double density; 2334 SaveFlag = true; 2335 DoLog(0) && (Log() << Verbose(0) << "Evaluating necessary cell volume for a cluster suspended in water."); 2336 density = atof(argv[argptr++]); 2337 if (density < 1.0) { 2338 DoeLog(1) && (eLog()<< Verbose(1) << "Density must be greater than 1.0g/cm^3 !" << endl); 2339 density = 1.3; 2340 } 2341 // for(int i=0;i<NDIM;i++) { 2342 // repetition[i] = atoi(argv[argptr++]); 2343 // if (repetition[i] < 1) 2344 // DoeLog(1) && (eLog()<< Verbose(1) << "repetition value must be greater 1!" << endl); 2345 // repetition[i] = 1; 2346 // } 2347 PrepareClustersinWater(&configuration, mol, volume, density); // if volume == 0, will calculate from ConvexEnvelope 2142 ArgcList.insert(argptr-1); 2143 ArgcList.insert(argptr); 2144 argptr+=1; 2348 2145 } 2349 2146 break; … … 2393 2190 ActionRegistry::purgeInstance(); 2394 2191 ActionHistory::purgeInstance(); 2395 #ifdef LOG_OBSERVER2396 cout << observerLog().getLog();2397 #endif2398 2192 Memory::getState(); 2399 2193 } … … 2443 2237 // handle arguments by ParseCommandLineOptions() 2444 2238 ExitFlag = ParseCommandLineOptions(argc,argv,World::getInstance().getMolecules(),World::getInstance().getPeriode(),*World::getInstance().getConfig(), &ConfigFileName, ArgcList); 2239 World::getInstance().setExitFlag(ExitFlag); 2445 2240 // copy all remaining arguments to a new argv 2446 2241 Arguments = new char *[ArgcList.size()]; … … 2456 2251 // handle remaining arguments by CommandLineParser 2457 2252 MapOfActions::getInstance().AddOptionsToParser(); 2458 CommandLineParser::getInstance().Run(ArgcSize,Arguments); 2253 map <std::string, std::string> ShortFormToActionMap = MapOfActions::getInstance().getShortFormToActionMap(); 2254 CommandLineParser::getInstance().Run(ArgcSize,Arguments, ShortFormToActionMap); 2459 2255 if (!CommandLineParser::getInstance().isEmpty()) { 2460 2256 DoLog(0) && (Log() << Verbose(0) << "Setting UI to CommandLine." << endl); … … 2483 2279 delete[](ConfigFileName); 2484 2280 2281 ExitFlag = World::getInstance().getExitFlag(); 2485 2282 return (ExitFlag == 1 ? 0 : ExitFlag); 2486 2283 }
Note:
See TracChangeset
for help on using the changeset viewer.