1 /*  This file is part of MED.
2  *
3  *  COPYRIGHT (C) 1999 - 2019  EDF R&D, CEA/DEN
4  *  MED is free software: you can redistribute it and/or modify
5  *  it under the terms of the GNU Lesser General Public License as published by
6  *  the Free Software Foundation, either version 3 of the License, or
7  *  (at your option) any later version.
8  *
9  *  MED is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public License
15  *  along with MED.  If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef MED_HDFI_H
19 #define MED_HDFI_H
20 #include <med.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 
27 /* FONCTIONS INTERFACE MED/HDF */
28 
29 
30 /* Gestion des attributs HDF */
31 extern MEDC_EXPORT
32 med_idt _MEDattrOuvrir(med_idt pid,char * nom);
33 
34 extern MEDC_EXPORT
35 med_err _MEDattributeExist(const med_idt        gid,
36 			   const char * const   datagroupname,
37 			   const char * const   attributename,
38 			   med_bool *   const   attributeexist );
39 extern MEDC_EXPORT
40 med_err _MEDattrFermer(med_idt id);
41 
42 extern MEDC_EXPORT
43 med_err _MEDattrNumEcrire(med_idt pere,med_field_type type,char *nom,unsigned char *val);
44 
45 #define _MEDattributeIntWr(w,x,y)  _MEDattributeNumWr(w,x, MED_INTERNAL_INT, (unsigned char *) y)
46 #define _MEDattrFloatEcrire(w,x,y)   _MEDattrNumEcrire(w,MED_FLOAT64,x,(unsigned char *) y)
47 
48 extern MEDC_EXPORT
49 med_err _MEDattributeNumWr(med_idt pid,
50 			   const char * const attname,
51 			   const med_internal_type type,
52 			   const unsigned char * const  val);
53 
54 extern MEDC_EXPORT
55 med_err _MEDattributeNumWrByName(med_idt pid,
56 				 const char * const path ,
57 				 const char * const attname,
58 				 const med_internal_type type,
59 				 const unsigned char * const  val);
60 
61 extern MEDC_EXPORT
62 med_err _MEDattrNumLire(med_idt pere,med_field_type type,const char * const nom,unsigned char *val);
63 
64 #define _MEDattrEntierLire(x,y,z) _MEDattrNumLire(x,MED_INT ,y,(unsigned char*)z)
65 #define _MEDattrFloatLire(x,y,z)  _MEDattrNumLire(x,MED_FLOAT64,y,(unsigned char*)z)
66 
67 extern MEDC_EXPORT
68 med_err _MEDattributeNumRdByName(med_idt pid,
69 				 const char * const path ,
70 				 const char * const attname,
71 				 const med_internal_type type,
72 				 unsigned char * const val);
73 
74 extern MEDC_EXPORT
75 med_err _MEDattrStringEcrire(med_idt pere,const char * const nom,int longueur,const char * const val);
76 
77 extern MEDC_EXPORT
78 med_err _MEDattributeStringWrByName(med_idt pid,
79 				    const char * const path,
80 				    const char * const attname,
81 				    const med_size attsize,
82 				    const char * const val);
83 extern MEDC_EXPORT
84 med_err _MEDattributeStringWr(med_idt pid,
85 			      const char * const attname,
86 			      const med_size attsize,
87 			      const char * const val);
88 extern MEDC_EXPORT
89 
90 med_err _MEDattrStringLire(med_idt pere,char *nom,int longueur,char *val);
91 
92 extern MEDC_EXPORT
93 med_err _MEDattributeStringRdByName(med_idt pid,
94 				    const char * const path ,
95 				    const char * const attname,
96 				    const med_size attsize,
97 				    char * const val);
98 
99 
100 /* Gestion des datagroups HDF */
101 extern MEDC_EXPORT
102 med_idt _MEDdatagroupCreer(med_idt pid, const char * const nom);
103 
104 extern MEDC_EXPORT
105 med_idt _MEDdatagroupCrOrderCr(const med_idt pid, const char * const name);
106 
107 extern MEDC_EXPORT
108 med_idt _MEDdatagroupOuvrir(med_idt pid, const char * const nom);
109 
110 extern MEDC_EXPORT
111 med_idt _MEDdatagroupOpen(const med_idt pid, const char * const name);
112 
113 extern MEDC_EXPORT
114 med_err _MEDdatagroupFermer(med_idt id);
115 
116 extern MEDC_EXPORT
117 med_err _MEDdatagroupLienCreer(med_idt id,const char *nom, const char *nom_lien);
118 
119 extern MEDC_EXPORT
120 med_err _MEDdatagroupLienSupprimer(med_idt id,const char *nom_lien);
121 
122 
123 /* Gestion des datasets HDF */
124 
125 extern MEDC_EXPORT
126 med_idt _MEDdatasetOuvrir(med_idt pid,char *nom);
127 
128 extern MEDC_EXPORT
129 med_err _MEDdatasetFermer(med_idt id);
130 
131 extern MEDC_EXPORT
132 med_err _MEDdatasetWr(const med_idt               id,
133 			 const char * const          datasetname,
134 			 const med_internal_type     datatype,
135 			 const med_filter* const     filter,
136 			 const void * const value);
137 extern MEDC_EXPORT
138 med_err _MEDdatasetRd(const med_idt               id,
139 			 const char * const          datasetname,
140 			 const med_internal_type     datatype,
141 			 const med_filter* const     filter,
142 			 unsigned char * const value);
143 
144 /* Gestion des fichiers HDF */
145 #ifdef MED_HAVE_MPI
146 
147 extern MEDC_EXPORT
148 med_idt _MEDparFileOpen(const char * const filename,const med_access_mode accessmode,
149 			const MPI_Comm comm, const MPI_Info info);
150 
151 extern MEDC_EXPORT
152 med_idt _MEDparFileCreate(const char * const filename, const med_access_mode accessmode,
153 			  const MPI_Comm comm, const MPI_Info info);
154 #endif
155 
156 extern MEDC_EXPORT
157 med_idt _MEDfileOpen(const char * const filename,const med_access_mode accessmode);
158 
159 
160 extern MEDC_EXPORT
161 med_int _MEDfileName(med_idt id, char * const filename, const med_int filenamesize);
162 
163 extern MEDC_EXPORT
164 med_idt _MEDfileCreate(const char * const filename, const med_access_mode accessmode, const med_int major, const med_int minor, const med_int release);
165 
166 extern MEDC_EXPORT
167 med_idt _MEDmemFileOpen(const char * const filename, med_memfile * const memfile, const med_bool filesync, const med_access_mode accessmode);
168 
169 extern MEDC_EXPORT
170 med_err _MEDfichierFermer(med_idt fid);
171 
172 extern MEDC_EXPORT
173 med_err _MEDfichierMonter(med_idt pid, const char *nom, med_idt fid);
174 
175 extern MEDC_EXPORT
176 med_err _MEDfichierDemonter(med_idt pid, const char *nom);
177 
178 extern MEDC_EXPORT
179 med_err _MEDfichierNo(med_idt id, unsigned long * fileno);
180 
181 /* Filtres */
182 extern MEDC_EXPORT
183 med_err _MEDfilterEntityFullIGlobalCr(const med_idt          fid,
184 				const med_int          nentity,
185 				const med_int          nvaluesperentity,
186 				const med_int          nconstituentpervalue,
187 				const med_int          constituentselect,
188 				const med_storage_mode storagemode,
189 				const char * const     profilename,
190 				const med_int          filterarraysize,
191 				const med_int* const   filterarray,
192 				med_filter*    const filter);
193 extern MEDC_EXPORT
194 med_err _MEDfilterEntityFullICompactCr(const med_idt          fid,
195 				       const med_int          nentity,
196 				       const med_int          nvaluesperentity,
197 				       const med_int          nconstituentpervalue,
198 				       const med_int          constituentselect,
199 				       const med_storage_mode storagemode,
200 				       const char * const     profilename,
201 				       const med_int          filterarraysize,
202 				       const med_int* const   filterarray,
203 				       med_filter*    const   filter);
204 extern MEDC_EXPORT
205 med_err _MEDfilterEntityNoIGlobalCr(const med_idt          fid,
206 				    const med_int          nentity,
207 				    const med_int          nvaluesperentity,
208 				    const med_int          nconstituentpervalue,
209 				     const med_int          constituentselect,
210 				    const med_storage_mode storagemode,
211 				    const char * const     profilename,
212 				    const med_int          filterarraysize,
213 				    const med_int* const   filterarray,
214 				    med_filter* const      filter);
215 
216 extern MEDC_EXPORT
217 med_err _MEDfilterEntityNoICompactCr(const med_idt          fid,
218 				     const med_int          nentity,
219 				     const med_int          nvaluesperentity,
220 				     const med_int          nconstituentpervalue,
221 				     const med_int          constituentselect,
222 				     const med_storage_mode storagemode,
223 				     const char * const     profilename,
224 				     const med_int          filterarraysize,
225 				     const med_int* const   filterarray,
226 				     med_filter* const      filter);
227 
228 /* extern MEDC_EXPORT */
229 /* med_err _MEDselectAllEntities(const med_idt          fid, */
230 /* 			      const med_int          nentity, */
231 /* 			      const med_int          nvaluesperentity, */
232 /* 			      const med_int          nconstituentpervalue, */
233 /* 			      const med_int          constituentselect, */
234 /* 			      med_filter*    const   filter); */
235 
236 
237 extern MEDC_EXPORT
238 med_err _MEDselectAllEntitiesFullI(const med_idt          fid,
239 				   const med_int          nentity,
240 				   const med_int          nvaluesperentity,
241 				   const med_int          nconstituentpervalue,
242 				   const med_int          constituentselect,
243 				   med_filter*    const   filter);
244 
245 extern MEDC_EXPORT
246 med_err _MEDselectAllEntitiesNoI(const med_idt          fid,
247 				 const med_int          nentity,
248 				 const med_int          nvaluesperentity,
249 				 const med_int          nconstituentpervalue,
250 				 const med_int          constituentselect,
251 				 med_filter*    const   filter);
252 
253 extern MEDC_EXPORT
254 med_err _MEDfilterBlockOfEntityFullICompactCr(const med_idt          fid,
255 					      const med_int          nentity,
256 					      const med_int          nvaluesperentity,
257 					      const med_int          nconstituentpervalue,
258 					      const med_int          constituentselect,
259 					      const med_storage_mode storagemode,
260 					      const char * const     profilename,
261 					      const med_size  start,
262 					      const med_size  stride,
263 					      const med_size  count,
264 					      const med_size  blocksize,
265 					      const med_size  lastblocksize,
266 					      med_filter*    const   filter);
267 
268 extern MEDC_EXPORT
269 med_err _MEDfilterBlockOfEntityFullIGlobalCr(const med_idt          fid,
270 					      const med_int          nentity,
271 					      const med_int          nvaluesperentity,
272 					      const med_int          nconstituentpervalue,
273 					      const med_int          constituentselect,
274 					      const med_storage_mode storagemode,
275 					      const char * const     profilename,
276 					      const med_size  start,
277 					      const med_size  stride,
278 					      const med_size  count,
279 					      const med_size  blocksize,
280 					      const med_size  lastblocksize,
281 					      med_filter*    const   filter);
282 extern MEDC_EXPORT
283 med_err _MEDfilterBlockOfEntityNoIGlobalCr(const med_idt          fid,
284 					      const med_int          nentity,
285 					      const med_int          nvaluesperentity,
286 					      const med_int          nconstituentpervalue,
287 					      const med_int          constituentselect,
288 					      const med_storage_mode storagemode,
289 					      const char * const     profilename,
290 					      const med_size  start,
291 					      const med_size  stride,
292 					      const med_size  count,
293 					      const med_size  blocksize,
294 					      const med_size  lastblocksize,
295 					      med_filter*    const   filter);
296 extern MEDC_EXPORT
297 med_err _MEDfilterBlockOfEntityNoICompactCr(const med_idt          fid,
298 					      const med_int          nentity,
299 					      const med_int          nvaluesperentity,
300 					      const med_int          nconstituentpervalue,
301 					      const med_int          constituentselect,
302 					      const med_storage_mode storagemode,
303 					      const char * const     profilename,
304 					      const med_size  start,
305 					      const med_size  stride,
306 					      const med_size  count,
307 					      const med_size  blocksize,
308 					      const med_size  lastblocksize,
309 					      med_filter*    const   filter);
310 
311 
312 /* Divers */
313 
314 extern MEDC_EXPORT
315 med_err _MEDnObjects(const med_idt fid,const char * const path,med_size *n);
316 
317 extern MEDC_EXPORT
318 med_err _MEDobjectGetName(const med_idt fid,const char * const path,const med_size ind,char *name);
319 
320 extern MEDC_EXPORT
321 med_err
322 _MEDobjectCrOrderGetName(const med_idt fid,const char * const path,const med_size ind,char *name);
323 
324 extern MEDC_EXPORT
325 med_err
326 __MEDobjectGetName(const med_idt fid, const char * const path, const med_size ind, char *name,
327 		   const H5_index_t index_type, const H5_iter_order_t order );
328 
329 
330 typedef struct {
331   char * srcpath;
332   char * dstpath;
333   med_idt gid1;
334   med_idt gid2;
335 } visitordatas;
336 
337 typedef struct {
338   char *   attname;
339   char *   attval;
340   char *   attvalprec;
341   med_int  attsize;
342 } med_string_itdatas;
343 
344 
345 extern MEDC_EXPORT
346 void * _MEDcheckAttributeStringInit( med_string_itdatas * const itdatas, const char * const attname, med_int attsize);
347 extern MEDC_EXPORT
348 med_err _MEDcheckAttributeStringFunc(med_idt id,const char *lname, const H5L_info_t *linfo, med_string_itdatas *data);
349 extern MEDC_EXPORT
350 void  _MEDcheckAttributeStringFin( med_string_itdatas * const itdatas);
351 
352 extern MEDC_EXPORT
353 med_err _MEDchecknSublinkFunc(med_idt id,const char *lname, const H5L_info_t *linfo, med_bool *data);
354 
355 #define MED_CHECK_ATTRIBUTE_FUNC(_check_med_type_) _MEDcheckAttributeFunc##_check_med_type_
356 #define MED_CHECK_ATTRIBUTE_INIT(_check_med_type_,_check_med_itdata_,_check_med_attname_,_check_med_attsize_) _MEDcheckAttributeInit##_check_med_type_ (_check_med_itdata_,_check_med_attname_,_check_med_attsize_)
357 
358 
359 extern MEDC_EXPORT
360 med_err _MEDcopyName(med_idt id,const char *lname, const H5L_info_t *linfo, void *data);
361 
362 extern MEDC_EXPORT
363 med_err _MEDlinkobjs(med_idt id,const char *lname, const H5L_info_t *linfo, visitordatas *data);
364 
365 extern MEDC_EXPORT
366 med_err _MEDsoftlinkDel(const med_idt               id,	const char * const          softlinkname,
367 			med_bool                    linkmustexist);
368 extern MEDC_EXPORT
369 med_err _MEDisasoftlink(const med_idt               id,
370 			const char * const          linkname,
371 			med_bool                    linkmustexist,
372 			med_bool *   const          isasoftlink
373 			);
374 extern MEDC_EXPORT
375 med_err _MEDgetDatasetChgt(const med_idt                       gid,
376 			   const med_data_type                 meddatatype,
377 			   const med_connectivity_mode         cmode,
378 			   med_bool *                  const   isasoftlink,
379 			   med_bool *                  const   chgt );
380 
381 extern MEDC_EXPORT
382 med_err _MEDdatasetExistByMedtype(const med_idt                       gid,
383 			 const med_data_type                 meddatatype,
384 			 const med_connectivity_mode         cmode,
385 			 med_bool *                  const   datasetexist,
386 			 med_bool *                  const   isasoftlink );
387 
388 extern MEDC_EXPORT
389 med_err _MEDdatagroupExist(const med_idt        gid,
390 			   const char * const   datagroupname,
391 			   med_bool *   const   datagroupexist,
392 			   med_bool *   const   isasoftlink );
393 extern MEDC_EXPORT
394 med_err _MEDdatasetExist(const med_idt       gid,
395 			 const char *  const datasetname,
396 			 med_bool   *  const datasetexist,
397 			 med_bool   *  const isasoftlink );
398 
399 typedef herr_t (*medvisitorfunc)( hid_t g_id, const char *name, const H5L_info_t *info, void *op_data);
400 typedef medvisitorfunc mediteratorfunc;
401 
402 extern MEDC_EXPORT
403 med_err _MEDvisit(const med_idt fid, const char * const srcpath, const char * const dstpath,
404 		  medvisitorfunc);
405 extern MEDC_EXPORT
406 med_err _MEDiterate(const med_idt fid, herr_t (*func)(), void * itdatas );
407 
408 extern MEDC_EXPORT
409 med_err
410 _MEDgetComputationStepName(const med_sorting_type sortingtype, const med_int numdt,
411 			   const med_int numit, char * const datagroupname);
412 
413 extern MEDC_EXPORT
414 void _MEDmodeErreurVerrouiller(void);
415 
416 extern MEDC_EXPORT
417 void _MEDobjetsOuverts(med_idt fid);
418 #ifdef __cplusplus
419 }
420 #endif
421 
422 #endif /* MED_HDFI_H */
423