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_dist_free.h" 10 #include "hecmw_dist_alloc.h" 11 #include "hecmw_util.h" 12 #include "hecmw_struct.h" 13 free_section(struct hecmwST_section * section)14static void free_section(struct hecmwST_section *section) { 15 if (section == NULL) return; 16 HECMW_free(section->sect_type); 17 HECMW_free(section->sect_opt); 18 HECMW_free(section->sect_mat_ID_index); 19 HECMW_free(section->sect_mat_ID_item); 20 HECMW_free(section->sect_I_index); 21 HECMW_free(section->sect_I_item); 22 HECMW_free(section->sect_R_index); 23 HECMW_free(section->sect_R_item); 24 } 25 free_material(struct hecmwST_material * material)26static void free_material(struct hecmwST_material *material) { 27 int i; 28 29 if (material == NULL) return; 30 for (i = 0; i < material->n_mat; i++) { 31 HECMW_free(material->mat_name[i]); 32 } 33 HECMW_free(material->mat_name); 34 HECMW_free(material->mat_item_index); 35 HECMW_free(material->mat_subitem_index); 36 HECMW_free(material->mat_table_index); 37 HECMW_free(material->mat_val); 38 HECMW_free(material->mat_temp); 39 } 40 free_mpc(struct hecmwST_mpc * mpc)41static void free_mpc(struct hecmwST_mpc *mpc) { 42 if (mpc == NULL) return; 43 HECMW_free(mpc->mpc_index); 44 HECMW_free(mpc->mpc_item); 45 HECMW_free(mpc->mpc_dof); 46 HECMW_free(mpc->mpc_val); 47 HECMW_free(mpc->mpc_const); 48 } 49 free_amplitude(struct hecmwST_amplitude * amp)50static void free_amplitude(struct hecmwST_amplitude *amp) { 51 int i; 52 53 if (amp == NULL) return; 54 55 for (i = 0; i < amp->n_amp; i++) { 56 HECMW_free(amp->amp_name[i]); 57 } 58 HECMW_free(amp->amp_name); 59 HECMW_free(amp->amp_type_definition); 60 HECMW_free(amp->amp_type_time); 61 HECMW_free(amp->amp_type_value); 62 HECMW_free(amp->amp_index); 63 HECMW_free(amp->amp_val); 64 HECMW_free(amp->amp_table); 65 } 66 free_ngrp(struct hecmwST_node_grp * grp)67static void free_ngrp(struct hecmwST_node_grp *grp) { 68 int i; 69 70 if (grp == NULL) return; 71 72 for (i = 0; i < grp->n_grp; i++) { 73 HECMW_free(grp->grp_name[i]); 74 } 75 HECMW_free(grp->grp_name); 76 HECMW_free(grp->grp_index); 77 HECMW_free(grp->grp_item); 78 HECMW_free(grp->bc_grp_ID); 79 HECMW_free(grp->bc_grp_type); 80 HECMW_free(grp->bc_grp_index); 81 HECMW_free(grp->bc_grp_dof); 82 HECMW_free(grp->bc_grp_val); 83 } 84 free_egrp(struct hecmwST_elem_grp * grp)85static void free_egrp(struct hecmwST_elem_grp *grp) { 86 int i; 87 88 if (grp == NULL) return; 89 90 for (i = 0; i < grp->n_grp; i++) { 91 HECMW_free(grp->grp_name[i]); 92 } 93 HECMW_free(grp->grp_name); 94 HECMW_free(grp->grp_index); 95 HECMW_free(grp->grp_item); 96 HECMW_free(grp->bc_grp_ID); 97 HECMW_free(grp->bc_grp_type); 98 HECMW_free(grp->bc_grp_index); 99 HECMW_free(grp->bc_grp_val); 100 } 101 free_sgrp(struct hecmwST_surf_grp * grp)102static void free_sgrp(struct hecmwST_surf_grp *grp) { 103 int i; 104 105 if (grp == NULL) return; 106 107 for (i = 0; i < grp->n_grp; i++) { 108 HECMW_free(grp->grp_name[i]); 109 } 110 HECMW_free(grp->grp_name); 111 HECMW_free(grp->grp_index); 112 HECMW_free(grp->grp_item); 113 HECMW_free(grp->bc_grp_ID); 114 HECMW_free(grp->bc_grp_type); 115 HECMW_free(grp->bc_grp_index); 116 HECMW_free(grp->bc_grp_val); 117 } 118 free_contact_pair(struct hecmwST_contact_pair * cpair)119static void free_contact_pair(struct hecmwST_contact_pair *cpair) { 120 int i; 121 122 if (cpair == NULL) return; 123 124 for (i = 0; i < cpair->n_pair; i++) { 125 HECMW_free(cpair->name[i]); 126 } 127 128 HECMW_free(cpair->type); 129 HECMW_free(cpair->name); 130 HECMW_free(cpair->slave_grp_id); 131 HECMW_free(cpair->slave_orisgrp_id); 132 HECMW_free(cpair->master_grp_id); 133 } 134 free_refine_origin(struct hecmwST_refine_origin * reforg)135static void free_refine_origin(struct hecmwST_refine_origin *reforg) { 136 int i; 137 138 if (reforg == NULL) return; 139 140 HECMW_free(reforg->index); 141 HECMW_free(reforg->item_index); 142 HECMW_free(reforg->item_item); 143 } 144 HECMW_dist_clean(struct hecmwST_local_mesh * mesh)145void HECMW_dist_clean(struct hecmwST_local_mesh *mesh) { 146 int i; 147 148 if (mesh == NULL) return; 149 150 for (i = 0; i < mesh->hecmw_n_file; i++) { 151 HECMW_free(mesh->files[i]); 152 } 153 HECMW_free(mesh->files); 154 155 HECMW_free(mesh->node_internal_list); 156 HECMW_free(mesh->node_ID); 157 HECMW_free(mesh->global_node_ID); 158 HECMW_free(mesh->node); 159 HECMW_free(mesh->node_dof_index); 160 HECMW_free(mesh->node_dof_item); 161 HECMW_free(mesh->node_val_index); 162 HECMW_free(mesh->node_val_item); 163 HECMW_free(mesh->node_init_val_index); 164 HECMW_free(mesh->node_init_val_item); 165 166 HECMW_free(mesh->elem_internal_list); 167 HECMW_free(mesh->elem_ID); 168 HECMW_free(mesh->global_elem_ID); 169 HECMW_free(mesh->elem_type); 170 HECMW_free(mesh->elem_type_index); 171 HECMW_free(mesh->elem_type_item); 172 HECMW_free(mesh->elem_node_index); 173 HECMW_free(mesh->elem_node_item); 174 HECMW_free(mesh->section_ID); 175 HECMW_free(mesh->elem_mat_ID_index); 176 HECMW_free(mesh->elem_mat_ID_item); 177 HECMW_free(mesh->elem_mat_int_index); 178 HECMW_free(mesh->elem_mat_int_val); 179 HECMW_free(mesh->elem_val_index); 180 HECMW_free(mesh->elem_val_item); 181 182 HECMW_free(mesh->neighbor_pe); 183 HECMW_free(mesh->import_index); 184 HECMW_free(mesh->import_item); 185 HECMW_free(mesh->export_index); 186 HECMW_free(mesh->export_item); 187 HECMW_free(mesh->shared_index); 188 HECMW_free(mesh->shared_item); 189 190 HECMW_free(mesh->when_i_was_refined_node); 191 HECMW_free(mesh->when_i_was_refined_elem); 192 HECMW_free(mesh->adapt_parent_type); 193 HECMW_free(mesh->adapt_type); 194 HECMW_free(mesh->adapt_level); 195 HECMW_free(mesh->adapt_parent); 196 HECMW_free(mesh->adapt_children_index); 197 HECMW_free(mesh->adapt_children_item); 198 199 HECMW_free(mesh->node_old2new); 200 HECMW_free(mesh->node_new2old); 201 HECMW_free(mesh->elem_old2new); 202 HECMW_free(mesh->elem_new2old); 203 HECMW_free(mesh->n_node_refine_hist); 204 205 free_section(mesh->section); 206 free_material(mesh->material); 207 free_mpc(mesh->mpc); 208 free_amplitude(mesh->amp); 209 free_ngrp(mesh->node_group); 210 free_egrp(mesh->elem_group); 211 free_sgrp(mesh->surf_group); 212 free_contact_pair(mesh->contact_pair); 213 free_refine_origin(mesh->refine_origin); 214 215 HECMW_dist_init(mesh); 216 } 217 HECMW_dist_free(struct hecmwST_local_mesh * mesh)218void HECMW_dist_free(struct hecmwST_local_mesh *mesh) { 219 if (mesh == NULL) return; 220 221 HECMW_dist_clean(mesh); 222 223 HECMW_free(mesh->section); 224 HECMW_free(mesh->material); 225 HECMW_free(mesh->mpc); 226 HECMW_free(mesh->amp); 227 HECMW_free(mesh->node_group); 228 HECMW_free(mesh->elem_group); 229 HECMW_free(mesh->surf_group); 230 HECMW_free(mesh->contact_pair); 231 HECMW_free(mesh->refine_origin); 232 233 HECMW_free(mesh); 234 } 235