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

Merge branch 'dbaroli/fixEllipsoidFunction' into 'master'

Dbaroli/fix ellipsoid function

See merge request !1
parents 1d5b2cb3 7b376dec
......@@ -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;
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;
assert(dim0>0);
dim1 = self.geoLines(2).getNumTargetGridNodes() - 1;
assert(dim1>0);
dim2 = self.geoLines(3).getNumTargetGridNodes() - 1;
assert(dim2>0);
dim3 = self.geoLines(4).getNumTargetGridNodes() - 1;
assert(dim3>0);
dim = self.nrings*(dim0 + dim1 + dim2 + dim3);
segments = self.nrings - 1;
run_id = 1 + length(gridnodes);
......@@ -95,7 +106,9 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
% create grid nodes
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
% user
if self.normFunction.vals == [0,0]
self.normFunction.vals(1) = segments;
if self.normFunction.vals(2) == 0
self.normFunction.vals(1) = segments;
......@@ -103,8 +116,16 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
if self.normFunction.vals(1) == 1
self.normFunction.vals(2) = segments;
end
end
% some bugs occurs if user sets the type of normFunction.
if self.normFunction.vals(1)>self.normFunction.vals(2)
self.normFunction.vals=sort(self.normFunction.vals)
end
scale = self.normFunction.eval( mm/segments );
if isnan(scale)
warning('normFunction can not eval %d/%d',mm,segments)
end
for gline = self.geoLines % loop over the four GeoLines
......@@ -135,6 +156,8 @@ classdef MgGeoArea4LineEllipsoidalVoid < mgen.MgGeoArea4Line
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
self.ringNodes(end+1) = self.ringNodes(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