1*59599516SKenneth E. Jansen /*-------------------------------------------------------------------------
2*59599516SKenneth E. Jansen Scientific Computation Research Center, RPI, Troy NY
3*59599516SKenneth E. Jansen (C) Copyright 1995, RPI-SCOREC
4*59599516SKenneth E. Jansen
5*59599516SKenneth E. Jansen Project : shapeFuntions
6*59599516SKenneth E. Jansen Author(s): Saikat Dey
7*59599516SKenneth E. Jansen Creation : Oct., 95
8*59599516SKenneth E. Jansen Modifi. :
9*59599516SKenneth E. Jansen Function :
10*59599516SKenneth E. Jansen evaluate the blend funtion for a given mesh entity over another
11*59599516SKenneth E. Jansen mesh entity
12*59599516SKenneth E. Jansen -------------------------------------------------------------------------*/
13*59599516SKenneth E. Jansen
14*59599516SKenneth E. Jansen #include <math.h>
15*59599516SKenneth E. Jansen #include "shapeFuncInternals.h"
16*59599516SKenneth E. Jansen
17*59599516SKenneth E. Jansen #ifdef __cplusplus
18*59599516SKenneth E. Jansen extern "C" {
19*59599516SKenneth E. Jansen #endif
20*59599516SKenneth E. Jansen
V_blendOnEntity(int vid,int etype,double * L)21*59599516SKenneth E. Jansen double V_blendOnEntity(int vid, int etype, double *L) {
22*59599516SKenneth E. Jansen /* blend a vertex mode on a mesh entity */
23*59599516SKenneth E. Jansen /* vid = local vertex index
24*59599516SKenneth E. Jansen etype = entity type
25*59599516SKenneth E. Jansen L = par. coords
26*59599516SKenneth E. Jansen */
27*59599516SKenneth E. Jansen if( etype == Sedge )
28*59599516SKenneth E. Jansen return V_blendIndexedOnEdge(vid,L);
29*59599516SKenneth E. Jansen else if(etype == Stri || etype == Stet)
30*59599516SKenneth E. Jansen return V_blendIndexed(vid,L);
31*59599516SKenneth E. Jansen else
32*59599516SKenneth E. Jansen return 0.0e0;
33*59599516SKenneth E. Jansen }
34*59599516SKenneth E. Jansen
V_blendIndexed(int i,double * L)35*59599516SKenneth E. Jansen double V_blendIndexed(int i, double *L) {
36*59599516SKenneth E. Jansen return L[i] ;
37*59599516SKenneth E. Jansen }
38*59599516SKenneth E. Jansen
V_blendIndexedOnEdge(int i,double * L)39*59599516SKenneth E. Jansen double V_blendIndexedOnEdge(int i, double *L) {
40*59599516SKenneth E. Jansen if( i == 0 )
41*59599516SKenneth E. Jansen return 0.5*(1.0-L[0]);
42*59599516SKenneth E. Jansen else
43*59599516SKenneth E. Jansen return 0.5*(1.0+L[0]);
44*59599516SKenneth E. Jansen }
45*59599516SKenneth E. Jansen
E_blendOnFace(int eindex[],int etype,double * L)46*59599516SKenneth E. Jansen double E_blendOnFace(int eindex[], int etype, double *L) {
47*59599516SKenneth E. Jansen /* blend a vertex mode on a mesh face */
48*59599516SKenneth E. Jansen /* vid = local vertex index
49*59599516SKenneth E. Jansen etype = entity type
50*59599516SKenneth E. Jansen L = par. coords
51*59599516SKenneth E. Jansen */
52*59599516SKenneth E. Jansen if( etype == Stri)
53*59599516SKenneth E. Jansen return F_edgeBlendTri(eindex, L);
54*59599516SKenneth E. Jansen else if(etype == Squad)
55*59599516SKenneth E. Jansen return F_edgeBlendQuad(eindex, L);
56*59599516SKenneth E. Jansen else
57*59599516SKenneth E. Jansen return 0.0e0;
58*59599516SKenneth E. Jansen }
59*59599516SKenneth E. Jansen
F_edgeBlendTri(int index[2],double * L)60*59599516SKenneth E. Jansen double F_edgeBlendTri(int index[2], double *L) {
61*59599516SKenneth E. Jansen return -2.0*L[index[0]]*L[index[1]];
62*59599516SKenneth E. Jansen }
63*59599516SKenneth E. Jansen
F_edgeBlendQuad(int * index,double * L)64*59599516SKenneth E. Jansen double F_edgeBlendQuad(int *index, double *L) {
65*59599516SKenneth E. Jansen return 0.0;
66*59599516SKenneth E. Jansen }
67*59599516SKenneth E. Jansen
E_blendOnRegion(int eindex[],int etype,double * L)68*59599516SKenneth E. Jansen double E_blendOnRegion(int eindex[], int etype, double *L) {
69*59599516SKenneth E. Jansen /* blend a mesh edge mode on a tetra. region */
70*59599516SKenneth E. Jansen if( etype == Stet )
71*59599516SKenneth E. Jansen return R_edgeBlendTet(eindex, L);
72*59599516SKenneth E. Jansen else
73*59599516SKenneth E. Jansen return 0.0;
74*59599516SKenneth E. Jansen }
75*59599516SKenneth E. Jansen
R_edgeBlendTet(int index[2],double * L)76*59599516SKenneth E. Jansen double R_edgeBlendTet(int index[2], double *L) {
77*59599516SKenneth E. Jansen return -2.0*L[index[0]]*L[index[1]];
78*59599516SKenneth E. Jansen }
79*59599516SKenneth E. Jansen
F_blendOnRegion(int index[],int etype,double * L)80*59599516SKenneth E. Jansen double F_blendOnRegion(int index[], int etype, double *L) {
81*59599516SKenneth E. Jansen /* blend a face mode on a tet. region */
82*59599516SKenneth E. Jansen if( etype == Stet ) {
83*59599516SKenneth E. Jansen return L[index[0]]*L[index[1]]*L[index[2]] ;
84*59599516SKenneth E. Jansen } else
85*59599516SKenneth E. Jansen return 0.0;
86*59599516SKenneth E. Jansen }
87*59599516SKenneth E. Jansen
88*59599516SKenneth E. Jansen #ifdef __cplusplus
89*59599516SKenneth E. Jansen }
90*59599516SKenneth E. Jansen #endif
91