def main_CppMeshDynTri2D_0(): cad = dfm2.Cad2D() cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.1) dmesh = mesher.meshing(cad) dmesh.cdmsh.check() dfm2.gl.glfw.winDraw3d([dmesh.cdmsh,dfm2.gl.AxisXYZ()],winsize=(400,300))
def main(): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) dfm2.gl.glfw.winDraw3d([cad]) cad.add_vtx_face(0, [0.0, 0.0]) dfm2.gl.glfw.winDraw3d([cad]) cad.add_vtx_edge(2, [0.0, 0.8]) dfm2.gl.glfw.winDraw3d([cad]) cad.set_edge_type(0, dfm2.CAD_EDGE_GEOM_BEZIER_CUBIC, [0.2, 0.3, 0.8, 0.3]) dfm2.gl.glfw.winDraw3d([cad]) cad.set_edge_type(0, dfm2.CAD_EDGE_GEOM_LINE, []) dfm2.gl.glfw.winDraw3d([cad]) cad.clear() cad.add_polygon( list_xy=[-1000, -1000, +1000, -1000, +1000, +1000, -1000, +1000]) dfm2.gl.glfw.winDraw3d([cad]) for itr in range(3): cad.clear() cad.import_svg("../test_inputs/shape" + str(itr) + ".svg") dfm2.gl.glfw.winDraw3d([cad])
def setup_method(self): self.cad = dfm2.Cad2D() self.lx = 0.5 self.lz = 0.03 self.cad.add_polygon( list_xy=[0, 0, self.lx, 0, self.lx, self.lz, 0, self.lz]) self.mesher = dfm2.Mesher_Cad2D(edge_length=0.01) self.mesh = self.mesher.meshing(self.cad)
def test_svg(self,request): is_gl = request.config.getoption('--is_gl') == "true" cad = dfm2.Cad2D() for itr in range(3): cad.clear() cad.import_svg("../test_inputs/shape" + str(itr) + ".svg") if is_gl: dfm2.gl.glfw.winDraw3d([cad],nframe=20)
def test0(self): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D() mesh = mesher.meshing(cad) cdmsh = dfm2.CppMeshDynTri3D() dfm2.meshdyntri3d_initialize(cdmsh, mesh.np_pos, mesh.np_elm) cdmsh.check()
def main(): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) mesh = mesher.meshing(cad) femScalarPoisson(cad, mesh, mesher) femSclarDiffuse(cad, mesh, mesher) femSolidLinear_Static(cad, mesh) femSolidLinear_Dynamic(cad, mesh) femFluidStokes_Static(cad, mesh) femFluidStokes_Dynamic(cad, mesh) femFluidNavirStokes(cad, mesh) femShellCloth() cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, 0, +0, +0, 0, +1, -1, +1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) mesh = mesher.meshing(cad) femScalarPoissonMasterSlave(cad, mesh) cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.1) mesh = mesher.meshing(cad) pbd1(cad, mesh) pbd_cloth() cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -0.2, +1, -0.2, +1, +0.2, -1, +0.2]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) msh2 = mesher.meshing(cad) femShellPlateBendingMitc3_Static(cad, mesher, msh2) femShellPlateBendingMitc3_Eigen(msh2) # return msh25 = dfm2.Mesh() msh25.set_extrude(msh2, 1) msh25.np_pos[:, 2] *= 0.05 femSolidLinear_Eigen(msh25)
def test1(self): cad = dfm2.Cad2D() cad.add_polygon([-1,-1, +1,-1, +1,+1, -1,+1]) assert cad.ccad.ind_vtx_face(0) == [0,1,2,3] assert cad.ccad.ind_edge_face(0) == [(0,True),(1,True),(2,True),(3,True)] assert cad.ccad.check() #### cad.add_vtx_edge(0,[0.0,0.0]) assert cad.ccad.check() assert cad.ccad.ind_vtx_face(0) == [0,4,1,2,3] assert cad.ccad.ind_edge_face(0) == [(0,True),(4,True),(1,True),(2,True),(3,True)]
def test3(self): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) dmsh = mesher.meshing(cad) assert dmsh.np_pos.shape[1] == 2 np_xy_bound = numpy.array(cad.ccad.xy_vtxctrl_face(0)).reshape([-1, 2]) W = dfm2.mvc(dmsh.np_pos, np_xy_bound) assert W.ndim == 2 assert W.shape[0] == dmsh.np_pos.shape[0] assert W.shape[1] == len(cad.ccad.xy_vtxctrl_face(0))/2 assert numpy.linalg.norm(W.sum(axis=1)-numpy.ones((W.shape[0])))<1.0e-3
def test1(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) msh = mesher.meshing(cad) fem = dfm2.FEM_SolidLinearDynamic() fem.param_gravity_y = -0.1 fem.updated_topology(msh) npIdP = cad.points_edge([3], msh.np_pos) fem.ls.bc[npIdP, :] = 1 ## field = dfm2.gl.VisFEM_ColorContour(fem, name_disp="vec_val") if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([fem, field], nframe=100)
def test1(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) msh = mesher.meshing(cad) fem = dfm2.FEM_ScalarPoisson(source=1.0) fem.updated_topology(msh) npIdP = cad.points_edge([0, 1, 2, 3], msh.np_pos) fem.ls.bc[npIdP] = 1 fem.solve() ## field = dfm2.gl.VisFEM_ColorContour(fem, "value") if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([field], nframe=10)
def __init__(self): super(QWindow_Cad2D, self).__init__() self.cad = dfm2.Cad2D() self.cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1]) self.glWidget = dfm2.qt.QGLW_Cad2D() self.glWidget.cadobj = self.cad mainLayout = QVBoxLayout() mainLayout.addWidget(self.glWidget) self.setLayout(mainLayout) self.setWindowTitle("CAD")
def events(): nonlocal icnt, gui if icnt == 10: gui.cadobj = dfm2.Cad2D() gui.cadobj.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1]) if icnt == 20: gui.cadobj.pick(-1, +1, view_height=2) assert gui.cadobj.ivtx_picked() == 3 if icnt > 20 and icnt < 30: gui.cadobj.motion([-1, +1, 0], [-1 - (icnt - 20) * 0.02, +1, 0], [0, 0, 1]) if icnt == 30: gui.close() icnt += 1 gui.update()
def example1(): cad = dfm2.Cad2D() cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) mesh = mesher.meshing(cad) fem = dfm2.FEM_ShellCloth() fem.updated_topology(mesh) npIdP = cad.points_edge([2], mesh.np_pos) fem.ls.bc[npIdP, 0:3] = 1 fem.sdf = dfm2.CppSDF3_Sphere(0.55, [0, +0.5, -1.0], True) mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=mesh.np_elm) axis = dfm2.gl.AxisXYZ(1.0) dfm2.gl.glfw.winDraw3d([fem, mesh2, axis, fem.sdf])
def main_CppMeshDynTri2D_1(): cad = dfm2.Cad2D() cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.1) dmesh = mesher.meshing(cad) cdmesh = dmesh.cdmsh cdmesh.check() for itr in range(100): itri0 = random.randint(0,cdmesh.ntri()-1) r0 = random.uniform(0.02, 0.98) r1 = random.uniform(0.01, 0.99-r0) ipo= cdmesh.insert_point_elem(itri0,r0,r1) cdmesh.delaunay_around_point(ipo) cdmesh.check() dfm2.gl.glfw.winDraw3d([cdmesh],winsize=(400,300))
def test1(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) #### mesher = dfm2.Mesher_Cad2D(edge_length=0.05) msh = mesher.meshing(cad) fem = dfm2.FEM_ShellCloth() fem.updated_topology(msh) npIdP = cad.points_edge([2], msh.np_pos) fem.ls.bc[npIdP, 0:3] = 1 #### mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=msh.np_elm) axis = dfm2.gl.AxisXYZ(1.0) if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([fem, mesh2, axis], nframe=100)
def test1(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.08) mesh = mesher.meshing(cad) dmesh = dfm2.CppMeshDynTri3D() dfm2.meshdyntri3d_initialize(dmesh, mesh.np_pos, mesh.np_elm) dmesh.check() for itr in range(100): itri0 = random.randint(0, dmesh.ntri() - 1) r0 = random.uniform(0.02, 0.98) r1 = random.uniform(0.01, 0.99 - r0) ipo = dmesh.insert_point_elem(itri0, r0, r1) dmesh.delaunay_around_point(ipo) dmesh.check() if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([dmesh], winsize=(400, 300), nframe=10)
def test_pbd_tri(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.1) mesh = mesher.meshing(cad) pbd = dfm2.PBD() pbd.updated_topology(mesh) npIdP = cad.points_edge([0], mesh.np_pos) pbd.vec_bc[npIdP] = 1 fvs = dfm2.FieldValueSetter("0.3*sin(2*t)", pbd.vec_val, 0, mesh=mesh, npIdP=npIdP, dt=pbd.dt) mesh_def = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=mesh.np_elm) if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([fvs, pbd, mesh_def], nframe=100)
def pbd_cloth(): cad = dfm2.Cad2D() cad.add_polygon( list_xy=[-1, -1, +1, -1, +1, +1, +0.8, +1, -0.8, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) mesh = mesher.meshing(cad) #### pbd = dfm2.PBD_Cloth() pbd.param_gravity_y = -0.1 pbd.param_gravity_z = -0.001 pbd.dt = 0.08 pbd.updated_topology(mesh) npIdP = mesher.points_on_edges([2, 4], cad) pbd.bc[npIdP] = 1 #### mesh2 = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=mesh.np_elm) axis = dfm2.gl.AxisXYZ(1.0) dfm2.gl.glfw.winDraw3d([pbd, mesh2, axis])
def femShellCloth(): cad = dfm2.Cad2D() cad.add_polygon( list_xy=[-1, -1, +1, -1, +1, +1, +0.8, +1, -0.8, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) mesh = mesher.meshing(cad) #### fem = dfm2.FEM_ShellCloth() fem.dt = 0.08 fem.lmd = 1000 fem.myu = 100 fem.gravity = (0, -1, 0.01) fem.updated_topology(mesh) npIdP = cad.points_edge([2, 4], mesh.np_pos) fem.ls.bc[npIdP, 0:3] = 1 #### mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=mesh.np_elm) axis = dfm2.gl.AxisXYZ(1.0) dfm2.gl.glfw.winDraw3d([fem, mesh2, axis])
def main_MeshDynTri2D_3(): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) dmsh = mesher.meshing(cad) fem = dfm2.FEM_ShellCloth() fem.updated_topology(dmsh) npIdP = cad.points_edge([0], dmsh.np_pos) fem.ls.bc[npIdP,:] = 1 mesh2 = dfm2.Mesh(np_pos=fem.vec_val,np_elm=dmsh.np_elm) dfm2.gl.glfw.winDraw3d([fem,mesh2]) ##### mesh2 = None mapper = dmsh.refine_EdgeLongerThan_InsideCircle(0.05, 0.0,0.0,0.5) fem.updated_topology(dmsh,mapper=mapper) fem.ls.bc[npIdP,:] = 1 mesh2 = dfm2.Mesh(np_pos=fem.vec_val,np_elm=dmsh.np_elm) dfm2.gl.glfw.winDraw3d([fem,mesh2]) '''
def test2(self): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1]) assert cad.ccad.check() #### cad.pick(-1,-1, 2.0) assert cad.ivtx_picked() == 0 assert cad.iedge_picked() == -1 assert cad.iface_picked() == -1 #### cad.pick(+0,-1, 2.0) assert cad.ivtx_picked() == -1 assert cad.iedge_picked() == 0 assert cad.iface_picked() == -1 #### cad.pick(-0.1432143,-0.1653542343, 2.0) assert cad.ivtx_picked() == -1 assert cad.iedge_picked() == -1 assert cad.iface_picked() == 0
def test1(self, request): cad = dfm2.Cad2D() cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) msh = mesher.meshing(cad) fem = dfm2.FEM_FluidStorksStatic(msh) npIdP0 = cad.points_edge([0, 1, 2, 3], msh.np_pos) fem.ls.bc[npIdP0, 0:2] = 1 npIdP1 = cad.points_edge([2], msh.np_pos) fem.vec_val[npIdP1, 0] = 1.0 fem.solve() #### field_p = dfm2.gl.VisFEM_ColorContour(fem, name_color="vec_val", idim=2) field_p.set_color_minmax() field_v = dfm2.gl.VisFEM_Hedgehog(fem, name_vector="vec_val") axis = dfm2.gl.AxisXYZ(1.0) if request.config.getoption('--is_gl') == "true": dfm2.gl.glfw.winDraw3d([field_p, field_v, axis], nframe=10)
def main_MeshDynTri2D_2(): cad = dfm2.Cad2D() cad.add_polygon([-1,-1, +1,-1, +1,+1, -1,+1]) mesher = dfm2.Mesher_Cad2D(edge_length=0.05) dmsh = mesher.meshing(cad) #### fem = dfm2.FEM_ScalarPoisson(source=1.0) fem.updated_topology(dmsh) npIdP = cad.points_edge([0,1,2,3], dmsh.np_pos) fem.value[npIdP] = 0.0 fem.ls.bc[npIdP] = 1 fem.solve() vis = dfm2.gl.VisFEM_ColorContour(fem,name_color="value") dfm2.gl.glfw.winDraw3d([vis,dmsh]) ##### mapper = dmsh.refine_EdgeLongerThan_InsideCircle(0.05, 0.0,0.0,0.5) fem.updated_topology(dmsh,mapper=mapper) dfm2.gl.glfw.winDraw3d([vis,dmsh]) ##### fem.value[npIdP] = 0.0 fem.ls.bc[npIdP] = 1 fem.solve() dfm2.gl.glfw.winDraw3d([vis,dmsh])
def example1(): cad = dfm2.Cad2D() cad.add_polygon([+0,0, +1,0, +1,+1, 0,+1.0]) cad.add_polygon([+2,0, +3,0, +3,+1, 2,+1.0]) mesher = dfm2.Mesher_Cad2D(edge_length=0.03) mesh = mesher.meshing(cad) #### pbd = dfm2.PBD_Cloth() # pbd.param_gravity_y = -0.1 pbd.dt = 0.08 pbd.updated_topology(mesh) trans0 = dfm2.Trans_Rigid2DTo3D() trans0.org2 = numpy.array([0.5,0.5]) trans0.org3 = numpy.array([0.0,0.0,0.5]) trans1 = dfm2.Trans_Rigid2DTo3D() trans1.org2 = numpy.array([2.5,0.5]) trans1.org3 = numpy.array([0.0,0.0,-0.5]) trans1.R = dfm2.util.mat3_rot_cartesian(numpy.array([0,3.1415,0])) npIndP_Face0 = mesher.points_on_faces([0],cad) pbd.vec_val[npIndP_Face0] = trans0.trans(pbd.dmsh.np_pos[npIndP_Face0]) npIndP_Face1 = mesher.points_on_faces([1],cad) pbd.vec_val[npIndP_Face1] = trans1.trans(pbd.dmsh.np_pos[npIndP_Face1]) npIndP_Edge0a = mesher.points_on_one_edge(1,True,cad) npIndP_Edge0b = mesher.points_on_one_edge(7,True,cad) npIndP_Seam0 = numpy.vstack([npIndP_Edge0a,npIndP_Edge0b[::-1]]).transpose() npIndP_Edge1a = mesher.points_on_one_edge(3,True,cad) npIndP_Edge1b = mesher.points_on_one_edge(5,True,cad) npIndP_Seam1 = numpy.vstack([npIndP_Edge1a,npIndP_Edge1b[::-1]]).transpose() pbd.elems_seam = numpy.vstack([npIndP_Seam0,npIndP_Seam1]).copy().astype(numpy.uint32) # to allign data mesh2 = dfm2.Mesh(np_pos=pbd.vec_val,np_elm=mesh.np_elm) mesh3 = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=pbd.elems_seam, elem_type=dfm2.LINE) pbd.sdf = dfm2.SDF() pbd.sdf.add( dfm2.CppSDF3_Sphere(0.3, [0.0, 0.0, 0.0], True) ) axis = dfm2.gl.AxisXYZ(1.0) dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,axis]) ######### msh_trg = dfm2.Mesh() msh_trg.set_sphere(0.3, 16, 16) pbd.sdf = dfm2.Collider_PointsToMeshTri3D() pbd.sdf.set_mesh(msh_trg) dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,msh_trg,axis]) ######### gltf = PyDelFEM2.CppGLTF() gltf.read("../test_inputs/CesiumMan.glb") np_pos0, np_elm, np_rigw, np_rigj = dfm2.CppGLTF_GetMeshInfo(gltf, 0, 0) np_pos = np_pos0.copy() bones = dfm2.CppGLTF_GetBones(gltf,0) bones.set_rotation_bryant(0, [-3.1415 * 0.5, 0.0, 0.0]) bones.set_translation(0, [0.0, 0.0, +0.2]) dfm2.update_rig_skin(np_pos, np_pos0, np_elm, bones, np_rigw, np_rigj) msh_trg = dfm2.Mesh(np_pos,np_elm,dfm2.TRI) pbd.sdf = dfm2.Collider_PointsToMeshTri3D() pbd.sdf.set_mesh(msh_trg) dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,msh_trg,axis], winsize=(400, 300))