157{
158 typedef unsigned char Boolean;
159
160 int magic;
161 int flagA[10];
162 float a_time;
163
164
165 int nbElts3D = 0;
166 int nbParts3D = 0;
167 int nbEFunc3D = 0;
168 int nbTens3D = 0;
169 int *connect3DA = nullptr;
170 Boolean *delElt3DA = nullptr;
171 int *defPart3DA = nullptr;
172 char **pText3DA = nullptr;
173 char **fText3DA = nullptr;
174 float *eFunc3DA = nullptr;
175 char **tText3DA = nullptr;
176 float *tensVal3DA = nullptr;
177 float *eMass3DA = nullptr;
178 int *elNum3DA = nullptr;
179
180
181 int nbFacets = 0;
182 int nbNodes = 0;
183 int nbParts = 0;
184 int nbFunc = 0;
185 int nbEFunc = 0;
186 int nbVect = 0;
187 int nbTens = 0;
188 int nbSkew = 0;
189 uint16_t *skewShortValA = nullptr;
190 float *skewValA = nullptr;
191 float *coorA = nullptr;
192 int *connectA = nullptr;
193 char *delEltA = nullptr;
194 int *defPartA = nullptr;
195 uint16_t *normShortA = nullptr;
196 float *funcA = nullptr;
197 float *eFuncA = nullptr;
198
199 char tmpText[128];
200 int i;
201 FILE *inf=NULL;
202
203 std::list<std::string> checksum_list;
204
205
206 Ufread(&magic,
sizeof(
int), 1);
207
208 switch (magic){
210 {
211 Ufread(&a_time,
sizeof(
float), 1);
212 Ufread(tmpText,
sizeof(
char), 81);
213 Ufread(tmpText,
sizeof(
char), 81);
214 Ufread(tmpText,
sizeof(
char), 81);
215
216
217
218
219
220
221
222
223
224
225
226 Ufread(flagA,
sizeof(
int), 10);
227
228
229
230 Ufread(&nbNodes,
sizeof(
int), 1);
231 Ufread(&nbFacets,
sizeof(
int), 1);
232 Ufread(&nbParts,
sizeof(
int), 1);
233 Ufread(&nbFunc,
sizeof(
int), 1);
234 Ufread(&nbEFunc,
sizeof(
int), 1);
235 Ufread(&nbVect,
sizeof(
int), 1);
236 Ufread(&nbTens,
sizeof(
int), 1);
237 Ufread(&nbSkew,
sizeof(
int), 1);
238
239 if (nbSkew)
240 {
241 skewShortValA = (uint16_t *)malloc(nbSkew * 6 * sizeof(uint16_t));
242 skewValA = (float *)malloc(nbSkew * 6 * sizeof(float));
243 Ufread(skewShortValA,
sizeof(uint16_t), nbSkew * 6);
244 for (i = 0; i < 6 * nbSkew; i++)
245 {
246 skewValA[i] = ((float)skewShortValA[i]) /
248 }
249 }
250
251
252 coorA = (float *)malloc(3 * nbNodes * sizeof(float));
253 Ufread(coorA,
sizeof(
float), 3 * nbNodes);
254 free(coorA);
255
256
257 if (nbFacets)
258 {
259 connectA = (int *)malloc(nbFacets * 4 * sizeof(int));
260 Ufread(connectA,
sizeof(
int), nbFacets * 4);
261 free(connectA);
262
263
264
265 delEltA = (char *)malloc(nbFacets * sizeof(char));
266 Ufread(delEltA,
sizeof(
char), nbFacets);
267 free(delEltA);
268 }
269
270 if (nbParts != 0)
271 {
272 defPartA = (int *)malloc(nbParts * sizeof(int));
273 Ufread(defPartA,
sizeof(
int), nbParts);
274 free(defPartA);
275
276
277 for (i = 0; i < nbParts; i++){
278 Ufread(tmpText,
sizeof(
char), 50);
279 }
280 }
281
282
283 normShortA = (uint16_t *)malloc(3 * nbNodes * sizeof(uint16_t));
284 Ufread(normShortA,
sizeof(uint16_t), 3 * nbNodes);
285 free(normShortA);
286
287
288 if (nbFunc + nbEFunc)
289 {
290
291 for (i = 0; i < (nbFunc + nbEFunc); i++)
292 {
293 Ufread(tmpText,
sizeof(
char), 81);
294
295 if (strncmp(tmpText, "ZCHKSM_",7) == 0 )
296 {
297 std::string checksum(tmpText);
298 checksum = checksum.substr(7);
299 checksum_list.push_back(checksum);
300 }
301
302 }
303 funcA = (float *)malloc(nbFunc * nbNodes * sizeof(float));
304 eFuncA = (float *)malloc(nbEFunc * nbFacets * sizeof(float));
305 if (nbFunc){
306 Ufread(funcA,
sizeof(
float), nbNodes * nbFunc);
307 }
308
309 if (nbEFunc){
310 Ufread(eFuncA,
sizeof(
float), nbFacets * nbEFunc);
311 }
312 free(funcA);
313 free(eFuncA);
314 }
315 }
316 }
317 return checksum_list;
318}
int Ufread(void *pchar, size_t sizeOfItem, size_t numItems, bool text=false)