function [xg,yg,wg]=GetGaussPointsTriangle(nb_gauss_point,nb_sub_cell,xn,yn,xpix,ypix)
if nargin==1, nb_sub_cell=1;end
check=0;
checkc=0;
switch nb_gauss_point
case 1
xg=1/3;
yg=1/3;
wg=0.5;
case 3
% xg=[1/6;2/3;1/6];
% yg=[1/6;1/6;2/3];
% wg=[1/6;1/6;1/6];
xg=[4/9;1/9;4/9];
yg=[1/9;4/9;4/9];
wg=[1/6;1/6;1/6];
case 4
xg=[1/3;3/5;1/5;1/5];
yg=[1/3;1/5;1/5;3/5];
wg=0.5*[-27;25;25;25]/48;
case 6
xg=[0.816847572980459;0.091576213509771;0.091576213509771;...
0.108103018168070;0.445948490915965;0.445948490915965];
yg=[0.091576213509771;0.81684757298045;0.091576213509771;...
0.445948490915965;0.108103018168070;0.445948490915965];
wg=[0.109951743655322;0.109951743655322;0.109951743655322;...
0.223381589678011;0.223381589678011;0.223381589678011];
case 7
xg=[1/3;0.101286507323456;0.797426985353087;0.101286507323456;...
0.470142064105115;0.05971587178977;0.470142064105115];
yg=[1/3;0.101286507323456;0.101286507323456;0.797426985353087;...
0.470142064105115;0.470142064105115;0.05971587178977];
wg=[0.225;0.125939180544827;0.125939180544827;0.125939180544827;...
0.132394152788506;0.132394152788506;0.132394152788506];
case 25
xg = [0.901149142011736; 0.90114914201174; 0.901149142011744;...
0.901149142011749; 0.901149142011753; 0.695464273353636;...
0.695464273353636; 0.695464273353636; 0.695464273353636;...
0.695464273353636; 0.437974810247386; 0.437974810247386;...
0.437974810247386; 0.437974810247386; 0.437974810247386;...
0.198013417873608; 0.198013417873608; 0.198013417873608;...
0.198013417873608; 0.198013417873608; 0.0398098570514688;...
0.0398098570514688; 0.0398098570514688; 0.0398098570514688;...
0.0398098570514688];
yg=[0.0942137566254872; 0.0760395056462766; 0.0494254289941278;...
0.0228113523419814; 0.0046371013627763; 0.290249932250793;...
0.234259434638082; 0.152267863323182; 0.0702762920082818;...
0.0142857943955714; 0.535660544808143; 0.43232925297036;...
0.281012594876307; 0.129695936782254; 0.026364644944471;...
0.764365329781281; 0.616915871859002; 0.400993291063196;...
0.185070710267389; 0.0376212523451112; 0.915147549378727;...
0.738611533396152; 0.480095071474266; 0.221578609552379;...
0.0450425935698038];
wg=[0.00186555216687784; 0.00376870169532762; 0.00447940679728136;...
0.00376870169532763; 0.00186555216687784; 0.00875549029740564;...
0.0176874341619083; 0.0210229461539887; 0.0176874341619083;...
0.00875549029740564; 0.0173415064313657; 0.0350325045033717;...
0.041638965215195; 0.0350325045033717; 0.0173415064313657;...
0.0198040831320473; 0.0400072873861604; 0.047551897057954;...
0.0400072873861604; 0.0198040831320473; 0.0114650803515925;...
0.0231612219294984; 0.0275289856644698; 0.0231612219294984;...
0.0114650803515925];
case 64
xg=[ 0.0437477449052308; 0.040096165612103; 0.0340452726889076;...
0.0264106844609911; 0.0182232708290089; 0.0105886826010924;...
0.00453778967789697; 0.000886210384769243 ;0.141499854648192;...
0.129689007247184; 0.110117702006681; 0.0854240148945977;...
0.0589422421454023; 0.0342485550333193 ;0.0146772497928165;...
0.00286640239180814; 0.281129831007309; 0.257664213023785;...
0.218780231492251; 0.169719176963063; 0.117105580176937;...
0.0680445256477486; 0.0291605441162146; 0.00569492613269103;...
0.445782964193849; 0.408573918452048; 0.34691622640038;...
0.269120916538976; 0.185692398661024; 0.10789708879962;...
0.046239396747952; 0.00903035100615137; 0.615597503483869;...
0.564214212722428; 0.479068919280755; 0.371638617138008;...
0.256429218281992; 0.148998916139245; 0.0638536226975722;...
0.0124703319361313; 0.77009155908512; 0.705812808327583;...
0.599298939437314; 0.464907281898271; 0.320784238701729;...
0.186392581162686; 0.0798787122724174; 0.0155999615148796;...
0.890634557137324; 0.816294206254511; 0.693107643138862;...
0.537679560616527; 0.370996831483473; 0.215568748961138;...
0.0923821858454892; 0.0180418349626766; 0.962718034591012;...
0.882360949949312; 0.749204286556524; 0.58119663748539;...
0.40102344736461; 0.233015798293476; 0.0998591349006886;...
0.0195020502589878];
yg=[0.000886210384769242; 0.00453778967789696; 0.0105886826010924;...
0.0182232708290089; 0.0264106844609911; 0.0340452726889076;...
0.040096165612103; 0.0437477449052308; 0.00286640239180814;...
0.0146772497928165; 0.0342485550333193; 0.0589422421454022;...
0.0854240148945977; 0.110117702006681; 0.129689007247184;...
0.141499854648192; 0.00569492613269102; 0.0291605441162146;...
0.0680445256477485; 0.117105580176937; 0.169719176963063;...
0.218780231492251; 0.257664213023785; 0.281129831007309;...
0.00903035100615137; 0.0462393967479519; 0.10789708879962;...
0.185692398661024; 0.269120916538976; 0.34691622640038;...
0.408573918452048; 0.445782964193849; 0.0124703319361313;...
0.0638536226975721; 0.148998916139245; 0.256429218281992;...
0.371638617138008; 0.479068919280755; 0.564214212722428;...
0.615597503483869; 0.0155999615148796; 0.0798787122724173;...
0.186392581162686; 0.320784238701729; 0.464907281898271;...
0.599298939437314; 0.705812808327583; 0.77009155908512;...
0.0180418349626766; 0.0923821858454891; 0.215568748961138;...
0.370996831483473; 0.537679560616527; 0.693107643138862;...
0.816294206254511; 0.890634557137324; 0.0195020502589878;...
0.0998591349006885; 0.233015798293476; 0.40102344736461;...
0.58119663748539; 0.749204286556524; 0.882360949949311;...
0.962718034591012];
wg=[0.000164593267409927; 0.000361582044123685; 0.000510073579556436;...
0.000589708308909951; 0.000589708308909951; 0.000510073579556436;...
0.000361582044123685; 0.000164593267409927; 0.000903105459629159;...
0.00198396157564994; 0.00279871857311596; 0.00323566572160493;...
0.00323566572160493; 0.00279871857311596; 0.00198396157564994;...
0.000903105459629159; 0.00229987790127213; 0.00505242143778423;...
0.00712730825570734; 0.0082400521552363; 0.0082400521552363;...
0.00712730825570734; 0.00505242143778423; 0.00229987790127213;...
0.00400862976516747; 0.00880624443170194; 0.0124227203555236;...
0.014362205192607; 0.014362205192607; 0.0124227203555236;...
0.00880624443170194; 0.00400862976516747; 0.00536750948623512;...
0.0117914607470093; 0.0166338807171766; 0.019230828769579;...
0.019230828769579; 0.0166338807171766; 0.0117914607470093;...
0.00536750948623512; 0.00569439870167965; 0.012509578034444;...
0.0176469084968908; 0.0204020145019856; 0.0204020145019856;...
0.0176469084968908; 0.012509578034444; 0.00569439870167965;...
0.00461192269516996; 0.0101315713680242; 0.0142923216409824;...
0.0165236961158234; 0.0165236961158234; 0.0142923216409824;...
0.0101315713680242; 0.00461192269516996; 0.00225490635772972;...
0.00495362697980094; 0.00698794170351584; 0.0080789271389535;...
0.0080789271389535; 0.00698794170351584; 0.00495362697980094;...
0.00225490635772972];
case 13
xg=[0.0651301029022; 0.8697397941956; 0.0651301029022;...
0.3128654960049; 0.6384441885698; 0.0486903154253;...
0.6384441885698; 0.3128654960049; 0.0486903154253;...
0.2603459660790; 0.4793080678419; 0.2603459660790;...
0.3333333333333];
yg= [0.0651301029022; 0.0651301029022; 0.8697397941956;...
0.0486903154253; 0.3128654960049; 0.6384441885698;...
0.0486903154253; 0.6384441885698; 0.3128654960049;...
0.2603459660790; 0.2603459660790; 0.4793080678419;...
0.3333333333333];
wg= [0.0266736178044; 0.0266736178044; 0.0266736178044; ...
0.0385568804452; 0.0385568804452; 0.0385568804452;...
0.0385568804452; 0.0385568804452; 0.0385568804452;...
0.0878076287166; 0.0878076287166; 0.0878076287166;...
-0.0747850222339];
case 0
xg=0*xpix;yg=0*ypix;
res=1;
while res>1.e-6
N=[1-xg-yg,xg,yg];
N_r=[-1+0*xg,1+0*xg,0*yg];
N_s=[-1+0*yg,0*xg,1+0*yg];
dxdr=N_r*xn;
dydr=N_r*yn;
dxds=N_s*xn;
dyds=N_s*yn;
detJ=(dxdr.*dyds-dydr.*dxds);
invJ=[dyds./detJ,-dxds./detJ,-dydr./detJ,dxdr./detJ];
xp=N*xn;
yp=N*yn;
dxg=invJ(:,1).*(xpix-xp)+invJ(:,2).*(ypix-yp);
dyg=invJ(:,3).*(xpix-xp)+invJ(:,4).*(ypix-yp);
res=dxg'*dxg+dyg'*dyg;
if check
figure
subplot(1,2,1)
scatter(xg,yg,50+0*yg)
hold on
triplot([1,2,3],[0,1,0],[0,0,1],'Color','red','LineWidth',2);
% figure
subplot(1,2,2)
scatter(xp,yp,50+0*yg,'o')
hold on
scatter(xpix,ypix,50+0*yg,'x')
triplot([1,2,3],xn,yn,'Color','red','LineWidth',2);
pause
end
xg=xg+dxg;
yg=yg+dyg;
end
wg=~(xg<0|yg<0|1-xg-yg<0);
% ind=find(wg);
% xg=xg(ind);yg=yg(ind);wg=wg(ind);
end
if prod(nb_sub_cell)>1&&nb_gauss_point>0
dx=2/nb_sub_cell(1);
dy=2/nb_sub_cell(2);
xc=(-1+dx/2):dx:(1-dx/2);
yc=(-1+dy/2):dy:(1-dy/2);
[yc,xc]=meshgrid(yc,xc);
xgo=repmat(0,4*length(xg),1);
ygo=repmat(0,4*length(xg),1);
wgo=repmat(2*wg,4,1);
for ia=0:3
alph=ia*pi/2+pi/4;
xgo(ia*length(xg)+(1:length(xg)))=xg*cos(alph)-yg*sin(alph);
ygo(ia*length(xg)+(1:length(xg)))=xg*sin(alph)+yg*cos(alph);
end
xg=repmat(xc(:)',numel(xgo),1)+repmat(dx*xgo/2,1,numel(xc));
yg=repmat(yc(:)',numel(ygo),1)+repmat(dy*ygo/2,1,numel(yc));
xg=xg(:);
yg=yg(:);
wg=repmat(wgo/numel(xc),numel(xc),1);
found=find(yg<-xg);
xg=(xg(found)+1)/2;
yg=(yg(found)+1)/2;
wg=wg(found)/4;
if checkc
found=find(yc<=-xc);
xc=(xc(found)+1)/2;
yc=(yc(found)+1)/2;
figure
plot(xg,yg,'rx')
hold on
plot(xc,yc,'bo')
rect1=line([0,1,0,0],[0,0,1,0]);
set(rect1,...
'Color','red',...
'LineStyle','-',...
'LineWidth',2)
title(sprintf('Gauss point and sub cell centers, S=%g',sum(wg)))
end
end
end