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