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 return the derivative of the parametric transformation from 11 element to entity coordinate systems. 12 -------------------------------------------------------------------------*/ 13 14 #include <math.h> 15 #include "shapeFuncInternals.h" 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 static int SF_par_TABLE[][3][2] = { 22 {{0,0},{0,0},{0,0}}, 23 {{1,0},{0,1},{0,0}}, 24 {{1,0},{0,0},{0,1}}, 25 {{1,-1},{0,-1},{0,-1}}, 26 {{0,0},{0,0},{0,0}}, 27 {{0,0},{0,0},{0,0}}, 28 {{0,0},{0,0},{0,0}}, 29 {{0,0},{0,0},{0,0}}, 30 {{0,0},{0,0},{0,0}}, 31 {{0,0},{0,0},{0,0}}, 32 {{0,1},{1,0},{0,0}}, 33 {{0,0},{0,0},{0,0}}, 34 {{0,0},{1,0},{0,1}}, 35 {{0,-1},{1,-1},{0,-1}}, 36 {{0,0},{0,0},{0,0}}, 37 {{0,0},{0,0},{0,0}}, 38 {{0,0},{0,0},{0,0}}, 39 {{0,0},{0,0},{0,0}}, 40 {{0,0},{0,0},{0,0}}, 41 {{0,0},{0,0},{0,0}}, 42 {{0,1},{0,0},{1,0}}, 43 {{0,0},{0,1},{1,0}}, 44 {{0,0},{0,0},{0,0}}, 45 {{0,-1},{0,-1},{1,-1}}, 46 {{0,0},{0,0},{0,0}}, 47 {{0,0},{0,0},{0,0}}, 48 {{0,0},{0,0},{0,0}}, 49 {{0,0},{0,0},{0,0}}, 50 {{0,0},{0,0},{0,0}}, 51 {{0,0},{0,0},{0,0}}, 52 {{-1,1},{-1,0},{-1,0}}, 53 {{-1,0},{-1,1},{-1,0}}, 54 {{-1,0},{-1,0},{-1,1}} 55 }; 56 57 int E_parDrv(int i, int j, int type, double drv[][2]) { 58 int ind[2],ii; 59 /* find out type of element */ 60 if( type == Sedge ) 61 return 0; 62 else if( type == Stri ) { 63 drv[0][0] = drv[0][1] = drv[1][0] = drv[1][1] = 0.0; 64 if( i == 0 && j == 1 ) { /* edge +0 , xi = s-r */ 65 drv[0][0] = 1.0; 66 drv[1][1] = 1.0; 67 } else if( i == 1 && j == 0 ) { /* edge -0 , xi = r-s */ 68 drv[0][1] = 1.0; 69 drv[1][0] = 1.0; 70 } else if( i == 1 && j == 2 ) { /* edge +1 , xi = t-s */ 71 drv[0][1] = -1.0; 72 drv[1][0] = 1.0; 73 drv[1][1] = -1.0; 74 } else if( i == 2 && j == 1 ) { /* edge -1 , xi = s-t */ 75 drv[0][0] = -1.0; 76 drv[1][0] = -1.0; 77 drv[1][1] = 1.0; 78 } else if( i == 2 && j == 0 ) { /* edge +2 , xi = r-t */ 79 drv[0][0] = -1.0; 80 drv[0][1] = 1.0; 81 drv[1][0] = -1.0; 82 } else if( i == 0 && j == 2 ) { /* edge -2 , xi = t-r */ 83 drv[0][0] = 1.0; 84 drv[0][1] = -1.0; 85 drv[1][1] = -1.0; 86 } else 87 return 0; 88 return 1; 89 } else if( type == Stet ) { 90 drv[0][0]=drv[0][1]=drv[1][0]=drv[1][1]=drv[2][0]=drv[2][1]=0.0; 91 ind[0] = i; ind[1] = j; 92 for(ii=0; ii<2; ii++) { 93 if(ind[ii] == 0) /* r'= r */ 94 drv[0][ii] = 1.0; 95 else if(ind[ii] == 1) /* r'= s */ 96 drv[1][ii] = 1.0; 97 else if(ind[ii] == 2) /* r'= t */ 98 drv[2][ii] = 1.0; 99 else if(ind[ii] == 3) /* r'= 1-r-s-t */ 100 drv[0][ii]=drv[1][ii]=drv[2][ii]=-1.0; 101 } 102 return 1; 103 } else 104 return 0; 105 } 106 107 int F_parDrv(int i, int j, int k, int type, int (**drv)[2]) { 108 int index = 10*i + j; 109 *drv = SF_par_TABLE[index] ; 110 return 1; 111 } 112 113 #ifdef __cplusplus 114 } 115 #endif 116