/** * loads atom dynamics file * @author Tobias Weber * @date Dec-2019 * @license GPLv3, see 'LICENSE' file * * g++ -std=c++17 -I ../../tlibs2 -o moldyn moldyn.cpp */ #include #include #include #include #include "libs/str.h" using t_real = double; int main(int argc, char** argv) { if(argc <= 1) return -1; std::ifstream ifstr{argv[1]}; if(!ifstr) { std::cerr << "Cannot open \"" << argv[1] << "\"."; return -1; } const std::string strDelim{" \t"}; std::string strSys; std::getline(ifstr, strSys); tl2::trim(strSys); std::cout << "System: " << strSys << std::endl; std::string strTmp; std::getline(ifstr, strTmp); int numSys = tl2::str_to_var(strTmp); std::cout << "# System: " << numSys << std::endl; std::string strVecs1; std::string strVecs2; std::string strVecs3; std::getline(ifstr, strVecs1); std::getline(ifstr, strVecs2); std::getline(ifstr, strVecs3); std::vector _vecBase1, _vecBase2, _vecBase3; tl2::get_tokens(strVecs1, strDelim, _vecBase1); tl2::get_tokens(strVecs2, strDelim, _vecBase2); tl2::get_tokens(strVecs3, strDelim, _vecBase3); if(_vecBase1.size()!=3 || _vecBase2.size()!=3 || _vecBase3.size()!=3) { std::cerr << "Invalid base vectors." << std::endl; return -1; } std::vector vecBase1(3), vecBase2(3), vecBase3(3); vecBase1[0] = _vecBase1[0]; vecBase2[0] = _vecBase1[1]; vecBase3[0] = _vecBase1[2]; vecBase1[1] = _vecBase2[0]; vecBase2[1] = _vecBase2[1]; vecBase3[1] = _vecBase2[2]; vecBase1[2] = _vecBase3[0]; vecBase2[2] = _vecBase3[1]; vecBase3[2] = _vecBase3[2]; std::cout << "Base vector 1: "; for(int i=0; i<3; ++i) std::cout << vecBase1[i] << ", "; std::cout << std::endl; std::cout << "Base vector 2: "; for(int i=0; i<3; ++i) std::cout << vecBase2[i] << ", "; std::cout << std::endl; std::cout << "Base vector 3: "; for(int i=0; i<3; ++i) std::cout << vecBase3[i] << ", "; std::cout << std::endl; std::vector vecAtoms; std::vector vecAtomNums; std::string strAtoms; std::string strAtomNums; std::getline(ifstr, strAtoms); std::getline(ifstr, strAtomNums); tl2::get_tokens(strAtoms, strDelim, vecAtoms); tl2::get_tokens(strAtomNums, strDelim, vecAtomNums); if(vecAtoms.size() != vecAtomNums.size()) { std::cerr << "Atom size mismatch." << std::endl; return -1; } for(std::size_t i=0; i vecCoords; vecCoords.reserve(3); tl2::get_tokens(strCoords, strDelim, vecCoords); if(vecCoords.size() != 3) { std::cerr << "Invalid coordinate." << std::endl; return -1; } } } ++iNumConfigs; } std::cout << "\rRead " << iNumConfigs << " configurations." << " " << std::endl; return 0; }