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

156 lines
4.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//计算二维平面数据的三方向导数因为有很多方法可以得到xyz三列数据文件所以数据类型为xyz的三列数据文件
//数据排列方式: x坐标 y坐标 v数值
//坐标方向: z轴向下的右旋坐标系
#include "datafunc.h"
#include "grad_z.h"
#include "grad_hx.h"
#include "grad_hy.h"
void disp_help()
{
cout<<"grad2d 0.2 - calculate horizontal and vertical gradients for an equal-grid plane data set"<<endl<<endl
<<"usage: grad2d -t<input-file> -x|-y|-z -r<xmin>/<xmax>/<ymin>/<ymax> -i<x-spacing>/<y-spacing> -w<power> [-c<col-x>,<col-y>,<col-val>] [-o<output-file>]"<<endl<<endl
<<"syntax: " << endl << "-t\tinput table data. The program takes a three-columns table data file. The order of columns are \'x\', \'y\'' and \'point-value\'. lines starts with '#' will be skipped."<<endl
<<"-x|-y|-z\tselect calculating objective. Only one objective can be chosen at a time."<<endl
<<"-r\tspecify the range of calculating area."<<endl
<<"-i\tspecify intervals of the input data."<<endl
<<"-c\tset data columns, the default is 0,1,2."<<endl
<<"-w\torders of output gradient data."<<endl
<<"-o\tspecify output-file's name. \'_gradhx|_gradhy|_gradz\' will be attached at the end of the input-name if \'-o\' is absent."<<endl<<endl
<<"example: grad2d -tin.dat -x -r0/100/0/100 -i10/10 -w1 -oout.dat"<<endl;
}
int main(int argc, char* argv[])
{
if (argc==1)
{
disp_help();
}
else
{
int caltype = 0;
int power = 1;
char cmd_type[1024] = {0};
char filename[1024] = {0};
char filetype[1024] = {0};
char outname[1024] = {0};
char colname[1024] = "0,1,2";
double range[4] = {1e+30,1e+30,1e+30,1e+30};
double interval[2] = {1e+30,1e+30};
for (int i = 1; i < argc; i++)
{
sscanf(argv[i],"%2s",cmd_type);
if (!strcmp(cmd_type,RANGE))
{
if (4!=sscanf(argv[i],"%*2s%lf/%lf/%lf/%lf",&range[0],&range[1],&range[2],&range[3]))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
else
{
if (range[0]>range[1])
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
else if (range[2]>range[3])
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
}
else if (!strcmp(cmd_type,DATA))
{
if (2!=sscanf(argv[i],"%*2s%[^.]%s",filename,filetype))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
else if (!strcmp(cmd_type,COLS))
{
if (1!=sscanf(argv[i],"%*2s%s",colname))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
else if (!strcmp(cmd_type,POWER))
{
if (1!=sscanf(argv[i],"%*2s%d",&power))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
else if (!strcmp(cmd_type,INTERVAL))
{
if (2!=sscanf(argv[i],"%*2s%lf/%lf",&interval[0],&interval[1]))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
else
{
if (interval[0]<=0||interval[1]<=0)
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
}
else if (!strcmp(cmd_type,HORIZATION_X)) caltype = 1;
else if (!strcmp(cmd_type,HORIZATION_Y)) caltype = 2;
else if (!strcmp(cmd_type,VERTICAL)) caltype = 3;
else if (!strcmp(cmd_type,OUTPUT))
{
if (-1==sscanf(argv[i],"%*2s%s",outname))
{
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
return 0;
}
}
}
switch(caltype)
{
case 1:
{
if(!strcmp(outname,""))
{
strcat(outname,filename);
strcat(outname,"_gradhx.xyz");
}
strcat(filename,filetype);
cal_2d_hx(filename,outname,colname,range,interval,power);
}break;
case 2:
{
if(!strcmp(outname,""))
{
strcat(outname,filename);
strcat(outname,"_gradhy.xyz");
}
strcat(filename,filetype);
cal_2d_hy(filename,outname,colname,range,interval,power);
}break;
case 3:
{
if(!strcmp(outname,""))
{
strcat(outname,filename);
strcat(outname,"_gradz.xyz");
}
strcat(filename,filetype);
cal_2d_z(filename,outname,colname,range,interval,power);
}break;
default:
{
cout<<BOLDRED<<"==> "<<RESET<<"bad cal_type"<<endl;
return 0;
}
}
}
return 0;
}