Loading src/libnptm/Configuration.cpp +234 −103 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ #include <cmath> #include <cmath> #include <cstdio> #include <cstdio> #include <fstream> #include <fstream> #include <regex> #include <string> #include <string> #include "../include/List.h" #include "../include/List.h" #include "../include/Parsers.h" #include "../include/Parsers.h" Loading Loading @@ -59,6 +60,8 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { int num_lines = 0; int num_lines = 0; int last_read_line = 0; int last_read_line = 0; string *file_lines; string *file_lines; string str_target, str_num; smatch m; try { try { file_lines = load_file(file_name, &num_lines); file_lines = load_file(file_name, &num_lines); } catch (exception &ex) { } catch (exception &ex) { Loading @@ -66,19 +69,44 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { } } int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0; int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0; int _li = 0, _le = 0, _mxndm = 0, _iavm = 0; int _li = 0, _le = 0, _mxndm = 0, _iavm = 0; sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); regex re = regex("-?[0-9]+"); str_target = file_lines[last_read_line++]; regex_search(str_target, m, re); //sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); _nsph = stoi(m.str()); if (_nsph == 1) { if (_nsph == 1) { sscanf( //sscanf( file_lines[last_read_line++].c_str(), // file_lines[last_read_line++].c_str(), " %*d %d %d %d %d %d", // " %*d %d %d %d %d %d", &_lm, &_in_pol, &_npnt, &_npntts, &_isam // &_lm, &_in_pol, &_npnt, &_npntts, &_isam ); //); for (int ri = 0; ri < 5; ri++) { str_target = m.suffix().str(); regex_search(str_target, m, re); if (ri == 0) _lm = stoi(m.str()); if (ri == 1) _in_pol = stoi(m.str()); if (ri == 2) _npnt = stoi(m.str()); if (ri == 3) _npntts = stoi(m.str()); if (ri == 4) _isam = stoi(m.str()); } } else { } else { sscanf( //sscanf( file_lines[last_read_line++].c_str(), // file_lines[last_read_line++].c_str(), " %*d %d %d %d %d %d %d %d %d", // " %*d %d %d %d %d %d %d %d %d", &_li, &_le, &_mxndm, &_in_pol, &_npnt, &_npntts, &_iavm, &_isam // &_li, &_le, &_mxndm, &_in_pol, &_npnt, &_npntts, &_iavm, &_isam ); //); for (int ri = 0; ri < 8; ri++) { str_target = m.suffix().str(); regex_search(str_target, m, re); if (ri == 0) _li = stoi(m.str()); if (ri == 1) _le = stoi(m.str()); if (ri == 2) _mxndm = stoi(m.str()); if (ri == 3) _in_pol = stoi(m.str()); if (ri == 4) _npnt = stoi(m.str()); if (ri == 5) _npntts = stoi(m.str()); if (ri == 6) _iavm = stoi(m.str()); if (ri == 7) _isam = stoi(m.str()); } } } double *x, *y, *z; double *x, *y, *z; x = new double[_nsph]; x = new double[_nsph]; Loading @@ -90,56 +118,56 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { z[0] = 0.0; z[0] = 0.0; } else { } else { for (int i = 0; i < _nsph; i++) { for (int i = 0; i < _nsph; i++) { double sph_x, sph_y, sph_z; str_target = file_lines[last_read_line++]; int sph_x_exp, sph_y_exp, sph_z_exp; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); sscanf( for (int ri = 0; ri < 3; ri++) { file_lines[last_read_line++].c_str(), regex_search(str_target, m, re); " %lf D%d %lf D%d %lf D%d", str_num = regex_replace(m.str(), regex("D"), "e"); &sph_x, &sph_x_exp, &sph_y, &sph_y_exp, &sph_z, &sph_z_exp str_num = regex_replace(str_num, regex("d"), "e"); ); if (ri == 0) x[i] = stod(str_num); x[i] = sph_x * pow(10.0, 1.0 * sph_x_exp); if (ri == 1) y[i] = stod(str_num); y[i] = sph_y * pow(10.0, 1.0 * sph_y_exp); if (ri == 2) z[i] = stod(str_num); z[i] = sph_z * pow(10.0, 1.0 * sph_z_exp); str_target = m.suffix().str(); } } } } } double in_th_start, in_th_end, in_th_step, sc_th_start, sc_th_end, sc_th_step; double in_th_start, in_th_end, in_th_step, sc_th_start, sc_th_end, sc_th_step; int in_th_start_exp, in_th_end_exp, in_th_step_exp, sc_th_start_exp, sc_th_end_exp, sc_th_step_exp; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); sscanf( str_target = file_lines[last_read_line++]; file_lines[last_read_line++].c_str(), for (int ri = 0; ri < 6; ri++) { " %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d", regex_search(str_target, m, re); &in_th_start, &in_th_start_exp, str_num = regex_replace(m.str(), regex("D"), "e"); &in_th_step, &in_th_step_exp, str_num = regex_replace(str_num, regex("d"), "e"); &in_th_end, &in_th_end_exp, if (ri == 0) in_th_start = stod(str_num); &sc_th_start, &sc_th_start_exp, if (ri == 1) in_th_step = stod(str_num); &sc_th_step, &sc_th_step_exp, if (ri == 2) in_th_end = stod(str_num); &sc_th_end, &sc_th_end_exp if (ri == 3) sc_th_start = stod(str_num); ); if (ri == 4) sc_th_step = stod(str_num); in_th_start *= pow(10.0, 1.0 * in_th_start_exp); if (ri == 5) sc_th_end = stod(str_num); in_th_step *= pow(10.0, 1.0 * in_th_step_exp); str_target = m.suffix().str(); in_th_end *= pow(10.0, 1.0 * in_th_end_exp); } sc_th_start *= pow(10.0, 1.0 * sc_th_start_exp); sc_th_step *= pow(10.0, 1.0 * sc_th_step_exp); sc_th_end *= pow(10.0, 1.0 * sc_th_end_exp); double in_ph_start, in_ph_end, in_ph_step, sc_ph_start, sc_ph_end, sc_ph_step; double in_ph_start, in_ph_end, in_ph_step, sc_ph_start, sc_ph_end, sc_ph_step; int in_ph_start_exp, in_ph_end_exp, in_ph_step_exp, sc_ph_start_exp, sc_ph_end_exp, sc_ph_step_exp; str_target = file_lines[last_read_line++]; sscanf( for (int ri = 0; ri < 6; ri++) { file_lines[last_read_line++].c_str(), regex_search(str_target, m, re); " %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d", str_num = regex_replace(m.str(), regex("D"), "e"); &in_ph_start, &in_ph_start_exp, str_num = regex_replace(str_num, regex("d"), "e"); &in_ph_step, &in_ph_step_exp, if (ri == 0) in_ph_start = stod(str_num); &in_ph_end, &in_ph_end_exp, if (ri == 1) in_ph_step = stod(str_num); &sc_ph_start, &sc_ph_start_exp, if (ri == 2) in_ph_end = stod(str_num); &sc_ph_step, &sc_ph_step_exp, if (ri == 3) sc_ph_start = stod(str_num); &sc_ph_end, &sc_ph_end_exp if (ri == 4) sc_ph_step = stod(str_num); ); if (ri == 5) sc_ph_end = stod(str_num); in_ph_start *= pow(10.0, 1.0 * in_ph_start_exp); str_target = m.suffix().str(); in_ph_step *= pow(10.0, 1.0 * in_ph_step_exp); } in_ph_end *= pow(10.0, 1.0 * in_ph_end_exp); sc_ph_start *= pow(10.0, 1.0 * sc_ph_start_exp); sc_ph_step *= pow(10.0, 1.0 * sc_ph_step_exp); sc_ph_end *= pow(10.0, 1.0 * sc_ph_end_exp); int _jwtm; int _jwtm; sscanf(file_lines[last_read_line++].c_str(), " %d", &_jwtm); re = regex("[0-9]+"); str_target = file_lines[last_read_line++]; regex_search(str_target, m, re); //sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); _jwtm = stoi(m.str()); GeometryConfiguration *conf = new GeometryConfiguration( GeometryConfiguration *conf = new GeometryConfiguration( _nsph, _lm, _in_pol, _npnt, _npntts, _isam, _nsph, _lm, _in_pol, _npnt, _npntts, _isam, _li, _le, _mxndm, _iavm, _li, _le, _mxndm, _iavm, Loading Loading @@ -170,7 +198,6 @@ ScattererConfiguration::ScattererConfiguration( double x double x ) { ) { number_of_spheres = nsph; number_of_spheres = nsph; scale_vec = scale_vector; number_of_scales = nxi; number_of_scales = nxi; reference_variable_name = variable_name; reference_variable_name = variable_name; iog_vec = iog_vector; iog_vec = iog_vector; Loading @@ -183,6 +210,20 @@ ScattererConfiguration::ScattererConfiguration( exdc = ex; exdc = ex; wp = w; wp = w; xip = x; xip = x; if (variable_name == "XIV") scale_vec = scale_vector; else { scale_vec = new double[number_of_scales](); const double pi2 = 2.0 * acos(-1.0); const double evc = 6.5821188e-16; for (int si = 0; si < number_of_scales; si++) { double value = scale_vector[si]; if (variable_name.compare("WNS") == 0) value *= (3.0e8 / wp); else if (variable_name.compare("WLS") == 0) value = pi2 / value * 3.0e8 / wp; else if (variable_name.compare("PUS") == 0) value /= wp; else if (variable_name.compare("EVS") == 0) value /= (evc * wp); scale_vec[si] = value; } } } } ScattererConfiguration::~ScattererConfiguration() { ScattererConfiguration::~ScattererConfiguration() { Loading Loading @@ -244,7 +285,10 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st ros_vector = new double[nsph](); ros_vector = new double[nsph](); rcf_vector = new double*[nsph]; rcf_vector = new double*[nsph]; for (int i115 = 1; i115 <= nsph; i115++) { for (int i115 = 1; i115 <= nsph; i115++) { if (iog[i115 - 1] < i115) continue; if (iog[i115 - 1] < i115) { rcf_vector[i115 - 1] = new double[1](); continue; } input.read(reinterpret_cast<char *>(&(nshl_vector[i115 - 1])), sizeof(int)); input.read(reinterpret_cast<char *>(&(nshl_vector[i115 - 1])), sizeof(int)); input.read(reinterpret_cast<char *>(&(ros_vector[i115 - 1])), sizeof(double)); input.read(reinterpret_cast<char *>(&(ros_vector[i115 - 1])), sizeof(double)); int nsh = nshl_vector[i115 - 1]; int nsh = nshl_vector[i115 - 1]; Loading Loading @@ -310,6 +354,8 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam int num_lines = 0; int num_lines = 0; int last_read_line = 0; int last_read_line = 0; string *file_lines; string *file_lines; regex re; smatch m; try { try { file_lines = load_file(dedfb_file_name, &num_lines); file_lines = load_file(dedfb_file_name, &num_lines); } catch (exception &ex) { } catch (exception &ex) { Loading @@ -317,22 +363,38 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam } } int nsph, ies; int nsph, ies; int max_ici = 0; int max_ici = 0; sscanf(file_lines[last_read_line].c_str(), " %d %d", &nsph, &ies); re = regex("[0-9]+"); string str_target = file_lines[last_read_line]; for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); if (ri == 0) nsph = stoi(m.str()); if (ri == 1) ies = stoi(m.str()); str_target = m.suffix().str(); } if (ies != 0) ies = 1; if (ies != 0) ies = 1; double _exdc, _wp, _xip; double _exdc, _wp, _xip; int exdc_exp, wp_exp, xip_exp; str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); for (int ri = 0; ri < 3; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) _exdc = stod(str_number); if (ri == 1) _wp = stod(str_number); if (ri == 2) _xip = stod(str_number); str_target = m.suffix().str(); } int _idfc, nxi, instpc, insn; int _idfc, nxi, instpc, insn; sscanf( re = regex("-?[0-9]+"); file_lines[++last_read_line].c_str(), for (int ri = 0; ri < 4; ri++) { " %lf D%d %lf D%d %lf D%d %d %d %d %d", regex_search(str_target, m, re); &_exdc, &exdc_exp, if (ri == 0) _idfc = stoi(m.str()); &_wp, &wp_exp, if (ri == 1) nxi = stoi(m.str()); &_xip, &xip_exp, if (ri == 2) instpc = stoi(m.str()); &_idfc, &nxi, &instpc, &insn if (ri == 3) insn = stoi(m.str()); ); str_target = m.suffix().str(); _exdc *= pow(10.0, 1.0 * 1.0 * exdc_exp); } _wp *= pow(10.0, 1.0 * wp_exp); _xip *= pow(10.0, 1.0 * xip_exp); double *variable_vector; double *variable_vector; string variable_name; string variable_name; Loading @@ -341,23 +403,41 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam variable_name = "XIV"; variable_name = "XIV"; if (instpc < 1) { // The variable vector is explicitly defined. if (instpc < 1) { // The variable vector is explicitly defined. double xi; double xi; int xi_exp; //int xi_exp; List<double> xi_vector; List<double> xi_vector; sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); //sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); xi *= pow(10.0, 1.0 * xi_exp); str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); xi = stod(str_number); xi_vector.set(0, xi); xi_vector.set(0, xi); for (int jxi310 = 1; jxi310 < nxi; jxi310++) { for (int jxi310 = 1; jxi310 < nxi; jxi310++) { sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); str_target = file_lines[++last_read_line]; xi *= pow(10.0, 1.0 * xi_exp); regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); xi = stod(str_number); xi_vector.append(xi); xi_vector.append(xi); } } variable_vector = xi_vector.to_array(); variable_vector = xi_vector.to_array(); } else { // instpc >= 1: the variable vector is defined in steps } else { // instpc >= 1: the variable vector is defined in steps double xi, xi_step; double xi, xi_step; int xi_exp, xi_step_exp; str_target = file_lines[++last_read_line]; sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d %9lE D%d", &xi, &xi_exp, &xi_step, &xi_step_exp); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); xi *= pow(10.0, 1.0 * xi_exp); regex_search(str_target, m, re); xi_step *= pow(10.0, 1.0 * xi_step_exp); for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) xi = stod(str_number); if (ri == 1) xi_step = stod(str_number); str_target = m.suffix().str(); } variable_vector = new double[nxi](); variable_vector = new double[nxi](); for (int jxi320 = 0; jxi320 < nxi; jxi320++) { for (int jxi320 = 0; jxi320 < nxi; jxi320++) { variable_vector[jxi320] = xi; variable_vector[jxi320] = xi; Loading @@ -368,10 +448,16 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam variable_vector = new double[nxi](); variable_vector = new double[nxi](); if (instpc == 0) { // The variable vector is explicitly defined if (instpc == 0) { // The variable vector is explicitly defined double vs; double vs; int vs_exp; //int vs_exp; for (int jxi_r = 0; jxi_r < nxi; jxi_r++) { for (int jxi_r = 0; jxi_r < nxi; jxi_r++) { sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &vs, &vs_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &vs, &vs_exp); vs *= pow(10.0, 1.0 * vs_exp); str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); vs = stod(str_number); variable_vector[jxi_r] = vs; variable_vector[jxi_r] = vs; } } switch (insn) { switch (insn) { Loading @@ -393,10 +479,20 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam } } } else { // The variable vector needs to be computed in steps } else { // The variable vector needs to be computed in steps double vs, vs_step; double vs, vs_step; int vs_exp, vs_step_exp; //int vs_exp, vs_step_exp; sscanf(file_lines[++last_read_line].c_str(), " %lf D%d %lf D%d", &vs, &vs_exp, &vs_step, &vs_step_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d %lf D%d", &vs, &vs_exp, &vs_step, &vs_step_exp); vs *= pow(10.0, 1.0 * vs_exp); str_target = file_lines[++last_read_line]; vs_step *= pow(10.0, 1.0 * vs_step_exp); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) vs = stod(str_number); if (ri == 1) vs_step = stod(str_number); str_target = m.suffix().str(); } for (int jxi110w = 0; jxi110w < nxi; jxi110w++) { for (int jxi110w = 0; jxi110w < nxi; jxi110w++) { variable_vector[jxi110w] = vs; variable_vector[jxi110w] = vs; vs += vs_step; vs += vs_step; Loading Loading @@ -441,20 +537,40 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam for (int i113 = 1; i113 <= nsph; i113++) { for (int i113 = 1; i113 <= nsph; i113++) { int i_val, nsh; int i_val, nsh; double ros_val; double ros_val; int ros_val_exp; //int ros_val_exp; if (iog_vector[i113 - 1] < i113) continue; if (iog_vector[i113 - 1] < i113) { sscanf(file_lines[++last_read_line].c_str(), " %d %lf D%d", &i_val, &ros_val, &ros_val_exp); rcf_vector[i113 - 1] = new double[1](); continue; } //sscanf(file_lines[++last_read_line].c_str(), " %d %lf D%d", &i_val, &ros_val, &ros_val_exp); re = regex("[0-9]+"); str_target = file_lines[++last_read_line]; regex_search(str_target, m, re); i_val = stoi(m.str()); str_target = m.suffix(); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); ros_val = stod(str_number); nshl_vector[i113 - 1] = i_val; nshl_vector[i113 - 1] = i_val; if (max_ici < (i_val + 1) / 2) max_ici = (i_val + 1) / 2; if (max_ici < (i_val + 1) / 2) max_ici = (i_val + 1) / 2; ros_vector[i113 - 1] = ros_val * pow(10.0, 1.0 * ros_val_exp); ros_vector[i113 - 1] = ros_val; nsh = nshl_vector[i113 - 1]; nsh = nshl_vector[i113 - 1]; if (i113 == 1) nsh += ies; if (i113 == 1) nsh += ies; rcf_vector[i113 - 1] = new double[nsh](); rcf_vector[i113 - 1] = new double[nsh](); for (int ns = 0; ns < nsh; ns++) { for (int ns = 0; ns < nsh; ns++) { double ns_rcf; double ns_rcf; int ns_rcf_exp; //int ns_rcf_exp; sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &ns_rcf, &ns_rcf_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &ns_rcf, &ns_rcf_exp); rcf_vector[i113 -1][ns] = ns_rcf * pow(10.0, 1.0 * ns_rcf_exp); str_target = file_lines[++last_read_line]; regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); ns_rcf = stod(str_number); rcf_vector[i113 - 1][ns] = ns_rcf; } } } } complex<double> ***dc0m = new complex<double>**[max_ici]; complex<double> ***dc0m = new complex<double>**[max_ici]; Loading @@ -464,6 +580,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam dc0m[dim1][dim2] = new complex<double>[nxi](); dc0m[dim1][dim2] = new complex<double>[nxi](); } } } } re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); for (int jxi468 = 1; jxi468 <= nxi; jxi468++) { for (int jxi468 = 1; jxi468 <= nxi; jxi468++) { if (_idfc != 0 && jxi468 > 1) continue; if (_idfc != 0 && jxi468 > 1) continue; for (int i162 = 1; i162 <= nsph; i162++) { for (int i162 = 1; i162 <= nsph; i162++) { Loading @@ -473,11 +590,21 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam if (i162 == 1) ici = ici + ies; if (i162 == 1) ici = ici + ies; for (int i157 = 0; i157 < ici; i157++) { for (int i157 = 0; i157 < ici; i157++) { double dc0_real, dc0_img; double dc0_real, dc0_img; int dc0_real_exp, dc0_img_exp; //int dc0_real_exp, dc0_img_exp; sscanf(file_lines[++last_read_line].c_str(), " (%lf D%d, %lf D%d)", &dc0_real, &dc0_real_exp, &dc0_img, &dc0_img_exp); //sscanf(file_lines[++last_read_line].c_str(), " (%lf D%d, %lf D%d)", &dc0_real, &dc0_real_exp, &dc0_img, &dc0_img_exp); dc0_real *= pow(10.0, 1.0 * dc0_real_exp); str_target = file_lines[++last_read_line]; dc0_img *= pow(10.0, 1.0 * dc0_img_exp); regex_search(str_target, m, re); dc0m[i157][i162 - 1][jxi468 - 1] = dc0_real + 1i * dc0_img; string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); dc0_real = stod(str_number); str_target = m.suffix().str(); regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); dc0_img = stod(str_number); dc0m[i157][i162 - 1][jxi468 - 1] = std::complex<double>(dc0_real, dc0_img); } } } } } } Loading @@ -498,6 +625,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam _wp, _wp, _xip _xip ); ); delete[] file_lines; return config; return config; } } Loading Loading @@ -552,12 +680,14 @@ void ScattererConfiguration::write_binary(string file_name, string mode) { const double two_pi = acos(0.0) * 4.0; const double two_pi = acos(0.0) * 4.0; const double evc = 6.5821188e-16; const double evc = 6.5821188e-16; int max_ici = 0; int max_ici = 0; bool is_new_vector = false; if (mode.compare("LEGACY") == 0) { // Legacy mode was chosen. if (mode.compare("LEGACY") == 0) { // Legacy mode was chosen. fstream output; fstream output; int ies = (use_external_sphere)? 1 : 0; int ies = (use_external_sphere)? 1 : 0; double *xi_vec; double *xi_vec; if (reference_variable_name.compare("XIV") == 0) xi_vec = scale_vec; if (reference_variable_name.compare("XIV") == 0) xi_vec = scale_vec; else { else { is_new_vector = true; xi_vec = new double[number_of_scales]; xi_vec = new double[number_of_scales]; if (reference_variable_name.compare("WNS") == 0) { if (reference_variable_name.compare("WNS") == 0) { for (int i = 0; i < number_of_scales; i++) for (int i = 0; i < number_of_scales; i++) Loading Loading @@ -622,6 +752,7 @@ void ScattererConfiguration::write_binary(string file_name, string mode) { } } } } } } if (is_new_vector) delete[] xi_vec; output.close(); output.close(); } } } } Loading Loading @@ -793,7 +924,7 @@ void ScattererConfiguration::write_formatted(string file_name) { for (int jxi476 = 0; jxi476 < number_of_scales; jxi476++) { for (int jxi476 = 0; jxi476 < number_of_scales; jxi476++) { double dc0_real = dc0_matrix[ic477 - 1][i478 - 1][jxi476].real(); double dc0_real = dc0_matrix[ic477 - 1][i478 - 1][jxi476].real(); double dc0_img = dc0_matrix[ic477 - 1][i478 - 1][jxi476].imag(); double dc0_img = dc0_matrix[ic477 - 1][i478 - 1][jxi476].imag(); fprintf(output, "%5d (%12.4lE,%12.4lE)\n", (jxi476 + 1), dc0_real, dc0_img); fprintf(output, "%5d%12.4lE%12.4lE\n", (jxi476 + 1), dc0_real, dc0_img); } } } } } } Loading Loading
src/libnptm/Configuration.cpp +234 −103 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ #include <cmath> #include <cmath> #include <cstdio> #include <cstdio> #include <fstream> #include <fstream> #include <regex> #include <string> #include <string> #include "../include/List.h" #include "../include/List.h" #include "../include/Parsers.h" #include "../include/Parsers.h" Loading Loading @@ -59,6 +60,8 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { int num_lines = 0; int num_lines = 0; int last_read_line = 0; int last_read_line = 0; string *file_lines; string *file_lines; string str_target, str_num; smatch m; try { try { file_lines = load_file(file_name, &num_lines); file_lines = load_file(file_name, &num_lines); } catch (exception &ex) { } catch (exception &ex) { Loading @@ -66,19 +69,44 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { } } int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0; int _nsph = 0, _lm = 0, _in_pol = 0, _npnt = 0, _npntts = 0, _isam = 0; int _li = 0, _le = 0, _mxndm = 0, _iavm = 0; int _li = 0, _le = 0, _mxndm = 0, _iavm = 0; sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); regex re = regex("-?[0-9]+"); str_target = file_lines[last_read_line++]; regex_search(str_target, m, re); //sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); _nsph = stoi(m.str()); if (_nsph == 1) { if (_nsph == 1) { sscanf( //sscanf( file_lines[last_read_line++].c_str(), // file_lines[last_read_line++].c_str(), " %*d %d %d %d %d %d", // " %*d %d %d %d %d %d", &_lm, &_in_pol, &_npnt, &_npntts, &_isam // &_lm, &_in_pol, &_npnt, &_npntts, &_isam ); //); for (int ri = 0; ri < 5; ri++) { str_target = m.suffix().str(); regex_search(str_target, m, re); if (ri == 0) _lm = stoi(m.str()); if (ri == 1) _in_pol = stoi(m.str()); if (ri == 2) _npnt = stoi(m.str()); if (ri == 3) _npntts = stoi(m.str()); if (ri == 4) _isam = stoi(m.str()); } } else { } else { sscanf( //sscanf( file_lines[last_read_line++].c_str(), // file_lines[last_read_line++].c_str(), " %*d %d %d %d %d %d %d %d %d", // " %*d %d %d %d %d %d %d %d %d", &_li, &_le, &_mxndm, &_in_pol, &_npnt, &_npntts, &_iavm, &_isam // &_li, &_le, &_mxndm, &_in_pol, &_npnt, &_npntts, &_iavm, &_isam ); //); for (int ri = 0; ri < 8; ri++) { str_target = m.suffix().str(); regex_search(str_target, m, re); if (ri == 0) _li = stoi(m.str()); if (ri == 1) _le = stoi(m.str()); if (ri == 2) _mxndm = stoi(m.str()); if (ri == 3) _in_pol = stoi(m.str()); if (ri == 4) _npnt = stoi(m.str()); if (ri == 5) _npntts = stoi(m.str()); if (ri == 6) _iavm = stoi(m.str()); if (ri == 7) _isam = stoi(m.str()); } } } double *x, *y, *z; double *x, *y, *z; x = new double[_nsph]; x = new double[_nsph]; Loading @@ -90,56 +118,56 @@ GeometryConfiguration* GeometryConfiguration::from_legacy(string file_name) { z[0] = 0.0; z[0] = 0.0; } else { } else { for (int i = 0; i < _nsph; i++) { for (int i = 0; i < _nsph; i++) { double sph_x, sph_y, sph_z; str_target = file_lines[last_read_line++]; int sph_x_exp, sph_y_exp, sph_z_exp; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); sscanf( for (int ri = 0; ri < 3; ri++) { file_lines[last_read_line++].c_str(), regex_search(str_target, m, re); " %lf D%d %lf D%d %lf D%d", str_num = regex_replace(m.str(), regex("D"), "e"); &sph_x, &sph_x_exp, &sph_y, &sph_y_exp, &sph_z, &sph_z_exp str_num = regex_replace(str_num, regex("d"), "e"); ); if (ri == 0) x[i] = stod(str_num); x[i] = sph_x * pow(10.0, 1.0 * sph_x_exp); if (ri == 1) y[i] = stod(str_num); y[i] = sph_y * pow(10.0, 1.0 * sph_y_exp); if (ri == 2) z[i] = stod(str_num); z[i] = sph_z * pow(10.0, 1.0 * sph_z_exp); str_target = m.suffix().str(); } } } } } double in_th_start, in_th_end, in_th_step, sc_th_start, sc_th_end, sc_th_step; double in_th_start, in_th_end, in_th_step, sc_th_start, sc_th_end, sc_th_step; int in_th_start_exp, in_th_end_exp, in_th_step_exp, sc_th_start_exp, sc_th_end_exp, sc_th_step_exp; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); sscanf( str_target = file_lines[last_read_line++]; file_lines[last_read_line++].c_str(), for (int ri = 0; ri < 6; ri++) { " %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d", regex_search(str_target, m, re); &in_th_start, &in_th_start_exp, str_num = regex_replace(m.str(), regex("D"), "e"); &in_th_step, &in_th_step_exp, str_num = regex_replace(str_num, regex("d"), "e"); &in_th_end, &in_th_end_exp, if (ri == 0) in_th_start = stod(str_num); &sc_th_start, &sc_th_start_exp, if (ri == 1) in_th_step = stod(str_num); &sc_th_step, &sc_th_step_exp, if (ri == 2) in_th_end = stod(str_num); &sc_th_end, &sc_th_end_exp if (ri == 3) sc_th_start = stod(str_num); ); if (ri == 4) sc_th_step = stod(str_num); in_th_start *= pow(10.0, 1.0 * in_th_start_exp); if (ri == 5) sc_th_end = stod(str_num); in_th_step *= pow(10.0, 1.0 * in_th_step_exp); str_target = m.suffix().str(); in_th_end *= pow(10.0, 1.0 * in_th_end_exp); } sc_th_start *= pow(10.0, 1.0 * sc_th_start_exp); sc_th_step *= pow(10.0, 1.0 * sc_th_step_exp); sc_th_end *= pow(10.0, 1.0 * sc_th_end_exp); double in_ph_start, in_ph_end, in_ph_step, sc_ph_start, sc_ph_end, sc_ph_step; double in_ph_start, in_ph_end, in_ph_step, sc_ph_start, sc_ph_end, sc_ph_step; int in_ph_start_exp, in_ph_end_exp, in_ph_step_exp, sc_ph_start_exp, sc_ph_end_exp, sc_ph_step_exp; str_target = file_lines[last_read_line++]; sscanf( for (int ri = 0; ri < 6; ri++) { file_lines[last_read_line++].c_str(), regex_search(str_target, m, re); " %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d %lf D%d", str_num = regex_replace(m.str(), regex("D"), "e"); &in_ph_start, &in_ph_start_exp, str_num = regex_replace(str_num, regex("d"), "e"); &in_ph_step, &in_ph_step_exp, if (ri == 0) in_ph_start = stod(str_num); &in_ph_end, &in_ph_end_exp, if (ri == 1) in_ph_step = stod(str_num); &sc_ph_start, &sc_ph_start_exp, if (ri == 2) in_ph_end = stod(str_num); &sc_ph_step, &sc_ph_step_exp, if (ri == 3) sc_ph_start = stod(str_num); &sc_ph_end, &sc_ph_end_exp if (ri == 4) sc_ph_step = stod(str_num); ); if (ri == 5) sc_ph_end = stod(str_num); in_ph_start *= pow(10.0, 1.0 * in_ph_start_exp); str_target = m.suffix().str(); in_ph_step *= pow(10.0, 1.0 * in_ph_step_exp); } in_ph_end *= pow(10.0, 1.0 * in_ph_end_exp); sc_ph_start *= pow(10.0, 1.0 * sc_ph_start_exp); sc_ph_step *= pow(10.0, 1.0 * sc_ph_step_exp); sc_ph_end *= pow(10.0, 1.0 * sc_ph_end_exp); int _jwtm; int _jwtm; sscanf(file_lines[last_read_line++].c_str(), " %d", &_jwtm); re = regex("[0-9]+"); str_target = file_lines[last_read_line++]; regex_search(str_target, m, re); //sscanf(file_lines[last_read_line].c_str(), " %d", &_nsph); _jwtm = stoi(m.str()); GeometryConfiguration *conf = new GeometryConfiguration( GeometryConfiguration *conf = new GeometryConfiguration( _nsph, _lm, _in_pol, _npnt, _npntts, _isam, _nsph, _lm, _in_pol, _npnt, _npntts, _isam, _li, _le, _mxndm, _iavm, _li, _le, _mxndm, _iavm, Loading Loading @@ -170,7 +198,6 @@ ScattererConfiguration::ScattererConfiguration( double x double x ) { ) { number_of_spheres = nsph; number_of_spheres = nsph; scale_vec = scale_vector; number_of_scales = nxi; number_of_scales = nxi; reference_variable_name = variable_name; reference_variable_name = variable_name; iog_vec = iog_vector; iog_vec = iog_vector; Loading @@ -183,6 +210,20 @@ ScattererConfiguration::ScattererConfiguration( exdc = ex; exdc = ex; wp = w; wp = w; xip = x; xip = x; if (variable_name == "XIV") scale_vec = scale_vector; else { scale_vec = new double[number_of_scales](); const double pi2 = 2.0 * acos(-1.0); const double evc = 6.5821188e-16; for (int si = 0; si < number_of_scales; si++) { double value = scale_vector[si]; if (variable_name.compare("WNS") == 0) value *= (3.0e8 / wp); else if (variable_name.compare("WLS") == 0) value = pi2 / value * 3.0e8 / wp; else if (variable_name.compare("PUS") == 0) value /= wp; else if (variable_name.compare("EVS") == 0) value /= (evc * wp); scale_vec[si] = value; } } } } ScattererConfiguration::~ScattererConfiguration() { ScattererConfiguration::~ScattererConfiguration() { Loading Loading @@ -244,7 +285,10 @@ ScattererConfiguration* ScattererConfiguration::from_binary(string file_name, st ros_vector = new double[nsph](); ros_vector = new double[nsph](); rcf_vector = new double*[nsph]; rcf_vector = new double*[nsph]; for (int i115 = 1; i115 <= nsph; i115++) { for (int i115 = 1; i115 <= nsph; i115++) { if (iog[i115 - 1] < i115) continue; if (iog[i115 - 1] < i115) { rcf_vector[i115 - 1] = new double[1](); continue; } input.read(reinterpret_cast<char *>(&(nshl_vector[i115 - 1])), sizeof(int)); input.read(reinterpret_cast<char *>(&(nshl_vector[i115 - 1])), sizeof(int)); input.read(reinterpret_cast<char *>(&(ros_vector[i115 - 1])), sizeof(double)); input.read(reinterpret_cast<char *>(&(ros_vector[i115 - 1])), sizeof(double)); int nsh = nshl_vector[i115 - 1]; int nsh = nshl_vector[i115 - 1]; Loading Loading @@ -310,6 +354,8 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam int num_lines = 0; int num_lines = 0; int last_read_line = 0; int last_read_line = 0; string *file_lines; string *file_lines; regex re; smatch m; try { try { file_lines = load_file(dedfb_file_name, &num_lines); file_lines = load_file(dedfb_file_name, &num_lines); } catch (exception &ex) { } catch (exception &ex) { Loading @@ -317,22 +363,38 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam } } int nsph, ies; int nsph, ies; int max_ici = 0; int max_ici = 0; sscanf(file_lines[last_read_line].c_str(), " %d %d", &nsph, &ies); re = regex("[0-9]+"); string str_target = file_lines[last_read_line]; for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); if (ri == 0) nsph = stoi(m.str()); if (ri == 1) ies = stoi(m.str()); str_target = m.suffix().str(); } if (ies != 0) ies = 1; if (ies != 0) ies = 1; double _exdc, _wp, _xip; double _exdc, _wp, _xip; int exdc_exp, wp_exp, xip_exp; str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); for (int ri = 0; ri < 3; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) _exdc = stod(str_number); if (ri == 1) _wp = stod(str_number); if (ri == 2) _xip = stod(str_number); str_target = m.suffix().str(); } int _idfc, nxi, instpc, insn; int _idfc, nxi, instpc, insn; sscanf( re = regex("-?[0-9]+"); file_lines[++last_read_line].c_str(), for (int ri = 0; ri < 4; ri++) { " %lf D%d %lf D%d %lf D%d %d %d %d %d", regex_search(str_target, m, re); &_exdc, &exdc_exp, if (ri == 0) _idfc = stoi(m.str()); &_wp, &wp_exp, if (ri == 1) nxi = stoi(m.str()); &_xip, &xip_exp, if (ri == 2) instpc = stoi(m.str()); &_idfc, &nxi, &instpc, &insn if (ri == 3) insn = stoi(m.str()); ); str_target = m.suffix().str(); _exdc *= pow(10.0, 1.0 * 1.0 * exdc_exp); } _wp *= pow(10.0, 1.0 * wp_exp); _xip *= pow(10.0, 1.0 * xip_exp); double *variable_vector; double *variable_vector; string variable_name; string variable_name; Loading @@ -341,23 +403,41 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam variable_name = "XIV"; variable_name = "XIV"; if (instpc < 1) { // The variable vector is explicitly defined. if (instpc < 1) { // The variable vector is explicitly defined. double xi; double xi; int xi_exp; //int xi_exp; List<double> xi_vector; List<double> xi_vector; sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); //sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); xi *= pow(10.0, 1.0 * xi_exp); str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); xi = stod(str_number); xi_vector.set(0, xi); xi_vector.set(0, xi); for (int jxi310 = 1; jxi310 < nxi; jxi310++) { for (int jxi310 = 1; jxi310 < nxi; jxi310++) { sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d", &xi, &xi_exp); str_target = file_lines[++last_read_line]; xi *= pow(10.0, 1.0 * xi_exp); regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); xi = stod(str_number); xi_vector.append(xi); xi_vector.append(xi); } } variable_vector = xi_vector.to_array(); variable_vector = xi_vector.to_array(); } else { // instpc >= 1: the variable vector is defined in steps } else { // instpc >= 1: the variable vector is defined in steps double xi, xi_step; double xi, xi_step; int xi_exp, xi_step_exp; str_target = file_lines[++last_read_line]; sscanf(file_lines[++last_read_line].c_str(), " %9lE D%d %9lE D%d", &xi, &xi_exp, &xi_step, &xi_step_exp); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); xi *= pow(10.0, 1.0 * xi_exp); regex_search(str_target, m, re); xi_step *= pow(10.0, 1.0 * xi_step_exp); for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) xi = stod(str_number); if (ri == 1) xi_step = stod(str_number); str_target = m.suffix().str(); } variable_vector = new double[nxi](); variable_vector = new double[nxi](); for (int jxi320 = 0; jxi320 < nxi; jxi320++) { for (int jxi320 = 0; jxi320 < nxi; jxi320++) { variable_vector[jxi320] = xi; variable_vector[jxi320] = xi; Loading @@ -368,10 +448,16 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam variable_vector = new double[nxi](); variable_vector = new double[nxi](); if (instpc == 0) { // The variable vector is explicitly defined if (instpc == 0) { // The variable vector is explicitly defined double vs; double vs; int vs_exp; //int vs_exp; for (int jxi_r = 0; jxi_r < nxi; jxi_r++) { for (int jxi_r = 0; jxi_r < nxi; jxi_r++) { sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &vs, &vs_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &vs, &vs_exp); vs *= pow(10.0, 1.0 * vs_exp); str_target = file_lines[++last_read_line]; re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); vs = stod(str_number); variable_vector[jxi_r] = vs; variable_vector[jxi_r] = vs; } } switch (insn) { switch (insn) { Loading @@ -393,10 +479,20 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam } } } else { // The variable vector needs to be computed in steps } else { // The variable vector needs to be computed in steps double vs, vs_step; double vs, vs_step; int vs_exp, vs_step_exp; //int vs_exp, vs_step_exp; sscanf(file_lines[++last_read_line].c_str(), " %lf D%d %lf D%d", &vs, &vs_exp, &vs_step, &vs_step_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d %lf D%d", &vs, &vs_exp, &vs_step, &vs_step_exp); vs *= pow(10.0, 1.0 * vs_exp); str_target = file_lines[++last_read_line]; vs_step *= pow(10.0, 1.0 * vs_step_exp); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); for (int ri = 0; ri < 2; ri++) { regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); if (ri == 0) vs = stod(str_number); if (ri == 1) vs_step = stod(str_number); str_target = m.suffix().str(); } for (int jxi110w = 0; jxi110w < nxi; jxi110w++) { for (int jxi110w = 0; jxi110w < nxi; jxi110w++) { variable_vector[jxi110w] = vs; variable_vector[jxi110w] = vs; vs += vs_step; vs += vs_step; Loading Loading @@ -441,20 +537,40 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam for (int i113 = 1; i113 <= nsph; i113++) { for (int i113 = 1; i113 <= nsph; i113++) { int i_val, nsh; int i_val, nsh; double ros_val; double ros_val; int ros_val_exp; //int ros_val_exp; if (iog_vector[i113 - 1] < i113) continue; if (iog_vector[i113 - 1] < i113) { sscanf(file_lines[++last_read_line].c_str(), " %d %lf D%d", &i_val, &ros_val, &ros_val_exp); rcf_vector[i113 - 1] = new double[1](); continue; } //sscanf(file_lines[++last_read_line].c_str(), " %d %lf D%d", &i_val, &ros_val, &ros_val_exp); re = regex("[0-9]+"); str_target = file_lines[++last_read_line]; regex_search(str_target, m, re); i_val = stoi(m.str()); str_target = m.suffix(); re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); regex_search(str_target, m, re); string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); ros_val = stod(str_number); nshl_vector[i113 - 1] = i_val; nshl_vector[i113 - 1] = i_val; if (max_ici < (i_val + 1) / 2) max_ici = (i_val + 1) / 2; if (max_ici < (i_val + 1) / 2) max_ici = (i_val + 1) / 2; ros_vector[i113 - 1] = ros_val * pow(10.0, 1.0 * ros_val_exp); ros_vector[i113 - 1] = ros_val; nsh = nshl_vector[i113 - 1]; nsh = nshl_vector[i113 - 1]; if (i113 == 1) nsh += ies; if (i113 == 1) nsh += ies; rcf_vector[i113 - 1] = new double[nsh](); rcf_vector[i113 - 1] = new double[nsh](); for (int ns = 0; ns < nsh; ns++) { for (int ns = 0; ns < nsh; ns++) { double ns_rcf; double ns_rcf; int ns_rcf_exp; //int ns_rcf_exp; sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &ns_rcf, &ns_rcf_exp); //sscanf(file_lines[++last_read_line].c_str(), " %lf D%d", &ns_rcf, &ns_rcf_exp); rcf_vector[i113 -1][ns] = ns_rcf * pow(10.0, 1.0 * ns_rcf_exp); str_target = file_lines[++last_read_line]; regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); ns_rcf = stod(str_number); rcf_vector[i113 - 1][ns] = ns_rcf; } } } } complex<double> ***dc0m = new complex<double>**[max_ici]; complex<double> ***dc0m = new complex<double>**[max_ici]; Loading @@ -464,6 +580,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam dc0m[dim1][dim2] = new complex<double>[nxi](); dc0m[dim1][dim2] = new complex<double>[nxi](); } } } } re = regex("-?[0-9]+\\.[0-9]+([eEdD][-+]?)?[0-9]+"); for (int jxi468 = 1; jxi468 <= nxi; jxi468++) { for (int jxi468 = 1; jxi468 <= nxi; jxi468++) { if (_idfc != 0 && jxi468 > 1) continue; if (_idfc != 0 && jxi468 > 1) continue; for (int i162 = 1; i162 <= nsph; i162++) { for (int i162 = 1; i162 <= nsph; i162++) { Loading @@ -473,11 +590,21 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam if (i162 == 1) ici = ici + ies; if (i162 == 1) ici = ici + ies; for (int i157 = 0; i157 < ici; i157++) { for (int i157 = 0; i157 < ici; i157++) { double dc0_real, dc0_img; double dc0_real, dc0_img; int dc0_real_exp, dc0_img_exp; //int dc0_real_exp, dc0_img_exp; sscanf(file_lines[++last_read_line].c_str(), " (%lf D%d, %lf D%d)", &dc0_real, &dc0_real_exp, &dc0_img, &dc0_img_exp); //sscanf(file_lines[++last_read_line].c_str(), " (%lf D%d, %lf D%d)", &dc0_real, &dc0_real_exp, &dc0_img, &dc0_img_exp); dc0_real *= pow(10.0, 1.0 * dc0_real_exp); str_target = file_lines[++last_read_line]; dc0_img *= pow(10.0, 1.0 * dc0_img_exp); regex_search(str_target, m, re); dc0m[i157][i162 - 1][jxi468 - 1] = dc0_real + 1i * dc0_img; string str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); dc0_real = stod(str_number); str_target = m.suffix().str(); regex_search(str_target, m, re); str_number = m.str(); str_number = regex_replace(str_number, regex("D"), "e"); str_number = regex_replace(str_number, regex("d"), "e"); dc0_img = stod(str_number); dc0m[i157][i162 - 1][jxi468 - 1] = std::complex<double>(dc0_real, dc0_img); } } } } } } Loading @@ -498,6 +625,7 @@ ScattererConfiguration* ScattererConfiguration::from_dedfb(string dedfb_file_nam _wp, _wp, _xip _xip ); ); delete[] file_lines; return config; return config; } } Loading Loading @@ -552,12 +680,14 @@ void ScattererConfiguration::write_binary(string file_name, string mode) { const double two_pi = acos(0.0) * 4.0; const double two_pi = acos(0.0) * 4.0; const double evc = 6.5821188e-16; const double evc = 6.5821188e-16; int max_ici = 0; int max_ici = 0; bool is_new_vector = false; if (mode.compare("LEGACY") == 0) { // Legacy mode was chosen. if (mode.compare("LEGACY") == 0) { // Legacy mode was chosen. fstream output; fstream output; int ies = (use_external_sphere)? 1 : 0; int ies = (use_external_sphere)? 1 : 0; double *xi_vec; double *xi_vec; if (reference_variable_name.compare("XIV") == 0) xi_vec = scale_vec; if (reference_variable_name.compare("XIV") == 0) xi_vec = scale_vec; else { else { is_new_vector = true; xi_vec = new double[number_of_scales]; xi_vec = new double[number_of_scales]; if (reference_variable_name.compare("WNS") == 0) { if (reference_variable_name.compare("WNS") == 0) { for (int i = 0; i < number_of_scales; i++) for (int i = 0; i < number_of_scales; i++) Loading Loading @@ -622,6 +752,7 @@ void ScattererConfiguration::write_binary(string file_name, string mode) { } } } } } } if (is_new_vector) delete[] xi_vec; output.close(); output.close(); } } } } Loading Loading @@ -793,7 +924,7 @@ void ScattererConfiguration::write_formatted(string file_name) { for (int jxi476 = 0; jxi476 < number_of_scales; jxi476++) { for (int jxi476 = 0; jxi476 < number_of_scales; jxi476++) { double dc0_real = dc0_matrix[ic477 - 1][i478 - 1][jxi476].real(); double dc0_real = dc0_matrix[ic477 - 1][i478 - 1][jxi476].real(); double dc0_img = dc0_matrix[ic477 - 1][i478 - 1][jxi476].imag(); double dc0_img = dc0_matrix[ic477 - 1][i478 - 1][jxi476].imag(); fprintf(output, "%5d (%12.4lE,%12.4lE)\n", (jxi476 + 1), dc0_real, dc0_img); fprintf(output, "%5d%12.4lE%12.4lE\n", (jxi476 + 1), dc0_real, dc0_img); } } } } } } Loading