Commit f3a12ab9 authored by Andreas Zilian's avatar Andreas Zilian
Browse files

Merge branch 'master' of ssh://gitlab.uni.lu:8021/edu/mafe

parents e05e0d07 e2b122ed
...@@ -59,11 +59,22 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line ...@@ -59,11 +59,22 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
%fig = figure(1); subplot('Position',[0.05 0.05 0.90 0.90]); axis equal; hold on; %fig = figure(1); subplot('Position',[0.05 0.05 0.90 0.90]); axis equal; hold on;
gnv = gridnodes; gnv = gridnodes;
for kk = 1:4
if self.geoLines(kk).getNumTargetGridNodes() - 1 ==0
warning('increase the number of nodes in the %d line',kk)
end
end
dim0 = self.geoLines(1).getNumTargetGridNodes() - 1; dim0 = self.geoLines(1).getNumTargetGridNodes() - 1;
assert(dim0>0);
dim1 = self.geoLines(2).getNumTargetGridNodes() - 1; dim1 = self.geoLines(2).getNumTargetGridNodes() - 1;
assert(dim1>0);
dim2 = self.geoLines(3).getNumTargetGridNodes() - 1; dim2 = self.geoLines(3).getNumTargetGridNodes() - 1;
assert(dim2>0);
dim3 = self.geoLines(4).getNumTargetGridNodes() - 1; dim3 = self.geoLines(4).getNumTargetGridNodes() - 1;
assert(dim3>0);
dim = self.nrings*(dim0 + dim1 + dim2 + dim3); dim = self.nrings*(dim0 + dim1 + dim2 + dim3);
segments = self.nrings - 1; segments = self.nrings - 1;
run_id = 1 + length(gridnodes); run_id = 1 + length(gridnodes);
...@@ -95,18 +106,28 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line ...@@ -95,18 +106,28 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
% create grid nodes % create grid nodes
for mm = segments:-1:1 % loop over segments from outer to inner for mm = segments:-1:1 % loop over segments from outer to inner
% set function values % set function values if the normFunction is not set by
self.normFunction.vals(1) = segments; % user
if self.normFunction.vals(2) == 0 if self.normFunction.vals == [0,0]
self.normFunction.vals(1) = segments; self.normFunction.vals(1) = segments;
if self.normFunction.vals(2) == 0
self.normFunction.vals(1) = segments;
end
if self.normFunction.vals(1) == 1
self.normFunction.vals(2) = segments;
end
end end
if self.normFunction.vals(1) == 1 % some bugs occurs if user sets the type of normFunction.
self.normFunction.vals(2) = segments; if self.normFunction.vals(1)>self.normFunction.vals(2)
self.normFunction.vals=sort(self.normFunction.vals)
end end
scale = self.normFunction.eval( mm/segments ); scale = self.normFunction.eval( mm/segments );
if isnan(scale)
for gline = self.geoLines % loop over the four GeoLines warning('normFunction can not eval %d/%d',mm,segments)
end
for gline = self.geoLines % loop over the four GeoLines
for ii = 1:gline.getNumTargetGridNodes - 1 % loop over GridNodes - 1 for ii = 1:gline.getNumTargetGridNodes - 1 % loop over GridNodes - 1
...@@ -135,10 +156,12 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line ...@@ -135,10 +156,12 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
end end
end end
end end
% defensive programming: check if ringNodes is filled.
assert(~isempty(self.ringNodes))
% make sure the ring nodes represent a closed line in terms of node connectivity % make sure the ring nodes represent a closed line in terms of node connectivity
self.ringNodes(end+1) = self.ringNodes(1); self.ringNodes(end+1) = self.ringNodes(1);
% sort in existing nodes % sort in existing nodes
for gline = self.geoLines for gline = self.geoLines
for ii = 1:gline.getNumTargetGridNodes - 1 for ii = 1:gline.getNumTargetGridNodes - 1
......
%% Describe the goemetry of the problem for the mesh generator
% helfpul parameters (problem specific)
n = 10;% should be >1! % d: length measure; n = number of grid nodes per d
% create all geo points
gp1 = mgen.MgGeoPoint( [-1, -1] );
gp2 = mgen.MgGeoPoint( [1, -1] );
gp3 = mgen.MgGeoPoint( [1, 1] );
gp4 = mgen.MgGeoPoint( [-1, 1] );
gcenter = mgen.MgGeoPoint([0.,0.]);
gl1 = mgen.MgGeoLine2Point( [gp1, gp2], n );
gl2 = mgen.MgGeoLine2Point( [gp2, gp3], n );
gl3 = mgen.MgGeoLine2Point( [gp3, gp4], n );
gl4 = mgen.MgGeoLine2Point( [gp4, gp1], n );
%number of ring => refine near the circle
a= 0.5%
b= 0.5%
c=0; %ellipse rotation angle in rad
normFunc = mgen.MgNormFunction( mgen.MgNormFunctionType.Quadratic);
ga1 = mgen.MgGeoArea4LineEllipsoidalVoid([gl1,gl2,gl3,gl4],20,a,b,c,normFunc)
% create geo object and generate the mesh
geo = mgen.MgGeo( [gp1, gp2, gp3, gp4], ...
[gl1, gl2, gl3, gl4], ...
[ga1] );
% print geo and mesh data info
fprintf(geo.print());
% plot mesh
cla; clf;
fig = figure(1); subplot('Position',[0.05 0.05 0.90 0.90]); axis equal; hold on;
geo.plot();
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment