From ec540eead131595ca69dd1e1727fbc835c62dc9c Mon Sep 17 00:00:00 2001 From: Yi Zhang Date: Mon, 7 Oct 2024 21:09:58 +0800 Subject: [PATCH] tmp update --- lib/mesh/meshdata_scalar.cpp | 2 +- lib/mesh/meshdata_tensor.cpp | 6 ++-- lib/mesh/meshdata_vector.cpp | 6 ++-- lib/mesh/regular_grid.cpp | 26 +++++++++----- lib/mesh/regular_grid.h | 6 ++-- tool/gridmanager/gridmanager.cpp | 50 ++++++++++++++++---------- tool/gridmanager/readme_gridmanager.md | 2 +- 7 files changed, 61 insertions(+), 37 deletions(-) diff --git a/lib/mesh/meshdata_scalar.cpp b/lib/mesh/meshdata_scalar.cpp index b3b5f98..e02ae8c 100644 --- a/lib/mesh/meshdata_scalar.cpp +++ b/lib/mesh/meshdata_scalar.cpp @@ -79,7 +79,7 @@ void gctl::meshdata_scalar::show_stats(std::ostream &os) } } - os << "Mean = " << mean(tmp) << ", STD = " << std(tmp) << ", RMS = " << rms(tmp) << std::endl; + os << "Mean = " << tmp.mean() << ", STD = " << tmp.std() << ", RMS = " << tmp.rms() << std::endl; return; } diff --git a/lib/mesh/meshdata_tensor.cpp b/lib/mesh/meshdata_tensor.cpp index 3ec4ca0..803065f 100644 --- a/lib/mesh/meshdata_tensor.cpp +++ b/lib/mesh/meshdata_tensor.cpp @@ -67,9 +67,9 @@ void gctl::meshdata_tensor::show_stats(std::ostream &os) t[n] = datval[n].at(i, j); } - m[j + i*3] = mean(t); - s[j + i*3] = std(t); - r[j + i*3] = rms(t); + m[j + i*3] = t.mean(); + s[j + i*3] = t.std(); + r[j + i*3] = t.rms(); } } diff --git a/lib/mesh/meshdata_vector.cpp b/lib/mesh/meshdata_vector.cpp index 0332aeb..c93baad 100644 --- a/lib/mesh/meshdata_vector.cpp +++ b/lib/mesh/meshdata_vector.cpp @@ -62,19 +62,19 @@ void gctl::meshdata_vector::show_stats(std::ostream &os) { t[i] = datval[i].x; } - m[0] = mean(t); s[0] = std(t); r[0] = rms(t); + m[0] = t.mean(); s[0] = t.std(); r[0] = t.rms(); for (size_t i = 0; i < datval.size(); i++) { t[i] = datval[i].y; } - m[1] = mean(t); s[1] = std(t); r[1] = rms(t); + m[1] = t.mean(); s[1] = t.std(); r[1] = t.rms(); for (size_t i = 0; i < datval.size(); i++) { t[i] = datval[i].z; } - m[2] = mean(t); s[2] = std(t); r[2] = rms(t); + m[2] = t.mean(); s[2] = t.std(); r[2] = t.rms(); os << "Mean = (" << m[0] << "," << m[1] << "," << m[2] << ")" << "\nSTD = (" << s[0] << "," << s[1] << "," << s[2] << ")" diff --git a/lib/mesh/regular_grid.cpp b/lib/mesh/regular_grid.cpp index 12eeb98..b30462c 100644 --- a/lib/mesh/regular_grid.cpp +++ b/lib/mesh/regular_grid.cpp @@ -455,7 +455,8 @@ void gctl::regular_grid::load_netcdf_grid(std::string filename, mesh_data_type_e return; } -void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e d_type) +void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e d_type, + std::string xname, std::string yname) { if (!initialized) { @@ -476,12 +477,12 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e if (!if_append) { gctl::save_netcdf_grid(filename, *data_ptr, rg_xnum, rg_ynum, rg_xmin, - rg_dx, rg_ymin, rg_dy, "x", "y", curr_data->get_datname()); + rg_dx, rg_ymin, rg_dy, xname, yname, curr_data->get_datname()); if_append = true; } else { - gctl::append_netcdf_grid(filename, *data_ptr, "x", "y", curr_data->get_datname()); + gctl::append_netcdf_grid(filename, *data_ptr, xname, yname, curr_data->get_datname()); } } else if (curr_data->get_dattype() == d_type && d_type == ElemData && @@ -492,12 +493,12 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e if (!if_append) { gctl::save_netcdf_grid(filename, *data_ptr, rg_xnum-1, rg_ynum-1, rg_xmin+0.5*rg_dx, - rg_dx, rg_ymin+0.5*rg_dy, rg_dy, "x", "y", curr_data->get_datname()); + rg_dx, rg_ymin+0.5*rg_dy, rg_dy, xname, yname, curr_data->get_datname()); if_append = true; } else { - gctl::append_netcdf_grid(filename, *data_ptr, "x", "y", curr_data->get_datname()); + gctl::append_netcdf_grid(filename, *data_ptr, xname, yname, curr_data->get_datname()); } } } @@ -505,7 +506,8 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e return; } -void gctl::regular_grid::save_netcdf_grid(std::string filename, std::string datname) +void gctl::regular_grid::save_netcdf_grid(std::string filename, std::string datname, + std::string xname, std::string yname) { meshdata *curr_data = get_data(datname); @@ -523,13 +525,13 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, std::string datn { array* data_ptr = (array*)curr_data->get_datval_ptr(); gctl::save_netcdf_grid(filename, *data_ptr, rg_xnum, rg_ynum, rg_xmin, - rg_dx, rg_ymin, rg_dy, "x", "y", curr_data->get_datname()); + rg_dx, rg_ymin, rg_dy, xname, yname, curr_data->get_datname()); } else if (curr_data->get_valtype() == Scalar && curr_data->get_dattype() == ElemData) { array* data_ptr = (array*)curr_data->get_datval_ptr(); gctl::save_netcdf_grid(filename, *data_ptr, rg_xnum-1, rg_ynum-1, rg_xmin+0.5*rg_dx, - rg_dx, rg_ymin+0.5*rg_dy, rg_dy, "x", "y", curr_data->get_datname()); + rg_dx, rg_ymin+0.5*rg_dy, rg_dy, xname, yname, curr_data->get_datname()); } return; @@ -929,7 +931,13 @@ void gctl::regular_grid::extract_profile(std::string datname, const point2dc &st throw std::runtime_error("[gctl::regular_grid] Invalid profile size."); } - linespace(start_p, end_p, size_p, out_posi); + point2dc dp = 1.0/(size_p - 1)*(end_p - start_p); + out_posi.resize(size_p); + for (size_t i = 0; i < size_p; i++) + { + out_posi[i] = start_p + (1.0*i)*dp; + } + extract_points(datname, out_posi, out_val); return; } diff --git a/lib/mesh/regular_grid.h b/lib/mesh/regular_grid.h index d3acc9e..8b92bd8 100644 --- a/lib/mesh/regular_grid.h +++ b/lib/mesh/regular_grid.h @@ -81,8 +81,10 @@ namespace gctl void load_netcdf_grid(std::string filename, mesh_data_type_e d_type, std::string xname = "x", std::string yname = "y", std::string zname = "null"); - void save_netcdf_grid(std::string filename, mesh_data_type_e d_type); - void save_netcdf_grid(std::string filename, std::string datname); + void save_netcdf_grid(std::string filename, mesh_data_type_e d_type, + std::string xname = "x", std::string yname = "y"); + void save_netcdf_grid(std::string filename, std::string datname, + std::string xname = "x", std::string yname = "y"); #endif // GCTL_NETCDF diff --git a/tool/gridmanager/gridmanager.cpp b/tool/gridmanager/gridmanager.cpp index 1ac162f..cb3eafe 100644 --- a/tool/gridmanager/gridmanager.cpp +++ b/tool/gridmanager/gridmanager.cpp @@ -352,18 +352,22 @@ void open_netcdf(const std::vector &cmd_units) void save_netcdf(const std::vector &cmd_units) { - // save netcdf [|node|cell] + // save netcdf [|node|cell] [xname] [yname] if (cmd_units.size() < 3) throw std::runtime_error("save: insufficient parameters."); - gctl::array copy_str(2, "null"); - for (size_t i = 0; i < GCTL_MIN(cmd_units.size() - 2, 2); i++) + gctl::array copy_str(4, "null"); + for (size_t i = 0; i < GCTL_MIN(cmd_units.size() - 2, 4); i++) { copy_str[i] = cmd_units[i + 2]; } - if (copy_str[1] == "null") rg.save_netcdf_grid(copy_str[0], NodeData); - else if (copy_str[1] == "cell") rg.save_netcdf_grid(copy_str[0], ElemData); - else rg.save_netcdf_grid(copy_str[0], copy_str[1]); + std::string xname = "x", yname = "y"; + if (copy_str[2] != "null") xname = copy_str[2]; + if (copy_str[3] != "null") yname = copy_str[3]; + + if (copy_str[1] == "null") rg.save_netcdf_grid(copy_str[0], NodeData, xname, yname); + else if (copy_str[1] == "cell") rg.save_netcdf_grid(copy_str[0], ElemData, xname, yname); + else rg.save_netcdf_grid(copy_str[0], copy_str[1], xname, yname); return; } @@ -452,18 +456,22 @@ void data_cloud(const std::vector &cmd_units) if (copy_str[1] == "node") d_type = NodeData; else if (copy_str[1] == "cell") d_type = ElemData; else throw std::runtime_error("open-surfer: invalid grid data type."); - - std::string order_str = "0,1,2"; - char delimiter = ' '; - char annotate = '#'; - int head_record = 0; + + text_descriptor desc; + desc.file_name_ = copy_str[2]; + desc.file_ext_ = ".txt"; + desc.col_str_ = "0,1,2"; + desc.delimiter_ = ' '; + desc.att_sym_ = '#'; + desc.head_num_ = 0; if (copy_str[6] != "null") { - parse_string_to_value(copy_str[6], '/', true, order_str, delimiter, annotate, head_record); + parse_string_to_value(copy_str[6], '/', true, desc.col_str_, + desc.delimiter_, desc.att_sym_, desc.head_num_); } std::vector posix_vec, posiy_vec, data_vec; - read_text2vectors(copy_str[2], order_str, delimiter, annotate, head_record, posix_vec, posiy_vec, data_vec); + read_text2vectors(desc, posix_vec, posiy_vec, data_vec); array posi_arr(posix_vec.size()); array posi_val; @@ -717,16 +725,22 @@ void get_profile(const std::vector &cmd_units) } else // File exist { - std::string od_str = "0,1"; - char deli = ' ', antot = '#'; - int hr = 0; + text_descriptor desc; + desc.file_name_ = copy_str[2]; + desc.file_ext_ = ".txt"; + desc.att_sym_ = '#'; + desc.col_str_ = "0,1"; + desc.delimiter_ = ' '; + desc.head_num_ = 0; + if (copy_str[3] != "null") { - gctl::parse_string_to_value(copy_str[3], '/', true, od_str, deli, antot, hr); + gctl::parse_string_to_value(copy_str[3], '/', true, desc.col_str_, desc.delimiter_, + desc.att_sym_, desc.head_num_); } std::vector xs, ys; - gctl::read_text2vectors(copy_str[2], od_str, deli, antot, hr, xs, ys); + gctl::read_text2vectors(desc, xs, ys); xys.resize(xs.size()); for (size_t i = 0; i < xys.size(); i++) diff --git a/tool/gridmanager/readme_gridmanager.md b/tool/gridmanager/readme_gridmanager.md index 93f0a27..9bdd88f 100644 --- a/tool/gridmanager/readme_gridmanager.md +++ b/tool/gridmanager/readme_gridmanager.md @@ -17,7 +17,7 @@ Mathematic expresstions could be used to specify the grid ranges. #### save binary|netcdf|surfer|gmsh \ 1. `save binary ` Save the grid using the GCTL native binary format (.2m file). -2. `save netcdf [|node|cell]` Save grid data using the netCDF format. A \ could be given to write the specficed data. Use 'node' (default) or 'cell' to write all node or cell registed data, respectively. +2. `save netcdf [|node|cell] [xname] [yname]` Save grid data using the netCDF format. A \ could be given to write the specficed data. Use 'node' (default) or 'cell' to write all node or cell registed data, respectively. 3. `save surfer [surfer6-text|surfer6-binary|surfer7]` Save grid data using the Surfer format. A \ must be given to write the specficed data. 'surfer6-text', 'surfer6-binary' and 'surfer7' are the outputing grid format. 4. `save gmsh ` Save the grid using the Gmsh legacy format. This command will write all data that are allowed for outputing. 5. `save text ` Save the grid data to text file.