9 #include "fil_cmdline.h"
20 #define __FUNCT__ "main"
21 int main(
int argc,
char *argv[] )
29 struct gengetopt_args_info args;
31 if (cmdline_parser(argc, argv, &args) != 0)
36 int first_pos = argc - args.inputs_num;
37 if (args.inputs_num != 2) {
38 fprintf(stderr,
"Error: Missing required positional arguments.\n");
39 cmdline_parser_print_help();
42 char *basemesh = argv[first_pos];
43 char *igb_data_file = argv[first_pos+1];
45 float dt = args.dt_arg;
46 float vth = args.threshold_arg;
47 std::string aux_mesh = args.aux_mesh_arg;
50 read_mesh(
const_cast<char*
>(basemesh), elst, nlst);
54 tbf.
dname = igb_data_file;
55 tbf.
dsize =
sizeof(float);
60 if( nSliceRead<0 ) exit(1);
67 for(
int i=0;i<nSliceRead/2;i++) {
74 for(
int i=0;i<tbf.
numSamps-nSliceRead;i++) {
76 log_msg(NULL,0,0,
"\nAnalyzing instant %.3f ms --- ", tbf.
t);
93 for(
int i=0;i<nSliceRead-nSliceRead/2;i++) {
108 cmdline_parser_free(&args);
138 tbf->
d = (
float **)malloc(
sizeof(
float*)*tbf->
wdth);
139 for(
int i=0;i<tbf->
wdth;i++)
140 tbf->
d[i] = (
float *)malloc(tbf->
dsize*tbf->
nodes);
142 if(tbf->
d[tbf->
wdth-1]==NULL)
143 log_msg(NULL,5,
LOCAL,
"Warning: Memory allocation error" );
146 tbf->
dr = (
float **)malloc(
sizeof(
void*)*tbf->
rwdth);
147 for(
int i=0;i<tbf->
rwdth;i++)
156 for(
int i=tbf->
h_wdth;i<tbf->wdth;i++)
160 log_msg(NULL, 5, 0,
"Premature eof. Trying to read time slice %.2f", tbf->
t );
175 float *tmp = tbf->
d[0];
176 for(
int j=0;j<tbf->
wdth-1;j++) tbf->
d[j] = tbf->
d[j+1];
177 tbf->
d[tbf->
wdth-1] = tmp;
185 log_msg(NULL,3,0,
"Premature eof. Trying to read time slice %.2f,", tbf->
t );
199 for(
int i=0;i<tbf->
rwdth;i++) free(tbf->
dr[i]);
200 for(
int i=0;i<tbf->
wdth; i++) free(tbf->
d[i] );
214 FILE *ndin = fopen( (mesh+
".pts").c_str(),
"r" );
215 FILE *elin = fopen( (mesh+
".elem").c_str(),
"r" );
216 if( !ndin || !elin ) {
217 std::cerr <<
"cannot read mesh: " << mesh <<
"\n";
222 constexpr
size_t buffsz_etype = 2048;
223 char *buff = (
char *)malloc(buffsz*
sizeof(
char));;
226 getline( &buff, &buffsz, ndin );
227 sscanf( buff,
"%d", &nlst->
NNodes );
229 for(
int i=0; i<nlst->
NNodes; i++ ) {
230 getline( &buff, &buffsz, ndin );
231 #ifdef REAL_IS_DOUBLE
232 sscanf( buff,
"%lf %lf %lf", &nlst->
Node[i].x,&nlst->
Node[i].y,&nlst->
Node[i].z);
234 sscanf( buff,
"%f %f %f", &nlst->
Node[i].x,&nlst->
Node[i].y,&nlst->
Node[i].z);
239 getline( &buff, &buffsz, elin );
240 sscanf( buff,
"%d", &elst->
NElems );
244 for(
int i=0; i<elst->
NElems; i++ ) {
246 getline( &buff, &buffsz, elin );
247 char etype[buffsz_etype];
249 sscanf( buff,
"%s %d %d %d %d %d %d %d %d", etype, p, p+1,p+2, p+3, p+4, p+5, p+6, p+7 );
250 if( !strcmp(etype,
"Tr") ){
253 }
else if( !strcmp(etype,
"Tt") ){
260 e->
N = (
int*)malloc(e->
Nnode*
sizeof(
int));
261 memmove( e->
N, p, e->
Nnode*
sizeof(p[0]) );
265 std::cerr <<
"Info: " << elign <<
" elements ignored\n";
int main(int argc, char *argv[])
int initTBuffer(tbuffer *tbf, double dt)
int shiftTBuffer(tbuffer *tbf)
void read_mesh(std::string, ElemList *, NodeList *)
void freeTBuffer(tbuffer *tbf)
int init_filament_IO(const char *meshname, int numT, FILE *fh[])
void interpolateTBuffer(tbuffer *tbf)
void write_filaments(filament *f, FILE *filHdls[], float t)
void close_filament_IO(FILE *fh[])
bool compute_filament(float *d0, float *d1, float vth, ElemList *elst, NodeList *nlst, filament *f, SingularityDetector_t meth)
#define log_msg(F, L, O,...)
Integer NElems
number of elements (owned+ghost in case of LOCAL_ELEM)
Point * Node
list of nodes*
Integer NNodes
number of global nodes*
time slice buffer for post processing
float ** dr
resampled data buffer
int wdth
width of buffer, always 2*h_wdth+1
int h_wdth
half width of sample buffer
IGBheader * igb
IGB file reader.
float dt_in
temporal sampling of input data
int rwdth
width of resampling buffer
int dsize
size of data tokens in bytes
bool filled
is buffer fully loaded?
const char * dname
name of data input file
int numSamps
number of time slices in file
float rdist
rel dist of sample to center
int nodes
number of nodes in time slice
int buffered
number of samples in buffer