FrontISTR  5.8.0
Large-scale structural analysis program with finit element method
hecmw_dist_copy_f2c.c
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2019 FrontISTR Commons
3  * This software is released under the MIT License, see LICENSE.txt
4  *****************************************************************************/
5 
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <errno.h>
9 #include "hecmw_struct.h"
10 #include "hecmw_util.h"
11 
12 static struct hecmwST_local_mesh *mesh;
13 
14 /*-----------------------------------------------------------------------------
15  * Generic conversion utilities for int to long long array conversion
16  * (for distributed mesh compatibility between Fortran and C)
17  */
18 
19 static int convert_int_to_longlong_ary(const int *src, long long *dst, size_t n) {
20  size_t i;
21 
22  for (i = 0; i < n; i++) {
23  dst[i] = (long long)src[i];
24  }
25 
26  return 0;
27 }
28 
29 /*-----------------------------------------------------------------------------
30  * SetFunc
31  */
32 
33 static int set_hecmw_flag_adapt(void *src) {
34  mesh->hecmw_flag_adapt = *((int *)src);
35  return 0;
36 }
37 
38 static int set_hecmw_flag_initcon(void *src) {
39  mesh->hecmw_flag_initcon = *((int *)src);
40  return 0;
41 }
42 
43 static int set_hecmw_flag_parttype(void *src) {
44  mesh->hecmw_flag_parttype = *((int *)src);
45  return 0;
46 }
47 
48 static int set_hecmw_flag_partdepth(void *src) {
49  mesh->hecmw_flag_partdepth = *((int *)src);
50  return 0;
51 }
52 
53 static int set_hecmw_flag_version(void *src) {
54  mesh->hecmw_flag_version = *((int *)src);
55  return 0;
56 }
57 
58 static int set_hecmw_flag_partcontact(void *src) {
59  mesh->hecmw_flag_partcontact = *((int *)src);
60  return 0;
61 }
62 
63 static int set_gridfile(void *src) {
64  void *dst = mesh->gridfile;
66  return 0;
67 }
68 
69 static int set_hecmw_n_file(void *src) {
70  mesh->hecmw_n_file = *((int *)src);
71  return 0;
72 }
73 
74 static int set_files(void *src) {
75  int i;
76 
77  if (mesh->hecmw_n_file <= 0) return 0;
78 
79  mesh->files = HECMW_calloc(mesh->hecmw_n_file, sizeof(*mesh->files));
80  if (mesh->files == NULL) {
81  HECMW_set_error(errno, "");
82  goto error;
83  }
84  for (i = 0; i < mesh->hecmw_n_file; i++) {
85  char *src_point = (char *)src + HECMW_FILENAME_LEN * i;
86  mesh->files[i] = HECMW_strcpy_f2c(src_point, HECMW_FILENAME_LEN);
87  if (mesh->files[i] == NULL) goto error;
88  }
89  return 0;
90 error:
91  if (mesh->files) {
92  for (i = 0; i < mesh->hecmw_n_file; i++) {
93  HECMW_free(mesh->files[i]);
94  }
95  }
96  HECMW_free(mesh->files);
97  mesh->files = NULL;
98  return -1;
99 }
100 
101 static int set_header(void *src) {
102  void *dst = mesh->header;
104  return 0;
105 }
106 
107 static int set_zero_temp(void *src) {
108  mesh->zero_temp = *((double *)src);
109  return 0;
110 }
111 
112 static int set_n_node(void *src) {
113  mesh->n_node = *((int *)src);
114  return 0;
115 }
116 
117 static int set_n_node_gross(void *src) {
118  mesh->n_node_gross = *((int *)src);
119  return 0;
120 }
121 
122 static int set_nn_middle(void *src) {
123  mesh->nn_middle = *((int *)src);
124  return 0;
125 }
126 
127 static int set_nn_internal(void *src) {
128  mesh->nn_internal = *((int *)src);
129  return 0;
130 }
131 
132 static int set_node_internal_list(void *src) {
133  int size;
134 
135  if (mesh->nn_internal <= 0) return 0;
136  size = sizeof(*mesh->node_internal_list) * mesh->nn_internal;
137  mesh->node_internal_list = HECMW_malloc(size);
138  if (mesh->node_internal_list == NULL) {
139  HECMW_set_error(errno, "");
140  return -1;
141  }
142  memcpy(mesh->node_internal_list, src, size);
143  return 0;
144 }
145 
146 static int set_node_ID(void *src) {
147  int size;
148 
149  if (mesh->n_node_gross <= 0) return 0;
150  size = sizeof(*mesh->node_ID) * 2 * mesh->n_node_gross;
151  mesh->node_ID = HECMW_malloc(size);
152  if (mesh->node_ID == NULL) {
153  HECMW_set_error(errno, "");
154  return -1;
155  }
156  memcpy(mesh->node_ID, src, size);
157  return 0;
158 }
159 
160 static int set_global_node_ID(void *src) {
161  int size;
162 
163  if (mesh->n_node_gross <= 0) return 0;
164  size = sizeof(*mesh->global_node_ID) * mesh->n_node_gross;
165  mesh->global_node_ID = HECMW_malloc(size);
166  if (mesh->global_node_ID == NULL) {
167  HECMW_set_error(errno, "");
168  return -1;
169  }
170  memcpy(mesh->global_node_ID, src, size);
171  return 0;
172 }
173 
174 static int set_node(void *src) {
175  int size;
176 
177  if (mesh->n_node_gross <= 0) return 0;
178  size = sizeof(*mesh->node) * 3 * mesh->n_node_gross;
179  mesh->node = HECMW_malloc(size);
180  if (mesh->node == NULL) {
181  HECMW_set_error(errno, "");
182  return -1;
183  }
184  memcpy(mesh->node, src, size);
185  return 0;
186 }
187 
188 static int set_n_dof(void *src) {
189  mesh->n_dof = *((int *)src);
190  return 0;
191 }
192 
193 static int set_n_dof_grp(void *src) {
194  mesh->n_dof_grp = *((int *)src);
195  return 0;
196 }
197 
198 static int set_n_dof_tot(void *src) {
199  mesh->n_dof_tot = *((int *)src);
200  return 0;
201 }
202 
203 static int set_node_dof_index(void *src) {
204  int size;
205 
206  if (mesh->n_dof_grp <= 0) return 0;
207  size = sizeof(*mesh->node_dof_index) * (mesh->n_dof_grp + 1);
208  mesh->node_dof_index = HECMW_malloc(size);
209  if (mesh->node_dof_index == NULL) {
210  HECMW_set_error(errno, "");
211  return -1;
212  }
213  memcpy(mesh->node_dof_index, src, size);
214  return 0;
215 }
216 
217 static int set_node_dof_item(void *src) {
218  int size;
219 
220  if (mesh->n_dof_grp <= 0) return 0;
221  size = sizeof(*mesh->node_dof_item) * mesh->n_dof_grp;
222  mesh->node_dof_item = HECMW_malloc(size);
223  if (mesh->node_dof_item == NULL) {
224  HECMW_set_error(errno, "");
225  return -1;
226  }
227  memcpy(mesh->node_dof_item, src, size);
228  return 0;
229 }
230 
231 static int set_node_val_index(void *src) {
232  int size;
233 
234  if (mesh->n_node_gross <= 0) return 0;
235  size = sizeof(*mesh->node_val_index) * (mesh->n_node_gross + 1);
236  mesh->node_val_index = HECMW_malloc(size);
237  if (mesh->node_val_index == NULL) {
238  HECMW_set_error(errno, "");
239  return -1;
240  }
241  memcpy(mesh->node_val_index, src, size);
242  return 0;
243 }
244 
245 static int set_node_val_item(void *src) {
246  int size;
247 
248  if (mesh->n_node_gross <= 0) return 0;
249  if (mesh->node_val_index == NULL) return 0;
250  if (mesh->node_val_index[mesh->n_node_gross] <= 0) return 0;
251 
252  size =
253  sizeof(*mesh->node_val_item) * mesh->node_val_index[mesh->n_node_gross];
254  mesh->node_val_item = HECMW_malloc(size);
255  if (mesh->node_val_item == NULL) {
256  HECMW_set_error(errno, "");
257  return -1;
258  }
259  memcpy(mesh->node_val_item, src, size);
260  return 0;
261 }
262 
263 static int set_node_init_val_index(void *src) {
264  int size;
265 
266  if (mesh->n_node_gross <= 0) return 0;
267  size = sizeof(*mesh->node_init_val_index) * (mesh->n_node_gross + 1);
268  mesh->node_init_val_index = HECMW_malloc(size);
269  if (mesh->node_init_val_index == NULL) {
270  HECMW_set_error(errno, "");
271  return -1;
272  }
273  memcpy(mesh->node_init_val_index, src, size);
274  return 0;
275 }
276 
277 static int set_node_init_val_item(void *src) {
278  int size;
279 
280  if (mesh->n_node_gross <= 0) return 0;
281  if (mesh->node_init_val_index == NULL) return 0;
282  if (mesh->node_init_val_index[mesh->n_node_gross] <= 0) return 0;
283 
284  size = sizeof(*mesh->node_init_val_item) *
285  mesh->node_init_val_index[mesh->n_node_gross];
286  mesh->node_init_val_item = HECMW_malloc(size);
287  if (mesh->node_init_val_item == NULL) {
288  HECMW_set_error(errno, "");
289  return -1;
290  }
291  memcpy(mesh->node_init_val_item, src, size);
292  return 0;
293 }
294 
295 static int set_n_elem(void *src) {
296  mesh->n_elem = *((int *)src);
297  return 0;
298 }
299 
300 static int set_n_elem_gross(void *src) {
301  mesh->n_elem_gross = *((int *)src);
302  return 0;
303 }
304 
305 static int set_ne_internal(void *src) {
306  mesh->ne_internal = *((int *)src);
307  return 0;
308 }
309 
310 static int set_elem_internal_list(void *src) {
311  int size;
312 
313  if (mesh->ne_internal <= 0) return 0;
314  size = sizeof(*mesh->elem_internal_list) * mesh->ne_internal;
315  mesh->elem_internal_list = HECMW_malloc(size);
316  if (mesh->elem_internal_list == NULL) {
317  HECMW_set_error(errno, "");
318  return -1;
319  }
320  memcpy(mesh->elem_internal_list, src, size);
321  return 0;
322 }
323 
324 static int set_elem_ID(void *src) {
325  int size;
326 
327  if (mesh->n_elem_gross <= 0) return 0;
328  size = sizeof(*mesh->elem_ID) * 2 * mesh->n_elem_gross;
329  mesh->elem_ID = HECMW_malloc(size);
330  if (mesh->elem_ID == NULL) {
331  HECMW_set_error(errno, "");
332  return -1;
333  }
334  memcpy(mesh->elem_ID, src, size);
335  return 0;
336 }
337 
338 static int set_global_elem_ID(void *src) {
339  int size;
340 
341  if (mesh->n_elem_gross <= 0) return 0;
342  size = sizeof(*mesh->global_elem_ID) * mesh->n_elem_gross;
343  mesh->global_elem_ID = HECMW_malloc(size);
344  if (mesh->global_elem_ID == NULL) {
345  HECMW_set_error(errno, "");
346  return -1;
347  }
348  memcpy(mesh->global_elem_ID, src, size);
349  return 0;
350 }
351 
352 static int set_elem_type(void *src) {
353  int size;
354 
355  if (mesh->n_elem_gross <= 0) return 0;
356  size = sizeof(*mesh->elem_type) * mesh->n_elem_gross;
357  mesh->elem_type = HECMW_malloc(size);
358  if (mesh->elem_type == NULL) {
359  HECMW_set_error(errno, "");
360  return -1;
361  }
362  memcpy(mesh->elem_type, src, size);
363  return 0;
364 }
365 
366 static int set_n_elem_type(void *src) {
367  mesh->n_elem_type = *((int *)src);
368  return 0;
369 }
370 
371 static int set_elem_type_index(void *src) {
372  int size;
373 
374  if (mesh->n_elem_type <= 0) return 0;
375  size = sizeof(*mesh->elem_type_index) * (mesh->n_elem_type + 1);
376  mesh->elem_type_index = HECMW_malloc(size);
377  if (mesh->elem_type_index == NULL) {
378  HECMW_set_error(errno, "");
379  return -1;
380  }
381  memcpy(mesh->elem_type_index, src, size);
382  return 0;
383 }
384 
385 static int set_elem_type_item(void *src) {
386  int size;
387 
388  if (mesh->n_elem_type <= 0) return 0;
389  size = sizeof(*mesh->elem_type_item) * mesh->n_elem_type;
390  mesh->elem_type_item = HECMW_malloc(size);
391  if (mesh->elem_type_item == NULL) {
392  HECMW_set_error(errno, "");
393  return -1;
394  }
395  memcpy(mesh->elem_type_item, src, size);
396  return 0;
397 }
398 
399 static int set_elem_node_index(void *src) {
400  int *src_int = (int *)src;
401  size_t n;
402 
403  if (mesh->n_elem_gross <= 0) return 0;
404 
405  n = mesh->n_elem_gross + 1;
406  mesh->elem_node_index = HECMW_malloc(sizeof(long long) * n);
407  if (mesh->elem_node_index == NULL) {
408  HECMW_set_error(errno, "");
409  return -1;
410  }
411 
412  /* Convert int array to long long array */
413  if (convert_int_to_longlong_ary(src_int, mesh->elem_node_index, n) != 0) {
414  return -1;
415  }
416 
417  return 0;
418 }
419 
420 static int set_elem_node_item(void *src) {
421  int size;
422 
423  if (mesh->n_elem_gross <= 0) return 0;
424  if (mesh->elem_node_index == NULL) return 0;
425  if (mesh->elem_node_index[mesh->n_elem_gross] <= 0) return 0;
426 
427  size =
428  sizeof(*mesh->elem_node_item) * mesh->elem_node_index[mesh->n_elem_gross];
429  mesh->elem_node_item = HECMW_malloc(size);
430  if (mesh->elem_node_item == NULL) {
431  HECMW_set_error(errno, "");
432  return -1;
433  }
434  memcpy(mesh->elem_node_item, src, size);
435  return 0;
436 }
437 
438 static int set_section_ID(void *src) {
439  int size;
440 
441  if (mesh->n_elem_gross <= 0) return 0;
442  size = sizeof(*mesh->section_ID) * mesh->n_elem_gross;
443  mesh->section_ID = HECMW_malloc(size);
444  if (mesh->section_ID == NULL) {
445  HECMW_set_error(errno, "");
446  return -1;
447  }
448  memcpy(mesh->section_ID, src, size);
449  return 0;
450 }
451 
452 static int set_n_elem_mat_ID(void *src) {
453  mesh->n_elem_mat_ID = *((int *)src);
454  return 0;
455 }
456 
457 static int set_elem_mat_ID_index(void *src) {
458  int size;
459 
460  if (mesh->n_elem_gross <= 0) return 0;
461  size = sizeof(*mesh->elem_mat_ID_index) * (mesh->n_elem_gross + 1);
462  mesh->elem_mat_ID_index = HECMW_malloc(size);
463  if (mesh->elem_mat_ID_index == NULL) {
464  HECMW_set_error(errno, "");
465  return -1;
466  }
467  memcpy(mesh->elem_mat_ID_index, src, size);
468  return 0;
469 }
470 
471 static int set_elem_mat_ID_item(void *src) {
472  int size;
473 
474  if (mesh->n_elem_gross <= 0) return 0;
475  if (mesh->elem_mat_ID_index == NULL) return 0;
476  if (mesh->elem_mat_ID_index[mesh->n_elem_gross] <= 0) return 0;
477 
478  size = sizeof(*mesh->elem_mat_ID_item) *
479  mesh->elem_mat_ID_index[mesh->n_elem_gross];
480  mesh->elem_mat_ID_item = HECMW_malloc(size);
481  if (mesh->elem_mat_ID_item == NULL) {
482  HECMW_set_error(errno, "");
483  return -1;
484  }
485  memcpy(mesh->elem_mat_ID_item, src, size);
486  return 0;
487 }
488 
489 static int set_elem_mat_int_index(void *src) {
490  int size;
491 
492  if (mesh->n_elem_gross <= 0) return 0;
493  size = sizeof(*mesh->elem_mat_int_index) * (mesh->n_elem_gross + 1);
494  mesh->elem_mat_int_index = HECMW_malloc(size);
495  if (mesh->elem_mat_int_index == NULL) {
496  HECMW_set_error(errno, "");
497  return -1;
498  }
499  memcpy(mesh->elem_mat_int_index, src, size);
500  return 0;
501 }
502 
503 static int set_elem_mat_int_val(void *src) {
504  int size;
505 
506  if (mesh->n_elem_gross <= 0) return 0;
507  if (mesh->elem_mat_int_index == NULL) return 0;
508  if (mesh->elem_mat_int_index[mesh->n_elem_gross] <= 0) return 0;
509 
510  size = sizeof(*mesh->elem_mat_int_val) *
511  mesh->elem_mat_int_index[mesh->n_elem_gross];
512  mesh->elem_mat_int_val = HECMW_malloc(size);
513  if (mesh->elem_mat_int_val == NULL) {
514  HECMW_set_error(errno, "");
515  return -1;
516  }
517  memcpy(mesh->elem_mat_int_val, src, size);
518  return 0;
519 }
520 
521 static int set_elem_val_index(void *src) {
522  int size;
523 
524  if (mesh->n_elem_gross <= 0) return 0;
525  size = sizeof(*mesh->elem_val_index) * (mesh->n_elem_gross + 1);
526  mesh->elem_val_index = HECMW_malloc(size);
527  if (mesh->elem_val_index == NULL) {
528  HECMW_set_error(errno, "");
529  return -1;
530  }
531  memcpy(mesh->elem_val_index, src, size);
532  return 0;
533 }
534 
535 static int set_elem_val_item(void *src) {
536  int size;
537 
538  if (mesh->n_elem_gross <= 0) return 0;
539  if (mesh->elem_val_index == NULL) return 0;
540  if (mesh->elem_val_index[mesh->n_elem_gross] <= 0) return 0;
541 
542  size =
543  sizeof(*mesh->elem_val_item) * mesh->elem_val_index[mesh->n_elem_gross];
544  mesh->elem_val_item = HECMW_malloc(size);
545  if (mesh->elem_val_item == NULL) {
546  HECMW_set_error(errno, "");
547  return -1;
548  }
549  memcpy(mesh->elem_val_item, src, size);
550  return 0;
551 }
552 
553 static int set_zero(void *src) {
554  mesh->zero = *((int *)src);
555  return 0;
556 }
557 
558 static int set_HECMW_COMM(void *src) {
559  mesh->HECMW_COMM = HECMW_Comm_f2c(*((HECMW_Fint *)src));
560  return 0;
561 }
562 
563 static int set_PETOT(void *src) {
564  mesh->PETOT = *((int *)src);
565  return 0;
566 }
567 
568 static int set_PEsmpTOT(void *src) {
569  mesh->PEsmpTOT = *((int *)src);
570  return 0;
571 }
572 
573 static int set_my_rank(void *src) {
574  mesh->my_rank = *((int *)src);
575  return 0;
576 }
577 
578 static int set_errnof(void *src) {
579  mesh->errnof = *((int *)src);
580  return 0;
581 }
582 
583 static int set_n_subdomain(void *src) {
584  mesh->n_subdomain = *((int *)src);
585  return 0;
586 }
587 
588 static int set_n_neighbor_pe(void *src) {
589  mesh->n_neighbor_pe = *((int *)src);
590  return 0;
591 }
592 
593 static int set_neighbor_pe(void *src) {
594  int size;
595 
596  if (mesh->n_neighbor_pe <= 0) return 0;
597  size = sizeof(*mesh->neighbor_pe) * mesh->n_neighbor_pe;
598  mesh->neighbor_pe = HECMW_malloc(size);
599  if (mesh->neighbor_pe == NULL) {
600  HECMW_set_error(errno, "");
601  return -1;
602  }
603  memcpy(mesh->neighbor_pe, src, size);
604  return 0;
605 }
606 
607 static int set_import_index(void *src) {
608  int size;
609 
610  if (mesh->n_neighbor_pe <= 0) return 0;
611  size = sizeof(*mesh->import_index) * (mesh->n_neighbor_pe + 1);
612  mesh->import_index = HECMW_malloc(size);
613  if (mesh->import_index == NULL) {
614  HECMW_set_error(errno, "");
615  return -1;
616  }
617  memcpy(mesh->import_index, src, size);
618  return 0;
619 }
620 
621 static int set_import_item(void *src) {
622  int size;
623 
624  if (mesh->n_neighbor_pe <= 0) return 0;
625  if (mesh->import_index == NULL) return 0;
626  if (mesh->import_index[mesh->n_neighbor_pe] <= 0) return 0;
627 
628  size = sizeof(*mesh->import_item) * mesh->import_index[mesh->n_neighbor_pe];
629  mesh->import_item = HECMW_malloc(size);
630  if (mesh->import_item == NULL) {
631  HECMW_set_error(errno, "");
632  return -1;
633  }
634  memcpy(mesh->import_item, src, size);
635  return 0;
636 }
637 
638 static int set_export_index(void *src) {
639  int size;
640 
641  if (mesh->n_neighbor_pe <= 0) return 0;
642  size = sizeof(*mesh->export_index) * (mesh->n_neighbor_pe + 1);
643  mesh->export_index = HECMW_malloc(size);
644  if (mesh->export_index == NULL) {
645  HECMW_set_error(errno, "");
646  return -1;
647  }
648  memcpy(mesh->export_index, src, size);
649  return 0;
650 }
651 
652 static int set_export_item(void *src) {
653  int size;
654 
655  if (mesh->n_neighbor_pe <= 0) return 0;
656  if (mesh->export_index == NULL) return 0;
657  if (mesh->export_index[mesh->n_neighbor_pe] <= 0) return 0;
658 
659  size = sizeof(*mesh->export_item) * mesh->export_index[mesh->n_neighbor_pe];
660  mesh->export_item = HECMW_malloc(size);
661  if (mesh->export_item == NULL) {
662  HECMW_set_error(errno, "");
663  return -1;
664  }
665  memcpy(mesh->export_item, src, size);
666  return 0;
667 }
668 
669 static int set_shared_index(void *src) {
670  int size;
671 
672  if (mesh->n_neighbor_pe <= 0) return 0;
673  size = sizeof(*mesh->shared_index) * (mesh->n_neighbor_pe + 1);
674  mesh->shared_index = HECMW_malloc(size);
675  if (mesh->shared_index == NULL) {
676  HECMW_set_error(errno, "");
677  return -1;
678  }
679  memcpy(mesh->shared_index, src, size);
680  return 0;
681 }
682 
683 static int set_shared_item(void *src) {
684  int size;
685 
686  if (mesh->n_neighbor_pe <= 0) return 0;
687  if (mesh->shared_index == NULL) return 0;
688  if (mesh->shared_index[mesh->n_neighbor_pe] <= 0) return 0;
689 
690  size = sizeof(*mesh->shared_item) * mesh->shared_index[mesh->n_neighbor_pe];
691  mesh->shared_item = HECMW_malloc(size);
692  memcpy(mesh->shared_item, src, size);
693  return 0;
694 }
695 
696 static int set_coarse_grid_level(void *src) {
697  mesh->coarse_grid_level = *((int *)src);
698  return 0;
699 }
700 
701 static int set_n_adapt(void *src) {
702  mesh->n_adapt = *((int *)src);
703  return 0;
704 }
705 
706 static int set_when_i_was_refined_node(void *src) {
707  int size;
708 
709  if (mesh->n_node_gross <= 0) return 0;
710  size = sizeof(*mesh->when_i_was_refined_node) * mesh->n_node_gross;
712  if (mesh->when_i_was_refined_node == NULL) {
713  HECMW_set_error(errno, "");
714  return -1;
715  }
716  memcpy(mesh->when_i_was_refined_node, src, size);
717  return 0;
718 }
719 
720 static int set_when_i_was_refined_elem(void *src) {
721  int size;
722 
723  if (mesh->n_elem_gross <= 0) return 0;
724  size = sizeof(*mesh->when_i_was_refined_elem) * mesh->n_elem_gross;
726  if (mesh->when_i_was_refined_elem == NULL) {
727  HECMW_set_error(errno, "");
728  return -1;
729  }
730  memcpy(mesh->when_i_was_refined_elem, src, size);
731  return 0;
732 }
733 
734 static int set_adapt_parent_type(void *src) {
735  int size;
736 
737  if (mesh->n_elem_gross <= 0) return 0;
738  size = sizeof(*mesh->adapt_parent_type) * mesh->n_elem_gross;
739  mesh->adapt_parent_type = HECMW_malloc(size);
740  if (mesh->adapt_parent_type == NULL) {
741  HECMW_set_error(errno, "");
742  return -1;
743  }
744  memcpy(mesh->adapt_parent_type, src, size);
745  return 0;
746 }
747 
748 static int set_adapt_type(void *src) {
749  int size;
750 
751  if (mesh->n_elem_gross <= 0) return 0;
752  size = sizeof(*mesh->adapt_type) * mesh->n_elem_gross;
753  mesh->adapt_type = HECMW_malloc(size);
754  if (mesh->adapt_type == NULL) {
755  HECMW_set_error(errno, "");
756  return -1;
757  }
758  memcpy(mesh->adapt_type, src, size);
759  return 0;
760 }
761 
762 static int set_adapt_level(void *src) {
763  int size;
764 
765  if (mesh->n_elem_gross <= 0) return 0;
766  size = sizeof(*mesh->adapt_level) * mesh->n_elem_gross;
767  mesh->adapt_level = HECMW_malloc(size);
768  if (mesh->adapt_level == NULL) {
769  HECMW_set_error(errno, "");
770  return -1;
771  }
772  memcpy(mesh->adapt_level, src, size);
773  return 0;
774 }
775 
776 static int set_adapt_parent(void *src) {
777  int size;
778 
779  if (mesh->n_elem_gross <= 0) return 0;
780  size = sizeof(*mesh->adapt_parent) * 2 * mesh->n_elem_gross;
781  mesh->adapt_parent = HECMW_malloc(size);
782  if (mesh->adapt_parent == NULL) {
783  HECMW_set_error(errno, "");
784  return -1;
785  }
786  memcpy(mesh->adapt_parent, src, size);
787  return 0;
788 }
789 
790 static int set_adapt_children_index(void *src) {
791  int size;
792 
793  if (mesh->n_elem_gross <= 0) return 0;
794  size = sizeof(*mesh->adapt_children_index) * (mesh->n_elem_gross + 1);
795  mesh->adapt_children_index = HECMW_malloc(size);
796  if (mesh->adapt_children_index == NULL) {
797  HECMW_set_error(errno, "");
798  return -1;
799  }
800  memcpy(mesh->adapt_children_index, src, size);
801  return 0;
802 }
803 
804 static int set_adapt_children_item(void *src) {
805  int size;
806 
807  if (mesh->n_elem_gross <= 0) return 0;
808  if (mesh->adapt_children_index == NULL) return 0;
809  if (mesh->adapt_children_index[mesh->n_elem_gross] <= 0) return 0;
810 
811  size = sizeof(*mesh->adapt_children_item) * 2 *
812  mesh->adapt_children_index[mesh->n_elem_gross];
813  mesh->adapt_children_item = HECMW_malloc(size);
814  if (mesh->adapt_children_item == NULL) {
815  HECMW_set_error(errno, "");
816  return -1;
817  }
818  memcpy(mesh->adapt_children_item, src, size);
819  return 0;
820 }
821 
822 static int set_n_refine(void *src) {
823  mesh->n_refine = *((int *)src);
824  return 0;
825 }
826 
827 static int set_node_old2new(void *src) {
828  int size;
829 
830  if (mesh->n_node_gross <= 0) return 0;
831  size = sizeof(*mesh->node_old2new) * mesh->n_node_gross;
832  mesh->node_old2new = HECMW_malloc(size);
833  if (mesh->node_old2new == NULL) {
834  HECMW_set_error(errno, "");
835  return -1;
836  }
837  memcpy(mesh->node_old2new, src, size);
838  return 0;
839 }
840 
841 static int set_node_new2old(void *src) {
842  int size;
843 
844  if (mesh->n_node_gross <= 0) return 0;
845  size = sizeof(*mesh->node_new2old) * mesh->n_node_gross;
846  mesh->node_new2old = HECMW_malloc(size);
847  if (mesh->node_new2old == NULL) {
848  HECMW_set_error(errno, "");
849  return -1;
850  }
851  memcpy(mesh->node_new2old, src, size);
852  return 0;
853 }
854 
855 static int set_elem_old2new(void *src) {
856  int size;
857 
858  if (mesh->n_elem_gross <= 0) return 0;
859  size = sizeof(*mesh->elem_old2new) * mesh->n_elem_gross;
860  mesh->elem_old2new = HECMW_malloc(size);
861  if (mesh->elem_old2new == NULL) {
862  HECMW_set_error(errno, "");
863  return -1;
864  }
865  memcpy(mesh->elem_old2new, src, size);
866  return 0;
867 }
868 
869 static int set_elem_new2old(void *src) {
870  int size;
871 
872  if (mesh->n_elem_gross <= 0) return 0;
873  size = sizeof(*mesh->elem_new2old) * mesh->n_elem_gross;
874  mesh->elem_new2old = HECMW_malloc(size);
875  if (mesh->elem_new2old == NULL) {
876  HECMW_set_error(errno, "");
877  return -1;
878  }
879  memcpy(mesh->elem_new2old, src, size);
880  return 0;
881 }
882 
883 static int set_n_node_refine_hist(void *src) {
884  int size;
885 
886  if (mesh->n_elem_gross <= 0) return 0;
887  size = sizeof(*mesh->n_node_refine_hist) * mesh->n_refine;
888  mesh->n_node_refine_hist = HECMW_malloc(size);
889  if (mesh->n_node_refine_hist == NULL) {
890  HECMW_set_error(errno, "");
891  return -1;
892  }
893  memcpy(mesh->n_node_refine_hist, src, size);
894  return 0;
895 }
896 
897 static int set_n_sect(void *src) {
898  mesh->section->n_sect = *((int *)src);
899  return 0;
900 }
901 
902 static int set_sect_type(void *src) {
903  int size;
904 
905  if (mesh->section->n_sect <= 0) return 0;
906  size = sizeof(*mesh->section->sect_type) * mesh->section->n_sect;
907  mesh->section->sect_type = HECMW_malloc(size);
908  if (mesh->section->sect_type == NULL) {
909  HECMW_set_error(errno, "");
910  return -1;
911  }
912  memcpy(mesh->section->sect_type, src, size);
913  return 0;
914 }
915 
916 static int set_sect_opt(void *src) {
917  int size;
918 
919  if (mesh->section->n_sect <= 0) return 0;
920  size = sizeof(*mesh->section->sect_opt) * mesh->section->n_sect;
921  mesh->section->sect_opt = HECMW_malloc(size);
922  if (mesh->section->sect_opt == NULL) {
923  HECMW_set_error(errno, "");
924  return -1;
925  }
926  memcpy(mesh->section->sect_opt, src, size);
927  return 0;
928 }
929 
930 static int set_sect_mat_ID_index(void *src) {
931  int size;
932 
933  if (mesh->section->n_sect <= 0) return 0;
934  size =
935  sizeof(*mesh->section->sect_mat_ID_index) * (mesh->section->n_sect + 1);
936  mesh->section->sect_mat_ID_index = HECMW_malloc(size);
937  if (mesh->section->sect_mat_ID_index == NULL) {
938  HECMW_set_error(errno, "");
939  return -1;
940  }
941  memcpy(mesh->section->sect_mat_ID_index, src, size);
942  return 0;
943 }
944 
945 static int set_sect_mat_ID_item(void *src) {
946  int size;
947 
948  if (mesh->section->n_sect <= 0) return 0;
949  if (mesh->section->sect_mat_ID_index == NULL) return 0;
950  if (mesh->section->sect_mat_ID_index[mesh->section->n_sect] <= 0) return 0;
951 
952  size = sizeof(*mesh->section->sect_mat_ID_item) *
953  mesh->section->sect_mat_ID_index[mesh->section->n_sect];
954  mesh->section->sect_mat_ID_item = HECMW_malloc(size);
955  if (mesh->section->sect_mat_ID_item == NULL) {
956  HECMW_set_error(errno, "");
957  return -1;
958  }
959  memcpy(mesh->section->sect_mat_ID_item, src, size);
960  return 0;
961 }
962 
963 static int set_sect_I_index(void *src) {
964  int size;
965 
966  if (mesh->section->n_sect <= 0) return 0;
967  size = sizeof(*mesh->section->sect_I_index) * (mesh->section->n_sect + 1);
968  mesh->section->sect_I_index = HECMW_malloc(size);
969  if (mesh->section->sect_I_index == NULL) {
970  HECMW_set_error(errno, "");
971  return -1;
972  }
973  memcpy(mesh->section->sect_I_index, src, size);
974  return 0;
975 }
976 
977 static int set_sect_I_item(void *src) {
978  int size;
979 
980  if (mesh->section->n_sect <= 0) return 0;
981  if (mesh->section->sect_I_index == NULL) return 0;
982  if (mesh->section->sect_I_index[mesh->section->n_sect] <= 0) return 0;
983 
984  size = sizeof(*mesh->section->sect_I_item) *
985  mesh->section->sect_I_index[mesh->section->n_sect];
986  mesh->section->sect_I_item = HECMW_malloc(size);
987  if (mesh->section->sect_I_item == NULL) {
988  HECMW_set_error(errno, "");
989  return -1;
990  }
991  memcpy(mesh->section->sect_I_item, src, size);
992  return 0;
993 }
994 
995 static int set_sect_R_index(void *src) {
996  int size;
997 
998  if (mesh->section->n_sect <= 0) return 0;
999  size = sizeof(*mesh->section->sect_R_index) * (mesh->section->n_sect + 1);
1000  mesh->section->sect_R_index = HECMW_malloc(size);
1001  if (mesh->section->sect_R_index == NULL) {
1002  HECMW_set_error(errno, "");
1003  return -1;
1004  }
1005  memcpy(mesh->section->sect_R_index, src, size);
1006  return 0;
1007 }
1008 
1009 static int set_sect_R_item(void *src) {
1010  int size;
1011 
1012  if (mesh->section->n_sect <= 0) return 0;
1013  if (mesh->section->sect_R_index == NULL) return 0;
1014  if (mesh->section->sect_R_index[mesh->section->n_sect] <= 0) return 0;
1015 
1016  size = sizeof(*mesh->section->sect_R_item) *
1017  mesh->section->sect_R_index[mesh->section->n_sect];
1018  mesh->section->sect_R_item = HECMW_malloc(size);
1019  if (mesh->section->sect_R_item == NULL) {
1020  HECMW_set_error(errno, "");
1021  return -1;
1022  }
1023  memcpy(mesh->section->sect_R_item, src, size);
1024  return 0;
1025 }
1026 
1027 static int set_n_mat(void *src) {
1028  mesh->material->n_mat = *((int *)src);
1029  return 0;
1030 }
1031 
1032 static int set_n_mat_item(void *src) {
1033  mesh->material->n_mat_item = *((int *)src);
1034  return 0;
1035 }
1036 
1037 static int set_n_mat_subitem(void *src) {
1038  mesh->material->n_mat_subitem = *((int *)src);
1039  return 0;
1040 }
1041 
1042 static int set_n_mat_table(void *src) {
1043  mesh->material->n_mat_table = *((int *)src);
1044  return 0;
1045 }
1046 
1047 static int set_mat_name(void *src) {
1048  int i;
1049  struct hecmwST_material *mat = mesh->material;
1050 
1051  if (mat->n_mat <= 0) return 0;
1052 
1053  mat->mat_name = HECMW_calloc(mat->n_mat, sizeof(*mat->mat_name));
1054  if (mat->mat_name == NULL) {
1055  HECMW_set_error(errno, "");
1056  goto error;
1057  }
1058  for (i = 0; i < mat->n_mat; i++) {
1059  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1060  mat->mat_name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1061  if (mat->mat_name[i] == NULL) goto error;
1062  }
1063  return 0;
1064 error:
1065  if (mat->mat_name) {
1066  for (i = 0; i < mat->n_mat; i++) {
1067  HECMW_free(mat->mat_name[i]);
1068  }
1069  }
1070  HECMW_free(mat->mat_name);
1071  mat->mat_name = NULL;
1072  return -1;
1073 }
1074 
1075 static int set_mat_item_index(void *src) {
1076  int size;
1077 
1078  if (mesh->material->n_mat <= 0) return 0;
1079  size = sizeof(*mesh->material->mat_item_index) * (mesh->material->n_mat + 1);
1080  mesh->material->mat_item_index = HECMW_malloc(size);
1081  if (mesh->material->mat_item_index == NULL) {
1082  HECMW_set_error(errno, "");
1083  return -1;
1084  }
1085  memcpy(mesh->material->mat_item_index, src, size);
1086  return 0;
1087 }
1088 
1089 static int set_mat_subitem_index(void *src) {
1090  int size;
1091 
1092  if (mesh->material->n_mat_item <= 0) return 0;
1093  size = sizeof(*mesh->material->mat_subitem_index) *
1094  (mesh->material->n_mat_item + 1);
1095  mesh->material->mat_subitem_index = HECMW_malloc(size);
1096  if (mesh->material->mat_subitem_index == NULL) {
1097  HECMW_set_error(errno, "");
1098  return -1;
1099  }
1100  memcpy(mesh->material->mat_subitem_index, src, size);
1101  return 0;
1102 }
1103 
1104 static int set_mat_table_index(void *src) {
1105  int size;
1106 
1107  if (mesh->material->n_mat_subitem <= 0) return 0;
1108  size = sizeof(*mesh->material->mat_table_index) *
1109  (mesh->material->n_mat_subitem + 1);
1110  mesh->material->mat_table_index = HECMW_malloc(size);
1111  if (mesh->material->mat_table_index == NULL) {
1112  HECMW_set_error(errno, "");
1113  return -1;
1114  }
1115  memcpy(mesh->material->mat_table_index, src, size);
1116  return 0;
1117 }
1118 
1119 static int set_mat_val(void *src) {
1120  int size;
1121 
1122  if (mesh->material->n_mat_table <= 0) return 0;
1123  size = sizeof(*mesh->material->mat_val) * mesh->material->n_mat_table;
1124  mesh->material->mat_val = HECMW_malloc(size);
1125  if (mesh->material->mat_val == NULL) {
1126  HECMW_set_error(errno, "");
1127  return -1;
1128  }
1129  memcpy(mesh->material->mat_val, src, size);
1130  return 0;
1131 }
1132 
1133 static int set_mat_temp(void *src) {
1134  int size;
1135 
1136  if (mesh->material->n_mat_table <= 0) return 0;
1137  size = sizeof(*mesh->material->mat_temp) * mesh->material->n_mat_table;
1138  mesh->material->mat_temp = HECMW_malloc(size);
1139  if (mesh->material->mat_temp == NULL) {
1140  HECMW_set_error(errno, "");
1141  return -1;
1142  }
1143  memcpy(mesh->material->mat_temp, src, size);
1144  return 0;
1145 }
1146 
1147 static int set_n_mpc(void *src) {
1148  mesh->mpc->n_mpc = *((int *)src);
1149  return 0;
1150 }
1151 
1152 static int set_mpc_index(void *src) {
1153  int size;
1154 
1155  if (mesh->mpc->n_mpc <= 0) return 0;
1156  size = sizeof(*mesh->mpc->mpc_index) * (mesh->mpc->n_mpc + 1);
1157  mesh->mpc->mpc_index = HECMW_malloc(size);
1158  if (mesh->mpc->mpc_index == NULL) {
1159  HECMW_set_error(errno, "");
1160  return -1;
1161  }
1162  memcpy(mesh->mpc->mpc_index, src, size);
1163  return 0;
1164 }
1165 
1166 static int set_mpc_item(void *src) {
1167  int size;
1168 
1169  if (mesh->mpc->n_mpc <= 0) return 0;
1170  if (mesh->mpc->mpc_index == NULL) return 0;
1171  if (mesh->mpc->mpc_index[mesh->mpc->n_mpc] <= 0) return 0;
1172 
1173  size = sizeof(*mesh->mpc->mpc_item) * mesh->mpc->mpc_index[mesh->mpc->n_mpc];
1174  mesh->mpc->mpc_item = HECMW_malloc(size);
1175  if (mesh->mpc->mpc_item == NULL) {
1176  HECMW_set_error(errno, "");
1177  return -1;
1178  }
1179  memcpy(mesh->mpc->mpc_item, src, size);
1180  return 0;
1181 }
1182 
1183 static int set_mpc_dof(void *src) {
1184  int size;
1185 
1186  if (mesh->mpc->n_mpc <= 0) return 0;
1187  if (mesh->mpc->mpc_index == NULL) return 0;
1188  if (mesh->mpc->mpc_index[mesh->mpc->n_mpc] <= 0) return 0;
1189 
1190  size = sizeof(*mesh->mpc->mpc_dof) * mesh->mpc->mpc_index[mesh->mpc->n_mpc];
1191  mesh->mpc->mpc_dof = HECMW_malloc(size);
1192  if (mesh->mpc->mpc_dof == NULL) {
1193  HECMW_set_error(errno, "");
1194  return -1;
1195  }
1196  memcpy(mesh->mpc->mpc_dof, src, size);
1197  return 0;
1198 }
1199 
1200 static int set_mpc_val(void *src) {
1201  int size;
1202 
1203  if (mesh->mpc->n_mpc <= 0) return 0;
1204  if (mesh->mpc->mpc_index == NULL) return 0;
1205  if (mesh->mpc->mpc_index[mesh->mpc->n_mpc] <= 0) return 0;
1206 
1207  size = sizeof(*mesh->mpc->mpc_val) * mesh->mpc->mpc_index[mesh->mpc->n_mpc];
1208  mesh->mpc->mpc_val = HECMW_malloc(size);
1209  if (mesh->mpc->mpc_val == NULL) {
1210  HECMW_set_error(errno, "");
1211  return -1;
1212  }
1213  memcpy(mesh->mpc->mpc_val, src, size);
1214  return 0;
1215 }
1216 
1217 static int set_mpc_const(void *src) {
1218  int size;
1219 
1220  if (mesh->mpc->n_mpc <= 0) return 0;
1221 
1222  size = sizeof(*mesh->mpc->mpc_const) * mesh->mpc->n_mpc;
1223  mesh->mpc->mpc_const = HECMW_malloc(size);
1224  if (mesh->mpc->mpc_const == NULL) {
1225  HECMW_set_error(errno, "");
1226  return -1;
1227  }
1228  memcpy(mesh->mpc->mpc_const, src, size);
1229  return 0;
1230 }
1231 
1232 static int set_n_amp(void *src) {
1233  mesh->amp->n_amp = *((int *)src);
1234  return 0;
1235 }
1236 
1237 static int set_amp_name(void *src) {
1238  int i;
1239  struct hecmwST_amplitude *amp = mesh->amp;
1240 
1241  if (amp->n_amp <= 0) return 0;
1242 
1243  amp->amp_name = HECMW_calloc(amp->n_amp, sizeof(*amp->amp_name));
1244  if (amp->amp_name == NULL) {
1245  HECMW_set_error(errno, "");
1246  goto error;
1247  }
1248  for (i = 0; i < amp->n_amp; i++) {
1249  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1250  amp->amp_name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1251  if (amp->amp_name[i] == NULL) goto error;
1252  }
1253  return 0;
1254 error:
1255  if (amp->amp_name) {
1256  for (i = 0; i < amp->n_amp; i++) {
1257  HECMW_free(amp->amp_name[i]);
1258  }
1259  }
1260  HECMW_free(amp->amp_name);
1261  amp->amp_name = NULL;
1262  return -1;
1263 }
1264 
1265 static int set_amp_type_definition(void *src) {
1266  int size;
1267 
1268  if (mesh->amp->n_amp <= 0) return 0;
1269  size = sizeof(*mesh->amp->amp_type_definition) * mesh->amp->n_amp;
1270  mesh->amp->amp_type_definition = HECMW_malloc(size);
1271  if (mesh->amp->amp_type_definition == NULL) {
1272  HECMW_set_error(errno, "");
1273  return -1;
1274  }
1275  memcpy(mesh->amp->amp_type_definition, src, size);
1276  return 0;
1277 }
1278 
1279 static int set_amp_type_time(void *src) {
1280  int size;
1281 
1282  if (mesh->amp->n_amp <= 0) return 0;
1283  size = sizeof(*mesh->amp->amp_type_time) * mesh->amp->n_amp;
1284  mesh->amp->amp_type_time = HECMW_malloc(size);
1285  if (mesh->amp->amp_type_time == NULL) {
1286  HECMW_set_error(errno, "");
1287  return -1;
1288  }
1289  memcpy(mesh->amp->amp_type_time, src, size);
1290  return 0;
1291 }
1292 
1293 static int set_amp_type_value(void *src) {
1294  int size;
1295 
1296  if (mesh->amp->n_amp <= 0) return 0;
1297  size = sizeof(*mesh->amp->amp_type_value) * mesh->amp->n_amp;
1298  mesh->amp->amp_type_value = HECMW_malloc(size);
1299  if (mesh->amp->amp_type_value == NULL) {
1300  HECMW_set_error(errno, "");
1301  return -1;
1302  }
1303  memcpy(mesh->amp->amp_type_value, src, size);
1304  return 0;
1305 }
1306 
1307 static int set_amp_index(void *src) {
1308  int size;
1309 
1310  if (mesh->amp->n_amp <= 0) return 0;
1311  size = sizeof(*mesh->amp->amp_index) * (mesh->amp->n_amp + 1);
1312  mesh->amp->amp_index = HECMW_malloc(size);
1313  if (mesh->amp->amp_index == NULL) {
1314  HECMW_set_error(errno, "");
1315  return -1;
1316  }
1317  memcpy(mesh->amp->amp_index, src, size);
1318  return 0;
1319 }
1320 
1321 static int set_amp_val(void *src) {
1322  int size;
1323 
1324  if (mesh->amp->n_amp <= 0) return 0;
1325  if (mesh->amp->amp_index == NULL) return 0;
1326  if (mesh->amp->amp_index[mesh->amp->n_amp] <= 0) return 0;
1327 
1328  size = sizeof(*mesh->amp->amp_val) * mesh->amp->amp_index[mesh->amp->n_amp];
1329  mesh->amp->amp_val = HECMW_malloc(size);
1330  if (mesh->amp->amp_val == NULL) {
1331  HECMW_set_error(errno, "");
1332  return -1;
1333  }
1334  memcpy(mesh->amp->amp_val, src, size);
1335  return 0;
1336 }
1337 
1338 static int set_amp_table(void *src) {
1339  int size;
1340 
1341  if (mesh->amp->n_amp <= 0) return 0;
1342  if (mesh->amp->amp_index == NULL) return 0;
1343  if (mesh->amp->amp_index[mesh->amp->n_amp] <= 0) return 0;
1344 
1345  size = sizeof(*mesh->amp->amp_table) * mesh->amp->amp_index[mesh->amp->n_amp];
1346  mesh->amp->amp_table = HECMW_malloc(size);
1347  if (mesh->amp->amp_table == NULL) {
1348  HECMW_set_error(errno, "");
1349  return -1;
1350  }
1351  memcpy(mesh->amp->amp_table, src, size);
1352  return 0;
1353 }
1354 
1355 static int set_ngrp_n_grp(void *src) {
1356  mesh->node_group->n_grp = *((int *)src);
1357  return 0;
1358 }
1359 
1360 static int set_ngrp_n_bc(void *src) {
1361  mesh->node_group->n_bc = *((int *)src);
1362  return 0;
1363 }
1364 
1365 static int set_ngrp_grp_name(void *src) {
1366  int i;
1367  struct hecmwST_node_grp *grp = mesh->node_group;
1368 
1369  if (grp->n_grp <= 0) return 0;
1370 
1371  grp->grp_name = HECMW_calloc(grp->n_grp, sizeof(*grp->grp_name));
1372  if (grp->grp_name == NULL) {
1373  HECMW_set_error(errno, "");
1374  goto error;
1375  }
1376  for (i = 0; i < grp->n_grp; i++) {
1377  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1378  grp->grp_name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1379  if (grp->grp_name[i] == NULL) goto error;
1380  }
1381  return 0;
1382 error:
1383  if (grp->grp_name) {
1384  for (i = 0; i < grp->n_grp; i++) {
1385  HECMW_free(grp->grp_name[i]);
1386  }
1387  }
1388  HECMW_free(grp->grp_name);
1389  grp->grp_name = NULL;
1390  return -1;
1391 }
1392 
1393 static int set_ngrp_grp_index(void *src) {
1394  int size;
1395 
1396  if (mesh->node_group->n_grp <= 0) return 0;
1397  size = sizeof(*mesh->node_group->grp_index) * (mesh->node_group->n_grp + 1);
1398  mesh->node_group->grp_index = HECMW_malloc(size);
1399  if (mesh->node_group->grp_index == NULL) {
1400  HECMW_set_error(errno, "");
1401  return -1;
1402  }
1403  memcpy(mesh->node_group->grp_index, src, size);
1404  return 0;
1405 }
1406 
1407 static int set_ngrp_grp_item(void *src) {
1408  int size;
1409 
1410  if (mesh->node_group->n_grp <= 0) return 0;
1411  if (mesh->node_group->grp_index == NULL) return 0;
1412  if (mesh->node_group->grp_index[mesh->node_group->n_grp] <= 0) return 0;
1413 
1414  size = sizeof(*mesh->node_group->grp_item) *
1415  mesh->node_group->grp_index[mesh->node_group->n_grp];
1416  mesh->node_group->grp_item = HECMW_malloc(size);
1417  if (mesh->node_group->grp_item == NULL) {
1418  HECMW_set_error(errno, "");
1419  return -1;
1420  }
1421  memcpy(mesh->node_group->grp_item, src, size);
1422  return 0;
1423 }
1424 
1425 static int set_ngrp_bc_grp_ID(void *src) {
1426  int size;
1427 
1428  if (mesh->node_group->n_bc <= 0) return 0;
1429  size = sizeof(*mesh->node_group->bc_grp_ID) * mesh->node_group->n_bc;
1430  mesh->node_group->bc_grp_ID = HECMW_malloc(size);
1431  if (mesh->node_group->bc_grp_ID == NULL) {
1432  HECMW_set_error(errno, "");
1433  return -1;
1434  }
1435  memcpy(mesh->node_group->bc_grp_ID, src, size);
1436  return 0;
1437 }
1438 
1439 static int set_ngrp_bc_grp_type(void *src) {
1440  int size;
1441 
1442  if (mesh->node_group->n_bc <= 0) return 0;
1443  size = sizeof(*mesh->node_group->bc_grp_type) * mesh->node_group->n_bc;
1444  mesh->node_group->bc_grp_type = HECMW_malloc(size);
1445  if (mesh->node_group->bc_grp_type == NULL) {
1446  HECMW_set_error(errno, "");
1447  return -1;
1448  }
1449  memcpy(mesh->node_group->bc_grp_type, src, size);
1450  return 0;
1451 }
1452 
1453 static int set_ngrp_bc_grp_index(void *src) {
1454  int size;
1455 
1456  if (mesh->node_group->n_bc <= 0) return 0;
1457  size = sizeof(*mesh->node_group->bc_grp_index) * mesh->node_group->n_bc;
1458  mesh->node_group->bc_grp_index = HECMW_malloc(size);
1459  if (mesh->node_group->bc_grp_index == NULL) {
1460  HECMW_set_error(errno, "");
1461  return -1;
1462  }
1463  memcpy(mesh->node_group->bc_grp_index, src, size);
1464  return 0;
1465 }
1466 
1467 static int set_ngrp_bc_grp_dof(void *src) {
1468  int size;
1469 
1470  if (mesh->node_group->n_bc <= 0) return 0;
1471  size = sizeof(*mesh->node_group->bc_grp_dof) * mesh->node_group->n_bc;
1472  mesh->node_group->bc_grp_dof = HECMW_malloc(size);
1473  if (mesh->node_group->bc_grp_dof == NULL) {
1474  HECMW_set_error(errno, "");
1475  return -1;
1476  }
1477  memcpy(mesh->node_group->bc_grp_dof, src, size);
1478  return 0;
1479 }
1480 
1481 static int set_ngrp_bc_grp_val(void *src) {
1482  int size;
1483 
1484  if (mesh->node_group->n_bc <= 0) return 0;
1485  size = sizeof(*mesh->node_group->bc_grp_val) * mesh->node_group->n_bc;
1486  mesh->node_group->bc_grp_val = HECMW_malloc(size);
1487  if (mesh->node_group->bc_grp_val == NULL) {
1488  HECMW_set_error(errno, "");
1489  return -1;
1490  }
1491  memcpy(mesh->node_group->bc_grp_val, src, size);
1492  return 0;
1493 }
1494 
1495 static int set_egrp_n_grp(void *src) {
1496  mesh->elem_group->n_grp = *((int *)src);
1497  return 0;
1498 }
1499 
1500 static int set_egrp_n_bc(void *src) {
1501  mesh->elem_group->n_bc = *((int *)src);
1502  return 0;
1503 }
1504 
1505 static int set_egrp_grp_name(void *src) {
1506  int i;
1507  struct hecmwST_elem_grp *grp = mesh->elem_group;
1508 
1509  if (grp->n_grp <= 0) return 0;
1510 
1511  grp->grp_name = HECMW_calloc(grp->n_grp, sizeof(*grp->grp_name));
1512  if (grp->grp_name == NULL) {
1513  HECMW_set_error(errno, "");
1514  goto error;
1515  }
1516  for (i = 0; i < grp->n_grp; i++) {
1517  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1518  grp->grp_name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1519  if (grp->grp_name[i] == NULL) goto error;
1520  }
1521  return 0;
1522 error:
1523  if (grp->grp_name) {
1524  for (i = 0; i < grp->n_grp; i++) {
1525  HECMW_free(grp->grp_name[i]);
1526  }
1527  }
1528  HECMW_free(grp->grp_name);
1529  grp->grp_name = NULL;
1530  return -1;
1531 }
1532 
1533 static int set_egrp_grp_index(void *src) {
1534  int size;
1535 
1536  if (mesh->elem_group->n_grp <= 0) return 0;
1537  size = sizeof(*mesh->elem_group->grp_index) * (mesh->elem_group->n_grp + 1);
1538  mesh->elem_group->grp_index = HECMW_malloc(size);
1539  if (mesh->elem_group->grp_index == NULL) {
1540  HECMW_set_error(errno, "");
1541  return -1;
1542  }
1543  memcpy(mesh->elem_group->grp_index, src, size);
1544  return 0;
1545 }
1546 
1547 static int set_egrp_grp_item(void *src) {
1548  int size;
1549 
1550  if (mesh->elem_group->n_grp <= 0) return 0;
1551  if (mesh->elem_group->grp_index == NULL) return 0;
1552  if (mesh->elem_group->grp_index[mesh->elem_group->n_grp] <= 0) return 0;
1553 
1554  size = sizeof(*mesh->elem_group->grp_item) *
1555  mesh->elem_group->grp_index[mesh->elem_group->n_grp];
1556  mesh->elem_group->grp_item = HECMW_malloc(size);
1557  if (mesh->elem_group->grp_item == NULL) {
1558  HECMW_set_error(errno, "");
1559  return -1;
1560  }
1561  memcpy(mesh->elem_group->grp_item, src, size);
1562  return 0;
1563 }
1564 
1565 static int set_egrp_bc_grp_ID(void *src) {
1566  int size;
1567 
1568  if (mesh->elem_group->n_bc <= 0) return 0;
1569  size = sizeof(*mesh->elem_group->bc_grp_ID) * mesh->elem_group->n_bc;
1570  mesh->elem_group->bc_grp_ID = HECMW_malloc(size);
1571  if (mesh->elem_group->bc_grp_ID == NULL) {
1572  HECMW_set_error(errno, "");
1573  return -1;
1574  }
1575  memcpy(mesh->elem_group->bc_grp_ID, src, size);
1576  return 0;
1577 }
1578 
1579 static int set_egrp_bc_grp_type(void *src) {
1580  int size;
1581 
1582  if (mesh->elem_group->n_bc <= 0) return 0;
1583  size = sizeof(*mesh->elem_group->bc_grp_type) * mesh->elem_group->n_bc;
1584  mesh->elem_group->bc_grp_type = HECMW_malloc(size);
1585  if (mesh->elem_group->bc_grp_type == NULL) {
1586  HECMW_set_error(errno, "");
1587  return -1;
1588  }
1589  memcpy(mesh->elem_group->bc_grp_type, src, size);
1590  return 0;
1591 }
1592 
1593 static int set_egrp_bc_grp_index(void *src) {
1594  int size;
1595 
1596  if (mesh->elem_group->n_bc <= 0) return 0;
1597  size = sizeof(*mesh->elem_group->bc_grp_index) * mesh->elem_group->n_bc;
1598  mesh->elem_group->bc_grp_index = HECMW_malloc(size);
1599  if (mesh->elem_group->bc_grp_index == NULL) {
1600  HECMW_set_error(errno, "");
1601  return -1;
1602  }
1603  memcpy(mesh->elem_group->bc_grp_index, src, size);
1604  return 0;
1605 }
1606 
1607 static int set_egrp_bc_grp_val(void *src) {
1608  int size;
1609 
1610  if (mesh->elem_group->n_bc <= 0) return 0;
1611  size = sizeof(*mesh->elem_group->bc_grp_val) * mesh->elem_group->n_bc;
1612  mesh->elem_group->bc_grp_val = HECMW_malloc(size);
1613  if (mesh->elem_group->bc_grp_val == NULL) {
1614  HECMW_set_error(errno, "");
1615  return -1;
1616  }
1617  memcpy(mesh->elem_group->bc_grp_val, src, size);
1618  return 0;
1619 }
1620 
1621 static int set_sgrp_n_grp(void *src) {
1622  mesh->surf_group->n_grp = *((int *)src);
1623  return 0;
1624 }
1625 
1626 static int set_sgrp_n_bc(void *src) {
1627  mesh->surf_group->n_bc = *((int *)src);
1628  return 0;
1629 }
1630 
1631 static int set_sgrp_grp_name(void *src) {
1632  int i;
1633  struct hecmwST_surf_grp *grp = mesh->surf_group;
1634 
1635  if (grp->n_grp <= 0) return 0;
1636 
1637  grp->grp_name = HECMW_calloc(grp->n_grp, sizeof(*grp->grp_name));
1638  if (grp->grp_name == NULL) {
1639  HECMW_set_error(errno, "");
1640  goto error;
1641  }
1642  for (i = 0; i < grp->n_grp; i++) {
1643  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1644  grp->grp_name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1645  if (grp->grp_name[i] == NULL) goto error;
1646  }
1647  return 0;
1648 error:
1649  if (grp->grp_name) {
1650  for (i = 0; i < grp->n_grp; i++) {
1651  HECMW_free(grp->grp_name[i]);
1652  }
1653  }
1654  HECMW_free(grp->grp_name);
1655  grp->grp_name = NULL;
1656  return -1;
1657 }
1658 
1659 static int set_sgrp_grp_index(void *src) {
1660  int size;
1661 
1662  if (mesh->surf_group->n_grp <= 0) return 0;
1663  size = sizeof(*mesh->surf_group->grp_index) * (mesh->surf_group->n_grp + 1);
1664  mesh->surf_group->grp_index = HECMW_malloc(size);
1665  if (mesh->surf_group->grp_index == NULL) {
1666  HECMW_set_error(errno, "");
1667  return -1;
1668  }
1669  memcpy(mesh->surf_group->grp_index, src, size);
1670  return 0;
1671 }
1672 
1673 static int set_sgrp_grp_item(void *src) {
1674  int size;
1675 
1676  if (mesh->surf_group->n_grp <= 0) return 0;
1677  if (mesh->surf_group->grp_index == NULL) return 0;
1678  if (mesh->surf_group->grp_index[mesh->surf_group->n_grp] <= 0) return 0;
1679 
1680  size = sizeof(*mesh->surf_group->grp_item) * 2 *
1681  mesh->surf_group->grp_index[mesh->surf_group->n_grp];
1682  mesh->surf_group->grp_item = HECMW_malloc(size);
1683  if (mesh->surf_group->grp_item == NULL) {
1684  HECMW_set_error(errno, "");
1685  return -1;
1686  }
1687  memcpy(mesh->surf_group->grp_item, src, size);
1688  return 0;
1689 }
1690 
1691 static int set_sgrp_bc_grp_ID(void *src) {
1692  int size;
1693 
1694  if (mesh->surf_group->n_bc <= 0) return 0;
1695  size = sizeof(*mesh->surf_group->bc_grp_ID) * mesh->surf_group->n_bc;
1696  mesh->surf_group->bc_grp_ID = HECMW_malloc(size);
1697  if (mesh->surf_group->bc_grp_ID == NULL) {
1698  HECMW_set_error(errno, "");
1699  return -1;
1700  }
1701  memcpy(mesh->surf_group->bc_grp_ID, src, size);
1702  return 0;
1703 }
1704 
1705 static int set_sgrp_bc_grp_type(void *src) {
1706  int size;
1707 
1708  if (mesh->surf_group->n_bc <= 0) return 0;
1709  size = sizeof(*mesh->surf_group->bc_grp_type) * mesh->surf_group->n_bc;
1710  mesh->surf_group->bc_grp_type = HECMW_malloc(size);
1711  if (mesh->surf_group->bc_grp_type == NULL) {
1712  HECMW_set_error(errno, "");
1713  return -1;
1714  }
1715  memcpy(mesh->surf_group->bc_grp_type, src, size);
1716  return 0;
1717 }
1718 
1719 static int set_sgrp_bc_grp_index(void *src) {
1720  int size;
1721 
1722  if (mesh->surf_group->n_bc <= 0) return 0;
1723  size = sizeof(*mesh->surf_group->bc_grp_index) * 2 * mesh->surf_group->n_bc;
1724  mesh->surf_group->bc_grp_index = HECMW_malloc(size);
1725  if (mesh->surf_group->bc_grp_index == NULL) {
1726  HECMW_set_error(errno, "");
1727  return -1;
1728  }
1729  memcpy(mesh->surf_group->bc_grp_index, src, size);
1730  return 0;
1731 }
1732 
1733 static int set_sgrp_bc_grp_val(void *src) {
1734  int size;
1735 
1736  if (mesh->surf_group->n_bc <= 0) return 0;
1737  size = sizeof(*mesh->surf_group->bc_grp_val) * mesh->surf_group->n_bc;
1738  mesh->surf_group->bc_grp_val = HECMW_malloc(size);
1739  if (mesh->surf_group->bc_grp_val == NULL) {
1740  HECMW_set_error(errno, "");
1741  return -1;
1742  }
1743  memcpy(mesh->surf_group->bc_grp_val, src, size);
1744  return 0;
1745 }
1746 
1747 static int set_contact_pair_n_pair(void *src) {
1748  mesh->contact_pair->n_pair = *((int *)src);
1749  return 0;
1750 }
1751 
1752 static int set_contact_pair_name(void *src) {
1753  int i;
1754  struct hecmwST_contact_pair *cpair = mesh->contact_pair;
1755 
1756  if (cpair->n_pair <= 0) return 0;
1757 
1758  cpair->name = HECMW_calloc(cpair->n_pair, sizeof(*cpair->name));
1759  if (cpair->name == NULL) {
1760  HECMW_set_error(errno, "");
1761  goto error;
1762  }
1763  for (i = 0; i < cpair->n_pair; i++) {
1764  char *src_point = (char *)src + HECMW_NAME_LEN * i;
1765  cpair->name[i] = HECMW_strcpy_f2c(src_point, HECMW_NAME_LEN);
1766  if (cpair->name[i] == NULL) goto error;
1767  }
1768  return 0;
1769 error:
1770  if (cpair->name) {
1771  for (i = 0; i < cpair->n_pair; i++) {
1772  HECMW_free(cpair->name[i]);
1773  }
1774  }
1775  HECMW_free(cpair->name);
1776  cpair->name = NULL;
1777  return -1;
1778 }
1779 
1780 static int set_contact_pair_type(void *src) {
1781  int size;
1782 
1783  if (mesh->contact_pair->n_pair <= 0) return 0;
1784  size = sizeof(*mesh->contact_pair->type) * (mesh->contact_pair->n_pair);
1785  mesh->contact_pair->type = HECMW_malloc(size);
1786  if (mesh->contact_pair->type == NULL) {
1787  HECMW_set_error(errno, "");
1788  return -1;
1789  }
1790  memcpy(mesh->contact_pair->type, src, size);
1791  return 0;
1792 }
1793 
1794 static int set_contact_pair_slave_grp_id(void *src) {
1795  int size;
1796 
1797  if (mesh->contact_pair->n_pair <= 0) return 0;
1798  size =
1799  sizeof(*mesh->contact_pair->slave_grp_id) * (mesh->contact_pair->n_pair);
1800  mesh->contact_pair->slave_grp_id = HECMW_malloc(size);
1801  if (mesh->contact_pair->slave_grp_id == NULL) {
1802  HECMW_set_error(errno, "");
1803  return -1;
1804  }
1805  memcpy(mesh->contact_pair->slave_grp_id, src, size);
1806  return 0;
1807 }
1808 
1809 static int set_contact_pair_slave_orisgrp_id(void *src) {
1810  int size;
1811 
1812  if (mesh->contact_pair->n_pair <= 0) return 0;
1813  size =
1814  sizeof(*mesh->contact_pair->slave_orisgrp_id) * (mesh->contact_pair->n_pair);
1816  if (mesh->contact_pair->slave_orisgrp_id == NULL) {
1817  HECMW_set_error(errno, "");
1818  return -1;
1819  }
1820  memcpy(mesh->contact_pair->slave_orisgrp_id, src, size);
1821  return 0;
1822 }
1823 
1824 static int set_contact_pair_master_grp_id(void *src) {
1825  int size;
1826 
1827  if (mesh->contact_pair->n_pair <= 0) return 0;
1828  size =
1829  sizeof(*mesh->contact_pair->master_grp_id) * (mesh->contact_pair->n_pair);
1830  mesh->contact_pair->master_grp_id = HECMW_malloc(size);
1831  if (mesh->contact_pair->master_grp_id == NULL) {
1832  HECMW_set_error(errno, "");
1833  return -1;
1834  }
1835  memcpy(mesh->contact_pair->master_grp_id, src, size);
1836  return 0;
1837 }
1838 
1839 /*-----------------------------------------------------------------------------
1840  * SetFunc table
1841  */
1842 
1843 typedef int (*SetFunc)(void *);
1844 
1845 static struct func_table {
1846  char *struct_name;
1847  char *var_name;
1848  SetFunc set_func;
1849 } functions[] = {
1850  /* { Struct name, Variable name, memcpy function } */
1851  {"hecmwST_local_mesh", "hecmw_flag_adapt", set_hecmw_flag_adapt},
1852  {"hecmwST_local_mesh", "hecmw_flag_initcon", set_hecmw_flag_initcon},
1853  {"hecmwST_local_mesh", "hecmw_flag_parttype", set_hecmw_flag_parttype},
1854  {"hecmwST_local_mesh", "hecmw_flag_partdepth", set_hecmw_flag_partdepth},
1855  {"hecmwST_local_mesh", "hecmw_flag_version", set_hecmw_flag_version},
1856  {"hecmwST_local_mesh", "hecmw_flag_partcontact",
1857  set_hecmw_flag_partcontact},
1858 
1859  {"hecmwST_local_mesh", "gridfile", set_gridfile},
1860  {"hecmwST_local_mesh", "hecmw_n_file", set_hecmw_n_file},
1861  {"hecmwST_local_mesh", "files", set_files},
1862  {"hecmwST_local_mesh", "header", set_header},
1863  {"hecmwST_local_mesh", "zero_temp", set_zero_temp},
1864 
1865  {"hecmwST_local_mesh", "n_node", set_n_node},
1866  {"hecmwST_local_mesh", "n_node_gross", set_n_node_gross},
1867  {"hecmwST_local_mesh", "nn_middle", set_nn_middle},
1868  {"hecmwST_local_mesh", "nn_internal", set_nn_internal},
1869  {"hecmwST_local_mesh", "node_internal_list", set_node_internal_list},
1870  {"hecmwST_local_mesh", "node_ID", set_node_ID},
1871  {"hecmwST_local_mesh", "global_node_ID", set_global_node_ID},
1872  {"hecmwST_local_mesh", "node", set_node},
1873  {"hecmwST_local_mesh", "n_dof", set_n_dof},
1874  {"hecmwST_local_mesh", "n_dof_grp", set_n_dof_grp},
1875  {"hecmwST_local_mesh", "n_dof_tot", set_n_dof_tot},
1876  {"hecmwST_local_mesh", "node_dof_index", set_node_dof_index},
1877  {"hecmwST_local_mesh", "node_dof_item", set_node_dof_item},
1878  {"hecmwST_local_mesh", "node_val_index", set_node_val_index},
1879  {"hecmwST_local_mesh", "node_val_item", set_node_val_item},
1880  {"hecmwST_local_mesh", "node_init_val_index", set_node_init_val_index},
1881  {"hecmwST_local_mesh", "node_init_val_item", set_node_init_val_item},
1882  {"hecmwST_local_mesh", "n_elem", set_n_elem},
1883  {"hecmwST_local_mesh", "n_elem_gross", set_n_elem_gross},
1884  {"hecmwST_local_mesh", "ne_internal", set_ne_internal},
1885  {"hecmwST_local_mesh", "elem_internal_list", set_elem_internal_list},
1886  {"hecmwST_local_mesh", "elem_ID", set_elem_ID},
1887  {"hecmwST_local_mesh", "global_elem_ID", set_global_elem_ID},
1888  {"hecmwST_local_mesh", "elem_type", set_elem_type},
1889  {"hecmwST_local_mesh", "n_elem_type", set_n_elem_type},
1890  {"hecmwST_local_mesh", "elem_type_index", set_elem_type_index},
1891  {"hecmwST_local_mesh", "elem_type_item", set_elem_type_item},
1892  {"hecmwST_local_mesh", "elem_node_index", set_elem_node_index},
1893  {"hecmwST_local_mesh", "elem_node_item", set_elem_node_item},
1894  {"hecmwST_local_mesh", "section_ID", set_section_ID},
1895  {"hecmwST_local_mesh", "n_elem_mat_ID", set_n_elem_mat_ID},
1896  {"hecmwST_local_mesh", "elem_mat_ID_index", set_elem_mat_ID_index},
1897  {"hecmwST_local_mesh", "elem_mat_ID_item", set_elem_mat_ID_item},
1898  {"hecmwST_local_mesh", "elem_mat_int_index", set_elem_mat_int_index},
1899  {"hecmwST_local_mesh", "elem_mat_int_val", set_elem_mat_int_val},
1900  {"hecmwST_local_mesh", "elem_val_index", set_elem_val_index},
1901  {"hecmwST_local_mesh", "elem_val_item", set_elem_val_item},
1902 
1903  {"hecmwST_local_mesh", "zero", set_zero},
1904  {"hecmwST_local_mesh", "HECMW_COMM", set_HECMW_COMM},
1905  {"hecmwST_local_mesh", "PETOT", set_PETOT},
1906  {"hecmwST_local_mesh", "PEsmpTOT", set_PEsmpTOT},
1907  {"hecmwST_local_mesh", "my_rank", set_my_rank},
1908  {"hecmwST_local_mesh", "errnof", set_errnof},
1909  {"hecmwST_local_mesh", "n_subdomain", set_n_subdomain},
1910  {"hecmwST_local_mesh", "n_neighbor_pe", set_n_neighbor_pe},
1911  {"hecmwST_local_mesh", "neighbor_pe", set_neighbor_pe},
1912  {"hecmwST_local_mesh", "import_index", set_import_index},
1913  {"hecmwST_local_mesh", "import_item", set_import_item},
1914  {"hecmwST_local_mesh", "export_index", set_export_index},
1915  {"hecmwST_local_mesh", "export_item", set_export_item},
1916  {"hecmwST_local_mesh", "shared_index", set_shared_index},
1917  {"hecmwST_local_mesh", "shared_item", set_shared_item},
1918 
1919  {"hecmwST_local_mesh", "coarse_grid_level", set_coarse_grid_level},
1920  {"hecmwST_local_mesh", "n_adapt", set_n_adapt},
1921  {"hecmwST_local_mesh", "when_i_was_refined_node",
1922  set_when_i_was_refined_node},
1923  {"hecmwST_local_mesh", "when_i_was_refined_elem",
1924  set_when_i_was_refined_elem},
1925  {"hecmwST_local_mesh", "adapt_parent_type", set_adapt_parent_type},
1926  {"hecmwST_local_mesh", "adapt_type", set_adapt_type},
1927  {"hecmwST_local_mesh", "adapt_level", set_adapt_level},
1928  {"hecmwST_local_mesh", "adapt_parent", set_adapt_parent},
1929  {"hecmwST_local_mesh", "adapt_children_index", set_adapt_children_index},
1930  {"hecmwST_local_mesh", "adapt_children_item", set_adapt_children_item},
1931 
1932  {"hecmwST_local_mesh", "n_refine", set_n_refine},
1933  {"hecmwST_local_mesh", "node_old2new", set_node_old2new},
1934  {"hecmwST_local_mesh", "node_new2old", set_node_new2old},
1935  {"hecmwST_local_mesh", "elem_old2new", set_elem_old2new},
1936  {"hecmwST_local_mesh", "elem_new2old", set_elem_new2old},
1937  {"hecmwST_local_mesh", "n_node_refine_hist", set_n_node_refine_hist},
1938 
1939  {"hecmwST_section", "n_sect", set_n_sect},
1940  {"hecmwST_section", "sect_type", set_sect_type},
1941  {"hecmwST_section", "sect_opt", set_sect_opt},
1942  {"hecmwST_section", "sect_mat_ID_index", set_sect_mat_ID_index},
1943  {"hecmwST_section", "sect_mat_ID_item", set_sect_mat_ID_item},
1944  {"hecmwST_section", "sect_I_index", set_sect_I_index},
1945  {"hecmwST_section", "sect_I_item", set_sect_I_item},
1946  {"hecmwST_section", "sect_R_index", set_sect_R_index},
1947  {"hecmwST_section", "sect_R_item", set_sect_R_item},
1948 
1949  {"hecmwST_material", "n_mat", set_n_mat},
1950  {"hecmwST_material", "n_mat_item", set_n_mat_item},
1951  {"hecmwST_material", "n_mat_subitem", set_n_mat_subitem},
1952  {"hecmwST_material", "n_mat_table", set_n_mat_table},
1953  {"hecmwST_material", "mat_name", set_mat_name},
1954  {"hecmwST_material", "mat_item_index", set_mat_item_index},
1955  {"hecmwST_material", "mat_subitem_index", set_mat_subitem_index},
1956  {"hecmwST_material", "mat_table_index", set_mat_table_index},
1957  {"hecmwST_material", "mat_val", set_mat_val},
1958  {"hecmwST_material", "mat_temp", set_mat_temp},
1959 
1960  {"hecmwST_mpc", "n_mpc", set_n_mpc},
1961  {"hecmwST_mpc", "mpc_index", set_mpc_index},
1962  {"hecmwST_mpc", "mpc_item", set_mpc_item},
1963  {"hecmwST_mpc", "mpc_dof", set_mpc_dof},
1964  {"hecmwST_mpc", "mpc_val", set_mpc_val},
1965  {"hecmwST_mpc", "mpc_const", set_mpc_const},
1966 
1967  {"hecmwST_amplitude", "n_amp", set_n_amp},
1968  {"hecmwST_amplitude", "amp_name", set_amp_name},
1969  {"hecmwST_amplitude", "amp_type_definition", set_amp_type_definition},
1970  {"hecmwST_amplitude", "amp_type_time", set_amp_type_time},
1971  {"hecmwST_amplitude", "amp_type_value", set_amp_type_value},
1972  {"hecmwST_amplitude", "amp_index", set_amp_index},
1973  {"hecmwST_amplitude", "amp_val", set_amp_val},
1974  {"hecmwST_amplitude", "amp_table", set_amp_table},
1975 
1976  {"hecmwST_node_grp", "n_grp", set_ngrp_n_grp},
1977  {"hecmwST_node_grp", "grp_name", set_ngrp_grp_name},
1978  {"hecmwST_node_grp", "grp_index", set_ngrp_grp_index},
1979  {"hecmwST_node_grp", "grp_item", set_ngrp_grp_item},
1980  {"hecmwST_node_grp", "n_bc", set_ngrp_n_bc},
1981  {"hecmwST_node_grp", "bc_grp_ID", set_ngrp_bc_grp_ID},
1982  {"hecmwST_node_grp", "bc_grp_type", set_ngrp_bc_grp_type},
1983  {"hecmwST_node_grp", "bc_grp_index", set_ngrp_bc_grp_index},
1984  {"hecmwST_node_grp", "bc_grp_dof", set_ngrp_bc_grp_dof},
1985  {"hecmwST_node_grp", "bc_grp_val", set_ngrp_bc_grp_val},
1986 
1987  {"hecmwST_elem_grp", "n_grp", set_egrp_n_grp},
1988  {"hecmwST_elem_grp", "grp_name", set_egrp_grp_name},
1989  {"hecmwST_elem_grp", "grp_index", set_egrp_grp_index},
1990  {"hecmwST_elem_grp", "grp_item", set_egrp_grp_item},
1991  {"hecmwST_elem_grp", "n_bc", set_egrp_n_bc},
1992  {"hecmwST_elem_grp", "bc_grp_ID", set_egrp_bc_grp_ID},
1993  {"hecmwST_elem_grp", "bc_grp_type", set_egrp_bc_grp_type},
1994  {"hecmwST_elem_grp", "bc_grp_index", set_egrp_bc_grp_index},
1995  {"hecmwST_elem_grp", "bc_grp_val", set_egrp_bc_grp_val},
1996 
1997  {"hecmwST_surf_grp", "n_grp", set_sgrp_n_grp},
1998  {"hecmwST_surf_grp", "grp_name", set_sgrp_grp_name},
1999  {"hecmwST_surf_grp", "grp_index", set_sgrp_grp_index},
2000  {"hecmwST_surf_grp", "grp_item", set_sgrp_grp_item},
2001  {"hecmwST_surf_grp", "n_bc", set_sgrp_n_bc},
2002  {"hecmwST_surf_grp", "bc_grp_ID", set_sgrp_bc_grp_ID},
2003  {"hecmwST_surf_grp", "bc_grp_type", set_sgrp_bc_grp_type},
2004  {"hecmwST_surf_grp", "bc_grp_index", set_sgrp_bc_grp_index},
2005  {"hecmwST_surf_grp", "bc_grp_val", set_sgrp_bc_grp_val},
2006 
2007  {"hecmwST_contact_pair", "n_pair", set_contact_pair_n_pair},
2008  {"hecmwST_contact_pair", "name", set_contact_pair_name},
2009  {"hecmwST_contact_pair", "type", set_contact_pair_type},
2010  {"hecmwST_contact_pair", "slave_grp_id", set_contact_pair_slave_grp_id},
2011  {"hecmwST_contact_pair", "slave_orisgrp_id", set_contact_pair_slave_orisgrp_id},
2012  {"hecmwST_contact_pair", "master_grp_id", set_contact_pair_master_grp_id},
2013 };
2014 
2015 static const int NFUNC = sizeof(functions) / sizeof(functions[0]);
2016 
2017 static SetFunc get_set_func(char *struct_name, char *var_name) {
2018  int i;
2019 
2020  for (i = 0; i < NFUNC; i++) {
2021  if (strcmp(functions[i].struct_name, struct_name) == 0 &&
2022  strcmp(functions[i].var_name, var_name) == 0) {
2023  return functions[i].set_func;
2024  }
2025  }
2026  return NULL;
2027 }
2028 
2030  struct hecmwST_local_mesh tmp;
2031 
2032  tmp = *local_mesh;
2033  memset(local_mesh, 0, sizeof(*local_mesh));
2034  local_mesh->section = tmp.section;
2035  memset(local_mesh->section, 0, sizeof(*local_mesh->section));
2036  local_mesh->material = tmp.material;
2037  memset(local_mesh->material, 0, sizeof(*local_mesh->material));
2038  local_mesh->mpc = tmp.mpc;
2039  memset(local_mesh->mpc, 0, sizeof(*local_mesh->mpc));
2040  local_mesh->amp = tmp.amp;
2041  memset(local_mesh->amp, 0, sizeof(*local_mesh->amp));
2042  local_mesh->node_group = tmp.node_group;
2043  memset(local_mesh->node_group, 0, sizeof(*local_mesh->node_group));
2044  local_mesh->elem_group = tmp.elem_group;
2045  memset(local_mesh->elem_group, 0, sizeof(*local_mesh->elem_group));
2046  local_mesh->surf_group = tmp.surf_group;
2047  memset(local_mesh->surf_group, 0, sizeof(*local_mesh->surf_group));
2048  local_mesh->contact_pair = tmp.contact_pair;
2049  memset(local_mesh->contact_pair, 0, sizeof(*local_mesh->contact_pair));
2050 
2051  mesh = local_mesh;
2052  return 0;
2053 }
2054 
2056  mesh = NULL;
2057  return 0;
2058 }
2059 
2060 /*----------------------------------------------------------------------------*/
2061 
2062 void hecmw_dist_copy_f2c_set_if(char *struct_name, char *var_name, void *src,
2063  int *err, int slen, int vlen) {
2064  SetFunc func;
2065  char sname[HECMW_NAME_LEN + 1];
2066  char vname[HECMW_NAME_LEN + 1];
2067 
2068  *err = 1;
2069 
2070  if (mesh == NULL) {
2073  "HECMW_dist_copy_f2c_set_if(): 'mesh' has not initialized yet");
2074  return;
2075  }
2076  if (struct_name == NULL) {
2078  "HECMW_dist_copy_f2c_set_if(): 'sname' is NULL");
2079  return;
2080  }
2081  if (var_name == NULL) {
2083  "HECMW_dist_copy_f2c_set_if(): 'vname' is NULL");
2084  return;
2085  }
2086 
2087  if (HECMW_strcpy_f2c_r(struct_name, slen, sname, sizeof(sname)) == NULL) {
2088  return;
2089  }
2090  if (HECMW_strcpy_f2c_r(var_name, vlen, vname, sizeof(vname)) == NULL) {
2091  return;
2092  }
2093 
2094  func = get_set_func(sname, vname);
2095  if (func == NULL) {
2097  "HECMW_dist_copy_f2c_set_if(): SetFunc not found");
2098  return;
2099  }
2100 
2101  if ((*func)(src)) return;
2102 
2103  *err = 0;
2104 }
HECMW_Comm HECMW_Comm_f2c(HECMW_Fint comm)
Definition: hecmw_comm.c:723
#define HECMW_FILENAME_LEN
Definition: hecmw_config.h:72
MPI_Fint HECMW_Fint
Definition: hecmw_config.h:42
#define HECMW_HEADER_LEN
Definition: hecmw_config.h:68
#define HECMW_NAME_LEN
Definition: hecmw_config.h:70
int HECMW_dist_copy_f2c_init(struct hecmwST_local_mesh *local_mesh)
int HECMW_dist_copy_f2c_finalize(void)
void hecmw_dist_copy_f2c_set_if(char *struct_name, char *var_name, void *src, int *err, int slen, int vlen)
int(* SetFunc)(void *)
int HECMW_set_error(int errorno, const char *fmt,...)
Definition: hecmw_error.c:37
#define NULL
char * HECMW_strcpy_f2c(const char *fstr, int flen)
Definition: hecmw_lib_fc.c:11
char * HECMW_strcpy_f2c_r(const char *fstr, int flen, char *buf, int bufsize)
Definition: hecmw_lib_fc.c:45
#define HECMW_calloc(nmemb, size)
Definition: hecmw_malloc.h:21
#define HECMW_free(ptr)
Definition: hecmw_malloc.h:24
#define HECMW_malloc(size)
Definition: hecmw_malloc.h:20
#define HECMW_ALL_E0101
Definition: hecmw_msgno.h:8
#define HECMW_ALL_E0102
Definition: hecmw_msgno.h:9
int * amp_type_definition
Definition: hecmw_struct.h:61
double * amp_table
Definition: hecmw_struct.h:72
double * bc_grp_val
Definition: hecmw_struct.h:103
struct hecmwST_section * section
Definition: hecmw_struct.h:245
double * elem_val_item
Definition: hecmw_struct.h:205
double * elem_mat_int_val
Definition: hecmw_struct.h:203
struct hecmwST_amplitude * amp
Definition: hecmw_struct.h:248
struct hecmwST_material * material
Definition: hecmw_struct.h:246
double * node_val_item
Definition: hecmw_struct.h:178
struct hecmwST_mpc * mpc
Definition: hecmw_struct.h:247
struct hecmwST_node_grp * node_group
Definition: hecmw_struct.h:249
double * node_init_val_item
Definition: hecmw_struct.h:181
struct hecmwST_contact_pair * contact_pair
Definition: hecmw_struct.h:252
struct hecmwST_surf_grp * surf_group
Definition: hecmw_struct.h:251
long long * elem_node_index
Definition: hecmw_struct.h:195
char gridfile[HECMW_FILENAME_LEN+1]
Definition: hecmw_struct.h:154
char header[HECMW_HEADER_LEN+1]
Definition: hecmw_struct.h:157
HECMW_Comm HECMW_COMM
Definition: hecmw_struct.h:209
struct hecmwST_elem_grp * elem_group
Definition: hecmw_struct.h:250
int * when_i_was_refined_node
Definition: hecmw_struct.h:227
int * when_i_was_refined_elem
Definition: hecmw_struct.h:228
int * mat_subitem_index
Definition: hecmw_struct.h:42
double * mat_val
Definition: hecmw_struct.h:44
double * mat_temp
Definition: hecmw_struct.h:45
int * mpc_dof
Definition: hecmw_struct.h:52
double * mpc_val
Definition: hecmw_struct.h:53
double * mpc_const
Definition: hecmw_struct.h:54
int * mpc_index
Definition: hecmw_struct.h:50
int * mpc_item
Definition: hecmw_struct.h:51
double * bc_grp_val
Definition: hecmw_struct.h:89
double * sect_R_item
Definition: hecmw_struct.h:32
int * sect_mat_ID_index
Definition: hecmw_struct.h:27
int * sect_mat_ID_item
Definition: hecmw_struct.h:28
double * bc_grp_val
Definition: hecmw_struct.h:118