This commit is contained in:
张壹 2025-01-13 12:08:35 +08:00
parent 4f76487bc8
commit 2a4f54cf33
4 changed files with 332 additions and 95 deletions

View File

@ -78,6 +78,16 @@ gctl::meshdata &gctl::base_mesh::get_data(std::string datname)
return datalist_[data_index(datname)];
}
const gctl::meshdata &gctl::base_mesh::get_data(std::string datname) const
{
return datalist_[data_index(datname)];
}
gctl::meshdata *gctl::base_mesh::get_data_ptr(std::string datname)
{
return &datalist_[data_index(datname)];
}
void gctl::base_mesh::remove_data(std::string datname)
{
int idx = data_index(datname);

View File

@ -151,7 +151,7 @@ namespace gctl
void set_meshinfo(std::string in_info);
/**
* @brief
* @brief
*
* @param in_loctype
* @param in_valtype
@ -160,13 +160,13 @@ namespace gctl
* @param if_output
* @param nan_val
*
* @return
* @return
*/
meshdata &add_data(mesh_data_type_e in_loctype, mesh_data_value_e in_valtype, std::string name,
double init_val, bool if_output = true, double nan_val = GCTL_BDL_MAX);
/**
* @brief
* @brief
*
* @param in_loctype
* @param name
@ -174,13 +174,13 @@ namespace gctl
* @param if_output
* @param nan_val
*
* @return
* @return
*/
meshdata &add_data(mesh_data_type_e in_loctype, std::string name, const array<double> &init_arr,
bool if_output = true, double nan_val = GCTL_BDL_MAX);
/**
* @brief
* @brief
*
* @param in_loctype
* @param name
@ -188,13 +188,13 @@ namespace gctl
* @param if_output
* @param nan_val
*
* @return
* @return
*/
meshdata &add_data(mesh_data_type_e in_loctype, std::string name, const array<point3dc> &init_arr,
bool if_output = true, double nan_val = GCTL_BDL_MAX);
/**
* @brief
* @brief
*
* @param in_loctype
* @param name
@ -202,19 +202,35 @@ namespace gctl
* @param if_output
* @param nan_val
*
* @return
* @return
*/
meshdata &add_data(mesh_data_type_e in_loctype, std::string name, const array<tensor> &init_arr,
bool if_output = true, double nan_val = GCTL_BDL_MAX);
/**
* @brief
* @brief
*
* @param datname
* @return
* @return
*/
meshdata &get_data(std::string datname);
/**
* @brief
*
* @param datname
* @return
*/
const meshdata &get_data(std::string datname) const;
/**
* @brief
*
* @param datname
* @return
*/
meshdata *get_data_ptr(std::string datname);
/**
* @brief
*
@ -242,7 +258,7 @@ namespace gctl
void save_gmsh_withdata(std::string filename, std::string datname, output_type_e out_mode, index_packed_e packed = Packed);
/**
* @brief Gmsh文件
* @brief Gmsh文件
*
* @param filename
* @param packed 0
@ -250,7 +266,7 @@ namespace gctl
virtual void save_gmsh(std::string filename, index_packed_e packed = Packed) = 0;
/**
* @brief
* @brief
*
*/
virtual void show_mesh_dimension(std::ostream &os) const = 0;

View File

@ -190,7 +190,7 @@ void gctl::regular_grid::clear_regular_grid()
int gctl::regular_grid::view(std::string datname)
{
meshdata data = get_data(datname);
meshdata &data = get_data(datname);
plt.range(rg_xmin, rg_xmin + (rg_xnum - 1)*rg_dx, rg_ymin, rg_ymin + (rg_ynum - 1)*rg_dy);
plt.demension(rg_xnum, rg_ynum);
@ -422,36 +422,34 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e
check_initiated(); // check to see if the mesh is not initiated
bool if_append = false;
meshdata curr_data;
for (size_t i = 0; i < datalist_.size(); i++)
{
curr_data = datalist_[i];
if (curr_data.loctype_ == d_type && d_type == NodeData &&
curr_data.valtype_ == Scalar && curr_data.output_ok_)
if (datalist_[i].loctype_ == d_type && d_type == NodeData &&
datalist_[i].valtype_ == Scalar && datalist_[i].output_ok_)
{
if (!if_append)
{
gctl::save_netcdf_grid(filename, curr_data.datval_, rg_xnum, rg_ynum, rg_xmin,
rg_dx, rg_ymin, rg_dy, xname, yname, curr_data.name_);
gctl::save_netcdf_grid(filename, datalist_[i].datval_, rg_xnum, rg_ynum, rg_xmin,
rg_dx, rg_ymin, rg_dy, xname, yname, datalist_[i].name_);
if_append = true;
}
else
{
gctl::append_netcdf_grid(filename, curr_data.datval_, xname, yname, curr_data.name_);
gctl::append_netcdf_grid(filename, datalist_[i].datval_, xname, yname, datalist_[i].name_);
}
}
else if (curr_data.loctype_ == d_type && d_type == ElemData &&
curr_data.valtype_ == Scalar && curr_data.output_ok_)
else if (datalist_[i].loctype_ == d_type && d_type == ElemData &&
datalist_[i].valtype_ == Scalar && datalist_[i].output_ok_)
{
if (!if_append)
{
gctl::save_netcdf_grid(filename, curr_data.datval_, rg_xnum-1, rg_ynum-1, rg_xmin+0.5*rg_dx,
rg_dx, rg_ymin+0.5*rg_dy, rg_dy, xname, yname, curr_data.name_);
gctl::save_netcdf_grid(filename, datalist_[i].datval_, rg_xnum-1, rg_ynum-1, rg_xmin+0.5*rg_dx,
rg_dx, rg_ymin+0.5*rg_dy, rg_dy, xname, yname, datalist_[i].name_);
if_append = true;
}
else
{
gctl::append_netcdf_grid(filename, curr_data.datval_, xname, yname, curr_data.name_);
gctl::append_netcdf_grid(filename, datalist_[i].datval_, xname, yname, datalist_[i].name_);
}
}
}
@ -461,7 +459,7 @@ void gctl::regular_grid::save_netcdf_grid(std::string filename, mesh_data_type_e
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);
meshdata &curr_data = get_data(datname);
if (!curr_data.output_ok_)
{
@ -593,7 +591,7 @@ void gctl::regular_grid::load_surfer_grid(std::string filename, std::string datn
void gctl::regular_grid::save_surfer_grid(std::string filename, std::string datname, surfer_file_type_e grid_type)
{
meshdata curr_data = get_data(datname);
meshdata &curr_data = get_data(datname);
if (!curr_data.output_ok_)
{
@ -673,13 +671,10 @@ void gctl::regular_grid::save_gmsh(std::string filename, std::string datname, ou
void gctl::regular_grid::save_text(std::string filename, const array<std::string> &datname)
{
mesh_data_type_e d_type;
meshdata curr_data = get_data(datname[0]);
d_type = curr_data.loctype_;
for (size_t i = 1; i < datname.size(); i++)
meshdata &curr_data = get_data(datname[0]);
for (size_t i = 1; i < datalist_.size(); i++)
{
curr_data = get_data(datname[i]);
if (d_type != curr_data.loctype_)
if (curr_data.loctype_ != datalist_[i].loctype_)
{
throw std::runtime_error("[gctl::regular_grid] multiple data location types found.");
}
@ -700,10 +695,9 @@ void gctl::regular_grid::save_text(std::string filename, const array<std::string
for (size_t i = 0; i < node_num_; i++)
{
ofile << nodes[i].x << " " << nodes[i].y;
for (size_t n = 0; n < datname.size(); n++)
for (size_t n = 0; n < datalist_.size(); n++)
{
curr_data = get_data(datname[n]);
ofile << " " << curr_data.datval_[i];
ofile << " " << datalist_[n].datval_[i];
}
ofile << "\n";
}
@ -713,10 +707,9 @@ void gctl::regular_grid::save_text(std::string filename, const array<std::string
for (size_t i = 0; i < ele_num_; i++)
{
ofile << 0.5*(elements[i].dl->x + elements[i].ur->x) << " " << 0.5*(elements[i].dl->y + elements[i].ur->y);
for (size_t n = 0; n < datname.size(); n++)
for (size_t n = 0; n < datalist_.size(); n++)
{
curr_data = get_data(datname[n]);
ofile << " " << curr_data.datval_[i];
ofile << " " << datalist_[n].datval_[i];
}
ofile << "\n";
}
@ -767,7 +760,7 @@ void gctl::regular_grid::load_data_cloud(const array<point2dc> &in_posi, const a
in_val.get(), in_posi.size(), search_xlen, search_ylen, search_deg);
// create a new data object
meshdata curr_data = add_data(d_type, Scalar, datname, 0.0, true, GCTL_BDL_MAX);
meshdata &curr_data = add_data(d_type, Scalar, datname, 0.0, true, GCTL_BDL_MAX);
for (int i = 0; i < curr_data.datval_.size(); i++)
{
curr_data.datval_[i] = inte_data->at(i);
@ -785,7 +778,7 @@ void gctl::regular_grid::extract_points(std::string datname, const array<point2d
throw std::runtime_error("[gctl::regular_grid] The input array is empty.");
}
meshdata curr_data = get_data(datname);
meshdata &curr_data = get_data(datname);
mesh_data_value_e value_type = curr_data.valtype_;
mesh_data_type_e data_type = curr_data.loctype_;
if(value_type != Scalar)
@ -879,7 +872,7 @@ void gctl::regular_grid::extract_profile(std::string datname, const point2dc &st
void gctl::regular_grid::gradient(std::string datname, std::string gradname, gradient_type_e d_type, int order)
{
meshdata curr_data = get_data(datname);
meshdata &curr_data = get_data(datname);
mesh_data_value_e value_type = curr_data.valtype_;
mesh_data_type_e data_type = curr_data.loctype_;
@ -894,24 +887,21 @@ void gctl::regular_grid::gradient(std::string datname, std::string gradname, gra
}
// 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据
meshdata new_data;
mesh_data_value_e value_type2;
mesh_data_type_e data_type2;
if (saved(gradname))
{
new_data = get_data(gradname);
value_type2 = new_data.valtype_;
data_type2 = new_data.loctype_;
meshdata &check_data = get_data(gradname);
mesh_data_value_e value_type2 = check_data.valtype_;
mesh_data_type_e data_type2 = check_data.loctype_;
// 删除原有数据
if (value_type2 != value_type || data_type2 != data_type)
{
// 删除原有数据
remove_data(gradname);
// 新建数据
new_data = add_data(data_type, Scalar, gradname, 0.0, true, GCTL_BDL_MAX);
}
add_data(data_type, Scalar, gradname, 0.0, true, GCTL_BDL_MAX);
}
else new_data = add_data(data_type, Scalar, gradname, 0.0, true, GCTL_BDL_MAX);
else add_data(data_type, Scalar, gradname, 0.0, true, GCTL_BDL_MAX);
meshdata &new_data = get_data(gradname);
if (data_type == NodeData && d_type == Dx)
{
difference_2d(curr_data.datval_, new_data.datval_, rg_ynum, rg_xnum, rg_dx, Dx, order);
@ -933,11 +923,11 @@ void gctl::regular_grid::gradient(std::string datname, std::string gradname, gra
void gctl::regular_grid::sum(std::string newname, std::string datname, std::string datname2)
{
meshdata data_1 = get_data(datname);
meshdata &data_1 = get_data(datname);
mesh_data_value_e value_type1 = data_1.valtype_;
mesh_data_type_e data_type1 = data_1.loctype_;
meshdata data_2 = get_data(datname2);
meshdata &data_2 = get_data(datname2);
mesh_data_value_e value_type2 = data_2.valtype_;
mesh_data_type_e data_type2 = data_2.loctype_;
@ -946,7 +936,7 @@ void gctl::regular_grid::sum(std::string newname, std::string datname, std::stri
throw std::runtime_error("[gctl::regular_grid] Can't preform the process.");
}
meshdata new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
meshdata &new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
for (size_t i = 0; i < new_data.datval_.size(); i++)
{
@ -957,11 +947,11 @@ void gctl::regular_grid::sum(std::string newname, std::string datname, std::stri
void gctl::regular_grid::diff(std::string newname, std::string datname, std::string datname2)
{
meshdata data_1 = get_data(datname);
meshdata &data_1 = get_data(datname);
mesh_data_value_e value_type1 = data_1.valtype_;
mesh_data_type_e data_type1 = data_1.loctype_;
meshdata data_2 = get_data(datname2);
meshdata &data_2 = get_data(datname2);
mesh_data_value_e value_type2 = data_2.valtype_;
mesh_data_type_e data_type2 = data_2.loctype_;
@ -970,7 +960,7 @@ void gctl::regular_grid::diff(std::string newname, std::string datname, std::str
throw std::runtime_error("[gctl::regular_grid] Can't preform the process.");
}
meshdata new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
meshdata &new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
for (size_t i = 0; i < new_data.datval_.size(); i++)
{
@ -981,11 +971,11 @@ void gctl::regular_grid::diff(std::string newname, std::string datname, std::str
void gctl::regular_grid::boolean(std::string newname, std::string datname, std::string maskname, bool reverse)
{
meshdata data_1 = get_data(datname);
meshdata &data_1 = get_data(datname);
mesh_data_value_e value_type1 = data_1.valtype_;
mesh_data_type_e data_type1 = data_1.loctype_;
meshdata data_2 = get_data(maskname);
meshdata &data_2 = get_data(maskname);
mesh_data_value_e value_type2 = data_2.valtype_;
mesh_data_type_e data_type2 = data_2.loctype_;
@ -994,7 +984,7 @@ void gctl::regular_grid::boolean(std::string newname, std::string datname, std::
throw std::runtime_error("[gctl::regular_grid] Can't preform the process.");
}
meshdata new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
meshdata &new_data = add_data(data_type1, value_type1, newname, 0.0, true, GCTL_BDL_MAX);
if (!reverse)
{
@ -1035,7 +1025,7 @@ void gctl::regular_grid::function(std::string expression_str, std::string newnam
if (!parser.compile(expression_str, expression)) throw std::runtime_error("[gctl::function] Fail to compile the math expression.");
if (!saved(newname)) add_data(NodeData, Scalar, newname, 0.0, true, GCTL_BDL_MAX);
meshdata curr_data = get_data(newname);
meshdata &curr_data = get_data(newname);
if (curr_data.loctype_ == NodeData)
{
@ -1078,22 +1068,22 @@ void gctl::regular_grid::calculator(std::string expression_str, const array<std:
exprtk::parser<double> parser;
if (!parser.compile(expression_str, expression)) throw std::runtime_error("[gctl::regular_grid] Fail to compile the math expression.");
array<meshdata> datas(var.size());
array<meshdata*> datas_ptr(var.size());
mesh_data_value_e val_type1, val_type2;
mesh_data_type_e data_type1, data_type2;
// Remeber we put the output at the first place.
for (size_t i = 1; i < var.size(); i++)
{
datas[i] = get_data(data_list[i]);
datas_ptr[i] = get_data_ptr(data_list[i]);
}
val_type1 = datas[1].valtype_;
data_type1= datas[1].loctype_;
val_type1 = datas_ptr[1]->valtype_;
data_type1= datas_ptr[1]->loctype_;
for (size_t i = 2; i < var.size(); i++)
{
val_type2 = datas[i].valtype_;
data_type2= datas[i].loctype_;
val_type2 = datas_ptr[i]->valtype_;
data_type2= datas_ptr[i]->loctype_;
if (val_type1 != val_type2 || data_type1 != data_type2)
{
throw std::runtime_error("[gctl::regular_grid] Can't preform the calculation on selected data.");
@ -1101,22 +1091,24 @@ void gctl::regular_grid::calculator(std::string expression_str, const array<std:
}
if (!saved(data_list[0])) datas[0] = add_data(data_type1, val_type1, data_list[0], 0.0, true, GCTL_BDL_MAX);
val_type2 = datas[0].valtype_;
data_type2= datas[0].loctype_;
if (!saved(data_list[0])) add_data(data_type1, val_type1, data_list[0], 0.0, true, GCTL_BDL_MAX);
datas_ptr[0] = get_data_ptr(data_list[0]);
val_type2 = datas_ptr[0]->valtype_;
data_type2= datas_ptr[0]->loctype_;
if (val_type1 != val_type2 || data_type1 != data_type2)
{
throw std::runtime_error("[gctl::regular_grid] Can't preform the calculation on selected data.");
}
for (size_t i = 0; i < datas[0].datval_.size(); i++)
for (size_t i = 0; i < datas_ptr[0]->datval_.size(); i++)
{
for (size_t v = 0; v < var.size(); v++)
{
var[v] = datas[v].datval_[i];
var[v] = datas_ptr[v]->datval_[i];
}
datas[0].datval_[i] = expression.value();
datas_ptr[0]->datval_[i] = expression.value();
}
return;
}
@ -1127,7 +1119,7 @@ void gctl::regular_grid::calculator(std::string expression_str, const array<std:
void gctl::regular_grid::wavelet(std::string datname, std::string wavename, int order, bool summary)
{
meshdata curr_data = get_data(datname);
meshdata &curr_data = get_data(datname);
mesh_data_value_e value_type = curr_data.valtype_;
mesh_data_type_e data_type = curr_data.loctype_;
@ -1163,7 +1155,7 @@ void gctl::regular_grid::wavelet(std::string datname, std::string wavename, int
wavecoeffs[i] = coeff_copy[i];
}
meshdata new_data = add_data(data_type, value_type, datname+"_A"+std::to_string(wt->J), 0.0, true, GCTL_BDL_MAX);
meshdata &new_data = add_data(data_type, value_type, datname+"_A"+std::to_string(wt->J), 0.0, true, GCTL_BDL_MAX);
idwt2(wt, wavecoeffs, new_data.datval_.get());
int coeff_idx;

View File

@ -48,91 +48,310 @@ namespace gctl
/**
* mesh类型的虚函数实现
*/
/**
* @brief Gmsh文件
*
* @param filename
* @param packed 0
*/
void save_gmsh(std::string filename, index_packed_e packed = Packed);
void init(std::string in_name, std::string in_info, int xnum, int ynum,
double xmin, double ymin, double dx, double dy);
/**
* @brief
*/
void show_mesh_dimension(std::ostream &os) const;
/**
* @brief
*
* @param filename
*/
void load_binary(std::string filename);
/**
* @brief
*
* @param filename
*/
void save_binary(std::string filename);
/**
* regular_grid的专有函数
*/
regular_grid();
regular_grid(); ///< 构造函数
/**
* @brief
*
* @param in_name
* @param in_info
* @param xnum x方向单元数量
* @param ynum y方向单元数量
* @param xmin x方向最小值
* @param ymin y方向最小值
* @param dx x方向单元长度
* @param dy y方向单元长度
*/
regular_grid(std::string in_name, std::string in_info, int xnum, int ynum,
double xmin, double ymin, double dx, double dy);
virtual ~regular_grid();
virtual ~regular_grid(); ///< 析构函数
/**
* @brief
*
* @param in_name
* @param in_info
* @param xnum x方向单元数量
* @param ynum y方向单元数量
* @param xmin x方向最小值
* @param ymin y方向最小值
* @param dx x方向单元长度
* @param dy y方向单元长度
*/
void init(std::string in_name, std::string in_info, int xnum, int ynum,
double xmin, double ymin, double dx, double dy);
/**
* @brief
*/
void clear_regular_grid();
/**
* @brief 使mathgl显示规则网格
*
* @param datname
* @return
*/
int view(std::string datname);
/**
* @brief 使gmt绘制规则网格
*
* @param datname
*/
void plot(std::string datname);
int get_xdim() const;
int get_ydim() const;
double get_xmin() const;
double get_ymin() const;
double get_dx() const;
double get_dy() const;
int get_xdim() const; ///< 获取规则网格的x方向单元数量
int get_ydim() const; ///< 获取规则网格的y方向单元数量
double get_xmin() const; ///< 获取规则网格的x方向最小值
double get_ymin() const; ///< 获取规则网格的y方向最小值
double get_dx() const; ///< 获取规则网格的x方向单元长度
double get_dy() const; ///< 获取规则网格的y方向单元长度
#ifdef GCTL_NETCDF
/**
* @brief netcdf文件中读取规则网格数据
*
* @param filename
* @param d_type
* @param xname x坐标变量名
* @param yname y坐标变量名
* @param zname z坐标变量名
*/
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");
/**
* @brief netcdf文件中
*
* @param filename
* @param d_type
* @param xname x坐标变量名
* @param yname y坐标变量名
*/
void save_netcdf_grid(std::string filename, mesh_data_type_e d_type,
std::string xname = "x", std::string yname = "y");
/**
* @brief netcdf文件中
*
* @param filename
* @param datname
* @param xname x坐标变量名
* @param yname y坐标变量名
*/
void save_netcdf_grid(std::string filename, std::string datname,
std::string xname = "x", std::string yname = "y");
#endif // GCTL_NETCDF
/**
* @brief surfer文件中读取规则网格数据
*
* @param filename
* @param datname
* @param d_type
* @param grid_type
*/
void load_surfer_grid(std::string filename, std::string datname, mesh_data_type_e d_type, surfer_file_type_e grid_type = Surfer7Grid);
/**
* @brief surfer文件中
*
* @param filename
* @param datname
* @param grid_type
*/
void save_surfer_grid(std::string filename, std::string datname, surfer_file_type_e grid_type = Surfer7Grid);
void save_gmsh(std::string filename, index_packed_e packed = Packed);
/**
* @brief Gmsh文件中
*
* @param filename
* @param out_mode
* @param packed 0
*/
void save_gmsh(std::string filename, output_type_e out_mode, index_packed_e packed = Packed);
/**
* @brief Gmsh文件中
*
* @param filename
* @param datname
* @param out_mode
* @param packed 0
*/
void save_gmsh(std::string filename, std::string datname, output_type_e out_mode, index_packed_e packed = Packed);
/**
* @brief
*
* @param filename
* @param datname
*/
void save_text(std::string filename, const array<std::string> &datname);
/**
* @brief
*
* @param in_posi
* @param in_val
* @param search_xlen x方向长度
* @param search_ylen y方向长度
* @param search_deg
* @param datname
* @param d_type
*/
void load_data_cloud(const array<point2dc> &in_posi, const array<double> &in_val, double search_xlen,
double search_ylen, double search_deg, std::string datname, mesh_data_type_e d_type = NodeData);
/**
* @brief
*
* @param datname
* @param in_posi
* @param out_val
*/
void extract_points(std::string datname, const array<point2dc> &in_posi, array<double> &out_val);
/**
* @brief
*
* @param datname
* @param start_p
* @param end_p
* @param size_p
* @param out_posi
* @param out_val
*/
void extract_profile(std::string datname, const point2dc &start_p, const point2dc &end_p, int size_p,
array<point2dc> &out_posi, array<double> &out_val);
/**
* @brief
*
* @param datname
* @param gradname
* @param d_type
* @param order
*/
void gradient(std::string datname, std::string gradname, gradient_type_e d_type, int order = 1);
/**
* @brief
*
* @param newname
* @param datname
* @param datname2 2
*/
void sum(std::string newname, std::string datname, std::string datname2);
/**
* @brief
*
* @param newname
* @param datname
* @param datname2 2
*/
void diff(std::string newname, std::string datname, std::string datname2);
/**
* @brief
*
* @param newname
* @param datname
* @param maskname
* @param reverse
*/
void boolean(std::string newname, std::string datname, std::string maskname, bool reverse = false);
#ifdef GCTL_MESH_EXPRTK
/**
* @brief f为节点位置xy
*
* @param expression_str
* @param newname
* @param x_str x变量名称
* @param y_str y变量名称
* @param f_str f变量名称
*/
void function(std::string expression_str, std::string newname, std::string x_str = "x", std::string y_str = "y", std::string f_str = "f");
/**
* @brief
*
* @param expression_str
* @param var_list
* @param data_list
*/
void calculator(std::string expression_str, const array<std::string> &var_list, const array<std::string> &data_list);
#endif // GCTL_MESH_EXPRTK
#ifdef GCTL_MESH_WAVELIB
/**
* @brief
*
* @param datname
* @param wavename
* @param order
* @param summary
*/
void wavelet(std::string datname, std::string wavename, int order, bool summary = true);
#endif // GCTL_MESH_WAVELIB
protected:
int rg_xnum, rg_ynum;
double rg_xmin, rg_ymin;
double rg_dx, rg_dy;
int rg_xnum, rg_ynum; ///< 规则网格的x方向单元数量和y方向单元数量
double rg_xmin, rg_ymin; ///< 规则网格的x方向最小值和y方向最小值
double rg_dx, rg_dy; ///< 规则网格的x方向单元长度和y方向单元长度
#ifdef GCTL_GRAPHIC_MATHGL
mathgl_dens plt;
mathgl_dens plt; ///< mathgl绘图对象
#endif // GCTL_GRAPHIC_MATHGL
#ifdef GCTL_GRAPHIC_GMT
gmt_JX_single pic;
gmt_JX_single pic; ///< gmt绘图对象
#endif // GCTL_GRAPHIC_GMT
array<vertex2dc> nodes;
array<rectangle2d> elements;
array<vertex2dc> nodes; ///< 规则网格的节点数组
array<rectangle2d> elements; ///< 规则网格的单元数组
};
}