Build nodes from .msh file. Only version >= 2.2 is supported. Only one symmetry plane is supported. Triangular and quadrilateral panels are accepted.
89 int j, ifreq, inodb,ntmp,netmp,nelmu,nvertu, nome;
92 long double xdotk,dtheta;
93 int i,j1,j2,j3,j4,ftype,datasize,eltype;
94 int ielg,ntag,nphy,ngeo,npart;
100 struct vector xmx0,xsym,proj;
120 fnodes = fopen(gmshgeom->
filename,
"r");
127 fgets(line,100,fnodes);
128 if(0 != strcmp(
"$MeshFormat\n",line)){
134 fgets(line,100,fnodes);
148 FILE** file_lambda=
malloc(
sizeof(FILE*)*(nome-1));
149 FILE** file_gamma=
malloc(
sizeof(FILE*)*(nome-1));
150 FILE** file_f=
malloc(
sizeof(FILE*)*(nome-1));
153 for (ifreq=0;ifreq<nome;ifreq++) {
159 file_lambda[ifreq] = fopen(flambda,
"w");
160 file_gamma[ifreq] = fopen(fgamma,
"w");
161 file_f[ifreq] = fopen(ffunc,
"w");
171 while (fgets(line,100,fnodes)!=NULL){
172 if(0 == strcmp(
"$Nodes\n",line)){
173 fgets(line,100,fnodes);
174 sscanf(line,
"%d\n",&ntmp);
176 logger(
LOG_ERROR,
"NUMBER OF NODES NOT CONSISTENT %d CHECK MSH FILE\n",ntmp);
179 for(inodb=0;inodb<ntmp;inodb++){
180 fgets(line,100,fnodes);
188 for(inodb=ntmp;inodb<geom->
nnodb;inodb++){
201 for(inodb=ntmp;inodb<geom->
nnodb;inodb++){
214 if(0 == strcmp(
"$Elements\n",line)){
215 fgets(line,100,fnodes);
216 sscanf(line,
"%d\n",&netmp);
217 for(j=0;j<netmp;j++){
218 fgets(line,100,fnodes);
219 sscanf(line,
"%d %d %d\n",&ielg,&eltype,&ntag);
224 sscanf(line,
"%d %d %d %d %d %d %d %d\n",&ielg,&eltype,&ntag,&nphy,&ngeo,&j1,&j2,&j3);
233 logger(
LOG_ERROR,
" Physical tags do not match config file. Geometry build fails.\n");
237 for (ifreq=0;ifreq<nome;ifreq++) {
239 logger(
LOG_DEBUG,
" Lambda ptr %p gamma ptr %p func ptr %p\n",file_lambda[ifreq],file_gamma[ifreq],file_f[ifreq]);
241 fprintf(file_gamma[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_gamma, gmshbc->
im_gamma);
242 fprintf(file_f[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_f, gmshbc->
im_f);
251 logger(
LOG_DEBUG,
" Element %d/%d is a QUADRANGLE %d\n",j,netmp,eltype);
252 sscanf(line,
"%d %d %d %d %d %d %d %d %d\n",&ielg,&eltype,&ntag,&nphy,&ngeo,&npart,&j1,&j2,&j3);
260 logger(
LOG_ERROR,
" Physical tags do not match config file. Geometry build fails.\n");
263 for (ifreq=0;ifreq<nome;ifreq++) {
266 fprintf(file_gamma[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_gamma, gmshbc->
im_gamma);
267 fprintf(file_f[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_f, gmshbc->
im_f);
281 sscanf(line,
"%d %d %d %d %d %d %d %d %d\n",&ielg,&eltype,&ntag,&nphy,&ngeo,&j1,&j2,&j3,&j4);
288 logger(
LOG_ERROR,
" Physical tags do not match config file. Geometry build fails.\n");
291 for (ifreq=0;ifreq<nome;ifreq++) {
294 fprintf(file_gamma[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_gamma, gmshbc->
im_gamma);
295 fprintf(file_f[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_f, gmshbc->
im_f);
300 sscanf(line,
"%d %d %d %d %d %d %d %d %d %d\n",&ielg,&eltype,&ntag,&nphy,&ngeo,&npart,&j1,&j2,&j3,&j4);
308 logger(
LOG_ERROR,
" Physical tags do not match config file. Geometry build fails.\n");
311 for (ifreq=0;ifreq<nome;ifreq++) {
314 fprintf(file_gamma[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_gamma, gmshbc->
im_gamma);
315 fprintf(file_f[ifreq],
"%d %f %f\n", ielg, gmshbc->
re_f, gmshbc->
im_f);
323 logger(
LOG_ERROR,
"NUMBER OF ELEMENTS NOT CONSISTENT %d CHECK MSH FILE\n",icount);
330 for (ifreq=0;ifreq<nome;ifreq++) {
331 fclose(file_lambda[ifreq]);
332 fclose(file_gamma[ifreq]);
333 fclose(file_f[ifreq]);
339 logger(
LOG_INFO,
"Building symmetrized elements topology - Symmetrized panels circulation inverted. \n",ftype);
340 for(j=nelmu+1;j<=geom->
nelmb;j++){
350 logger(
LOG_INFO,
"Building symmetrized elements topology - Symmetrized panels circulation NOT inverted for AXIALSYMMETRY. \n",ftype);
351 for(j=nelmu+1;j<=geom->
nelmb;j++){
#define MSG_GEOM_FILE_NOTFOUND
Definition: messages.h:38
DOUBLE re_gamma
Definition: structs.h:265
struct run_info * runinfo
Definition: globals.h:34
const char * bc_gamma_file
Definition: structs.h:422
int ncntr
Definition: structs.h:175
External geometry boundary conditions assigned with physical tags stored in .msh file using GMSH v2...
Definition: structs.h:261
void vec_scale(struct vector *v1, DOUBLE d)
Definition: math.c:170
#define GMSH_VER_SCANF
Definition: formats.h:69
void * ptrgeom
Definition: structs.h:173
void vec_copy(struct vector *vdest, const struct vector vsrc)
Definition: math.c:158
vector struct to hold triplets.
Definition: structs.h:29
DOUBLE im_f
Definition: structs.h:268
struct vector refpoint
Definition: structs.h:254
struct phystag * phystags
Definition: globals.h:58
void geom_fill(struct geometry *geom)
Definition: geom_utils.c:249
#define LOG_INFO
Definition: logger.h:26
const char * filename
Definition: structs.h:252
struct file_info * fileinfo
Definition: globals.h:32
DOUBLE im_lambda
Definition: structs.h:264
void vec_rotate2(struct vector *x1, struct vector *nu, struct vector *x0, DOUBLE theta)
Definition: math.c:278
#define LOG_ERROR
Definition: logger.h:24
int nelmb
Definition: structs.h:179
#define ACOUSTO_ERROR_GEOMETRY
Definition: constants.h:25
struct vector symvec
Definition: structs.h:253
int custombc
Definition: structs.h:523
struct modsol_info * modsolinfo
Definition: globals.h:44
DOUBLE re_f
Definition: structs.h:267
void vec_diff(struct vector *vdest, const struct vector v1, const struct vector v2)
Definition: math.c:52
DOUBLE vec_dot(struct vector v1, struct vector v2)
Definition: math.c:34
#define LOG_DEBUG
Definition: logger.h:27
const char * bc_func_file
Definition: structs.h:423
#define malloc(size)
Definition: allocation.h:38
External geometry stored in .msh file using GMSH v2.0 format.
Definition: structs.h:250
int nsymm
Definition: structs.h:97
#define GMSH_NOD_SCANF
Definition: formats.h:70
DOUBLE re_lambda
Definition: structs.h:263
int nnodb
Definition: structs.h:177
DOUBLE im_gamma
Definition: structs.h:266
int nome
Definition: structs.h:458
int _g_inodb
Definition: globals.h:68
const char * bc_lambda_file
Definition: structs.h:421
int _g_ielmb
Definition: globals.h:70
Geometry info structure.
Definition: structs.h:161
#define MAX_PATH
Definition: constants.h:29
int trovatag(int phytag, int *indice)
Definition: geom_gmsh.c:32
int _g_icntr
Definition: globals.h:69
void logger(int level, char *msg,...)
Definition: logger.c:56