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 
19 #include <med.h>
20 #include "med_config.h"
21 #include "med_outils.h"
22 #include <string.h>
23 #include <stdlib.h>
24 
25 /*
26 From Fortran call of following C functions :
27 - MEDsubdomainJointCr
28 - MEDsubdomainCorrespondenceWr
29 - MEDnSubdomainJoint
30 - MEDsubdomainJointInfo
31 - MEDsubdomainCorrespondenceSizeInfo
32 - MEDsubdomainCorrespondenceSize
33 - MEDsubdomainCorrespondenceRd
34 - MEDsubdomainComputingStepInfo
35 
36 */
37 
38 #define nmsdfjcr F77_FUNC(msdfjcr,MSDFJCR)
39 #define nmsdfcrw F77_FUNC(msdfcrw,MSDFCRW)
40 #define nmsdfnjn F77_FUNC(msdfnjn,MSDFNJN)
41 #define nmsdfjni F77_FUNC(msdfjni,MSDFJNI)
42 #define nmsdfszi F77_FUNC(msdfszi,MSDFSZI)
43 #define nmsdfcsz F77_FUNC(msdfcsz,MSDFCSZ)
44 #define nmsdfcrr F77_FUNC(msdfcrr,MSDFCRR)
45 #define nmsdfcsi F77_FUNC(msdfcsi,MSDFCSI)
46 
47 
48 #ifdef PPRO_NT
49 med_int
MSDFJCR(med_idt * fid,char * lmname,unsigned int bidon1,med_int * lon1,char * jname,unsigned int bidon2,med_int * lon2,char * desc,unsigned int bidon3,med_int * lon3,med_int * dom,char * rmname,unsigned int bidon4,med_int * lon4)50 MSDFJCR(med_idt *fid,
51                    char *lmname,  unsigned int bidon1, med_int *lon1,
52                    char *jname,   unsigned int bidon2, med_int *lon2,
53                    char *desc, unsigned int bidon3, med_int *lon3,
54 		   med_int *dom,
55 		   char *rmname,  unsigned int bidon4, med_int *lon4
56 		   )
57 #else
58 med_int
59 nmsdfjcr(med_idt *fid,
60 	 char *lmname,  med_int *lon1,
61 	 char *jname, med_int *lon2,
62 	 char *desc, med_int *lon3,
63 	 med_int *dom,
64 	 char *rmname,med_int *lon4)
65 #endif
66 {
67   med_int _ret;
68   char *_fn1, *_fn2, *_fn3, *_fn4;
69 
70   _fn1 = _MED2cstring(lmname, (int) * lon1);
71   _fn2 = _MED2cstring(jname,  (int) * lon2);
72   _fn3 = _MED1cstring(desc, (int) * lon3,MED_COMMENT_SIZE);
73   _fn4 = _MED2cstring(rmname, (int) * lon4);
74 
75   if (!_fn1 || !_fn2 || !_fn3 || !_fn4)
76     return(-1);
77 
78   _ret = (med_int) MEDsubdomainJointCr((med_idt) *fid,
79 				      _fn1,
80 				      _fn2,
81 				      _fn3,
82 				      (med_int) *dom,
83 				      _fn4);
84 
85   _MEDcstringFree(_fn1);
86   _MEDcstringFree(_fn2);
87   _MEDcstringFree(_fn3);
88   _MEDcstringFree(_fn4);
89 
90   return(_ret);
91 }
92 
93 
94 #ifdef PPRO_NT
95 med_int
MSDFCRW(med_idt * fid,char * maa_local,unsigned int bidon1,med_int * lon1,char * jn,unsigned int bidon2,med_int * lon2,med_int * numdt,med_int * numit,med_int * typ_ent_local,med_int * typ_geo_local,med_int * typ_ent_distant,med_int * typ_geo_distant,med_int * n,med_int * corrtab)96 MSDFCRW(med_idt *fid,
97 		  char *maa_local,unsigned int bidon1, med_int *lon1,
98 		  char *jn,unsigned int bidon2, med_int *lon2,
99 		  med_int *numdt, med_int *numit,
100 		  med_int * typ_ent_local, med_int * typ_geo_local,
101 		  med_int * typ_ent_distant, med_int * typ_geo_distant,
102 		  med_int *n, med_int *corrtab)
103 #else
104 med_int
105 nmsdfcrw (med_idt *fid,
106 	  char *maa_local,med_int *lon1,
107 	  char *jn,med_int *lon2,
108 	  med_int *numdt, med_int *numit,
109 	  med_int * typ_ent_local, med_int * typ_geo_local,
110 	  med_int * typ_ent_distant, med_int * typ_geo_distant,
111 	  med_int *n, med_int *corrtab)
112 #endif
113 {
114   med_int _ret;
115   char *_fn1, *_fn2;
116   med_entity_type _let = (med_entity_type) *typ_ent_local;
117   med_entity_type _rnt = (med_entity_type) *typ_ent_distant;
118   med_geometry_type _ltg = (med_geometry_type) *typ_geo_local;
119   med_geometry_type _rtg = (med_geometry_type) *typ_geo_distant;
120 
121   _fn1 = _MED2cstring(maa_local, (int) *lon1);
122   _fn2 = _MED2cstring(jn,  (int) *lon2);
123 
124   if (!_fn1 || !_fn2)
125     return(-1);
126 
127   _ret = (med_int) MEDsubdomainCorrespondenceWr((med_idt) *fid,
128 						_fn1,
129 						_fn2,
130 						(med_int) *numdt,
131 						(med_int) *numit,
132 						_let,
133 						_ltg,
134 						_rnt,
135 						_rtg,
136 						(med_int) *n,
137 						(med_int *) corrtab);
138 
139   _MEDcstringFree(_fn1);
140   _MEDcstringFree(_fn2);
141 
142 
143   return(_ret);
144 }
145 
146 
147 #ifdef PPRO_NT
148 med_int
MSDFNJN(med_idt * fid,char * maa,unsigned int bidon1,med_int * lon1)149 MSDFNJN(med_idt *fid,
150                   char *maa,  unsigned int bidon1, med_int *lon1)
151 #else
152 med_int
153 nmsdfnjn(med_idt *fid,
154 	 char *maa, med_int *lon1)
155 #endif
156 {
157   char *_fn1;
158   med_int _n;
159 
160   _fn1 = _MED2cstring(maa, (int) * lon1);
161 
162 
163   if (!_fn1)
164     return(-1);
165 
166   _n = (med_int) MEDnSubdomainJoint((med_idt) *fid,
167 				    _fn1);
168 
169   _MEDcstringFree(_fn1);
170 
171   return(_n);
172 }
173 
174 
175 
176 
177 
178 #ifdef PPRO_NT
179 med_int
MSDFJNI(med_idt * fid,char * maa,unsigned int bidon1,med_int * lon1,med_int * ind,char * jname,unsigned int bidon2,char * desc,unsigned int bidon3,med_int * dom,char * rname,unsigned int bidon4,med_int * nstep,med_int * ncor)180 MSDFJNI(med_idt *fid,
181                   char *maa, unsigned int bidon1, med_int *lon1,
182 		  med_int *ind, char *jname, unsigned int bidon2,
183 		  char *desc,unsigned int bidon3,
184 		  med_int *dom,char *rname,unsigned int bidon4,
185 		  med_int *nstep, med_int *ncor)
186 #else
187 med_int
188 nmsdfjni(med_idt *fid,
189 	 char *maa, med_int *lon1,
190 	 med_int *ind, char *jname,
191 	 char *desc, med_int *dom,char *rname,
192 	 med_int *nstep, med_int *ncor)
193 #endif
194 {
195   med_int _ret;
196   char *_fn1;
197   char _fs1[MED_NAME_SIZE+1];   /* nom du joint OUT */
198   char _fs2[MED_COMMENT_SIZE+1];  /* nom de la description   OUT */
199   char _fs3[MED_NAME_SIZE+1];   /* nom du maillage distant OUT */
200 
201 
202   /* nom maillage IN */
203   _fn1 = _MED2cstring(maa, (int) * lon1);
204   if (!_fn1)
205     return(-1);
206 
207   _ret = (med_int) MEDsubdomainJointInfo((med_idt) *fid,
208 					 _fn1,                /* maillage local IN */
209 					 (med_int) *ind,      /* indice du joint dans le maillage IN */
210 					 _fs1,                /* nom joint OUT */
211 					 _fs2,                /* desc joint OUT */
212 					 (med_int * ) dom,    /* numero ss domaine distant OUT */
213 					 _fs3,                 /* nom maillage distant OUT */
214 					 (med_int *) nstep,
215 					 (med_int *) ncor);
216 
217   _MEDc2fString(_fs1,jname,MED_NAME_SIZE);
218   _MEDc2fString(_fs2,desc,MED_COMMENT_SIZE);
219   _MEDc2fString(_fs3,rname,MED_NAME_SIZE);
220 
221   _MEDcstringFree(_fn1);
222 
223   return(_ret);
224 }
225 
226 
227 
228 
229 #ifdef PPRO_NT
230 med_int
MSDFSZI(med_idt * fid,char * maa,unsigned int bidon1,med_int * lon1,char * jname,unsigned int bidon2,med_int * lon2,med_int * numdt,med_int * numit,med_int * it,med_int * typ_ent_local,med_int * typ_geo_local,med_int * typ_ent_distant,med_int * typ_geo_distant,med_int * ncor)231 MSDFSZI(med_idt *fid,
232 		  char *maa, unsigned int bidon1, med_int *lon1,
233 		  char *jname, unsigned int bidon2, med_int *lon2,
234 		  med_int *numdt, med_int *numit, med_int *it,
235 		  med_int * typ_ent_local, med_int * typ_geo_local,
236 		  med_int * typ_ent_distant, med_int * typ_geo_distant,
237 		  med_int *ncor)
238 #else
239 med_int
240 nmsdfszi(med_idt *fid,
241 	 char *maa, med_int *lon1,
242 	 char *jname, med_int *lon2,
243 	 med_int *numdt, med_int *numit, med_int *it,
244 	 med_int *typ_ent_local, med_int *typ_geo_local,
245 	 med_int *typ_ent_distant, med_int *typ_geo_distant,
246 	 med_int *ncor)
247 #endif
248 {
249   med_int _ret;
250   char *_fn1, *_fn2;
251   med_entity_type _let, _rnt;
252   med_geometry_type _ltg,_rtg;
253 
254   _fn1 = _MED2cstring((char *) maa, (int) * lon1);
255   if (!_fn1)
256     return(-1);
257 
258   _fn2 = _MED2cstring((char *) jname, (int) * lon2);
259   if (!_fn2)
260     return(-1);
261 
262   _ret = (med_int) MEDsubdomainCorrespondenceSizeInfo((med_idt) *fid,
263 						      _fn1,
264 						      _fn2,
265 						      (med_int) *numdt,
266 						      (med_int) *numit,
267 						      (med_int) *it,
268 						      &_let,
269 						      &_ltg,
270 						      &_rnt,
271 						      &_rtg,
272 						      (med_int *) ncor);
273 
274 
275   *typ_ent_local = (med_int) _let;
276   *typ_geo_local = (med_int) _ltg;
277   *typ_ent_distant = (med_int) _rnt;
278   *typ_geo_distant = (med_int) _rtg;
279 
280   _MEDcstringFree(_fn1);
281   _MEDcstringFree(_fn2);
282 
283   return(_ret);
284 }
285 
286 
287 
288 #ifdef PPRO_NT
289 med_int
MSDFCSZ(med_idt * fid,char * maa,unsigned int bidon1,med_int * lon1,char * jname,unsigned int bidon2,med_int * lon2,med_int * numdt,med_int * numit,med_int * typ_ent_local,med_int * typ_geo_local,med_int * typ_ent_distant,med_int * typ_geo_distant,med_int * ncor)290 MSDFCSZ(med_idt *fid,
291 		  char *maa, unsigned int bidon1, med_int *lon1,
292 		  char *jname, unsigned int bidon2, med_int *lon2,
293 		  med_int *numdt, med_int *numit,
294 		  med_int * typ_ent_local, med_int * typ_geo_local,
295 		  med_int * typ_ent_distant, med_int * typ_geo_distant,
296 		  med_int *ncor)
297 #else
298 med_int
299 nmsdfcsz(med_idt *fid,
300 	 char *maa, med_int *lon1,
301 	 char *jname, med_int *lon2,
302 	 med_int *numdt, med_int *numit,
303 	 med_int *typ_ent_local, med_int *typ_geo_local,
304 	 med_int *typ_ent_distant, med_int *typ_geo_distant,
305 	 med_int *ncor)
306 #endif
307 {
308   med_int _ret;
309   char *_fn1, *_fn2;
310   med_entity_type _let = (med_entity_type) *typ_ent_local;
311   med_entity_type _rnt = (med_entity_type) *typ_ent_distant;
312   med_geometry_type _ltg = (med_geometry_type) *typ_geo_local;
313   med_geometry_type _rtg = (med_geometry_type) *typ_geo_distant;
314 
315   _fn1 = _MED2cstring((char *) maa, (int) * lon1);
316   if (!_fn1)
317     return(-1);
318 
319   _fn2 = _MED2cstring((char *) jname, (int) * lon2);
320   if (!_fn2)
321     return(-1);
322 
323   _ret = (med_int) MEDsubdomainCorrespondenceSize((med_idt) *fid,
324 						  _fn1,
325 						  _fn2,
326 						  (med_int) *numdt,
327 						  (med_int) *numit,
328 						  _let,
329 						  _ltg,
330 						  _rnt,
331 						  _rtg,
332 						  (med_int *) ncor);
333 
334   _MEDcstringFree(_fn1);
335   _MEDcstringFree(_fn2);
336 
337   return(_ret);
338 }
339 
340 
341 
342 #ifdef PPRO_NT
343 med_int
MSDFCRR(med_idt * fid,char * maa_local,unsigned int bidon1,med_int * lon1,char * jn,unsigned int bidon2,med_int * lon2,med_int * numdt,med_int * numit,med_int * typ_ent_local,med_int * typ_geo_local,med_int * typ_ent_distant,med_int * typ_geo_distant,med_int * corrtab)344 MSDFCRR(med_idt *fid,
345 		  char *maa_local,unsigned int bidon1, med_int *lon1,
346 		  char *jn,unsigned int bidon2, med_int *lon2,
347 		  med_int *numdt, med_int *numit,
348 		  med_int * typ_ent_local, med_int * typ_geo_local,
349 		  med_int * typ_ent_distant, med_int * typ_geo_distant,
350 		  med_int *corrtab)
351 #else
352 med_int
353 nmsdfcrr (med_idt *fid,
354 	  char *maa_local,med_int *lon1,
355 	  char *jn,med_int *lon2,
356 	  med_int *numdt, med_int *numit,
357 	  med_int * typ_ent_local, med_int * typ_geo_local,
358 	  med_int * typ_ent_distant, med_int * typ_geo_distant,
359 	  med_int *corrtab)
360 #endif
361 {
362   med_int _ret;
363   char *_fn1, *_fn2;
364   med_entity_type _let = (med_entity_type) *typ_ent_local;
365   med_entity_type _rnt = (med_entity_type) *typ_ent_distant;
366   med_geometry_type _ltg = (med_geometry_type) *typ_geo_local;
367   med_geometry_type _rtg = (med_geometry_type) *typ_geo_distant;
368 
369   _fn1 = _MED2cstring(maa_local, (int) *lon1);
370   _fn2 = _MED2cstring(jn,  (int) *lon2);
371 
372   if (!_fn1 || !_fn2)
373     return(-1);
374 
375   _ret = (med_int) MEDsubdomainCorrespondenceRd((med_idt) *fid,
376 						_fn1,
377 						_fn2,
378 						(med_int) *numdt,
379 						(med_int) *numit,
380 						_let,
381 						_ltg,
382 						_rnt,
383 						_rtg,
384 						(med_int *) corrtab);
385 
386   _MEDcstringFree(_fn1);
387   _MEDcstringFree(_fn2);
388 
389   return(_ret);
390 }
391 
392 
393 
394 #ifdef PPRO_NT
395 med_int
MSDFCSI(med_idt * fid,char * maa,unsigned int bidon1,med_int * lon1,char * jname,unsigned int bidon2,med_int * lon2,med_int * ind,med_int * numdt,med_int * numit,med_int * ncor)396 MSDFCSI(med_idt *fid,
397                   char *maa, unsigned int bidon1, med_int *lon1,
398 		  char *jname, unsigned int bidon2, med_int *lon2,
399 		  med_int *ind, med_int *numdt, med_int *numit,
400 		  med_int *ncor)
401 #else
402 med_int
403 nmsdfcsi(med_idt *fid,
404 	 char *maa, med_int *lon1,
405 	 char *jname, med_int *lon2,
406 	 med_int *ind, med_int *numdt, med_int *numit,
407 	 med_int *ncor)
408 #endif
409 {
410   med_int _ret;
411   char *_fn1, *_fn2;
412 
413   _fn1 = _MED2cstring(maa, (int) * lon1);
414   if (!_fn1)
415     return(-1);
416 
417   _fn2 = _MED2cstring(jname, (int) * lon2);
418   if (!_fn2)
419     return(-1);
420 
421   _ret = (med_int) MEDsubdomainComputingStepInfo((med_idt) *fid,
422 						 _fn1,
423 						 _fn2,
424 						 (med_int) *ind,
425 						 (med_int*) numdt,
426 						 (med_int*) numit,
427 						 (med_int *) ncor);
428 
429 
430   _MEDcstringFree(_fn1);
431   _MEDcstringFree(_fn2);
432 
433   return(_ret);
434 }
435