Commit 0b6c4d15 authored by Baptiste Durand's avatar Baptiste Durand

Fix : Setting of a periodic mesh constrain

Situation : when two 1D entities of the microstructure boundary have the same endpoints but only one is actually on the border of the unit cell. The second 1D entity can be an circular arc.
E.g.  `pantograph_RVE(1, 1, 1/3, junction_r=r, offset=(0.05, 0.0))`
parent 0d0d7c80
......@@ -208,7 +208,7 @@ class AbstractCurve(Curve):
"""
bndry_logger.debug(f"Abstract Curve -> get_boundary. self.tag : {self.tag}")
def_pts = []
boundary = model.getBoundary((1, self.tag), False, False, False)
boundary = model.getBoundary((1, self.tag), combined=False)
bndry_logger.debug(
f"Abstract Curve -> get_boundary. raw API return : {boundary}"
)
......
......@@ -221,15 +221,24 @@ class Gmsh2DRVE(object):
else:
try:
s = one(rve_s)
boundary = geo.AbstractSurface.get_surfs_boundary(s)
boundary = geo.AbstractSurface.get_surfs_boundary(s,recursive=False)
except ValueError:
boundary = geo.AbstractSurface.get_surfs_boundary(rve_s)
factory.synchronize()
micro_bndry = [geo.macro_line_fragments(boundary, M_ln) for M_ln in macro_bndry]
macro_dir = [
macro_bndry[i].def_pts[-1].coord - macro_bndry[i].def_pts[0].coord
for i in range(len(macro_bndry) // 2)
]
boundary = geo.AbstractSurface.get_surfs_boundary(rve_s,recursive=False)
for b in boundary:
b.get_boundary(get_coords=True)
# factory.synchronize()
micro_bndry = list()
for macro_line in macro_bndry:
fragments = geo.macro_line_fragments(boundary, macro_line)
for c in fragments:
c.gmsh_type = model.getType(1, c.tag)
lines_only = [c for c in fragments if c.gmsh_type == "Line"]
micro_bndry.append(lines_only)
macro_dir = list()
for i in range(len(macro_bndry) // 2):
macro_line = macro_bndry[i]
direction = macro_line.def_pts[-1].coord - macro_line.def_pts[0].coord
macro_dir.append(direction)
for i, crvs in enumerate(micro_bndry):
msh.order_curves(crvs, macro_dir[i % 2], orientation=True)
msh.set_periodicity_pairs(micro_bndry[0], micro_bndry[2])
......
Markdown is supported
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