113 lines
3.6 KiB
C
113 lines
3.6 KiB
C
#include <unistd.h>
|
|
#include <getopt.h>
|
|
#include "dump2sq.h"
|
|
|
|
void Error(){
|
|
printf("usage: dump2sq [options] inputfile\n");
|
|
printf("inputfile format\n");
|
|
printf(" LAMMPS: *.lammpstrj\n");
|
|
printf(" FEMTECK: *.10\n");
|
|
printf("\n");
|
|
printf("options:\n");
|
|
printf(" -h --help show this help message\n");
|
|
printf(" --SQmin=%%f Q minimum [0.2]\n");
|
|
printf(" --SQmax=%%f Q maximum [30]\n");
|
|
printf(" --SQdel=%%d Q delta [0.02]\n");
|
|
printf(" --GRmin=%%f r minimum [0.025]\n");
|
|
printf(" -r --GRmax=%%f r maximum [L(minium cell length)*0.5]\n");
|
|
printf(" -s --GRdel=%%d r delta [0.05]\n");
|
|
printf(" -o --output=%%s Output basename [basename]\n");
|
|
exit(1);
|
|
}
|
|
|
|
/* ####################################################################### */
|
|
/* ベース名を決める */
|
|
/* ####################################################################### */
|
|
void SetBaseName(COMMAND *com){
|
|
int nLen;
|
|
char *res = NULL;
|
|
int i;
|
|
char buf[1024];
|
|
char infile[1024];
|
|
|
|
strcpy(infile, com->infile);
|
|
nLen = sizeof(infile);
|
|
if ((nLen > 0) && (nLen <= 1030)) {
|
|
res = strrchr(infile, '.');
|
|
if(res != NULL) *res = '\0';
|
|
}
|
|
strcpy(com->outbase, infile);
|
|
/* 拡張子 */
|
|
for (i=strlen(com->infile); i>0; i-- ) {
|
|
if (com->infile[i] == '.' ) break;
|
|
}
|
|
if (i == 0) strcpy(buf, "");
|
|
else strncpy(buf, com->infile+i+1, strlen(com->infile)-i);
|
|
/* ファイル形式の決定 */
|
|
if (strcmp(buf, "lammpstrj") == 0) strcpy(com->filetype, "lammpstrj");
|
|
else if (strcmp(buf, "xyz") == 0) strcpy(com->filetype, "xyz");
|
|
else if (strcmp(buf, "10") == 0) strcpy(com->filetype, "xyz");
|
|
else {
|
|
printf("Input file extension: %s\n", buf);
|
|
printf("The file format is unknown.\n");
|
|
printf("Acceptable file formats are .lammpstrj, .xyz, .10\n");
|
|
}
|
|
}
|
|
|
|
|
|
int SetArgment(int argc, char **argv, COMMAND *com){
|
|
int opt, option_index;
|
|
|
|
struct option long_options[] = {
|
|
{"help", no_argument, NULL, 'h'},
|
|
{"SQmin", required_argument, NULL, 'E'},
|
|
{"SQmax", required_argument, NULL, 'F'},
|
|
{"SQdel", required_argument, NULL, 'G'},
|
|
{"GRmin", required_argument, NULL, 'J'},
|
|
{"GRmax", required_argument, NULL, 'r'},
|
|
{"GRdel", required_argument, NULL, 's'},
|
|
{"output", required_argument, NULL, 'o'},
|
|
{0, 0, 0, 0}// 配列の最後はすべて0で埋める
|
|
};
|
|
|
|
//opterr = 0;/* エラーメッセージを非表示にする */
|
|
if (argc == 1) Error();
|
|
FILE* fp = fopen(argv[argc-1], "r");
|
|
if (fp == NULL) Error();
|
|
|
|
/* default値 */
|
|
strcpy(com->infile, argv[argc-1]);
|
|
com->SQmin = 0.2;
|
|
com->SQmax = 30.0;
|
|
com->SQdel = 0.02;
|
|
com->GRmin = 0.025;
|
|
com->GRmax = -1; /* default Lmin*1.0 */
|
|
com->GRdel = 0.05;
|
|
SetBaseName(com);
|
|
|
|
while((opt = getopt_long(argc, argv, "hE:F:G:J:r:s:o:",
|
|
long_options, &option_index)) != -1){
|
|
switch(opt){
|
|
case 'h': Error(); break;
|
|
case 'E': com->SQmin = atof(optarg); break;
|
|
case 'F': com->SQmax = atof(optarg); break;
|
|
case 'G': com->SQdel = atof(optarg); break;
|
|
case 'J': com->GRmin = atof(optarg); break;
|
|
case 'r': com->GRmax = atof(optarg); break;
|
|
case 's': com->GRdel = atof(optarg); break;
|
|
case 'o': strcpy(com->outbase, optarg); break;
|
|
// 解析できないオプションが見つかった場合は「?」を返す
|
|
// オプション引数が不足している場合も「?」を返す
|
|
case '?':
|
|
Error();
|
|
}
|
|
continue;
|
|
}
|
|
if (com->GRmax == 0.0) Error();
|
|
printf("basename: %s\n", com->outbase);
|
|
sprintf(com->gr_file, "%s.gr", com->outbase);
|
|
sprintf(com->cn_file, "%s.cn", com->outbase);
|
|
|
|
return 0;
|
|
}
|