AcouSTO  version 2.0

◆ read_gmsh()

int read_gmsh ( int  igeom,
const char *  geoname,
struct gmsh_geom gmshgeom 
)
40  {
41  double dtmp;
42  char varname[MAX_PATH]; // temp var to read dynamic geometry &configuration
43 
44  int j;
45  int eltype;
46  int netmp;
47  int ntmp;
48  unsigned long nelcount = 0;
49  FILE* fnodes;
50  char line[MAX_PATH];
51 
52  gmshgeom->filename = NULL;
53  sprintf(varname, "%s.filename", geoname); CONFIG_GET_STRING(config, varname, gmshgeom->filename);
54  sprintf(varname, "%s.symvec.x", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->symvec.x);
55  sprintf(varname, "%s.symvec.y", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->symvec.y);
56  sprintf(varname, "%s.symvec.z", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->symvec.z);
57  sprintf(varname, "%s.refpoint.x", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->refpoint.x);
58  sprintf(varname, "%s.refpoint.y", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->refpoint.y);
59  sprintf(varname, "%s.refpoint.z", geoname); CONFIG_GET_FLOAT(config, varname, gmshgeom->refpoint.z);
60 
61  if (runinfo->ksymmi == 2 || runinfo->ksymmi == 3) {
62  logger(LOG_ERROR, "Symmetry level ksymmi=%d. Acousto supports only 1 symmetry plane (ksymmi=1) or axialsymmetry (ksymmi>3) with GMSH files \n", runinfo->ksymmi);
63  return -1;
64  }
65 
66  /* Reading .msh file for number of nodes and elements */
67 
68  fnodes = fopen(gmshgeom->filename, "r");
69  if (NULL == fnodes) {
72  }
73 
74  nelcount = 0;
75  while (fgets(line, 100, fnodes) != NULL) {
76  if (0 == strcmp("$Nodes\n", line)) {
77  fgets(line, 100, fnodes);
78  sscanf(line, "%d\n", &ntmp);
79  geometries[igeom].nnodb = runinfo->nsymm * ntmp;
80  logger(LOG_INFO, "GMSH FILE -> number of read nodes %d\n", ntmp);
81  logger(LOG_INFO, "GMSH FILE -> number of nodes after symmetrization %d\n", geometries[igeom].nnodb);
82  }
83  if (0 == strcmp("$Elements\n", line)) {
84  fgets(line, 100, fnodes);
85  sscanf(line, "%d\n", &netmp);
86  for (j = 0; j < netmp; j++) {
87  fgets(line, 100, fnodes);
88  sscanf(line, "%d %d\n", &ntmp, &eltype);
89  if (2 == eltype || 3 == eltype) {
90  nelcount++;
91  }
92  }
93  geometries[igeom].nelmb = runinfo->nsymm * nelcount;
94  logger(LOG_INFO, "GMSH FILE -> number of read triangular and quadrilateral elements %d\n", nelcount);
95  logger(LOG_INFO, "GMSH FILE -> number of triangular and quadrilateral elements after symmetrization %d\n", geometries[igeom].nelmb);
96  }
97  }
98  fclose(fnodes);
99 
100  geometries[igeom].type = GMSH;
101  geometries[igeom].ptrgeom = (void*) gmshgeom;
102  geometries[igeom].ncntr = (int) (geometries[igeom].nelmb / (runinfo->nsymm));
103  logger(LOG_INFO, "GMSH FILE -> number of collocation points calculated %d\n", geometries[igeom].ncntr);
104 
105  logger(LOG_DEBUG, "------------------------\n");
106  logger(LOG_DEBUG, " file\n");
107  logger(LOG_DEBUG, "------------------------\n");
108  logger(LOG_DEBUG, " - filename = \"%s\"\n", gmshgeom->filename);
109 
110 
111  return 0;
112 
113 
114 }
#define MSG_GEOM_FILE_NOTFOUND
Definition: messages.h:38
struct geometry * geometries
Definition: globals.h:66
struct run_info * runinfo
Definition: globals.h:34
#define GMSH
Definition: config.h:58
int ncntr
Definition: structs.h:175
#define CONFIG_GET_STRING(config, name, var)
Definition: config.h:48
void * ptrgeom
Definition: structs.h:173
struct vector refpoint
Definition: structs.h:254
#define LOG_INFO
Definition: logger.h:26
const char * filename
Definition: structs.h:252
#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
struct config_t config
Definition: config.h:61
DOUBLE z
Definition: structs.h:35
#define LOG_DEBUG
Definition: logger.h:27
int type
Definition: structs.h:171
int nsymm
Definition: structs.h:97
int ksymmi
Definition: structs.h:91
DOUBLE x
Definition: structs.h:31
int nnodb
Definition: structs.h:177
#define MAX_PATH
Definition: constants.h:29
#define CONFIG_GET_FLOAT(config, name, var)
Definition: config.h:44
void logger(int level, char *msg,...)
Definition: logger.c:56
DOUBLE y
Definition: structs.h:33