xref: /phasta/shapeFunction/src/blend.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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