Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.3 KiB

2 years ago
/*
* Copyright(C) 1999-2020 National Technology & Engineering Solutions
* of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
* NTESS, the U.S. Government retains certain rights in this software.
*
* See packages/seacas/LICENSE for details
*/
#include "refine_map.h" // for refine_edata
#include <stdio.h> // for NULL
struct refine_edata *
find_edge_mesh(int vertex, /* vertex in comm_graph */
int dim, /* direction of edge from node */
struct refine_edata *edata, /* data structure for edge preferences */
int * mesh_dims, /* dimensions of mesh */
int * vtx2node /* maps comm_graph vtxs to processors */
)
{
struct refine_edata *eguy; /* returned pointer to edge info */
int dir; /* higher or lower direction? */
int my_node; /* processor vertex assigned to */
int my_loc[3]; /* location of my processor */
int index = 0; /* computed index into edata */
if (dim < 0) {
dir = -1;
dim = -(dim + 1);
}
else {
dir = 1;
}
my_node = vtx2node[vertex];
my_loc[0] = my_node % mesh_dims[0];
my_loc[1] = (my_node / mesh_dims[0]) % mesh_dims[1];
my_loc[2] = my_node / (mesh_dims[0] * mesh_dims[1]);
if ((my_loc[dim] == 0 && dir == -1) || (my_loc[dim] == mesh_dims[dim] - 1 && dir == 1)) {
eguy = NULL;
}
else { /* Figure out where edge is in data structure. */
/* Note: indexing must match with that in init_mesh_edata. */
if (dir < 0) {
--my_loc[dim];
}
if (dim == 0) { /* Edge in x-direction. */
index = (mesh_dims[0] - 1) * mesh_dims[1] * my_loc[2] + (mesh_dims[0] - 1) * my_loc[1] +
my_loc[0];
}
else if (dim == 1) { /* Edge in y-direction. */
index = (mesh_dims[0] - 1) * mesh_dims[1] * mesh_dims[2] +
mesh_dims[0] * (mesh_dims[1] - 1) * my_loc[2] + mesh_dims[0] * my_loc[1] + my_loc[0];
}
else if (dim == 2) { /* Edge in z-direction. */
index = (mesh_dims[0] - 1) * mesh_dims[1] * mesh_dims[2] +
mesh_dims[0] * (mesh_dims[1] - 1) * mesh_dims[2] +
mesh_dims[0] * mesh_dims[1] * my_loc[2] + mesh_dims[0] * my_loc[1] + my_loc[0];
}
eguy = &(edata[index]);
}
return (eguy);
}