示例#1
0
 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)
示例#2
0
    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()
示例#3
0
    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 ) )
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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])
示例#7
0
        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
        ],
        [
示例#8
0
'''
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
                              )
示例#9
0
 def _get_fe_linear_roof(self):
     return FETS3D8H(mats_eval=self.mats_roof)
示例#10
0
 def _get_fe_linear_plate(self):
     return FETS3D8H(mats_eval=self.mats_plate)