#include #include #include "geometry.h" /* ------------------------------------------------------------------ */ static void cross(const double u[3], const double v[3], double w[3]) /* ------------------------------------------------------------------ */ { w[0] = u[1]*v[2]-u[2]*v[1]; w[1] = u[2]*v[0]-u[0]*v[2]; w[2] = u[0]*v[1]-u[1]*v[0]; } /* ------------------------------------------------------------------ */ static double norm(const double w[3]) /* ------------------------------------------------------------------ */ { return sqrt(w[0]*w[0] + w[1]*w[1] + w[2]*w[2]); } /* ------------------------------------------------------------------ */ void compute_face_geometry(int ndims, double *coords, int nfaces, int *nodepos, int *facenodes, double *fnormals, double *fcentroids, double *fareas) /* ------------------------------------------------------------------ */ { /* Assume 3D for now */ int f; double x[3]; double u[3]; double v[3]; double w[3]; int i,k; int node; double cface[3] = {0}; double n[3] = {0}; const double twothirds = 0.666666666666666666666666666667; for (f=0; f0)) { fprintf(stderr, "Internal error in compute_face_geometry."); } /* face normal */ for (i=0; i0))fprintf(stderr, "Internal error in mex_compute_geometry."); volume += tet_volume; /* face centroid of triangle */ for (i=0; i