Skip to content

Instantly share code, notes, and snippets.

@necto
Forked from anonymous/gist:5338048
Created April 8, 2013 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save necto/5338163 to your computer and use it in GitHub Desktop.
Save necto/5338163 to your computer and use it in GitHub Desktop.
constructor TGrd2DProcess.CreateGrid(Dat: TData; Nx,Ny: integer);
var N1,N2,N3,i,j: integer; h,S,q: double; LnUp1: TLn; SLn: TSLn;
begin
Self.Nx:=Nx; Self.Ny:=Ny;
hy1:=Dat.hy1; dNy1:=Dat.dNy1;
hx1:=Dat.hx1; dNx1:=Dat.dNx1;
Ny1:=Round(Ny*dNy1);
{Ceтка на плоскости XY}
for j:=0 to Dat.Ny do Y[j]:=Dat.Ly*j/Dat.Ny;
{Ceтка на плоскости XZ}
LnDn.Free;
LnDn:=TLn.CreateCopyLn(Dat.LnDn);
LnUp.Free;
LnUp:=TLn.CreateCopyLn(Dat.LnUp);
Grd.Free;
Grd:=TDGrd2D.CreateDGrd2D(Nx+1,Ny+1,0,Nx+1);
{Сетка вдоль нижней поверхности}
h:=LnDn.P[3].s/Nx;
N1:=Round(LnDn.P[1].s/h);
N3:=Round((LnDn.P[3].s-LnDn.P[2].s)/h);
N2:=Nx-N1-N3;
S:=LnDn.P[1].s-LnDn.P[0].s;
qx1:=Grd1De1(SLn,N1,Round(dNx1*N1),S,hx1);
for i:=0 to N1 do
begin
Grd.P[i,0].x:=LnDn.P[0].x*SLn.s[N1-i]/S+LnDn.P[1].x*(1-SLn.s[N1-i]/S);
Grd.P[i,0].y:=LnDn.P[0].y*SLn.s[N1-i]/S+LnDn.P[1].y*(1-SLn.s[N1-i]/S);
end;
S:=LnDn.P[2].s-LnDn.P[1].s;
qx2:=Grd1De2(SLn,N2,Round(dNx1*N2),S,hx1);
for i:=1 to N2 do
begin
Grd.P[i+N1,0].x:=LnDn.P[1].x*(1-SLn.s[i]/S)+LnDn.P[2].x*SLn.s[i]/S;
Grd.P[i+N1,0].y:=LnDn.P[1].y*(1-SLn.s[i]/S)+LnDn.P[2].y*SLn.s[i]/S;
end;
S:=LnDn.P[3].s-LnDn.P[2].s;
qx3:=Grd1De1(SLn,N3,Round(dNx1*N3),S,hx1);
for i:=1 to N3 do
begin
Grd.P[i+N1+N2,0].x:=LnDn.P[2].x*(1-SLn.s[i]/S)+LnDn.P[3].x*SLn.s[i]/S;
Grd.P[i+N1+N2,0].y:=LnDn.P[2].y*(1-SLn.s[i]/S)+LnDn.P[3].y*SLn.s[i]/S;
end;
{Сетка вдоль верхней поверхности}
for i:=0 to Nx do
begin
Grd.P[i,Ny].x:=LnUp.P[0].x*(1-i/Nx)+LnUp.P[1].x*i/Nx;
Grd.P[i,Ny].y:=LnUp.P[0].y*(1-i/Nx)+LnUp.P[1].y*i/Nx
end;
{Сетка внутри области}
qMax:=0;
for i:=0 to Nx do
begin
S:=Sqrt(Sqr(Grd.P[i,Ny].x-Grd.P[i,0].x)+Sqr(Grd.P[i,Ny].y-Grd.P[i,0].y));
q:=Grd1De2(SLn,Ny,Ny1,S,hy1);
if qMax<q then qMax:=q;
for j:=1 to Ny-1 do
begin
Grd.P[i,j].x:=Grd.P[i,0].x*(1-SLn.s[j]/S)+Grd.P[i,Ny].x*SLn.s[j]/S;
Grd.P[i,j].y:=Grd.P[i,0].y*(1-SLn.s[j]/S)+Grd.P[i,Ny].y*SLn.s[j]/S;
end;
end;
{Перегружаем сетку в r}
for i:=0 to Nx do
for j:=0 to Ny do
begin
r[i,j].x:=Grd.P[i,j].x; r[i,j].y:=Grd.P[i,j].y;
end;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment