gctl_toolkits/archive/grav2d_vectical_cylinder/vec_cyliner.cpp
2024-09-10 20:25:18 +08:00

104 lines
3.0 KiB
C++

#include "vec_cyliner.h"
void disp_help()
{
cout<<"grav2d_vectical_cylinder 1.0 - forward modeling gravity data of a vectical cylinder"<<endl<<endl
<<"syntax: grav2d_vectical_cylinder -p<top-depth>/<bottom-depth>/<radius>/<density> -l<x-center>/<y-center> -r<xmin>/<xmax>/<ymin>/<ymax> -i<x-interval>/<y-interval>[/integral-interval] -o<outfile-name>"<<endl
<<" -p physical parameters of the cylinder. units are meter and g/cm^3"<<endl
<<" -l centeral location of the cylinder"<<endl
<<" -r range of calculation"<<endl
<<" -i calculation spaces. the default integration interval is 1e-5 for all cases. Users can set customized value by applying a different value"<<endl
<<" -o output file's name. The output format is .xyz ASSCI format, hence no surffix is needed nor can change the output format."<<endl<<endl
<<"example: grav2d_vectical_cylinder -p10/60/20/2.0 -l100/100 -r0/200/0/200 -i5/5 -otestout.dat"<<endl;
}
int main(int argc, char const *argv[])
{
int range_num;
double para[4] = {MAX,MAX,MAX,MAX};
double posi[2] = {MAX,MAX};
double range[4] = {MAX,MAX,MAX,MAX};
double interval[3] = {MIN,MIN,MIN};
char filename[1024] = {0};
char cmd_type[1024] = {0};
if (argc==1)
{
disp_help();
}
else
{
for (int i = 1; i < argc; i++)
{
sscanf(argv[i],"%2s",cmd_type);
if (!strcmp(cmd_type,PARA))
{
range_num = sscanf(argv[i],"%*2s%lf/%lf/%lf/%lf",&para[0],&para[1],&para[2],&para[3]);
if (range_num==4)
{
if (para[0]>para[1]||para[0]<0||para[1]<0||para[2]<0||para[3]<0)
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
else
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
if (!strcmp(cmd_type,POSI))
{
range_num = sscanf(argv[i],"%*2s%lf/%lf",&posi[0],&posi[1]);
if (posi[0]==MAX||posi[1]==MAX)
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
if (!strcmp(cmd_type,RANGE))
{
range_num = sscanf(argv[i],"%*2s%lf/%lf/%lf/%lf",&range[0],&range[1],&range[2],&range[3]);
if (range_num==4)
{
if (range[0]>range[1]||range[2]>range[3])
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
else
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
if (!strcmp(cmd_type,SPACE))
{
range_num = sscanf(argv[i],"%*2s%lf/%lf/%lf",&interval[0],&interval[1],&interval[2]);
if (interval[0]<0||interval[1]<0)
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
if (!strcmp(cmd_type,OUTFILE))
{
sscanf(argv[i],"%*2s%s",filename);//按格式读入文件名与扩展名
if(!strcmp(filename,""))//检查文件名是否为空
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
}
vec_cy v1;
v1.info_taker(para,posi,range,interval,filename);
}
return 0;
}