// // Created by dominik on 8/14/24. // #include "io.h" #include #include #include #include #include #include #include #include #include #include Arguments parse_args(const int argc, char **argv) { if (argc < 3) { throw std::runtime_error("Not enough arguments: missing parameter file"); } Arguments args; for (int i=1; i read_parameter(const std::filesystem::path& infile) { if (!std::filesystem::exists(infile)) { std::cerr << "File " << infile << " does not exist" << std::endl; exit(1); } std::ifstream instream(infile); std::unordered_map parameter; std::string line; std::string delim = "="; std::string key; std::string value; size_t delim_pos; while (std::getline(instream, line)) { // skip comment lines starting with #, and empty lines if (line[0] == '#' || line.length() == 1) continue; // strip spaces from line to have always key=value line.erase(std::remove(line.begin(), line.end(), ' '), line.end()); // split at '=' character and add to map delim_pos = line.find('='); key = line.substr(0, delim_pos); value = line.substr(delim_pos+1); parameter[key] = std::stod(value); } // print result std::cout << "Found parameter\n"; for (const auto& [key, value]: parameter) { std::cout << " " << key << ": " << std::to_string(value) << "\n"; } std::cout << std::endl; return parameter; } void fid_write_out(const std::string& filename, const std::vector& x, const std::vector& y, const double tau, const double t_evo) { auto size = x.size(); std::ostringstream sfile; sfile << filename << "_"; sfile << std::setprecision(6) << std::scientific; sfile << "tau=" << tau << "_tevo=" << t_evo << ".dat"; { std::string outfile = sfile.str(); std::ofstream fid_file(outfile, std::ios::out); for (unsigned int i = 0; i < size; i++) { fid_file << x[i] << "\t" << y[i] << "\n"; } } } void fid_write_out(const std::string& filename, const std::vector& x, const std::map>& y, const double tau) { auto size = x.size(); std::ostringstream sfile; sfile << filename << "_"; sfile << std::setprecision(6) << std::scientific; sfile << "tau=" << tau << ".dat"; { std::string outfile = sfile.str(); std::ofstream fid_file(outfile, std::ios::out); fid_file << "#"; for (const auto& [t_echo_j, _] : y) { fid_file << t_echo_j << "\t"; } fid_file << std::endl; for (unsigned int i = 0; i < size; i++) { fid_file << x[i]; for (const auto& [_, fid_j] : y) { fid_file << "\t" << fid_j[i]; } fid_file << "\n"; } } }