tmp update

This commit is contained in:
张壹 2025-01-13 14:32:02 +08:00
parent 8844f191e7
commit e67ec1a28d
6 changed files with 168 additions and 219 deletions

View File

@ -44,9 +44,9 @@ gctl::gm_regular_grid::gm_regular_grid(std::string in_name, std::string in_info,
void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname, gravitational_field_type_e c_type, int order) void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname, gravitational_field_type_e c_type, int order)
{ {
meshdata *data_ptr = get_data(datname); meshdata &data = get_data(datname);
mesh_data_value_e value_type = data_ptr->get_valtype(); mesh_data_value_e value_type = data.valtype_;
mesh_data_type_e data_type = data_ptr->get_dattype(); mesh_data_type_e data_type = data.loctype_;
if(value_type != Scalar) if(value_type != Scalar)
{ {
@ -59,16 +59,13 @@ void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname,
} }
// 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据 // 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据
meshdata *new_data_ptr = add_data(gradname, data_type, true, value_type); meshdata &new_data = add_data(data_type, value_type, gradname, 0.0);
array<double> *inval_ptr = (array<double>*) data_ptr->get_datval_ptr();
array<double> *outval_ptr = (array<double>*) new_data_ptr->get_datval_ptr();
gctl::array<double> ingrid_ex; gctl::array<double> ingrid_ex;
int M = -1, N = -1; int M = -1, N = -1;
int ori_row, ori_col; int ori_row, ori_col;
if (data_type == NodeData) gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col); if (data_type == NodeData) gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col);
else gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col); else gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col);
fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
@ -173,7 +170,7 @@ void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname,
{ {
for (int j = 0; j < rg_xnum; j++) for (int j = 0; j < rg_xnum; j++)
{ {
outval_ptr->at(i*rg_xnum+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*rg_xnum+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -183,7 +180,7 @@ void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname,
{ {
for (int j = 0; j < rg_xnum-1; j++) for (int j = 0; j < rg_xnum-1; j++)
{ {
outval_ptr->at(i*(rg_xnum-1)+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*(rg_xnum-1)+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -196,9 +193,9 @@ void gctl::gm_regular_grid::gradient(std::string datname, std::string gradname,
void gctl::gm_regular_grid::rtp(std::string datname, std::string rtpname, double inc, double dec) void gctl::gm_regular_grid::rtp(std::string datname, std::string rtpname, double inc, double dec)
{ {
meshdata *data_ptr = get_data(datname); meshdata &data = get_data(datname);
mesh_data_value_e value_type = data_ptr->get_valtype(); mesh_data_value_e value_type = data.valtype_;
mesh_data_type_e data_type = data_ptr->get_dattype(); mesh_data_type_e data_type = data.loctype_;
if(value_type != Scalar) if(value_type != Scalar)
{ {
@ -207,16 +204,13 @@ void gctl::gm_regular_grid::rtp(std::string datname, std::string rtpname, double
} }
// 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据 // 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据
meshdata *new_data_ptr = add_data(rtpname, data_type, true, value_type); meshdata &new_data = add_data(data_type, value_type, rtpname, 0.0);
array<double> *inval_ptr = (array<double>*) data_ptr->get_datval_ptr();
array<double> *outval_ptr = (array<double>*) new_data_ptr->get_datval_ptr();
gctl::array<double> ingrid_ex; gctl::array<double> ingrid_ex;
int M = -1, N = -1; int M = -1, N = -1;
int ori_row, ori_col; int ori_row, ori_col;
if (data_type == NodeData) gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col); if (data_type == NodeData) gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col);
else gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col); else gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col);
fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
@ -312,7 +306,7 @@ void gctl::gm_regular_grid::rtp(std::string datname, std::string rtpname, double
{ {
for (int j = 0; j < rg_xnum; j++) for (int j = 0; j < rg_xnum; j++)
{ {
outval_ptr->at(i*rg_xnum+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*rg_xnum+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -322,7 +316,7 @@ void gctl::gm_regular_grid::rtp(std::string datname, std::string rtpname, double
{ {
for (int j = 0; j < rg_xnum-1; j++) for (int j = 0; j < rg_xnum-1; j++)
{ {
outval_ptr->at(i*(rg_xnum-1)+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*(rg_xnum-1)+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -337,17 +331,17 @@ void gctl::gm_regular_grid::drtp(std::string datname, std::string incname,
std::string decname, std::string drtpname, int order) std::string decname, std::string drtpname, int order)
{ {
// 首先获取数据并确定所有数据类型和格式都是一致的 // 首先获取数据并确定所有数据类型和格式都是一致的
meshdata *md_ptr = get_data(datname); meshdata *md_ptr = get_data_ptr(datname);
mesh_data_value_e dat_valtype = md_ptr->get_valtype(); mesh_data_value_e dat_valtype = md_ptr->valtype_;
mesh_data_type_e dat_datype = md_ptr->get_dattype(); mesh_data_type_e dat_datype = md_ptr->loctype_;
md_ptr = get_data(incname); md_ptr = get_data_ptr(incname);
mesh_data_value_e inc_valtype = md_ptr->get_valtype(); mesh_data_value_e inc_valtype = md_ptr->valtype_;
mesh_data_type_e inc_datype = md_ptr->get_dattype(); mesh_data_type_e inc_datype = md_ptr->loctype_;
md_ptr = get_data(decname); md_ptr = get_data_ptr(decname);
mesh_data_value_e dec_valtype = md_ptr->get_valtype(); mesh_data_value_e dec_valtype = md_ptr->valtype_;
mesh_data_type_e dec_datype = md_ptr->get_dattype(); mesh_data_type_e dec_datype = md_ptr->loctype_;
std::string err_str; std::string err_str;
if (dat_valtype != Scalar) if (dat_valtype != Scalar)
@ -363,32 +357,35 @@ void gctl::gm_regular_grid::drtp(std::string datname, std::string incname,
} }
// 获取数据指针 // 获取数据指针
md_ptr = get_data(datname); md_ptr = get_data_ptr(datname);
array<double> *dat_ptr = (array<double>*) md_ptr->get_datval_ptr(); array<double> *dat_ptr = &md_ptr->datval_;
md_ptr = get_data(incname); md_ptr = get_data_ptr(incname);
array<double> *inc_ptr = (array<double>*) md_ptr->get_datval_ptr(); array<double> *inc_ptr = &md_ptr->datval_;
md_ptr = get_data(decname); md_ptr = get_data_ptr(decname);
array<double> *dec_ptr = (array<double>*) md_ptr->get_datval_ptr(); array<double> *dec_ptr = &md_ptr->datval_;
// 检查是否存在同名的数据 若有则检查是否需要重新建立数据 // 检查是否存在同名的数据 若有则检查是否需要重新建立数据
md_ptr = add_data(drtpname, dat_datype, true, dat_valtype); add_data(dat_datype, dat_valtype, drtpname, 0.0);
md_ptr = get_data_ptr(drtpname);
// 获取数据指针 // 获取数据指针
array<double> *drtp_ptr = (array<double>*) md_ptr->get_datval_ptr(); array<double> *drtp_ptr = &md_ptr->datval_;
// 新建临时数据并获取数据指针 // 新建临时数据并获取数据指针
std::string tmp_name = drtpname+"tmp"; std::string tmp_name = drtpname+"tmp";
md_ptr = add_data(tmp_name, dat_datype, true, dat_valtype); add_data(dat_datype, dat_valtype, tmp_name, 0.0);
array<double> *tmp_ptr = (array<double>*) md_ptr->get_datval_ptr(); md_ptr = get_data_ptr(tmp_name);
array<double> *tmp_ptr = &md_ptr->datval_;
std::string diff1_name = drtpname+"diff1"; std::string diff1_name = drtpname+"diff1";
md_ptr = add_data(diff1_name, dat_datype, true, dat_valtype); add_data(dat_datype, dat_valtype, diff1_name, 0.0);
array<double> *diff1_ptr = (array<double>*) md_ptr->get_datval_ptr(); md_ptr = get_data_ptr(diff1_name);
array<double> *diff1_ptr = &md_ptr->datval_;
std::string diff2_name = drtpname+"diff2"; std::string diff2_name = drtpname+"diff2";
md_ptr = add_data(diff2_name, dat_datype, true, dat_valtype); add_data(dat_datype, dat_valtype, diff2_name, 0.0);
array<double> *diff2_ptr = (array<double>*) md_ptr->get_datval_ptr(); array<double> *diff2_ptr = &md_ptr->datval_;
// 计算平均磁化参数 // 计算平均磁化参数
double meaninc = 0.0, meandec = 0.0; double meaninc = 0.0, meandec = 0.0;
@ -461,9 +458,9 @@ void gctl::gm_regular_grid::drtp(std::string datname, std::string incname,
void gctl::gm_regular_grid::conti(std::string datname, std::string retname, double height) void gctl::gm_regular_grid::conti(std::string datname, std::string retname, double height)
{ {
meshdata *data_ptr = get_data(datname); meshdata &data = get_data(datname);
mesh_data_value_e value_type = data_ptr->get_valtype(); mesh_data_value_e value_type = data.valtype_;
mesh_data_type_e data_type = data_ptr->get_dattype(); mesh_data_type_e data_type = data.loctype_;
if(value_type != Scalar) if(value_type != Scalar)
{ {
@ -471,16 +468,13 @@ void gctl::gm_regular_grid::conti(std::string datname, std::string retname, doub
} }
// 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据 // 检查是否存在与梯度数据同名的数据 若有则检查是否需要重新建立数据
meshdata *new_data_ptr = add_data(retname, data_type, true, value_type); meshdata &new_data = add_data(data_type, value_type, retname, 0.0);
array<double> *inval_ptr = (array<double>*) data_ptr->get_datval_ptr();
array<double> *outval_ptr = (array<double>*) new_data_ptr->get_datval_ptr();
gctl::array<double> ingrid_ex; gctl::array<double> ingrid_ex;
int M = -1, N = -1; int M = -1, N = -1;
int ori_row, ori_col; int ori_row, ori_col;
if (data_type == NodeData) gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col); if (data_type == NodeData) gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum, rg_xnum, M, N, ori_row, ori_col);
else gctl::cosine_extrapolate_2d(*inval_ptr, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col); else gctl::cosine_extrapolate_2d(data.datval_, ingrid_ex, rg_ynum-1, rg_xnum-1, M, N, ori_row, ori_col);
fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N); fftw_complex *out= (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*M*N);
@ -544,7 +538,7 @@ void gctl::gm_regular_grid::conti(std::string datname, std::string retname, doub
{ {
for (int j = 0; j < rg_xnum; j++) for (int j = 0; j < rg_xnum; j++)
{ {
outval_ptr->at(i*rg_xnum+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*rg_xnum+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -554,7 +548,7 @@ void gctl::gm_regular_grid::conti(std::string datname, std::string retname, doub
{ {
for (int j = 0; j < rg_xnum-1; j++) for (int j = 0; j < rg_xnum-1; j++)
{ {
outval_ptr->at(i*(rg_xnum-1)+j) = ingrid_ex[(i+ori_row)*N+j+ori_col]; new_data.datval_[i*(rg_xnum-1)+j] = ingrid_ex[(i+ori_row)*N+j+ori_col];
} }
} }
} }
@ -569,9 +563,9 @@ void gctl::gm_regular_grid::conti(std::string datname, std::string retname, doub
void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std::string resname, int wx_size, int wy_size, int x_order, int y_order) void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std::string resname, int wx_size, int wy_size, int x_order, int y_order)
{ {
meshdata *data_ptr = get_data(datname); meshdata &data = get_data(datname);
mesh_data_value_e value_type = data_ptr->get_valtype(); mesh_data_value_e value_type = data.valtype_;
mesh_data_type_e data_type = data_ptr->get_dattype(); mesh_data_type_e data_type = data.loctype_;
if(value_type != Scalar) if(value_type != Scalar)
{ {
@ -579,11 +573,8 @@ void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std:
} }
// 检查是否存在与趋势场局部场数据同名的数据 若有则检查是否需要重新建立数据 // 检查是否存在与趋势场局部场数据同名的数据 若有则检查是否需要重新建立数据
meshdata *reg_data_ptr = add_data(regname, data_type, true, value_type); meshdata &reg_data = add_data(data_type, value_type, regname, 0.0);
meshdata *res_data_ptr = add_data(resname, data_type, true, value_type); meshdata &res_data = add_data(data_type, value_type, resname, 0.0);
array<double> *inval_ptr = (array<double>*) data_ptr->get_datval_ptr();
array<double> *regval_ptr = (array<double>*) reg_data_ptr->get_datval_ptr();
array<double> *resval_ptr = (array<double>*) res_data_ptr->get_datval_ptr();
matrix<double> data_mat; matrix<double> data_mat;
if (data_type == NodeData) if (data_type == NodeData)
@ -593,7 +584,7 @@ void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std:
{ {
for (size_t j = 0; j < rg_xnum; j++) for (size_t j = 0; j < rg_xnum; j++)
{ {
data_mat[i][j] = inval_ptr->at(i*rg_xnum+j); data_mat[i][j] = data.datval_[i*rg_xnum+j];
} }
} }
} }
@ -604,7 +595,7 @@ void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std:
{ {
for (size_t j = 0; j < rg_xnum-1; j++) for (size_t j = 0; j < rg_xnum-1; j++)
{ {
data_mat[i][j] = inval_ptr->at(i*(rg_xnum-1)+j); data_mat[i][j] = data.datval_[i*(rg_xnum-1)+j];
} }
} }
} }
@ -617,8 +608,8 @@ void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std:
{ {
for (size_t j = 0; j < rg_xnum; j++) for (size_t j = 0; j < rg_xnum; j++)
{ {
regval_ptr->at(i*rg_xnum+j) = data_mat[i][j]; reg_data.datval_[i*rg_xnum+j] = data_mat[i][j];
resval_ptr->at(i*rg_xnum+j) = inval_ptr->at(i*rg_xnum+j) - data_mat[i][j]; res_data.datval_[i*rg_xnum+j] = data.datval_[i*rg_xnum+j] - data_mat[i][j];
} }
} }
} }
@ -628,8 +619,8 @@ void gctl::gm_regular_grid::trend(std::string datname, std::string regname, std:
{ {
for (size_t j = 0; j < rg_xnum-1; j++) for (size_t j = 0; j < rg_xnum-1; j++)
{ {
regval_ptr->at(i*(rg_xnum-1)+j) = data_mat[i][j]; reg_data.datval_[i*(rg_xnum-1)+j] = data_mat[i][j];
resval_ptr->at(i*(rg_xnum-1)+j) = inval_ptr->at(i*(rg_xnum-1)+j) - data_mat[i][j]; res_data.datval_[i*(rg_xnum-1)+j] = data.datval_[i*(rg_xnum-1)+j] - data_mat[i][j];
} }
} }
} }

View File

@ -48,16 +48,15 @@ void gctl::grav_regular_mesh_2d::gobser(array<double> &out_data, std::string dat
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }

View File

@ -48,16 +48,15 @@ void gctl::gm_regular_mesh_3d::gobser(array<double> &out_data, std::string data_
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -116,16 +115,15 @@ void gctl::gm_regular_mesh_3d::magobser(array<double> &out_data, std::string dat
{ {
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -156,16 +154,15 @@ void gctl::gm_regular_mesh_3d::magobser(array<double> &out_data, std::string dat
{ {
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }

View File

@ -50,16 +50,15 @@ void gctl::gm_regular_mesh_sph_3d::gobser(array<double> &out_data, std::string d
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -104,16 +103,15 @@ void gctl::gm_regular_mesh_sph_3d::magobser(array<double> &out_data, std::string
{ {
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }

View File

@ -66,16 +66,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<double> &out_obs, std::string data_
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -101,16 +100,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<point3dc> &out_obs, std::string dat
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -136,16 +134,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<tensor> &out_obs, std::string data_
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -171,16 +168,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<double> &out_obs, std::string data_
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -206,16 +202,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<point3dc> &out_obs, std::string dat
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -241,16 +236,15 @@ void gctl::gm_tetrahedron_mesh::gobser(array<tensor> &out_obs, std::string data_
{ {
array<double> rho(get_elenum(), 0.0); array<double> rho(get_elenum(), 0.0);
meshdata *data_ptr = get_data(data_name); meshdata &data = get_data(data_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
rho[i] = val_ptr->at(i); rho[i] = data.datval_[i];
} }
} }
} }
@ -275,19 +269,18 @@ void gctl::gm_tetrahedron_mesh::gobser(array<tensor> &out_obs, std::string data_
void gctl::gm_tetrahedron_mesh::magkernel(matrix<double> &out_kernel, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magkernel(matrix<double> &out_kernel, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -312,19 +305,18 @@ void gctl::gm_tetrahedron_mesh::magkernel(matrix<double> &out_kernel, std::strin
void gctl::gm_tetrahedron_mesh::magkernel(matrix<point3dc> &out_kernel, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magkernel(matrix<point3dc> &out_kernel, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -349,19 +341,18 @@ void gctl::gm_tetrahedron_mesh::magkernel(matrix<point3dc> &out_kernel, std::str
void gctl::gm_tetrahedron_mesh::magkernel(matrix<tensor> &out_kernel, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magkernel(matrix<tensor> &out_kernel, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -386,19 +377,18 @@ void gctl::gm_tetrahedron_mesh::magkernel(matrix<tensor> &out_kernel, std::strin
void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -423,19 +413,18 @@ void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string sus
void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -460,19 +449,18 @@ void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string s
void gctl::gm_tetrahedron_mesh::magobser(array<tensor> &out_obs, std::string sus_name, const array<point3dc> &obsp, void gctl::gm_tetrahedron_mesh::magobser(array<tensor> &out_obs, std::string sus_name, const array<point3dc> &obsp,
double inclina_deg, double declina_deg, verbose_type_e verbose) double inclina_deg, double declina_deg, verbose_type_e verbose)
{ {
meshdata *data_ptr = get_data(sus_name); meshdata &data = get_data(sus_name);
mesh_data_value_e vtype = data_ptr->get_valtype(); mesh_data_value_e vtype = data.valtype_;
array<double> sus(get_elenum(), 0.0); array<double> sus(get_elenum(), 0.0);
if (vtype == Scalar) if (vtype == Scalar)
{ {
array<double> *val_ptr = (array<double>*) data_ptr->get_datval_ptr(); for (int i = 0; i < data.datval_.size(); i++)
for (int i = 0; i < val_ptr->size(); i++)
{ {
if (!std::isnan(val_ptr->at(i))) if (!std::isnan(data.datval_[i]))
{ {
sus[i] = val_ptr->at(i); sus[i] = data.datval_[i];
} }
} }
} }
@ -496,20 +484,12 @@ void gctl::gm_tetrahedron_mesh::magobser(array<tensor> &out_obs, std::string sus
void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose) void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose)
{ {
meshdata *data_ptr;
mesh_data_value_e vtype;
array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0)); array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0));
meshdata &data = get_data(magz_name);
data_ptr = get_data(magz_name); mesh_data_value_e vtype = data.valtype_;
vtype = data_ptr->get_valtype();
if (vtype == Vector) if (vtype == Vector)
{ {
array<point3dc> *val_ptr = (array<point3dc>*) data_ptr->get_datval_ptr(); magz = data.export_vector();
for (int i = 0; i < val_ptr->size(); i++)
{
magz[i] = val_ptr->at(i);
}
} }
else else
{ {
@ -531,20 +511,12 @@ void gctl::gm_tetrahedron_mesh::magobser(array<double> &out_obs, std::string mag
void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose) void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose)
{ {
meshdata *data_ptr;
mesh_data_value_e vtype;
array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0)); array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0));
meshdata &data = get_data(magz_name);
data_ptr = get_data(magz_name); mesh_data_value_e vtype = data.valtype_;
vtype = data_ptr->get_valtype();
if (vtype == Vector) if (vtype == Vector)
{ {
array<point3dc> *val_ptr = (array<point3dc>*) data_ptr->get_datval_ptr(); magz = data.export_vector();
for (int i = 0; i < val_ptr->size(); i++)
{
magz[i] = val_ptr->at(i);
}
} }
else else
{ {
@ -566,20 +538,12 @@ void gctl::gm_tetrahedron_mesh::magobser(array<point3dc> &out_obs, std::string m
void gctl::gm_tetrahedron_mesh::magobser(array<tensor> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose) void gctl::gm_tetrahedron_mesh::magobser(array<tensor> &out_obs, std::string magz_name, const array<point3dc> &obsp, verbose_type_e verbose)
{ {
meshdata *data_ptr;
mesh_data_value_e vtype;
array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0)); array<point3dc> magz(get_elenum(), point3dc(0.0, 0.0, 0.0));
meshdata &data = get_data(magz_name);
data_ptr = get_data(magz_name); mesh_data_value_e vtype = data.valtype_;
vtype = data_ptr->get_valtype();
if (vtype == Vector) if (vtype == Vector)
{ {
array<point3dc> *val_ptr = (array<point3dc>*) data_ptr->get_datval_ptr(); magz = data.export_vector();
for (int i = 0; i < val_ptr->size(); i++)
{
magz[i] = val_ptr->at(i);
}
} }
else else
{ {

View File

@ -372,8 +372,7 @@ void save_gmsh(const std::vector<std::string> &cmd_units)
// save gmsh <file> // save gmsh <file>
if (cmd_units.size() < 3) throw std::runtime_error("save: insufficient parameters."); if (cmd_units.size() < 3) throw std::runtime_error("save: insufficient parameters.");
rg.save_gmsh(cmd_units[2], NodeData, OverWrite, NotPacked); rg.save_gmsh(cmd_units[2], OverWrite, NotPacked);
rg.save_gmsh(cmd_units[2], ElemData, Append, NotPacked);
return; return;
} }
@ -622,16 +621,16 @@ void data_output(const std::vector<std::string> &cmd_units)
{ {
for (size_t i = 1; i < copy_str.size(); i++) for (size_t i = 1; i < copy_str.size(); i++)
{ {
data_ptr = rg.get_data(copy_str[i]); data_ptr = rg.get_data_ptr(copy_str[i]);
data_ptr->set_output(true); data_ptr->output_ok_ = true;
} }
} }
else if (copy_str[0] == "disable") else if (copy_str[0] == "disable")
{ {
for (size_t i = 1; i < copy_str.size(); i++) for (size_t i = 1; i < copy_str.size(); i++)
{ {
data_ptr = rg.get_data(copy_str[i]); data_ptr = rg.get_data_ptr(copy_str[i]);
data_ptr->set_output(false); data_ptr->output_ok_ = false;
} }
} }
else throw std::runtime_error("data-output: invalid operation type."); else throw std::runtime_error("data-output: invalid operation type.");
@ -649,7 +648,8 @@ void data_rename(const std::vector<std::string> &cmd_units)
copy_str[i - 1] = cmd_units[i]; copy_str[i - 1] = cmd_units[i];
} }
rg.rename_data(copy_str[0], copy_str[1]); meshdata &data = rg.get_data(copy_str[0]);
data.name_ = copy_str[1];
return; return;
} }
@ -692,7 +692,7 @@ void get_stats(const std::vector<std::string> &cmd_units)
std::vector<double> stats; std::vector<double> stats;
for (size_t i = 0; i < copy_str.size(); i++) for (size_t i = 0; i < copy_str.size(); i++)
{ {
data_ptr = rg.get_data(copy_str[i]); data_ptr = rg.get_data_ptr(copy_str[i]);
data_ptr->show_info(); data_ptr->show_info();
data_ptr->show_stats(); data_ptr->show_stats();
} }