24 #define FRAC_1_3 (0.33333333333333333)
26 #define FRAC_1_4 (0.25)
38 static void free_link_list(
struct link_list *r) {
41 for (p = r; p; p = q) {
50 int *n_shared_surf =
NULL;
54 if (n_shared_surf ==
NULL) {
59 for (i = 0; i < boundary->
surf->
n; i++) {
60 for (j = boundary->
elem_node_index[i]; j < boundary->elem_node_index[i + 1];
63 n_shared_surf[
id] += 1;
70 static int send_recv_n_shared_surf(
73 int *sendbuf =
NULL, *recvbuf =
NULL;
74 int nmemb,
id, rtc, i;
80 if (sendbuf ==
NULL) {
86 sendbuf[i] = n_shared_surf[
id];
91 if (recvbuf ==
NULL) {
103 n_shared_surf[
id] = recvbuf[i];
118 int id,
int *n_shared_surf,
124 i < boundary->elem_node_index[
id + 1]; i++) {
133 p->
weight = 1.0 / (double)n_shared_surf[node_id];
143 int id,
int *n_shared_surf,
149 i < boundary->elem_node_index[
id + 1]; i++) {
158 p->
weight = 1.0 / (double)n_shared_surf[node_id];
172 int *n_shared_surf =
NULL;
173 int elem, n_item, size,
n, i;
177 if (weight_list ==
NULL) {
181 for (i = 0; i < boundary->
surf->
n; i++) {
182 weight_list[i].
id = -1;
183 weight_list[i].
weight = 0.0;
190 if ((n_shared_surf = count_shared_surf(boundary)) ==
NULL)
goto error;
191 if (send_recv_n_shared_surf(intra_tbl, intracomm, n_shared_surf))
goto error;
193 for (i = 0; i < boundary->
surf->
n; i++) {
197 if (n2s_average_tet1(
mesh, boundary, i, n_shared_surf, weight_list))
200 if (n2s_average_hex1(
mesh, boundary, i, n_shared_surf, weight_list))
214 weight_info->
n = boundary->
surf->
n;
225 for (
n = 0, i = 0; i < boundary->
surf->
n; i++) {
226 for (p = weight_list[i].
next; p; p = p->
next) {
229 weight_info->
index[i + 1] =
n;
233 n_item = weight_info->
index[weight_info->
n];
235 if (weight_info->
id ==
NULL) {
244 for (
n = 0, i = 0; i < boundary->
surf->
n; i++) {
245 for (p = weight_list[i].
next; p; p = p->
next) {
246 weight_info->
id[
n] = p->id;
247 weight_info->
weight[
n] = p->weight;
255 for (i = 0; i < boundary->
surf->
n; i++) {
256 free_link_list(weight_list[i].
next);
263 for (i = 0; i < boundary->
surf->
n; i++) {
264 free_link_list(weight_list[i].
next);
280 "HECMW_couple_n2s_average(): 'mesh' is NULL");
283 if (boundary ==
NULL) {
285 "HECMW_couple_n2s_average(): 'boundary' is NULL");
292 weight_info_list->
info = weight_info;
297 return weight_info_list;