/* triquad_int.c compute integration points for order 1..6 */ /* Gauss Legendre over triangle */ /* 1 <= n <=8 at this time */ /* nn returned is n*n */ /* integral = sum i=0 to nn-1 W[i]*f(X[i],Y[i]) */ /* table for right regular triangle 0,0 0,1 1,0 */ /* T[] is target x1, y1, x2, y2, x3, y3 */ /* X[] and Y[] returned in T[] coordinates */ #include "triquad_int.h" int tquad_int(int n, double T[], double X[], double Y[], double W[]) { return triquad_int(n, T[0], T[1], T[2], T[3], T[4], T[5], X, Y, W); } #undef abs #define abs(a) ((a)<0.0?(-(a)):(a)) /* data for vert = [0 0; 0 1; 1 0] nth order */ static double tq1[1][3] = { {0.333333333333333, 0.333333333333333, 1.000000000000000}}; static double tq2[4][3] = { {0.280019915499074, 0.075031110222608, 0.181958618256023}, {0.075031110222608, 0.280019915499074, 0.181958618256023}, {0.666390246014701, 0.178558728263616, 0.318041381743977}, {0.178558728263616, 0.666390246014701, 0.318041381743977}}; static double tq3[9][3] = { {0.188409405952072, 0.023931132287081, 0.038792766611919}, {0.106170269119576, 0.106170269119576, 0.062068426579070}, {0.023931132287081, 0.188409405952072, 0.038792766611919}, {0.523979067720101, 0.066554067839164, 0.127356170199770}, {0.295266567779633, 0.295266567779633, 0.203769872319632}, {0.066554067839165, 0.523979067720101, 0.127356170199770}, {0.808694385677670, 0.102717654809626, 0.111628840966088}, {0.455706020243648, 0.455706020243648, 0.178606145545742}, {0.102717654809626, 0.808694385677670, 0.111628840966088}}; static double tq4[16][3] = { {0.130056079216834, 0.009703785126946, 0.010846451821050}, {0.093637784437329, 0.046122079906452, 0.020334519128958}, {0.046122079906452, 0.093637784437329, 0.020334519128958}, {0.009703785126946, 0.130056079216834, 0.010846451821050}, {0.387497483406694, 0.028912084224389, 0.045168098564740}, {0.278990463496509, 0.137419104134574, 0.084679449043493}, {0.137419104134574, 0.278990463496509, 0.084679449043493}, {0.028912084224389, 0.387497483406694, 0.045168098564740}, {0.672946863150506, 0.050210123211370, 0.070776135796172}, {0.484508326630433, 0.238648659731443, 0.132688432214099}, {0.238648659731443, 0.484508326630433, 0.132688432214099}, {0.050210123211370, 0.672946863150506, 0.070776135796172}, {0.877428809330468, 0.065466994555014, 0.047136736386764}, {0.631731251641125, 0.311164552244357, 0.088370177044723}, {0.311164552244357, 0.631731251641125, 0.088370177044723}, {0.065466994555014, 0.877428809330468, 0.047136736386764}}; static double tq5[25][3] = { {0.093912797333780, 0.004622288465046, 0.003731104333756}, {0.075796602735062, 0.022738483063764, 0.007537403390655}, {0.049267542899413, 0.049267542899413, 0.008958813594563}, {0.022738483063764, 0.075796602735062, 0.007537403390655}, {0.004622288465046, 0.093912797333780, 0.003731104333756}, {0.290249932250793, 0.014285794395571, 0.017510998364328}, {0.234259434638082, 0.070276292008282, 0.035374904220967}, {0.152267863323182, 0.152267863323182, 0.042045934974644}, {0.070276292008282, 0.234259434638082, 0.035374904220967}, {0.014285794395571, 0.290249932250793, 0.017510998364328}, {0.535660544808143, 0.026364644944471, 0.034683012862731}, {0.432329252970360, 0.129695936782254, 0.070065009006743}, {0.281012594876307, 0.281012594876307, 0.083277930430390}, {0.129695936782254, 0.432329252970360, 0.070065009006743}, {0.026364644944471, 0.535660544808143, 0.034683012862731}, {0.764365329781281, 0.037621252345111, 0.039608166264095}, {0.616915871859003, 0.185070710267389, 0.080014574772321}, {0.400993291063196, 0.400993291063196, 0.095103794115908}, {0.185070710267390, 0.616915871859003, 0.080014574772321}, {0.037621252345111, 0.764365329781281, 0.039608166264095}, {0.915147549378727, 0.045042593569804, 0.022930160703185}, {0.738611533396152, 0.221578609552379, 0.046322443858997}, {0.480095071474266, 0.480095071474266, 0.055057971328939}, {0.221578609552379, 0.738611533396152, 0.046322443858997}, {0.045042593569804, 0.915147549378727, 0.022930160703185}}; static double tq6[36][3] = { {0.070587631527589, 0.002466697152670, 0.001497085122473}, {0.060679268262819, 0.012375060417440, 0.003152443508047}, {0.045243246564898, 0.027811082115361, 0.004088773183090}, {0.027811082115361, 0.045243246564898, 0.004088773183090}, {0.012375060417440, 0.060679268262819, 0.003152443508047}, {0.002466697152670, 0.070587631527589, 0.001497085122473}, {0.222974263268659, 0.007791874701286, 0.007530596425383}, {0.191675437237121, 0.039090700732824, 0.015857334667593}, {0.142915682993948, 0.087850454975997, 0.020567234457533}, {0.087850454975997, 0.142915682993948, 0.020567234457533}, {0.039090700732824, 0.191675437237121, 0.015857334667593}, {0.007791874701286, 0.222974263268659, 0.007530596425383}, {0.426426917861779, 0.014901563366671, 0.016903071593886}, {0.366569507765801, 0.074758973462649, 0.035593151994053}, {0.273318962107258, 0.168009519121192, 0.046164927302717}, {0.168009519121192, 0.273318962107258, 0.046164927302717}, {0.074758973462649, 0.366569507765801, 0.035593151994053}, {0.014901563366671, 0.426426917861779, 0.016903071593886}, {0.640628436740815, 0.022386872978031, 0.024121212808530}, {0.550703627937892, 0.112311681780954, 0.050792543178095}, {0.410611741642328, 0.252403568076518, 0.065878797801573}, {0.252403568076518, 0.410611741642328, 0.065878797801573}, {0.112311681780954, 0.550703627937892, 0.050792543178095}, {0.022386872978031, 0.640628436740815, 0.024121212808530}, {0.823156067318957, 0.028765333012559, 0.023221749533995}, {0.707609913381099, 0.144311486950417, 0.048898524516116}, {0.527603095742740, 0.324318304588776, 0.063422223181408}, {0.324318304588776, 0.527603095742740, 0.063422223181408}, {0.144311486950417, 0.707609913381099, 0.048898524516116}, {0.028765333012559, 0.823156067318957, 0.023221749533995}, {0.937908206225755, 0.032775366614460, 0.012388530705318}, {0.806254331245388, 0.164429241594828, 0.026086788660166}, {0.601153648467838, 0.369529924372377, 0.033835011360025}, {0.369529924372377, 0.601153648467838, 0.033835011360025}, {0.164429241594828, 0.806254331245388, 0.026086788660166}, {0.032775366614460, 0.937908206225755, 0.012388530705318}}; static double tq7[49][3] = { {0.054830900955589, 0.001431659581333, 0.000675181513423}, {0.048991501878362, 0.007271058658560, 0.001458485221303}, {0.039548223967455, 0.016714336569468, 0.001991000183250}, {0.028131280268461, 0.028131280268461, 0.002179390569663}, {0.016714336569468, 0.039548223967455, 0.001991000183250}, {0.007271058658560, 0.048991501878362, 0.001458485221303}, {0.001431659581333, 0.054830900955589, 0.000675181513423}, {0.175654279195255, 0.004586412541638, 0.003548970142876}, {0.156947392786903, 0.023293298949990, 0.007666265146969}, {0.126695251279609, 0.053545440457283, 0.010465334231375}, {0.090120345868446, 0.090120345868446, 0.011455574401305}, {0.053545440457283, 0.126695251279609, 0.010465334231375}, {0.023293298949990, 0.156947392786903, 0.007666265146969}, {0.004586412541638, 0.175654279195255, 0.003548970142876}, {0.343651813106453, 0.008972904006717, 0.008595820175965}, {0.307053470832875, 0.045571246280295, 0.018568157513777}, {0.247867874404688, 0.104756842708482, 0.025347672004186}, {0.176312358556585, 0.176312358556585, 0.027746093543128}, {0.104756842708482, 0.247867874404688, 0.025347672004186}, {0.045571246280295, 0.307053470832875, 0.018568157513777}, {0.008972904006717, 0.343651813106453, 0.008595820175965}, {0.533230731173959, 0.013922895156596, 0.013871085507468}, {0.476442551784230, 0.070711074546325, 0.029963458438779}, {0.384606636317686, 0.162546990012870, 0.040903569245020}, {0.273576813165278, 0.273576813165278, 0.044773905009214}, {0.162546990012870, 0.384606636317686, 0.040903569245020}, {0.070711074546325, 0.476442551784230, 0.029963458438779}, {0.013922895156596, 0.533230731173959, 0.013871085507468}, {0.715527432866568, 0.018682744348843, 0.016495206027059}, {0.639324960202548, 0.094885217012863, 0.035631920801352}, {0.516092908865112, 0.218117268350298, 0.048641672749794}, {0.367105088607705, 0.367105088607705, 0.053244195442767}, {0.218117268350298, 0.516092908865112, 0.048641672749794}, {0.094885217012863, 0.639324960202548, 0.035631920801352}, {0.018682744348843, 0.715527432866568, 0.016495206027059}, {0.862793031223432, 0.022527915615664, 0.014309287558192}, {0.770907019092335, 0.114413927746761, 0.030910035325468}, {0.622312080263295, 0.263008866575801, 0.042195755636305}, {0.442660473419548, 0.442660473419548, 0.046188359341819}, {0.263008866575801, 0.622312080263295, 0.042195755636305}, {0.114413927746761, 0.770907019092335, 0.030910035325468}, {0.022527915615664, 0.862793031223432, 0.014309287558192}, {0.952646581185227, 0.024874032376061, 0.007246932159451}, {0.851191316541618, 0.126329297019669, 0.015654373296990}, {0.687121307473297, 0.290399306087990, 0.021370021202630}, {0.488760306780644, 0.488760306780644, 0.023392073528839}, {0.290399306087990, 0.687121307473297, 0.021370021202630}, {0.126329297019669, 0.851191316541618, 0.015654373296990}, {0.024874032376061, 0.952646581185227, 0.007246932159451}}; static double tq8[64][3] = { {0.043747744905146, 0.000886210384824, 0.000333567406495}, {0.040096165611934, 0.004537789678036, 0.000732788081649}, {0.034045272688803, 0.010588682601167, 0.001033723454873}, {0.026410684460876, 0.018223270829094, 0.001195112499231}, {0.018223270829094, 0.026410684460876, 0.001195112499231}, {0.010588682601167, 0.034045272688803, 0.001033723454873}, {0.004537789678036, 0.040096165611934, 0.000732788081649}, {0.000886210384824, 0.043747744905146, 0.000333567406495}, {0.141499854650117, 0.002866402392029, 0.001806210919037}, {0.129689007248651, 0.014677249793495, 0.003967923150289}, {0.110117702008052, 0.034248555034093, 0.005597437144935}, {0.085424014895553, 0.058942242146592, 0.006471331441725}, {0.058942242146592, 0.085424014895553, 0.006471331441725}, {0.034248555034093, 0.110117702008052, 0.005597437144935}, {0.014677249793495, 0.129689007248651, 0.003967923150289}, {0.002866402392029, 0.141499854650117, 0.001806210919037}, {0.281129831011298, 0.005694926133132, 0.004599755803491}, {0.257664213026852, 0.029160544117579, 0.010104842876312}, {0.218780231495104, 0.068044525649326, 0.014254616512793}, {0.169719176965060, 0.117105580179370, 0.016480104312102}, {0.117105580179370, 0.169719176965060, 0.016480104312102}, {0.068044525649326, 0.218780231495104, 0.014254616512793}, {0.029160544117579, 0.257664213026852, 0.010104842876312}, {0.005694926133132, 0.281129831011298, 0.004599755803491}, {0.445782964189930, 0.009030351006644, 0.008017259531392}, {0.408573918447520, 0.046239396749053, 0.017612488863395}, {0.346916226396932, 0.107897088799642, 0.024845440711608}, {0.269120916535959, 0.185692398660614, 0.028724410385925}, {0.185692398660614, 0.269120916535959, 0.028724410385925}, {0.107897088799642, 0.346916226396932, 0.024845440711608}, {0.046239396749053, 0.408573918447521, 0.017612488863395}, {0.009030351006644, 0.445782964189930, 0.008017259531392}, {0.615597503479888, 0.012470331936840, 0.010735018973159}, {0.564214212717487, 0.063853622699241, 0.023582921492411}, {0.479068919277106, 0.148998916139621, 0.033267761432852}, {0.371638617134706, 0.256429218282022, 0.038461657537508}, {0.256429218282022, 0.371638617134706, 0.038461657537508}, {0.148998916139621, 0.479068919277106, 0.033267761432852}, {0.063853622699241, 0.564214212717487, 0.023582921492411}, {0.012470331936840, 0.615597503479888, 0.010735018973159}, {0.770091559088435, 0.015599961515934, 0.011388797404617}, {0.705812808329004, 0.079878712275365, 0.025019156068340}, {0.599298939439204, 0.186392581165165, 0.035293816993822}, {0.464907281899148, 0.320784238705222, 0.040804029004109}, {0.320784238705222, 0.464907281899148, 0.040804029004109}, {0.186392581165165, 0.599298939439204, 0.035293816993822}, {0.079878712275365, 0.705812808329004, 0.025019156068340}, {0.015599961515934, 0.770091559088435, 0.011388797404617}, {0.890634557136406, 0.018041834963800, 0.009223845390918}, {0.816294206251800, 0.092382185848406, 0.020263142734638}, {0.693107643137351, 0.215568748962855, 0.028584643280635}, {0.537679560614672, 0.370996831485534, 0.033047392230182}, {0.370996831485534, 0.537679560614672, 0.033047392230182}, {0.215568748962855, 0.693107643137351, 0.028584643280635}, {0.092382185848406, 0.816294206251800, 0.020263142734638}, {0.018041834963800, 0.890634557136406, 0.009223845390918}, {0.962718034592387, 0.019502050260250, 0.004509812716079}, {0.882360949948550, 0.099859134904086, 0.009907253959653}, {0.749204286556732, 0.233015798295905, 0.013975883407426}, {0.581196637484813, 0.401023447367823, 0.016157854278398}, {0.401023447367823, 0.581196637484814, 0.016157854278398}, {0.233015798295905, 0.749204286556732, 0.013975883407426}, {0.099859134904086, 0.882360949948550, 0.009907253959653}, {0.019502050260250, 0.962718034592387, 0.004509812716079}}; int triquad_int(int n, double x1, double y1, double x2, double y2, double x3, double y3, double X[], double Y[], double W[]) { int i, nn; double a, area; typedef double pt[3]; pt *tqd; a = x1*y2 - x2*y1 + x2*y3 - x3*y2 + x3*y1 - x1*y3; area = abs(a)/2.0; nn = n*n; if(n<1 || n>8) return 0; if(n==1) tqd = (pt *)&tq1[0][0]; if(n==2) tqd = (pt *)&tq2[0][0]; if(n==3) tqd = (pt *)&tq3[0][0]; if(n==4) tqd = (pt *)&tq4[0][0]; if(n==5) tqd = (pt *)&tq5[0][0]; if(n==6) tqd = (pt *)&tq6[0][0]; if(n==7) tqd = (pt *)&tq7[0][0]; if(n==8) tqd = (pt *)&tq8[0][0]; for(i=0; i