Add scripts and inp files.
This commit is contained in:
parent
ad937f2602
commit
e19f869a1e
390 changed files with 6580687 additions and 10 deletions
234
Unpublished/XFEM2/1D_Solver/2DLevelSet.m
Normal file
234
Unpublished/XFEM2/1D_Solver/2DLevelSet.m
Normal file
|
@ -0,0 +1,234 @@
|
|||
function [] = 2DLevelSet()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=8;
|
||||
NumY=8;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
centx=4.;
|
||||
centy=4.;
|
||||
rad=2.1;
|
||||
for i=1:numNodes;
|
||||
dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
lSet(i)=dist-rad;
|
||||
end
|
||||
%for i=1:numNodes;
|
||||
% dist=Node(i,1)-0.1;
|
||||
% lSet(i)=dist;
|
||||
%end
|
||||
% Plot initial level set
|
||||
[X Y]=meshgrid(0:1.:8);
|
||||
Z=zeros(9);
|
||||
for i=1:81
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
lSet'
|
||||
bandwidth=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:100
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,2)))||sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,3)))
|
||||
F(NBelem(i,1))= 1.;
|
||||
F(NBelem(i,2))= 1.;
|
||||
F(NBelem(i,3))= 1.;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h2=0.00001;
|
||||
visc=0.0005;
|
||||
for i=1:NBindex
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h2/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h2/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h2*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h2));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
end
|
||||
lSet'
|
||||
%[X Y]=meshgrid(0:1.:8);
|
||||
%Z=zeros(9);
|
||||
%for i=1:81
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Y,Z)
|
||||
|
||||
|
||||
|
||||
|
234
Unpublished/XFEM2/1D_Solver/2DLevelSetFMM.m
Normal file
234
Unpublished/XFEM2/1D_Solver/2DLevelSetFMM.m
Normal file
|
@ -0,0 +1,234 @@
|
|||
function [] = 2DLevelSetFMM()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=3;
|
||||
NumY=1;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
%centx=4.;
|
||||
%centy=4.;
|
||||
%rad=2.1;
|
||||
%for i=1:numNodes;
|
||||
% dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
% lSet(i)=dist-rad;
|
||||
%end
|
||||
for i=1:numNodes;
|
||||
dist=Node(i,1)-0.1;
|
||||
lSet(i)=dist;
|
||||
end
|
||||
% Plot initial level set
|
||||
%[X Y]=meshgrid(0:1.:8);
|
||||
%Z=zeros(9);
|
||||
%for i=1:81
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
lSet'
|
||||
bandwidth=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,2)))||sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,3)))
|
||||
F(NBelem(i,1))= 1.;
|
||||
F(NBelem(i,2))= 1.;
|
||||
F(NBelem(i,3))= 1.;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h2=0.00001;
|
||||
visc=0.0005;
|
||||
for i=1:NBindex
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h2/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h2/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h2*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h2));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
end
|
||||
lSet'
|
||||
%[X Y]=meshgrid(0:1.:8);
|
||||
%Z=zeros(9);
|
||||
%for i=1:81
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Y,Z)
|
||||
|
||||
|
||||
|
||||
|
322
Unpublished/XFEM2/1D_Solver/F2DLevelSetFMM.asv
Normal file
322
Unpublished/XFEM2/1D_Solver/F2DLevelSetFMM.asv
Normal file
|
@ -0,0 +1,322 @@
|
|||
function [] = F2DLevelSetFMM()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=5;
|
||||
NumY=1;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
%centx=4.;
|
||||
%centy=4.;
|
||||
%rad=2.1;
|
||||
%for i=1:numNodes;
|
||||
% dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
% lSet(i)=dist-rad;
|
||||
%end
|
||||
for i=1:numNodes;
|
||||
dist=Node(i,1)-0.1;
|
||||
lSet(i)=dist;
|
||||
end
|
||||
% Plot initial level set
|
||||
%[X Y]=meshgrid(0:1.:8);
|
||||
%Z=zeros(9);
|
||||
%for i=1:81
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
lSet'
|
||||
bandwidth=3.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBElems=0;
|
||||
NBNodes=0;
|
||||
NGlobal=zeros(NumNodes);
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
for j=1:4
|
||||
if NewNums(Element(i,j))==0
|
||||
NBNodes=NBNodes+1
|
||||
NGlobal(Element(i,j))=NBNodes;
|
||||
NLocal(NBNodes)=Element(i,j);
|
||||
end
|
||||
end
|
||||
NBElems=NBElems+1;
|
||||
NBelem(NBElems,1)=NGlobal(Element(i,1));
|
||||
NBelem(NBElems,2)=NGlobal(Element(i,2));
|
||||
NBelem(NBElems,3)=NGlobal(Element(i,3));
|
||||
NBElems=NBElems+1;
|
||||
NBelem(NBElems,1)=NGlobal(Element(i,1));
|
||||
NBelem(NBElems,2)=NGlobal(Element(i,3));
|
||||
NBelem(NBElems,3)=NGlobal(Element(i,4));
|
||||
end
|
||||
end
|
||||
% Get local Level Set
|
||||
for i=1:NBNodes
|
||||
lSetLocal(i)=lSet(NLocal(i));
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(NBNodes,1);
|
||||
for i=1:NBElems
|
||||
L1=sign(lSetLocal(NBelem(i,1)));
|
||||
L2=sign(lSetLocal(NBelem(i,2)));
|
||||
L3=sign(lSetLocal(NBelem(i,3)));
|
||||
if L1 ~= L2 || L1 ~= L3
|
||||
F(NBelem(i,1))= 1.;
|
||||
F(NBelem(i,2))= 1.;
|
||||
F(NBelem(i,3))= 1.;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(NBNodes);
|
||||
for i=1:NBElems
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NLocal(NBelem(i,1)),1);
|
||||
y1=Node(NLocal(NBelem(i,1)),2);
|
||||
x2=Node(NLocal(NBelem(i,2)),1);
|
||||
y2=Node(NLocal(NBelem(i,2)),2);
|
||||
x3=Node(NLocal(NBelem(i,3)),1);
|
||||
y3=Node(NLocal(NBelem(i,3)),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSetLocal(NBelem(i,1));lSetLocal(NBelem(i,2));lSetLocal(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(NBNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:NBNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:NBNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:NBNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(NBNodes);
|
||||
mMatGLS=zeros(NBNodes);
|
||||
f1=zeros(NBNodes,1);
|
||||
f2=zeros(NBNodes,1);
|
||||
f3=zeros(NBNodes,1);
|
||||
h2=0.00001;
|
||||
visc=0.0005;
|
||||
for i=1:NBElems
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NLocal(NBelem(i,1)),1);
|
||||
y1=Node(NLocal(NBelem(i,1)),2);
|
||||
x2=Node(NLocal(NBelem(i,2)),1);
|
||||
y2=Node(NLocal(NBelem(i,2)),2);
|
||||
x3=Node(NLocal(NBelem(i,3)),1);
|
||||
y3=Node(NLocal(NBelem(i,3)),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSetLocal(NBelem(i,1));lSetLocal(NBelem(i,2));lSetLocal(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h2/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h2/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h2*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h2));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSetLocal=lSetLocal-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
newlSet=lSetLocal;
|
||||
% Reinitialize LS
|
||||
nstat=zeros(NBNodes,1);
|
||||
for i=1:NBelems
|
||||
L1=sign(lSetLocal(NBelem(i,1)));
|
||||
L2=sign(lSetLocal(NBelem(i,2)));
|
||||
L3=sign(lSetLocal(NBelem(i,3)));
|
||||
if L1 ~= L2 || L1 ~= L3
|
||||
for j=1:3
|
||||
nstat(NBelem(i,j))=1;
|
||||
end
|
||||
end
|
||||
end
|
||||
maincheck=0;
|
||||
while(maincheck==0)
|
||||
lmin=1000.;
|
||||
avlmin=1000.;
|
||||
eindex=0;
|
||||
nindex=0;
|
||||
maincheck=1;
|
||||
for i=1:NBindex
|
||||
if nstat(NBelem(i,1))+nstat(NBelem(i,2))+nstat(NBelem(i,3))==2
|
||||
maincheck=0;
|
||||
check=0;
|
||||
ltot=0.;
|
||||
for j=1:3
|
||||
if nstat(NBelem(i,j))==0
|
||||
if abs(lSet(NBelem(i,j)))<=lmin
|
||||
check=1;
|
||||
tempindex=j;
|
||||
end
|
||||
end
|
||||
ltot=ltot+abs(lSet(NBelem(i,j)));
|
||||
end
|
||||
if check==1 & ltot/3.<=avlmin
|
||||
eindex=i;
|
||||
nindex=tempindex;
|
||||
lmin=lSet(NBelem(eindex,nindex));
|
||||
avlmin=ltot/3.;
|
||||
end
|
||||
end
|
||||
end
|
||||
if maincheck==0
|
||||
% Find New LS for point
|
||||
xp=Node(NBelem(eindex,nindex),1);
|
||||
yp=Node(NBelem(eindex,nindex),2);
|
||||
count=0;
|
||||
for i=1:3
|
||||
if i~=nindex
|
||||
count=count+1;
|
||||
x(count)=Node(NBelem(eindex,i),1);
|
||||
y(count)=Node(NBelem(eindex,i),2);
|
||||
lloc(count)=newlSet(NBelem(eindex,i));
|
||||
end
|
||||
end
|
||||
delxa=x(1)-xp;
|
||||
delya=y(1)-yp;
|
||||
delxb=x(2)-xp;
|
||||
delyb=y(2)-yp;
|
||||
N=[delxa delya; delxb delyb];
|
||||
M=N^-1;
|
||||
A=(M(1)*M(1)+M(2)*M(2));
|
||||
B=(M(3)*M(3)+M(4)*M(4));
|
||||
C=2.*(M(1)*M(3)+M(2)*M(4));
|
||||
a=A+B+C;
|
||||
b=-2.*lloc(1)*A-2.*lloc(2)*B-C*(lloc(1)+lloc(2));
|
||||
c=lloc(1)*lloc(1)*A+lloc(2)*lloc(2)*B+lloc(1)*lloc(2)*C-1.;
|
||||
templ1=(-b+sqrt(b*b-4.*a*c))/(2.*a);
|
||||
templ2=(-b-sqrt(b*b-4.*a*c))/(2.*a);
|
||||
if abs(templ1)>abs(templ2)
|
||||
newlSet(NBelem(eindex,nindex))=templ1;
|
||||
else
|
||||
newlSet(NBelem(eindex,nindex))=templ2;
|
||||
end
|
||||
nstat(NBelem(eindex,nindex))=1;
|
||||
end
|
||||
end
|
||||
% lSet=newlSet;
|
||||
end
|
||||
lSet'
|
||||
|
||||
|
||||
|
||||
|
331
Unpublished/XFEM2/1D_Solver/F2DLevelSetFMM.m
Normal file
331
Unpublished/XFEM2/1D_Solver/F2DLevelSetFMM.m
Normal file
|
@ -0,0 +1,331 @@
|
|||
function [] = F2DLevelSetFMM()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=32;
|
||||
NumY=32;
|
||||
delX=0.25;
|
||||
delY=0.25;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
centx=4.;
|
||||
centy=4.;
|
||||
rad=2.1;
|
||||
for i=1:numNodes;
|
||||
dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
lSet(i)=dist-rad;
|
||||
end
|
||||
%for i=1:numNodes;
|
||||
% dist=Node(i,1)-0.1;
|
||||
% lSet(i)=dist;
|
||||
%end
|
||||
% Plot initial level set
|
||||
[X Y]=meshgrid(0:0.25:8);
|
||||
Z=zeros(33);
|
||||
for i=1:1089
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
lSet'
|
||||
bandwidth=10;
|
||||
% Loop through timesteps
|
||||
for tstep=1:10
|
||||
% Identify Narrow Band Elements
|
||||
NBElems=0;
|
||||
NBNodes=0;
|
||||
NGlobal=zeros(numNodes);
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
for j=1:4
|
||||
if NGlobal(Element(i,j))==0
|
||||
NBNodes=NBNodes+1;
|
||||
NGlobal(Element(i,j))=NBNodes;
|
||||
NLocal(NBNodes)=Element(i,j);
|
||||
end
|
||||
end
|
||||
NBElems=NBElems+1;
|
||||
NBelem(NBElems,1)=NGlobal(Element(i,1));
|
||||
NBelem(NBElems,2)=NGlobal(Element(i,2));
|
||||
NBelem(NBElems,3)=NGlobal(Element(i,3));
|
||||
NBElems=NBElems+1;
|
||||
NBelem(NBElems,1)=NGlobal(Element(i,1));
|
||||
NBelem(NBElems,2)=NGlobal(Element(i,3));
|
||||
NBelem(NBElems,3)=NGlobal(Element(i,4));
|
||||
end
|
||||
end
|
||||
% Get local Level Set
|
||||
for i=1:NBNodes
|
||||
lSetLocal(i)=lSet(NLocal(i));
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(NBNodes,1);
|
||||
for i=1:NBElems
|
||||
L1=sign(lSetLocal(NBelem(i,1)));
|
||||
L2=sign(lSetLocal(NBelem(i,2)));
|
||||
L3=sign(lSetLocal(NBelem(i,3)));
|
||||
if L1 ~= L2 || L1 ~= L3
|
||||
F(NBelem(i,1))= 1.;
|
||||
F(NBelem(i,2))= 1.;
|
||||
F(NBelem(i,3))= 1.;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(NBNodes);
|
||||
for i=1:NBElems
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NLocal(NBelem(i,1)),1);
|
||||
y1=Node(NLocal(NBelem(i,1)),2);
|
||||
x2=Node(NLocal(NBelem(i,2)),1);
|
||||
y2=Node(NLocal(NBelem(i,2)),2);
|
||||
x3=Node(NLocal(NBelem(i,3)),1);
|
||||
y3=Node(NLocal(NBelem(i,3)),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSetLocal(NBelem(i,1));lSetLocal(NBelem(i,2));lSetLocal(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(NBNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:NBNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:NBNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:NBNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(NBNodes);
|
||||
mMatGLS=zeros(NBNodes);
|
||||
f1=zeros(NBNodes,1);
|
||||
f2=zeros(NBNodes,1);
|
||||
f3=zeros(NBNodes,1);
|
||||
h2=0.00001;
|
||||
visc=0.0005;
|
||||
for i=1:NBElems
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NLocal(NBelem(i,1)),1);
|
||||
y1=Node(NLocal(NBelem(i,1)),2);
|
||||
x2=Node(NLocal(NBelem(i,2)),1);
|
||||
y2=Node(NLocal(NBelem(i,2)),2);
|
||||
x3=Node(NLocal(NBelem(i,3)),1);
|
||||
y3=Node(NLocal(NBelem(i,3)),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSetLocal(NBelem(i,1));lSetLocal(NBelem(i,2));lSetLocal(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h2/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h2/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h2*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h2));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSetLocal=lSetLocal-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
newlSet=lSetLocal;
|
||||
% Reinitialize LS
|
||||
nstat=zeros(NBNodes,1);
|
||||
for i=1:NBElems
|
||||
L1=sign(lSetLocal(NBelem(i,1)));
|
||||
L2=sign(lSetLocal(NBelem(i,2)));
|
||||
L3=sign(lSetLocal(NBelem(i,3)));
|
||||
if L1 ~= L2 || L1 ~= L3
|
||||
for j=1:3
|
||||
nstat(NBelem(i,j))=1;
|
||||
end
|
||||
end
|
||||
end
|
||||
maincheck=0;
|
||||
while(maincheck==0)
|
||||
lmin=1000.;
|
||||
avlmin=1000.;
|
||||
eindex=0;
|
||||
nindex=0;
|
||||
maincheck=1;
|
||||
for i=1:NBElems
|
||||
if nstat(NBelem(i,1))+nstat(NBelem(i,2))+nstat(NBelem(i,3))==2
|
||||
maincheck=0;
|
||||
check=0;
|
||||
ltot=0.;
|
||||
for j=1:3
|
||||
if nstat(NBelem(i,j))==0
|
||||
if abs(lSetLocal(NBelem(i,j)))<=lmin
|
||||
check=1;
|
||||
tempindex=j;
|
||||
end
|
||||
end
|
||||
ltot=ltot+abs(lSetLocal(NBelem(i,j)));
|
||||
end
|
||||
if check==1 & ltot/3.<=avlmin
|
||||
eindex=i;
|
||||
nindex=tempindex;
|
||||
lmin=lSetLocal(NBelem(eindex,nindex));
|
||||
avlmin=ltot/3.;
|
||||
end
|
||||
end
|
||||
end
|
||||
if maincheck==0
|
||||
% Find New LS for point
|
||||
xp=Node(NLocal(NBelem(eindex,nindex)),1);
|
||||
yp=Node(NLocal(NBelem(eindex,nindex)),2);
|
||||
count=0;
|
||||
for i=1:3
|
||||
if i~=nindex
|
||||
count=count+1;
|
||||
x(count)=Node(NLocal(NBelem(eindex,i)),1);
|
||||
y(count)=Node(NLocal(NBelem(eindex,i)),2);
|
||||
lloc(count)=newlSet(NBelem(eindex,i));
|
||||
end
|
||||
end
|
||||
delxa=x(1)-xp;
|
||||
delya=y(1)-yp;
|
||||
delxb=x(2)-xp;
|
||||
delyb=y(2)-yp;
|
||||
N=[delxa delya; delxb delyb];
|
||||
M=N^-1;
|
||||
A=(M(1)*M(1)+M(2)*M(2));
|
||||
B=(M(3)*M(3)+M(4)*M(4));
|
||||
C=2.*(M(1)*M(3)+M(2)*M(4));
|
||||
a=A+B+C;
|
||||
b=-2.*lloc(1)*A-2.*lloc(2)*B-C*(lloc(1)+lloc(2));
|
||||
c=lloc(1)*lloc(1)*A+lloc(2)*lloc(2)*B+lloc(1)*lloc(2)*C-1.;
|
||||
templ1=(-b+sqrt(b*b-4.*a*c))/(2.*a);
|
||||
templ2=(-b-sqrt(b*b-4.*a*c))/(2.*a);
|
||||
if abs(templ1)>abs(templ2)
|
||||
newlSet(NBelem(eindex,nindex))=templ1;
|
||||
else
|
||||
newlSet(NBelem(eindex,nindex))=templ2;
|
||||
end
|
||||
nstat(NBelem(eindex,nindex))=1;
|
||||
end
|
||||
end
|
||||
% lSetLocal=newlSet;
|
||||
% Update Global Level Set
|
||||
for i=1:NBNodes
|
||||
lSet(NLocal(i))=lSetLocal(i);
|
||||
end
|
||||
end
|
||||
lSet'
|
||||
[X Y]=meshgrid(0:0.25:8);
|
||||
Z=zeros(33);
|
||||
for i=1:1089
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
|
||||
|
||||
|
221
Unpublished/XFEM2/1D_Solver/FESolveX.m
Normal file
221
Unpublished/XFEM2/1D_Solver/FESolveX.m
Normal file
|
@ -0,0 +1,221 @@
|
|||
function [] = FESolveX()
|
||||
% MATLAB based XFEM Solver
|
||||
% J. Grogan (2012)
|
||||
clear all
|
||||
% Define Geometry
|
||||
len=10.;
|
||||
% Define Section Properties
|
||||
rho=1.;
|
||||
% Generate Mesh
|
||||
numElem=10;
|
||||
charlen=len/numElem;
|
||||
ndCoords=linspace(0,len,numElem+1);
|
||||
numNodes=size(ndCoords,2);
|
||||
indx=1:numElem;
|
||||
elemNodes(:,1)=indx;
|
||||
elemNodes(:,2)=indx+1;
|
||||
% dofs per node
|
||||
ndof=2;
|
||||
% initial interface position
|
||||
dpos=5.;
|
||||
% Initial temperatures
|
||||
Tnew=zeros(numNodes*2,1);
|
||||
%storage
|
||||
stored(1)=dpos;
|
||||
for e=1:numElem
|
||||
crdn1=ndCoords(elemNodes(e,1));
|
||||
if crdn1<=dpos
|
||||
Tnew(2*elemNodes(e,1)-1)=1.;
|
||||
end
|
||||
end
|
||||
% Define Time Step
|
||||
dtime=0.05;
|
||||
tsteps=20;
|
||||
time=0.;
|
||||
% penalty term
|
||||
beta=40.;
|
||||
% Loop through time steps
|
||||
for ts=1:tsteps
|
||||
% Get interface velocity
|
||||
d(1)=dpos+charlen;
|
||||
d(2)=dpos+3*charlen/4;
|
||||
d(3)=dpos+charlen/4;
|
||||
d(4)=dpos;
|
||||
for e=1:numElem
|
||||
crdn1=ndCoords(elemNodes(e,1));
|
||||
crdn2=ndCoords(elemNodes(e,2));
|
||||
for j=1:4
|
||||
if d(j)>=crdn1 & d(j)<crdn2
|
||||
elen=abs(crdn2-crdn1);
|
||||
ajacob=elen/2.;
|
||||
point=(d(j)-crdn1)/ajacob-1.;
|
||||
theta(1)=abs(crdn1-dpos)*sign(crdn1-dpos);
|
||||
theta(2)=abs(crdn2-dpos)*sign(crdn2-dpos);
|
||||
tmp1a=Tnew(elemNodes(e,1)*2-1);
|
||||
tmp1b=Tnew(elemNodes(e,1)*2);
|
||||
tmp2a=Tnew(elemNodes(e,2)*2-1);
|
||||
tmp2b=Tnew(elemNodes(e,2)*2);
|
||||
xi=point;
|
||||
gm(1)=(1.-xi)/2.;
|
||||
gm(3)=(1.+xi)/2.;
|
||||
term=theta(1)*gm(1)+theta(2)*gm(3);
|
||||
gm(2)=gm(1)*(abs(term)-abs(theta(1)));
|
||||
gm(4)=gm(3)*(abs(term)-abs(theta(2)));
|
||||
t(j)=gm(1)*tmp1a+gm(2)*tmp1b+gm(3)*tmp2a+gm(4)*tmp2b;
|
||||
end
|
||||
end
|
||||
end
|
||||
vel=(0.5/charlen)*(2*t(1)+t(2)-t(3)-2*t(4));
|
||||
% Update interface position
|
||||
dpos=dpos+vel*dtime;
|
||||
stored(ts+1)=dpos;
|
||||
K=zeros(numNodes*ndof,numNodes*ndof);
|
||||
M=zeros(numNodes*ndof,numNodes*ndof);
|
||||
pforce=zeros(numNodes*ndof,1);
|
||||
% Loop Through Elements
|
||||
for e=1:numElem
|
||||
Ke=zeros(2*ndof);
|
||||
Me=zeros(2*ndof);
|
||||
crdn1=ndCoords(elemNodes(e,1));
|
||||
crdn2=ndCoords(elemNodes(e,2));
|
||||
theta(1)=abs(crdn1-dpos)*sign(crdn1-dpos);
|
||||
theta(2)=abs(crdn2-dpos)*sign(crdn2-dpos);
|
||||
enr=2;
|
||||
elen=abs(crdn2-crdn1);
|
||||
ajacob=elen/2.;
|
||||
if sign(theta(1))~=sign(theta(2))
|
||||
% enriched element
|
||||
enr=4;
|
||||
% get interface position on element
|
||||
point=(dpos-crdn1)/ajacob-1.;
|
||||
% devide element for sub integration
|
||||
len1=abs(-point-1.);
|
||||
len2=abs(1.-point);
|
||||
mid1=-1+len1/2.;
|
||||
mid2=1-len2/2.;
|
||||
gpx(1)=-(len1/2.)/sqrt(3.)+mid1;
|
||||
gpx(2)=(len1/2.)/sqrt(3.)+mid1;
|
||||
gpx(3)=-(len2/2.)/sqrt(3.)+mid2;
|
||||
gpx(4)=(len2/2.)/sqrt(3.)+mid2;
|
||||
w(1)=(len1/2.);
|
||||
w(2)=(len1/2.);
|
||||
w(3)=(len2/2.);
|
||||
w(4)=(len2/2.);
|
||||
fdofs(1)=2*elemNodes(e,1);
|
||||
fdofs(2)=2*elemNodes(e,2);
|
||||
else
|
||||
% regular element - fix extra dofs
|
||||
gpx(1)=-1/sqrt(3.);
|
||||
gpx(2)=1/sqrt(3.);
|
||||
w(1)=1.;
|
||||
w(2)=1.;
|
||||
end
|
||||
% Loop Through Int Points
|
||||
for i=1:enr;
|
||||
c=gpx(i);
|
||||
phi(1)=(1.-c)/2.;
|
||||
phi(3)=(1.+c)/2.;
|
||||
term=theta(1)*phi(1)+theta(2)*phi(3);
|
||||
if term<0
|
||||
cond=0.;
|
||||
spec=0.01;
|
||||
else
|
||||
cond=1.;
|
||||
spec=1.;
|
||||
end
|
||||
phi(2)=phi(1)*(abs(term)-abs(theta(1)));
|
||||
phi(4)=phi(3)*(abs(term)-abs(theta(2)));
|
||||
phic(1)=-0.5;
|
||||
phic(3)=0.5;
|
||||
dterm=sign(term)*(phic(1)*theta(1)+phic(3)*theta(2));
|
||||
phic(2)=phic(1)*(abs(term)-abs(theta(1)))+phi(1)*dterm;
|
||||
phic(4)=phic(3)*(abs(term)-abs(theta(2)))+phi(3)*dterm;
|
||||
phix(1)=phic(1)/ajacob;
|
||||
phix(2)=phic(2)/ajacob;
|
||||
phix(3)=phic(3)/ajacob;
|
||||
phix(4)=phic(4)/ajacob;
|
||||
we=ajacob*w(i);
|
||||
Ke=Ke+we*cond*phix'*phix;
|
||||
Me=Me+(we*rho*spec*phi'*phi)/dtime;
|
||||
end
|
||||
% Add penalty term and get temp gradient on interface
|
||||
if enr==4;
|
||||
xi=point;
|
||||
gm(1)=(1.-xi)/2.;
|
||||
gm(3)=(1.+xi)/2.;
|
||||
term=theta(1)*gm(1)+theta(2)*gm(3);
|
||||
gm(2)=gm(1)*(abs(term)-abs(theta(1)));
|
||||
gm(4)=gm(3)*(abs(term)-abs(theta(2)));
|
||||
tpos=gm(1)*Tnew(1)+gm(2)*Tnew(2)+gm(3)*Tnew(3)+gm(4)*Tnew(4);
|
||||
pen=beta*(gm'*gm);
|
||||
pfL=beta*1*gm';
|
||||
Ke=Ke+pen;
|
||||
else
|
||||
pen=zeros(4);
|
||||
pfL=zeros(4,1);
|
||||
end
|
||||
% Assemble Global Matrices
|
||||
gnum=2.*elemNodes(e,1)-1.;
|
||||
for i=1:4;
|
||||
for j=1:4;
|
||||
K(gnum+j-1,gnum+i-1)=K(gnum+j-1,gnum+i-1)+Ke(j,i);
|
||||
M(gnum+j-1,gnum+i-1)=M(gnum+j-1,gnum+i-1)+Me(j,i);
|
||||
end
|
||||
pforce(gnum+i-1)=pforce(gnum+i-1)+pfL(i);
|
||||
end
|
||||
end
|
||||
%Remove inactive DOFs(Reduce Matrices)
|
||||
T1=1;
|
||||
RHS=M*Tnew;
|
||||
iindex=0;
|
||||
for i=1:ndof*numNodes;
|
||||
check=1;
|
||||
if i==fdofs(1)|i==fdofs(2)
|
||||
check=0;
|
||||
elseif mod(i,2)~=0 & i~=1
|
||||
check=0;
|
||||
end
|
||||
if check==0
|
||||
jindex=0;
|
||||
iindex=iindex+1;
|
||||
for j=1:ndof*numNodes;
|
||||
check=1;
|
||||
if j==fdofs(1)|j==fdofs(2)
|
||||
check=0;
|
||||
elseif mod(j,2)~=0 & j~=1
|
||||
check=0;
|
||||
end
|
||||
if check==0
|
||||
jindex=jindex+1;
|
||||
Kred(iindex,jindex)=K(i,j);
|
||||
Mred(iindex,jindex)=M(i,j);
|
||||
end
|
||||
end
|
||||
Subr(iindex)=(K(i,1)+M(i,1))*T1;
|
||||
RHSr(iindex)=RHS(i);
|
||||
pforcer(iindex)=pforce(i);
|
||||
end
|
||||
end
|
||||
%Solve
|
||||
Mred+Kred;
|
||||
StiffI=(Mred+Kred)^-1;
|
||||
Tnewr=StiffI*(RHSr'-Subr'+pforcer');
|
||||
iindex=0.;
|
||||
for i=1:ndof*numNodes;
|
||||
check=1;
|
||||
if i==fdofs(1)|i==fdofs(2)
|
||||
check=0;
|
||||
elseif mod(i,2)~=0 & i~=1
|
||||
check=0;
|
||||
end
|
||||
if check==0
|
||||
iindex=iindex+1;
|
||||
Tnew(i)=Tnewr(iindex);
|
||||
else
|
||||
Tnew(i)=0.;
|
||||
end
|
||||
end
|
||||
Tnew(1)=1.;
|
||||
Tnew
|
||||
end
|
||||
stored'
|
128
Unpublished/XFEM2/1D_Solver/GetF.m
Normal file
128
Unpublished/XFEM2/1D_Solver/GetF.m
Normal file
|
@ -0,0 +1,128 @@
|
|||
function [] = GetF()
|
||||
% set up grid
|
||||
gd=0.;
|
||||
numElem=4;
|
||||
eLen=0.25;
|
||||
for i=1:numElem+1
|
||||
ndCrd(i)=gd;
|
||||
gd=gd+eLen;
|
||||
end
|
||||
for i=1:numElem
|
||||
elemNod(i,1)=i;
|
||||
elemNod(i,2)=i+1;
|
||||
end
|
||||
% Initial level set
|
||||
dpos=0.1;
|
||||
for i=1:numElem+1
|
||||
lSet(i)=sign(ndCrd(i)-dpos)*abs(dpos-ndCrd(i));
|
||||
end
|
||||
lSet'
|
||||
for tstep=1:1
|
||||
% Velocity BC
|
||||
F=zeros(numElem+1,1);
|
||||
for i=1:numElem
|
||||
if sign(lSet(elemNod(i,1)))~=sign(lSet(elemNod(i,2)))
|
||||
F(elemNod(i,1))= 0.0005;
|
||||
F(elemNod(i,2))= 0.0005;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numElem+1);
|
||||
for i=1:numElem
|
||||
pos(1)=-1/sqrt(3);
|
||||
pos(2)=1/sqrt(3);
|
||||
AfL=zeros(2);
|
||||
AfLGLS=zeros(2);
|
||||
for j=1:2
|
||||
shp(1)=(1-pos(j))/2.;
|
||||
shp(2)=(1+pos(j))/2.;
|
||||
dshp(1)=-0.5;
|
||||
dshp(2)=0.5;
|
||||
rset=shp(1)*lSet(elemNod(i,1))+shp(2)*lSet(elemNod(i,2));
|
||||
dls=dshp(1)*lSet(elemNod(i,1))+dshp(2)*lSet(elemNod(i,2));
|
||||
AfL=AfL+shp'*sign(rset)*(dls*dshp);
|
||||
AfLGLS=AfLGLS+(dshp'*dls)*(0.25/abs(dls))*(dls*dshp);
|
||||
end
|
||||
for k=1:2;
|
||||
for j=1:2;
|
||||
A(elemNod(i,j),elemNod(i,k))=A(elemNod(i,j),elemNod(i,k))+AfL(j,k)+AfLGLS(j,k)
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numElem+1,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numElem+1
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numElem+1
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numElem+1
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numElem+1);
|
||||
mMatGLS=zeros(numElem+1);
|
||||
f1=zeros(numElem+1,1);
|
||||
f2=zeros(numElem+1,1);
|
||||
f3=zeros(numElem+1,1);
|
||||
h=0.25;
|
||||
visc=0.000;
|
||||
for i=1:numElem
|
||||
pos(1)=-1/sqrt(3);
|
||||
pos(2)=1/sqrt(3);
|
||||
mMatL=zeros(2);
|
||||
mMatGLSL=zeros(2);
|
||||
f1L=zeros(2,1);
|
||||
f2L=zeros(2,1);
|
||||
f3L=zeros(2,1);
|
||||
for j=1:2
|
||||
shp(1)=(1-pos(j))/2.;
|
||||
shp(2)=(1+pos(j))/2.;
|
||||
dshp(1)=-0.5;
|
||||
dshp(2)=0.5;
|
||||
Floc=shp(1)*F(elemNod(i,1))+shp(2)*F(elemNod(i,2));
|
||||
rset=shp(1)*lSet(elemNod(i,1))+shp(2)*lSet(elemNod(i,2));
|
||||
dls=dshp(1)*lSet(elemNod(i,1))+dshp(2)*lSet(elemNod(i,2));
|
||||
mMatL=mMatL+shp'*shp;
|
||||
mMatGLSL=mMatGLSL+((dshp'*(dls/abs(dls)))*Floc*(h/abs(Floc)))*shp;
|
||||
f1L=f1L+shp'*Floc*abs(dls);
|
||||
f2L=f2L+(dshp'*(dls/abs(dls))*Floc)*(h/abs(Floc))*Floc*abs(dls);
|
||||
vs=h*((abs(visc+Floc*abs(dls)))/(abs(Floc*dls)+h));
|
||||
f3L=f3L+vs*dshp'*dls;
|
||||
end
|
||||
for k=1:2;
|
||||
for j=1:2;
|
||||
mMat(elemNod(i,j),elemNod(i,k))=mMat(elemNod(i,j),elemNod(i,k))+mMatL(j,k);
|
||||
mMatGLS(elemNod(i,j),elemNod(i,k))=mMatGLS(elemNod(i,j),elemNod(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(elemNod(i,k))=f1(elemNod(i,k))+f1L(k);
|
||||
f2(elemNod(i,k))=f2(elemNod(i,k))+f2L(k);
|
||||
f3(elemNod(i,k))=f3(elemNod(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)/dt)*(f1+f2+f3))';
|
||||
lSet';
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
200
Unpublished/XFEM2/1D_Solver/GetF2D.asv
Normal file
200
Unpublished/XFEM2/1D_Solver/GetF2D.asv
Normal file
|
@ -0,0 +1,200 @@
|
|||
function [] = GetF2D_()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=10;
|
||||
NumY=10;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
centx=5.;
|
||||
centy=5.;
|
||||
rad=2.5;
|
||||
for i=1:numNodes;
|
||||
dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
lSet(i)=dist-rad;
|
||||
end
|
||||
% Plot initial level set
|
||||
[X,Y]=meshgrid(0:1.:10);
|
||||
Z=zeros(11);
|
||||
for i=1:numNodes
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
bandwith=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if lSet(NBelem(i,1))~=lSet(NBelem(i,2)) || lSet(NBelem(i,1))~=lSet(NBelem(i,3))
|
||||
F(NBelem(i,1))= 0.0005;
|
||||
F(NBelem(i,2))= 0.0005;
|
||||
F(NBelem(i,3))= 0.0005;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gpos=1/sqrt(3.);
|
||||
gx(1)=-gpos;
|
||||
gx(2)=gpos;
|
||||
gx(3)=gpos;
|
||||
gx(4)=-gpos;
|
||||
hx(1)=-gpos;
|
||||
hx(2)=-gpos;
|
||||
hx(3)=gpos;
|
||||
hx(4)=gpos;
|
||||
AfL=zeros(4);
|
||||
AfLGLS=zeros(4);
|
||||
for j=1:4
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=0.25*(1.-g)*(1.-h);
|
||||
phi(2)=0.25*(1.+g)*(1.-h);
|
||||
phi(3)=0.25*(1.+g)*(1.+h);
|
||||
phi(4)=0.25*(1.-g)*(1.+h);
|
||||
phig(1)=0.25*-(1.-h);
|
||||
phig(2)=0.25*(1.-h);
|
||||
phig(3)=0.25*(1.+h);
|
||||
phig(4)=0.25*-(1.+h);
|
||||
rset=phi(1)*lSet(Element(i,1))+phi(2)*lSet(Element(i,2))+phi(3)*lSet(Element(i,3))+phi(4)*lSet(Element(i,4));
|
||||
dls=phig(1)*lSet(Element(i,1))+phig(2)*lSet(Element(i,2))+phig(3)*lSet(Element(i,3))+phig(4)*lSet(Element(i,4));
|
||||
AfL=AfL+(phi'*sign(rset))*(dls*phig);
|
||||
AfLGLS=AfLGLS+(phig'*dls)*(1./abs(dls))*(dls*phig);
|
||||
end
|
||||
for k=1:4;
|
||||
for j=1:4;
|
||||
A(Element(i,j),Element(i,k))=A(Element(i,j),Element(i,k))+AfL(j,k)+AfLGLS(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h=1.;
|
||||
visc=0.000;
|
||||
for i=1:numElem
|
||||
gpos=1/sqrt(3.);
|
||||
gx(1)=-gpos;
|
||||
gx(2)=gpos;
|
||||
gx(3)=gpos;
|
||||
gx(4)=-gpos;
|
||||
hx(1)=-gpos;
|
||||
hx(2)=-gpos;
|
||||
hx(3)=gpos;
|
||||
hx(4)=gpos;
|
||||
mMatL=zeros(4);
|
||||
mMatGLSL=zeros(4);
|
||||
f1L=zeros(4,1);
|
||||
f2L=zeros(4,1);
|
||||
f3L=zeros(4,1);
|
||||
for j=1:4
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=0.25*(1.-g)*(1.-h);
|
||||
phi(2)=0.25*(1.+g)*(1.-h);
|
||||
phi(3)=0.25*(1.+g)*(1.+h);
|
||||
phi(4)=0.25*(1.-g)*(1.+h);
|
||||
phig(1)=0.25*-(1.-h);
|
||||
phig(2)=0.25*(1.-h);
|
||||
phig(3)=0.25*(1.+h);
|
||||
phig(4)=0.25*-(1.+h);
|
||||
Floc=phi(1)*F(Element(i,1))+phi(2)*F(Element(i,2))+phi(3)*F(Element(i,3))+phi(4)*F(Element(i,4));
|
||||
rset=phi(1)*lSet(Element(i,1))+phi(2)*lSet(Element(i,2))+phi(3)*lSet(Element(i,3))+phi(4)*lSet(Element(i,4));
|
||||
dls=phig(1)*lSet(Element(i,1))+phig(2)*lSet(Element(i,2))+phig(3)*lSet(Element(i,3))+phig(4)*lSet(Element(i,4));
|
||||
mMatL=mMatL+phi'*phi;
|
||||
mMatGLSL=mMatGLSL+((phig'*(dls/abs(dls)))*Floc*(h/abs(Floc)))*phi;
|
||||
f1L=f1L+phi'*Floc*abs(dls);
|
||||
f2L=f2L+(phig'*(dls/abs(dls))*Floc)*(h/abs(Floc))*Floc*abs(dls);
|
||||
vs=h*((abs(visc+Floc*abs(dls)))/(abs(Floc*dls)+h));
|
||||
f3L=f3L+vs*phig'*dls;
|
||||
end
|
||||
for k=1:4;
|
||||
for j=1:4;
|
||||
mMat(Element(i,j),Element(i,k))=mMat(Element(i,j),Element(i,k))+mMatL(j,k);
|
||||
mMatGLS(Element(i,j),Element(i,k))=mMatGLS(Element(i,j),Element(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(Element(i,k))=f1(Element(i,k))+f1L(k);
|
||||
f2(Element(i,k))=f2(Element(i,k))+f2L(k);
|
||||
f3(Element(i,k))=f3(Element(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)/dt)*(f1+f2+f3))';
|
||||
end
|
||||
%scatter3(Node(:,1), Node(:,2), lSet');
|
||||
|
||||
|
||||
|
||||
|
200
Unpublished/XFEM2/1D_Solver/GetF2D.m
Normal file
200
Unpublished/XFEM2/1D_Solver/GetF2D.m
Normal file
|
@ -0,0 +1,200 @@
|
|||
function [] = GetF2D()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=10;
|
||||
NumY=10;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
centx=5.;
|
||||
centy=5.;
|
||||
rad=2.5;
|
||||
for i=1:numNodes;
|
||||
dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
lSet(i)=dist-rad;
|
||||
end
|
||||
% Plot initial level set
|
||||
[X,Y]=meshgrid(0:1.:10);
|
||||
Z=zeros(11);
|
||||
for i=1:numNodes
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
bandwith=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if lSet(NBelem(i,1))~=lSet(NBelem(i,2)) || lSet(NBelem(i,1))~=lSet(NBelem(i,3))
|
||||
F(NBelem(i,1))= 0.0005;
|
||||
F(NBelem(i,2))= 0.0005;
|
||||
F(NBelem(i,3))= 0.0005;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gpos=1/sqrt(3.);
|
||||
gx(1)=-gpos;
|
||||
gx(2)=gpos;
|
||||
gx(3)=gpos;
|
||||
gx(4)=-gpos;
|
||||
hx(1)=-gpos;
|
||||
hx(2)=-gpos;
|
||||
hx(3)=gpos;
|
||||
hx(4)=gpos;
|
||||
AfL=zeros(4);
|
||||
AfLGLS=zeros(4);
|
||||
for j=1:4
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=0.25*(1.-g)*(1.-h);
|
||||
phi(2)=0.25*(1.+g)*(1.-h);
|
||||
phi(3)=0.25*(1.+g)*(1.+h);
|
||||
phi(4)=0.25*(1.-g)*(1.+h);
|
||||
phig(1)=0.25*-(1.-h);
|
||||
phig(2)=0.25*(1.-h);
|
||||
phig(3)=0.25*(1.+h);
|
||||
phig(4)=0.25*-(1.+h);
|
||||
rset=phi(1)*lSet(Element(i,1))+phi(2)*lSet(Element(i,2))+phi(3)*lSet(Element(i,3))+phi(4)*lSet(Element(i,4));
|
||||
dls=phig(1)*lSet(Element(i,1))+phig(2)*lSet(Element(i,2))+phig(3)*lSet(Element(i,3))+phig(4)*lSet(Element(i,4));
|
||||
AfL=AfL+(phi'*sign(rset))*(dls*phig);
|
||||
AfLGLS=AfLGLS+(phig'*dls)*(1./abs(dls))*(dls*phig);
|
||||
end
|
||||
for k=1:4;
|
||||
for j=1:4;
|
||||
A(Element(i,j),Element(i,k))=A(Element(i,j),Element(i,k))+AfL(j,k)+AfLGLS(j,k)
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h=1.;
|
||||
visc=0.000;
|
||||
for i=1:numElem
|
||||
gpos=1/sqrt(3.);
|
||||
gx(1)=-gpos;
|
||||
gx(2)=gpos;
|
||||
gx(3)=gpos;
|
||||
gx(4)=-gpos;
|
||||
hx(1)=-gpos;
|
||||
hx(2)=-gpos;
|
||||
hx(3)=gpos;
|
||||
hx(4)=gpos;
|
||||
mMatL=zeros(4);
|
||||
mMatGLSL=zeros(4);
|
||||
f1L=zeros(4,1);
|
||||
f2L=zeros(4,1);
|
||||
f3L=zeros(4,1);
|
||||
for j=1:4
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=0.25*(1.-g)*(1.-h);
|
||||
phi(2)=0.25*(1.+g)*(1.-h);
|
||||
phi(3)=0.25*(1.+g)*(1.+h);
|
||||
phi(4)=0.25*(1.-g)*(1.+h);
|
||||
phig(1)=0.25*-(1.-h);
|
||||
phig(2)=0.25*(1.-h);
|
||||
phig(3)=0.25*(1.+h);
|
||||
phig(4)=0.25*-(1.+h);
|
||||
Floc=phi(1)*F(Element(i,1))+phi(2)*F(Element(i,2))+phi(3)*F(Element(i,3))+phi(4)*F(Element(i,4));
|
||||
rset=phi(1)*lSet(Element(i,1))+phi(2)*lSet(Element(i,2))+phi(3)*lSet(Element(i,3))+phi(4)*lSet(Element(i,4));
|
||||
dls=phig(1)*lSet(Element(i,1))+phig(2)*lSet(Element(i,2))+phig(3)*lSet(Element(i,3))+phig(4)*lSet(Element(i,4));
|
||||
mMatL=mMatL+phi'*phi;
|
||||
mMatGLSL=mMatGLSL+((phig'*(dls/abs(dls)))*Floc*(h/abs(Floc)))*phi;
|
||||
f1L=f1L+phi'*Floc*abs(dls);
|
||||
f2L=f2L+(phig'*(dls/abs(dls))*Floc)*(h/abs(Floc))*Floc*abs(dls);
|
||||
vs=h*((abs(visc+Floc*abs(dls)))/(abs(Floc*dls)+h));
|
||||
f3L=f3L+vs*phig'*dls;
|
||||
end
|
||||
for k=1:4;
|
||||
for j=1:4;
|
||||
mMat(Element(i,j),Element(i,k))=mMat(Element(i,j),Element(i,k))+mMatL(j,k);
|
||||
mMatGLS(Element(i,j),Element(i,k))=mMatGLS(Element(i,j),Element(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(Element(i,k))=f1(Element(i,k))+f1L(k);
|
||||
f2(Element(i,k))=f2(Element(i,k))+f2L(k);
|
||||
f3(Element(i,k))=f3(Element(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)/dt)*(f1+f2+f3))';
|
||||
end
|
||||
%scatter3(Node(:,1), Node(:,2), lSet');
|
||||
|
||||
|
||||
|
||||
|
232
Unpublished/XFEM2/1D_Solver/GetF2D_T.asv
Normal file
232
Unpublished/XFEM2/1D_Solver/GetF2D_T.asv
Normal file
|
@ -0,0 +1,232 @@
|
|||
function [] = GetF2D_T()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=2;
|
||||
NumY=1;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
%centx=5.;
|
||||
%centy=5.;
|
||||
%rad=2.5;
|
||||
%for i=1:numNodes;
|
||||
% dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
% lSet(i)=dist-rad;
|
||||
%end
|
||||
for i=1:numNodes;
|
||||
dist=Node(i,1)-0.1;
|
||||
lSet(i)=dist;
|
||||
end
|
||||
% Plot initial level set
|
||||
%[X]=meshgrid(0:1.:10);
|
||||
%Z=zeros(11);
|
||||
%for i=1:numNodes
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Z)
|
||||
% LS Algorithm Parameters
|
||||
bandwidth=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,2)))||sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,3)))
|
||||
F(NBelem(i,1))= 0.05;
|
||||
F(NBelem(i,2))= 0.05;
|
||||
F(NBelem(i,3))= 0.05;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h=1.;
|
||||
visc=0.001;
|
||||
for i=1:NBindex
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
|
||||
(mMat+mMatGLS)^-1
|
||||
f1+f2+f3
|
||||
dt=0.0001;
|
||||
-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))'
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
end
|
||||
lSet';
|
||||
%scatter3(Node(:,1), Node(:,2), lSet');
|
||||
|
||||
|
||||
|
||||
|
233
Unpublished/XFEM2/1D_Solver/GetF2D_T.m
Normal file
233
Unpublished/XFEM2/1D_Solver/GetF2D_T.m
Normal file
|
@ -0,0 +1,233 @@
|
|||
function [] = GetF2D_T()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=2;
|
||||
NumY=1;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
%centx=5.;
|
||||
%centy=5.;
|
||||
%rad=2.5;
|
||||
%for i=1:numNodes;
|
||||
% dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
% lSet(i)=dist-rad;
|
||||
%end
|
||||
for i=1:numNodes;
|
||||
dist=Node(i,1)-1.5;
|
||||
lSet(i)=dist;
|
||||
end
|
||||
% Plot initial level set
|
||||
%[X]=meshgrid(0:1.:10);
|
||||
%Z=zeros(11);
|
||||
%for i=1:numNodes
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Z)
|
||||
% LS Algorithm Parameters
|
||||
bandwidth=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:1
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,2)))||sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,3)))
|
||||
F(NBelem(i,1))= 0.05;
|
||||
F(NBelem(i,2))= 0.05;
|
||||
F(NBelem(i,3))= 0.05;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h=1.;
|
||||
visc=0.0005;
|
||||
for i=1:NBindex
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
mMat
|
||||
mMatGLS
|
||||
(mMat+mMatGLS)^-1
|
||||
f1+f2+f3
|
||||
dt=0.1;
|
||||
-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))'
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
end
|
||||
lSet';
|
||||
%scatter3(Node(:,1), Node(:,2), lSet');
|
||||
|
||||
|
||||
|
||||
|
234
Unpublished/XFEM2/1D_Solver/GetF2D_Z.m
Normal file
234
Unpublished/XFEM2/1D_Solver/GetF2D_Z.m
Normal file
|
@ -0,0 +1,234 @@
|
|||
function [] = GetF2D_Z()
|
||||
clear all
|
||||
% Define Main Solution Mesh
|
||||
NumX=8;
|
||||
NumY=8;
|
||||
delX=1.;
|
||||
delY=1.;
|
||||
for j=1:NumY+1
|
||||
for i=1:NumX+1
|
||||
index=i+(NumX+1)*(j-1);
|
||||
Node(index,1)=single((i-1.))*delX;
|
||||
Node(index,2)=single((j-1.))*delY;
|
||||
end
|
||||
end
|
||||
numNodes=(NumX+1)*(NumY+1);
|
||||
for j=1:NumY
|
||||
for i=1:NumX
|
||||
index=i+NumX*(j-1);
|
||||
Element(index,1)=i+(NumX+1)*(j-1);
|
||||
Element(index,2)=i+(NumX+1)*(j-1)+1;
|
||||
Element(index,3)=i+(NumX+1)*(j)+1;
|
||||
Element(index,4)=i+(NumX+1)*(j);
|
||||
end
|
||||
end
|
||||
numElem=(NumX)*(NumY);
|
||||
% Define Initial Level Set
|
||||
centx=4.;
|
||||
centy=4.;
|
||||
rad=2.1;
|
||||
for i=1:numNodes;
|
||||
dist=sqrt((Node(i,1)-centx)*(Node(i,1)-centx)+(Node(i,2)-centy)*(Node(i,2)-centy));
|
||||
lSet(i)=dist-rad;
|
||||
end
|
||||
%for i=1:numNodes;
|
||||
% dist=Node(i,1)-0.1;
|
||||
% lSet(i)=dist;
|
||||
%end
|
||||
% Plot initial level set
|
||||
[X Y]=meshgrid(0:1.:8);
|
||||
Z=zeros(9);
|
||||
for i=1:81
|
||||
Z(i)=lSet(i);
|
||||
end
|
||||
surf(X,Y,Z)
|
||||
% LS Algorithm Parameters
|
||||
lSet'
|
||||
bandwidth=10.;
|
||||
% Loop through timesteps
|
||||
for tstep=1:100
|
||||
% Identify Narrow Band Elements
|
||||
NBindex=0;
|
||||
for i=1:numElem
|
||||
check=0;
|
||||
for iNd=1:4
|
||||
if abs(lSet(Element(i,iNd)))<=bandwidth*delX
|
||||
check=1;
|
||||
end
|
||||
end
|
||||
% If an element is in the narrow band split it into triangles
|
||||
if check==1
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,2);
|
||||
NBelem(NBindex,3)=Element(i,3);
|
||||
NBindex=NBindex+1;
|
||||
NBelem(NBindex,1)=Element(i,1);
|
||||
NBelem(NBindex,2)=Element(i,3);
|
||||
NBelem(NBindex,3)=Element(i,4);
|
||||
end
|
||||
end
|
||||
% Velocity BC
|
||||
F=zeros(numNodes,1);
|
||||
for i=1:NBindex
|
||||
if sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,2)))||sign(lSet(NBelem(i,1)))~=sign(lSet(NBelem(i,3)))
|
||||
F(NBelem(i,1))= 1.;
|
||||
F(NBelem(i,2))= 1.;
|
||||
F(NBelem(i,3))= 1.;
|
||||
end
|
||||
end
|
||||
% Assemble 'Stiffness' Matrices
|
||||
A=zeros(numNodes);
|
||||
for i=1:NBindex
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
AfL=zeros(3);
|
||||
AfLGLS=zeros(3);
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=2*abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
set=phi*nodalLset;
|
||||
delset=delphi*nodalLset;
|
||||
AfL=AfL+(phi'*sign(set))*(delset'*delphi)/3.;
|
||||
AfLGLS=AfLGLS+(delphi'*delset)*(1./norm(delset))*(delset'*delphi)/3.;
|
||||
end
|
||||
sum=AfL+AfLGLS;
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
A(NBelem(i,j),NBelem(i,k))=A(NBelem(i,j),NBelem(i,k))+sum(j,k);
|
||||
end
|
||||
end
|
||||
end
|
||||
% Apply BCs
|
||||
RHS=zeros(numNodes,1);
|
||||
Sub=A*F;
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
RHSred(iindex)=RHS(i)-Sub(i);
|
||||
Fred=0.;
|
||||
jindex=0;
|
||||
for j=1:numNodes
|
||||
if F(j)==0.
|
||||
jindex=jindex+1;
|
||||
Ared(iindex,jindex)=A(i,j);
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
% Solve for Fred
|
||||
Fred=(Ared^-1)*RHSred';
|
||||
% Get F
|
||||
iindex=0;
|
||||
for i=1:numNodes
|
||||
if F(i)==0.
|
||||
iindex=iindex+1;
|
||||
F(i)=Fred(iindex);
|
||||
end
|
||||
end
|
||||
% Update level set
|
||||
mMat=zeros(numNodes);
|
||||
mMatGLS=zeros(numNodes);
|
||||
f1=zeros(numNodes,1);
|
||||
f2=zeros(numNodes,1);
|
||||
f3=zeros(numNodes,1);
|
||||
h2=0.00001;
|
||||
visc=0.0005;
|
||||
for i=1:NBindex
|
||||
mMatL=zeros(3);
|
||||
mMatGLSL=zeros(3);
|
||||
f1L=zeros(3,1);
|
||||
f2L=zeros(3,1);
|
||||
f3L=zeros(3,1);
|
||||
gx(1)=2./3.;
|
||||
gx(2)=1./6.;
|
||||
gx(3)=1./6.;
|
||||
hx(1)=1./6.;
|
||||
hx(2)=1./6.;
|
||||
hx(3)=2./3.;
|
||||
x1=Node(NBelem(i,1),1);
|
||||
y1=Node(NBelem(i,1),2);
|
||||
x2=Node(NBelem(i,2),1);
|
||||
y2=Node(NBelem(i,2),2);
|
||||
x3=Node(NBelem(i,3),1);
|
||||
y3=Node(NBelem(i,3),2);
|
||||
for j=1:3
|
||||
g=gx(j);
|
||||
h=hx(j);
|
||||
phi(1)=1.-g-h;
|
||||
phi(2)=g;
|
||||
phi(3)=h;
|
||||
phig(1)=-1.;
|
||||
phig(2)=1.;
|
||||
phig(3)=0.;
|
||||
phih(1)=-1.;
|
||||
phih(2)=0.;
|
||||
phih(3)=1.;
|
||||
djac=abs(x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2));
|
||||
for k=1:3
|
||||
phix(k)=(1./djac)*((-y1+y3)*phig(k)+(y1-y2)*phih(k));
|
||||
phiy(k)=(1./djac)*((x1-x3)*phig(k)+(-x1+x2)*phih(k));
|
||||
end
|
||||
delphi=[phix;phiy];
|
||||
nodalLset=[lSet(NBelem(i,1));lSet(NBelem(i,2));lSet(NBelem(i,3))];
|
||||
nodalF=[F(NBelem(i,1));F(NBelem(i,2));F(NBelem(i,3))];
|
||||
delset=delphi*nodalLset;
|
||||
Floc=phi*nodalF;
|
||||
mMatL=mMatL+(phi'*phi)/3.;
|
||||
mMatGLSL=mMatGLSL+((delphi'*(delset/norm(delset)))*Floc*(h2/abs(Floc)))*phi/3.;
|
||||
f1L=f1L+phi'*Floc*norm(delset)/3.;
|
||||
f2L=f2L+(delphi'*(delset/norm(delset))*Floc)*(h2/abs(Floc))*Floc*norm(delset)/3.;
|
||||
vs=h2*((abs(visc+Floc*norm(delset)))/(norm(Floc*delset)+h2));
|
||||
f3L=f3L+vs*delphi'*delset/3.;
|
||||
end
|
||||
for k=1:3;
|
||||
for j=1:3;
|
||||
mMat(NBelem(i,j),NBelem(i,k))=mMat(NBelem(i,j),NBelem(i,k))+mMatL(j,k);
|
||||
mMatGLS(NBelem(i,j),NBelem(i,k))=mMatGLS(NBelem(i,j),NBelem(i,k))+mMatGLSL(j,k);
|
||||
end
|
||||
f1(NBelem(i,k))=f1(NBelem(i,k))+f1L(k);
|
||||
f2(NBelem(i,k))=f2(NBelem(i,k))+f2L(k);
|
||||
f3(NBelem(i,k))=f3(NBelem(i,k))+f3L(k);
|
||||
end
|
||||
end
|
||||
dt=0.01;
|
||||
lSet=lSet-((((mMat+mMatGLS)^-1)*dt)*(f1+f2+f3))';
|
||||
end
|
||||
lSet'
|
||||
%[X Y]=meshgrid(0:1.:8);
|
||||
%Z=zeros(9);
|
||||
%for i=1:81
|
||||
% Z(i)=lSet(i);
|
||||
%end
|
||||
%surf(X,Y,Z)
|
||||
|
||||
|
||||
|
||||
|
2
Unpublished/XFEM2/1D_Solver/testGrid.asv
Normal file
2
Unpublished/XFEM2/1D_Solver/testGrid.asv
Normal file
|
@ -0,0 +1,2 @@
|
|||
function [] = testGrid()
|
||||
|
4
Unpublished/XFEM2/1D_Solver/testGrid.m
Normal file
4
Unpublished/XFEM2/1D_Solver/testGrid.m
Normal file
|
@ -0,0 +1,4 @@
|
|||
function [] = testGrid()
|
||||
[X,Y]=meshgrid(1:1:10);
|
||||
Z=2*X+Y
|
||||
surf(X,Y,Z)
|
Loading…
Add table
Add a link
Reference in a new issue