def setUp(self): ''' Construct the FEDomain with one FERefinementGrids (2,2) ''' self.fets_eval = FETS3D8H() self.grid = FEGrid(coord_max=(1., 1., 1.), shape=(1, 1, 1), fets_eval=self.fets_eval)
def example_3d(): from ibvpy.mats.mats3D.mats3D_elastic.mats3D_elastic import MATS3DElastic from ibvpy.fets.fets3D.fets3D8h import FETS3D8H fets_eval = FETS3D8H(mats_eval=MATS3DElastic()) fe_domain = FEDomain() fe_level1 = FERefinementGrid(domain=fe_domain, fets_eval=fets_eval) # Discretization fe_domain1 = FEGrid(coord_max=(2., 5., 3.), shape=(2, 3, 2), level=fe_level1, fets_eval=fets_eval) fe_child_domain = FERefinementGrid(parent=fe_domain1, fine_cell_shape=(2, 2, 2)) fe_child_domain.refine_elem((1, 1, 0)) fe_child_domain.refine_elem((0, 1, 0)) fe_child_domain.refine_elem((1, 1, 1)) fe_child_domain.refine_elem((0, 1, 1)) ts = TS( dof_resultants=True, sdomain=fe_domain, bcond_list=[ BCDofGroup(var='f', value=1., dims=[0], get_dof_method=fe_domain1.get_top_dofs), BCDofGroup(var='u', value=0., dims=[0, 1], get_dof_method=fe_domain1.get_bottom_dofs), ], rtrace_list=[ RTraceGraph(name='Fi,right over u_right (iteration)', var_y='F_int', idx_y=0, var_x='U_k', idx_x=1), # RTraceDomainListField(name = 'Stress' , # var = 'sig_app', idx = 0, warp = True ), # RTraceDomainField(name = 'Displacement' , # var = 'u', idx = 0), # RTraceDomainField(name = 'N0' , # var = 'N_mtx', idx = 0, # record_on = 'update') ]) # Add the time-loop control tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0)) print tloop.eval() from ibvpy.plugins.ibvpy_app import IBVPyApp ibvpy_app = IBVPyApp(ibv_resource=tloop) ibvpy_app.main()
def setUp( self ): # test elastic case: compare values of MATS2D5 with no damage (phi_fn = 1 (const.)). phi_fn = PhiFnGeneral() print(phi_fn.mfn.xdata) print(phi_fn.mfn.ydata) # linear elements self.fets_eval3D = FETS3D8H( mats_eval = MATS3DElastic( E = 34000., nu = 0.25 ) ) self.fets_eval2D5 = FETS2D58H( mats_eval = MATS2D5MicroplaneDamage( E = 34000., nu = 0.25, model_version = "compliance", #model_version = "stiffness", phi_fn = phi_fn ) )
def assert_stress_value( self, sig_expected, n_steps=3, load=0.0001, ): '''Assert that the symmetry is given for the applied loadings. ''' self.fets_eval = FETS3D8H(mats_eval=self.mats_eval) support_slices = [ [ (0, slice(None), slice(None), 0, slice(None), slice(None)), # yz plane 0 (0, 0, slice(None), 0, 0, slice(None)), # z plane 0 (0, 0, 0, 0, 0, 0), # z plane 0 ], # [ # (0 ,0 ,0 ,0 ,0 ,0 ), # z plane 0 # (slice(None),0 ,slice(None),slice(None),0 ,slice(None)), # xz plane 1 # (slice(None),0 ,0 ,slice(None),0 ,0 ), # z plane 0 # ], # [ # (0 ,slice(None),0 ,0 ,slice(None),0 ), # z plane 0 # (0 ,0 ,0 ,0 ,0 ,0 ), # z plane 0 # (slice(None),slice(None),0 ,slice(None),slice(None),0 ), # xy plane 1 # ] ] support_dirs = [[0], [1], [2]] loading_slices = [ (-1, slice(None), slice(None), -1, slice(None), slice(None)), # loading in x dir # (slice(None),-1 ,slice(None),slice(None),-1 ,slice(None)), # loading in y dir # (slice(None),slice(None),-1 ,slice(None),slice(None),-1 ), # loading in y dir ] load_dirs = [0] # ,1,2] vars = ['sig_app'] r = [ simgrid(self.fets_eval, (1, 1, 1), (1, 1, 1), support_slice, support_dirs, loading_slice, load_dir, load, 1, vars) for support_slice, loading_slice, load_dir in zip( support_slices, loading_slices, load_dirs) ] for rr in r: sig_end = rr[2][0] # all material points must have the same value - uniform loading. for sig, sig_exp in zip(sig_end.flatten(), sig_expected): self.assertAlmostEqual(sig, sig_exp, 4)
def assert_total_energy_value( self, value_expected, ivar='strain_energy', n_steps=3, load=1.0, ): '''Assert that the symmetry is given for the applied loadings. ''' self.fets_eval = FETS3D8H(mats_eval=self.mats_eval) support_slices = [ [ (0, slice(None), slice(None), 0, slice(None), slice(None)), # yz plane 0 # (0 ,0 ,slice(None),0 ,0 ,slice(None)), # z plane 0 # (0 ,0 ,0 ,0 ,0 ,0 ), # z plane 0 ], # [ # (0 ,0 ,0 ,0 ,0 ,0 ), # z plane 0 # (slice(None),0 ,slice(None),slice(None),0 ,slice(None)), # xz plane 1 # (slice(None),0 ,0 ,slice(None),0 ,0 ), # z plane 0 # ], # [ # (0 ,slice(None),0 ,0 ,slice(None),0 ), # z plane 0 # (0 ,0 ,0 ,0 ,0 ,0 ), # z plane 0 # (slice(None),slice(None),0 ,slice(None),slice(None),0 ), # xy plane 1 # ] ] support_dirs = [[0, 1, 2]] # ,[1],[2]] loading_slices = [ (-1, slice(None), slice(None), -1, slice(None), slice(None)), # loading in x dir # (slice(None),-1 ,slice(None),slice(None),-1 ,slice(None)), # loading in y dir # (slice(None),slice(None),-1 ,slice(None),slice(None),-1 ), # loading in y dir ] load_dirs = [0] # ,1,2] ivars = [ivar] r = simgrid(self.fets_eval, (1, 1, 1), (1, 1, 1), support_slices[0], support_dirs, loading_slices[0], 0, load, n_steps, ivars=ivars) self.assertAlmostEqual(r[3][0][0], value_expected)
def assert_symmetry_on_cube_with_clamped_face(self, load_dirs, load=0.001): '''Assert that the symmetry is given for the applied loadings. ''' self.fets_eval = FETS3D8H(mats_eval=self.mats_eval) support_slices = [ [ (0, slice(None), slice(None), 0, slice(None), slice(None)), # yz plane 0 ], [ (slice(None), 0, slice(None), slice(None), 0, slice(None)), # xz plane 1 ], [ (slice(None), slice(None), 0, slice(None), slice(None), 0), # xy plane 1 ] ] support_dirs = [[0, 1, 2]] loading_slices = [ (-1, slice(None), slice(None), -1, slice(None), slice(None)), # loading in x dir (slice(None), -1, slice(None), slice(None), -1, slice(None)), # loading in y dir (slice(None), slice(None), -1, slice(None), slice(None), -1), # loading in y dir ] vars = [] # ['u','eps_app','sig_app','fracture_energy'] r = [ simgrid(self.fets_eval, (1, 1, 1), (1, 1, 1), support_slice, support_dirs, loading_slice, load_dir, load, 1, vars) for support_slice, loading_slice, load_dir in zip( support_slices, loading_slices, load_dirs) ] u = array([r[i][1][-3:] for i in range(3)]) for idx1, idx2 in self.sym_assert_pattern: self.assertAlmostEqual(u[idx1], u[idx2])
graph.redraw() traces = [graph.trace for graph in graphs] xydata = (traces[0].xdata, column_stack([trace.ydata for trace in traces])) return tloop, u, fields, integs, xydata if __name__ == '__main__': from ibvpy.mats.mats3D.mats3D_elastic.mats3D_elastic import MATS3DElastic from ibvpy.mats.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic from ibvpy.fets.fets3D.fets3D8h import FETS3D8H from ibvpy.fets.fets2D5.fets2D58h import FETS2D58H fets_eval_3D = FETS3D8H(mats_eval=MATS3DElastic(E=34000, nu=0.25)) support_slices = [ [ (0, slice(None), slice(None), 0, slice(None), slice(None)), # yz plane 0 (0, 0, slice(None), 0, 0, slice(None)), # z-axis 1 (0, 0, 0, 0, 0, 0) # origin 2 ], [ (0, 0, 0, 0, 0, 0), # origin 0 (slice(None), 0, slice(None), slice(None), 0, slice(None)), # xz plane 1 (slice(None), 0, 0, slice(None), 0, 0), # y-axis 2 ], [
''' Created on Jul 7, 2010 @author: alexander ''' from hp_shell import HPShell from ibvpy.mesh.fe_grid import FEGrid from ibvpy.fets.fets3D.fets3D8h import FETS3D8H from numpy import savetxt, array if __name__ == '__main__': hp_shell = HPShell() fets = FETS3D8H() dens_xy = [10, 20, 50] dens_z = [1, 3] for xy in dens_xy: for z in dens_z: fe_grid = FEGrid( coord_min = ( 0.0, 0.0, 0.0 ), coord_max = ( 1.0, 1.0, 1.0 ), geo_transform = hp_shell, shape = ( xy, xy, z ), fets_eval = fets )
def _get_fe_linear_roof(self): return FETS3D8H(mats_eval=self.mats_roof)
def _get_fe_linear_plate(self): return FETS3D8H(mats_eval=self.mats_plate)