initial upload
This commit is contained in:
61
gm3d/init_obs.cpp
Normal file
61
gm3d/init_obs.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
#include "gm3d.h"
|
||||
|
||||
int GM3D::InitObs(char* obs_para){
|
||||
obspoint temp_obs;
|
||||
string temp_str;
|
||||
stringstream temp_ss;
|
||||
double x,y;
|
||||
double xmin,xmax,ymin,ymax;
|
||||
double xs,xe,ys,ye,eleva,dx,dy;
|
||||
|
||||
//按格式解析参数 初始化观测位置 用于正演计算
|
||||
if (7 == sscanf(obs_para,"%lf/%lf/%lf/%lf/%lf/%lf/%lf",&xs,&dx,&xe,&ys,&dy,&ye,&eleva)){
|
||||
xmin = MIN(xs,xe); xmax = MAX(xs,xe);
|
||||
ymin = MIN(ys,ye); ymax = MAX(ys,ye);
|
||||
|
||||
x = xs;
|
||||
while(x >= xmin && x <= xmax){
|
||||
y = ys;
|
||||
while(y >= ymin && y <= ymax){
|
||||
temp_obs.id = obs_p_.size();
|
||||
temp_obs.x = x; temp_obs.y = y; temp_obs.z = -1.0*eleva;
|
||||
temp_obs.val = temp_obs.dev = 0.0;
|
||||
obs_p_.push_back(temp_obs);
|
||||
y += dy;
|
||||
}
|
||||
x += dx;
|
||||
}
|
||||
}
|
||||
//解析失败 按文件读入 用于反演使用或者正演计算
|
||||
else{
|
||||
ifstream infile;
|
||||
if (open_infile(infile,obs_para)) return -1;
|
||||
|
||||
while(getline(infile,temp_str)){
|
||||
if (*(temp_str.begin()) == '#') continue;
|
||||
else{
|
||||
//按每行3个数据解析 初始化为用于正演的观测点
|
||||
if (3 == sscanf(temp_str.c_str(),"%lf %lf %lf",&temp_obs.y,&temp_obs.x,&temp_obs.z)){
|
||||
temp_obs.z *= -1.0;
|
||||
temp_obs.id = obs_p_.size();
|
||||
temp_obs.val = temp_obs.dev = 0.0;
|
||||
obs_p_.push_back(temp_obs);
|
||||
}
|
||||
else{
|
||||
cerr << BOLDYELLOW << "ignored ==> " << RESET << "wrong input: " << temp_str << endl;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
infile.close();
|
||||
}
|
||||
|
||||
if (obs_p_.empty()){
|
||||
cerr << BOLDRED << "error ==> " << RESET << "fail to initial observations with the parameter: " << obs_para << endl;
|
||||
return -1;
|
||||
}
|
||||
else{
|
||||
obs_num_ = obs_p_.size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user