Пример #1
0
    def example_1d():
        from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic
        from ibvpy.fets.fets1D.fets1D2l import FETS1D2L
        fets_eval = FETS1D2L(mats_eval=MATS1DElastic())
        # Discretization

        fe_domain = FEDomain()
        fe_level1 = FERefinementGrid(domain=fe_domain, fets_eval=fets_eval)

        fe_domain1 = FEGrid(coord_max=(3., 0., 0.),
                            shape=(3,),
                            level=fe_level1,
                            fets_eval=fets_eval)

        fe_child_domain = FERefinementGrid(parent_domain=fe_level1,
                                           fine_cell_shape=(2,))
        fe_child_domain.refine_elem((1,))

        ts = TS(domain=fe_domain,
                dof_resultants=True,
                sdomain=fe_domain,
                bcond_list=[BCDof(var='u', dof=0, value=0.),
                            BCDof(var='f', dof=3, value=1.)]
                )

        # Add the time-loop control
        tloop = TLoop(tstepper=ts, debug=True,
                      tline=TLine(min=0.0, step=1, max=1.0))

        print tloop.eval()
Пример #2
0
def ghost_bar( ):

    fets_eval = FETS1D2L( mats_eval = MATS1DElastic() ) 

    discr = ( 3, )
    # Discretization
    fe_domain1 = FEGrid( coord_min = (0,0,0),
                               coord_max = (2,0,0), 
                               shape   = discr,
                               inactive_elems = [0],
                               fets_eval = fets_eval )

    ts = TS( sdomain = fe_domain1,
             dof_resultants = True,
             bcond_list =  [ BCDof( var='u', value = 0., dof = 0 ),
                             BCDof( var='u', value = 0., dof = 3 ),
                             BCDof( var='f', value = 1., dof = 1 ) ],
            )

    # Add the time-loop control
    global tloop
    tloop = TLoop( tstepper = ts, tolerance = 1e-4, KMAX = 50,
                        tline  = TLine( min = 0.0,  step = 1.0, max = 1.0 ))

    print tloop.eval()
Пример #3
0
    def eval( self ):
        '''Run the time loop.
        '''
        # 
        avg_processor = None
        if self.avg_radius > 0.0:
            avg_processor = RTNonlocalAvg( sd = self.fe_domain,
                                           avg_fn = QuarticAF( radius = self.avg_radius,
                                                               correction = True ) )

        ts = TS( u_processor = avg_processor,
                 dof_resultants = True,
                 sdomain = self.fe_domain,
                 bcond_list = self.bc_list,
                 rtrace_list = self.rt_list
                )

        # Add the time-loop control
        tloop = TLoop( tstepper = ts, KMAX = 300, tolerance = 1e-8,
                       debug = False,
                       verbose_iteration = False,
                       verbose_time = False,
                       tline = TLine( min = 0.0, step = self.step_size, max = 1.0 ) )

        tloop.eval()

        tloop.accept_time_step()

        self.plot_time_function()
        self.plot_tracers()
def combined_fe2D4q_with_fe2D4q8u():

    fets_eval_4u = FETS2D4Q(mats_eval = MATS2DElastic(E= 1.,nu = 0.))
    fets_eval_8u = FETS2D4Q8U(mats_eval = MATS2DElastic())
    xfets_eval = FETSCrack(parent_fets = fets_eval_4u) # should be set automatically

    # Discretization
    fe_domain1 = FEGridDomain( coord_max = (2.,6.,0.), 
                               shape   = (1,3),
                               fets_eval = fets_eval_4u )

    fe_subdomain = FESubGridDomain( parent_domain = fe_domain1,
                                    #fets_eval = fets_eval_8u,
                                    fets_eval = fets_eval_4u,
                                    #fets_eval = xfets_eval,
                                    fine_cell_shape = (1,1) )
    
    fe_subdomain.refine_elem( (0,1) )
    elem = fe_subdomain.elements
    m_elem = fe_domain1.elements
    print "nodes ",elem[0]

    fe_domain  = FEDomainList( subdomains = [ fe_domain1 ] )

    ts = TS( dof_resultants = True,
             sdomain = fe_domain,
             bcond_list =  [BCDofGroup(var='u', value = 1., dims = [1],
                                       get_dof_method = fe_domain1.get_top_dofs ),
                            BCDofGroup(var='u', value = 0., dims = [1],
                                       get_dof_method = fe_domain1.get_bottom_dofs ),
                            BCDofGroup(var='u', value = 0., dims = [0],
                                       get_dof_method = fe_domain1.get_bottom_left_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 = 1, warp = True ),
                        RTraceDomainListField(name = 'Displ' ,
                             var = 'u', idx = 1, 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()
    print "nodes after",elem[0]
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    ibvpy_app = IBVPyApp( ibv_resource = tloop )
    ibvpy_app.main()
Пример #5
0
    def eval(self):
        '''Run the time loop.
        '''
        #
        avg_processor = None
        if self.avg_radius > 0.0:
            avg_processor = RTNonlocalAvg(sd=self.fe_domain,
                                          avg_fn=QuarticAF(
                                              radius=self.avg_radius,
                                              correction=True))

        ts = TS(u_processor=avg_processor,
                dof_resultants=True,
                sdomain=self.fe_domain,
                bcond_list=self.bc_list,
                rtrace_list=self.rt_list)

        # Add the time-loop control
        tloop = TLoop(tstepper=ts,
                      KMAX=300,
                      tolerance=1e-8,
                      debug=False,
                      verbose_iteration=False,
                      verbose_time=False,
                      tline=TLine(min=0.0, step=self.step_size, max=1.0))

        tloop.eval()

        tloop.accept_time_step()

        self.plot_time_function()
        self.plot_tracers()
Пример #6
0
def test_bar2():
    '''Clamped bar composed of two linked bars loaded at the right end
    [00]-[01]-[02]-[03]-[04]-[05]-[06]-[07]-[08]-[09]-[10]
    [11]-[12]-[13]-[14]-[15]-[16]-[17]-[18]-[19]-[20]-[21]
    u[0] = 0, u[5] = u[16], R[-1] = R[21] = 10
    '''
    fets_eval = FETS1D2L(mats_eval=MATS1DElastic(E=10., A=1.))

    # Discretization
    fe_domain1 = FEGrid(coord_max=(10., 0., 0.),
                        shape=(10, ),
                        n_nodal_dofs=1,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    fe_domain2 = FEGrid(coord_min=(10., 0., 0.),
                        coord_max=(20., 0., 0.),
                        shape=(10, ),
                        n_nodal_dofs=1,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    ts = TS(iterms=[(fets_eval, fe_domain1), (fets_eval, fe_domain2)],
            dof_resultants=True,
            bcond_list=[
                BCDof(var='u', dof=0, value=0.),
                BCDof(var='u',
                      dof=5,
                      link_dofs=[16],
                      link_coeffs=[1.],
                      value=0.),
                BCDof(var='f', dof=21, value=10)
            ],
            rtrace_list=[
                RTraceGraph(name='Fi,right over u_right (iteration)',
                            var_y='F_int',
                            idx_y=0,
                            var_x='U_k',
                            idx_x=1),
            ])

    # Add the time-loop control
    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0))
    u = tloop.eval()
    print 'u', u
    #
    # '---------------------------------------------------------------'
    # 'Clamped bar composed of two linked bars control displ at right'
    # 'u[0] = 0, u[5] = u[16], u[21] = 1'
    # Remove the load and put a unit displacement at the right end
    # Note, the load is irrelevant in this case and will be rewritten
    #
    ts.bcond_list = [
        BCDof(var='u', dof=0, value=0.),
        BCDof(var='u', dof=5, link_dofs=[16], link_coeffs=[1.], value=0.),
        BCDof(var='u', dof=21, value=1.)
    ]
    # system solver
    u = tloop.eval()
    print 'u', u
Пример #7
0
    def example_1d():
        from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic
        from ibvpy.fets.fets1D.fets1D2l import FETS1D2L
        fets_eval = FETS1D2L(mats_eval=MATS1DElastic())
        # Discretization

        fe_domain = FEDomain()
        fe_level1 = FERefinementGrid(domain=fe_domain, fets_eval=fets_eval)

        fe_domain1 = FEGrid(coord_max=(3., 0., 0.),
                            shape=(3, ),
                            level=fe_level1,
                            fets_eval=fets_eval)

        fe_child_domain = FERefinementGrid(parent_domain=fe_level1,
                                           fine_cell_shape=(2, ))
        fe_child_domain.refine_elem((1, ))

        ts = TS(domain=fe_domain,
                dof_resultants=True,
                sdomain=fe_domain,
                bcond_list=[
                    BCDof(var='u', dof=0, value=0.),
                    BCDof(var='f', dof=3, value=1.)
                ])

        # Add the time-loop control
        tloop = TLoop(tstepper=ts,
                      debug=True,
                      tline=TLine(min=0.0, step=1, max=1.0))

        print tloop.eval()
Пример #8
0
def screwed_chess_board( ):
    '''Clamped bar 3 domains, each with 2 elems (displ at right end)
    [0]-[1]-[2] [3]-[4]-[5] [6]-[7]-[8]
    u[0] = 0, u[2] = u[3], u[5] = u[6], u[8] = 1'''
    
    mp = MATS2DElastic( E = 34.e3,
                        nu = 0.2 ) 

    fets_eval = FETS2D4Q(mats_eval = mp ) 
    #fets_eval = FETS2D4Q8U(mats_eval = mp ) 

    nx = 8
    ny = 8
    discr = ( nx, ny )
    inactive_elems = []
    for j in range( ny / 2 ):
        inactive_elems += [ i*2*ny+(j*2) for i in range( nx / 2 ) ] + \
                          [ (ny+1)+i*2*ny+(j*2) for i in range( nx / 2 ) ]
    load_dof = (ny+1) * 2 * (nx / 2) + ny
    # Discretization
    fe_domain1 = FEGrid( coord_min = (0,0,0),
                          coord_max = (2.,2.,0.), 
                          shape   = discr,
                          inactive_elems = inactive_elems,
                          fets_eval = fets_eval )

    ts = TS( sdomain = fe_domain1,
             dof_resultants = True,
             bcond_list =  [ BCDofGroup( var='u', value = 0., dims = [0,1],
                                         get_dof_method = fe_domain1.get_bottom_dofs ),
                             BCDofGroup( var='u', value = 0, dims = [0,1],
                                         get_dof_method = fe_domain1.get_top_dofs ), 
                             BCDofGroup( var='u', value = 0, dims = [0,1],
                                         get_dof_method = fe_domain1.get_left_dofs ), 
                             BCDofGroup( var='u', value = 0, dims = [0,1],
                                         get_dof_method = fe_domain1.get_right_dofs ), 
                             BCDof( var='f', value = 100., dof = load_dof ),
                             BCDof( var='f', value = 100., dof = load_dof+1 ),
                        ],
             rtrace_list =  [ RTraceDomainListField( name = 'Displacement', 
                                                     var = 'u', 
                                                     idx = 1, warp = False ),
                              RTraceDomainListField(name = 'Stress' ,
                              var = 'sig_app', idx = 0,
                              record_on = 'update',
                              warp = True),
                              ]             
            )

    # Add the time-loop control
    global tloop
    tloop = TLoop( tstepper = ts, tolerance = 1e-4, KMAX = 50,
                        tline  = TLine( min = 0.0,  step = 1.0, max = 1.0 ))

    tloop.eval()

    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()      
Пример #9
0
def example_with_new_domain():    
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, IBVPSolve as IS, DOTSEval
    from ibvpy.api import BCDofGroup
    from ibvpy.mats.mats1D5.mats1D5bond_elastic_frictional import MATS1D5Bond
    from ibvpy.mesh.fe_grid import FEGrid
    from mathkit.mfn.mfn_line.mfn_line import MFnLineArray
        
    fets_eval = FETS1D52B6ULRH(mats_eval = MATS1D5Bond(Ef = 17000.,
                                                    Af = 2.65e-6/4.,
                                                    Am = 2.65e-6/4.,
                                                    Em = 17000.,
                                                    tau_max = 8.23 * 2,
                                                    tau_fr = 8.23  * 2 ,
                                                    s_cr = 0.030e-3 * 10 )) 
    # Discretization

    domain = FEGrid( coord_max = (1.,.1,0.), #new domain
                           shape   = (1,1),
                           fets_eval = fets_eval)
                                         
    ts = TS( dof_resultants = True,
         sdomain = domain,
         # conversion to list (square brackets) is only necessary for slicing of 
         # single dofs, e.g "get_left_dofs()[0,1]"
         bcond_list =  [BCDofGroup(var='u', value = 0.,dims = [0],
                               get_dof_method = domain.get_left_dofs),\
                      # imposed displacement for all right dofs in y-direction:
#                        BCDofGroup(var='u', value = 0., dims = [0],
#                            get_dof_method = domain.get_top_right_dofs ),
                        BCDofGroup(var='u', value = 1.e-3, dims = [0],
                            get_dof_method = domain.get_bottom_right_dofs )],
         rtrace_list =  [ RTraceGraph(name = 'Fi,right over u_right (iteration)' ,
                               var_y = 'F_int', idx_y = 1,
                               var_x = 'U_k', idx_x = 1),
                        RTraceDomainListField(name = 'Debonding' ,
                                var = 'debonding', idx = 0 ),
                        RTraceDomainListField(name = 'Displacement' ,
                                var = 'u', idx = 0),
#                             RTraceDomainListField(name = 'N0' ,
#                                          var = 'N_mtx', idx = 0,
#                                          record_on = 'update')
                      
                ]             
            )
    
    # Add the time-loop control
    tloop = TLoop( tstepper = ts,
             DT = 1.,
             tline  = TLine( min = 0.0,  max = 1.0 ))
    
    tloop.eval()    
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #10
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic

    fets_eval = FETS1D2L3U( mats_eval = MATS1DElastic( E = 10. ) )

    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid( coord_max = ( 3., ),
                           shape = ( 3, ),
                           fets_eval = fets_eval )

    ts = TS( dof_resultants = True,
             sdomain = domain,
         # conversion to list (square brackets) is only necessary for slicing of 
         # single dofs, e.g "get_left_dofs()[0,1]"
#         bcond_list =  [ BCDof(var='u', dof = 0, value = 0.)     ] +  
#                    [ BCDof(var='u', dof = 2, value = 0.001 ) ]+
#                    [ )     ],
         bcond_list = [BCDof( var = 'u', dof = 0, value = 0. ),
#                        BCDof(var='u', dof = 1, link_dofs = [2], link_coeffs = [0.5],
#                              value = 0. ),
#                        BCDof(var='u', dof = 2, link_dofs = [3], link_coeffs = [1.],
#                              value = 0. ),
                        BCDof( var = 'f', dof = 6, value = 1,
                                  #link_dofs = [2], link_coeffs = [2]
                                   ) ],
         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 ),
                     RTraceDomainListField( name = 'Displacement' ,
                                    var = 'u', idx = 0 ),
                             RTraceDomainListField( 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 '---- result ----'
    print tloop.eval()
    print ts.F_int
    print ts.rtrace_list[0].trace.ydata

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #11
0
def run():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic
    from ibvpy.mats.mats1D.mats1D_damage.mats1D_damage import MATS1DDamage
    from ibvpy.fets.fets1D.fets1D2l import FETS1D2L

    #fets_eval = FETS1D2L( mats_eval = MATS1DElastic( E = 10. ) )
    fets_eval = FETS1D2L( mats_eval = MATS1DDamage( E = 10. ) )
    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid( coord_max = ( 1., 0., 0. ),
                           shape = ( 10, ),
                           fets_eval = fets_eval )

    right_dof = domain[-1, -1].dofs[0, 0, 0]

    ts = TS( nonlocal_avg = True,
             dof_resultants = True,
             sdomain = domain,
         # conversion to list (square brackets) is only necessary for slicing of 
         # single dofs, e.g "get_left_dofs()[0,1]"
#         bcond_list =  [ BCDof(var='u', dof = 0, value = 0.)     ] +  
#                    [ BCDof(var='u', dof = 2, value = 0.001 ) ]+
#                    [ )     ],
         bcond_list = [BCDof( var = 'u', dof = 0, value = 0. ),
#                        BCDof(var='u', dof = 1, link_dofs = [2], link_coeffs = [0.5],
#                              value = 0. ),
#                        BCDof(var='u', dof = 2, link_dofs = [3], link_coeffs = [1.],
#                              value = 0. ),
                        BCDof( var = 'f', dof = right_dof, value = 1,
                                  #link_dofs = [2], link_coeffs = [2]
                                   ) ],
         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 ),
                     RTraceDomainListField( name = 'Displacement' ,
                                    var = 'u', idx = 0,
                                    warp = True ),
                             RTraceDomainListField( 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 = 0.5, max = 1.0 ) )

    print '---- result ----'
    print tloop.eval()
    print ts.F_int
    print ts.rtrace_list[0].trace.ydata
Пример #12
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()
Пример #13
0
def notched_bended_beam():

    fets_eval_4u = FETS2D4Q(mats_eval=MATS2DScalarDamage())
    fets_eval_cracked = FETSLSEval(parent_fets=fets_eval_4u)

    # Discretization
    fe_domain1 = FEGrid(coord_max=(5., 2., 0.),
                        shape=(3, 2),
                        fets_eval=fets_eval_4u)

    fe_child_domain = FERefinementGrid(parent_domain=fe_domain1,
                                       fets_eval=fets_eval_cracked,
                                       fine_cell_shape=(1, 1))

    crack_level_set = lambda X: X[0] - 2.5

    fe_child_domain.refine_elem((1, 0), crack_level_set)
    dots = fe_child_domain.new_dots()

    fe_domain = FEDomainList(subdomains=[fe_domain1])
    fe_domain_tree = FEDomainTree(domain_list=fe_domain)

    ts = TS(
        dof_resultants=True,
        sdomain=[fe_domain1, fe_child_domain],
        bcond_list=[
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_domain1.get_left_dofs),
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_domain1.get_right_dofs),
            BCDofGroup(var='f',
                       value=-1.,
                       dims=[1],
                       get_dof_method=fe_domain1.get_top_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()
Пример #14
0
def run_example():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, \
        RTraceDomainListInteg, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats2D.mats2D_conduction.mats2D_conduction import MATS2DConduction

    from ibvpy.api import BCDofGroup
    fets_eval = FETS2D4Q4T(mats_eval=MATS2DConduction(k=1.))

    print fets_eval.vtk_node_cell_data

    from ibvpy.mesh.fe_grid import FEGrid
    from ibvpy.mesh.fe_refinement_grid import FERefinementGrid
    from ibvpy.mesh.fe_domain import FEDomain
    from mathkit.mfn import MFnLineArray

    # Discretization
    fe_grid = FEGrid(coord_max=(1., 1., 0.), shape=(2, 2), fets_eval=fets_eval)

    tstepper = TS(
        sdomain=fe_grid,
        bcond_list=[
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0],
                       get_dof_method=fe_grid.get_left_dofs),
            #                                   BCDofGroup( var='u', value = 0., dims = [1],
            # get_dof_method = fe_grid.get_bottom_dofs ),
            BCDofGroup(var='u',
                       value=.005,
                       dims=[0],
                       get_dof_method=fe_grid.get_top_right_dofs)
        ],
        rtrace_list=[
            #                     RTraceDomainListField(name = 'Damage' ,
            #                                    var = 'omega', idx = 0,
            #                                    record_on = 'update',
            #                                    warp = True),
            #                     RTraceDomainListField(name = 'Displacement' ,
            #                                    var = 'u', idx = 0,
            #                                    record_on = 'update',
            #                                    warp = True),
            #                    RTraceDomainListField(name = 'N0' ,
            #                                      var = 'N_mtx', idx = 0,
            # record_on = 'update')
        ])

    print tstepper.setup()
    return
    # Add the time-loop control
    tloop = TLoop(tstepper=tstepper,
                  debug=False,
                  tline=TLine(min=0.0, step=1.0, max=1.0))

    tloop.eval()
Пример #15
0
    def example_2d():
        from ibvpy.mats.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic
        from ibvpy.fets.fets2D.fets2D4q import FETS2D4Q

        fets_eval = FETS2D4Q(mats_eval=MATS2DElastic(E=2.1e5))

        # Discretization
        fe_domain1 = FEGrid(coord_max=(2., 5., 0.),
                            shape=(10, 10),
                            fets_eval=fets_eval)

        fe_subgrid1 = FERefinementLevel(parent=fe_domain1,
                                        fine_cell_shape=(1, 1))

        print 'children'
        print fe_domain1.children

        fe_subgrid1.refine_elem((5, 5))
        fe_subgrid1.refine_elem((6, 5))
        fe_subgrid1.refine_elem((7, 5))
        fe_subgrid1.refine_elem((8, 5))
        fe_subgrid1.refine_elem((9, 5))

        fe_domain = FEDomain(subdomains=[fe_domain1])

        ts = TS(dof_resultants=True,
                sdomain=fe_domain,
                bcond_list=[BCDofGroup(var='f', value=0.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()
Пример #16
0
    def example_2d():
        from ibvpy.mats.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic
        from ibvpy.fets.fets2D.fets2D4q import FETS2D4Q
        
        fets_eval = FETS2D4Q(mats_eval = MATS2DElastic( E = 2.1e5 ))
    
        # Discretization
        fe_domain1 = FEGrid( coord_max = (2.,5.,0.),
                                   shape   = (10,10),
                                   fets_eval = fets_eval )

        fe_subgrid1 = FERefinementLevelGrid( parent_domain = fe_domain1,
                                       fine_cell_shape = (1,1) )

        print 'children'
        print fe_domain1.children
        
        fe_subgrid1.refine_elem( (5,5) )
        fe_subgrid1.refine_elem( (6,5) )
        fe_subgrid1.refine_elem( (7,5) )
        fe_subgrid1.refine_elem( (8,5) )
        fe_subgrid1.refine_elem( (9,5) )
    
        fe_domain  = FEDomainList( subdomains = [ fe_domain1 ] )

        ts = TS( dof_resultants = True,
                 sdomain = fe_domain,
                 bcond_list =  [BCDofGroup(var='f', value = 0.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()
Пример #17
0
def demo3d():

    # Geometry
    #
    length = 1.0

    from ibvpy.fets.fets3D import FETS3D8H, FETS3D8H20U, FETS3D8H27U, FETS3D8H20U
    from ibvpy.mats.mats3D import MATS3DElastic

    # Material and FE Formulation
    #
    lin_x_temperature = TemperatureLinFn(length=length, n_dims=3, offset=0.5)
    fets_eval = FETS3D8H20U(mats_eval=MATS3DElastic(
        E=30e3, nu=0.2, initial_strain=lin_x_temperature))
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid(coord_max=(length, length, length),
                    shape=(6, 3, 3),
                    fets_eval=fets_eval)

    bcond_list = [
        BCSlice(var='u',
                dims=[0, 1, 2],
                slice=domain[0, 0, 0, 0, 0, 0],
                value=0),
        BCSlice(var='u',
                dims=[0, 1],
                slice=domain[0, 0, -1, 0, 0, -1],
                value=0),
        BCSlice(var='u', dims=[0], slice=domain[0, -1, 0, 0, -1, 0], value=0),
    ]
    rtrace_list = [
        sig_trace, eps_trace, eps0_trace, eps1t_trace, max_p_sig_trace, u_trace
    ]
    for rtrace in rtrace_list:
        rtrace.position = 'int_pnts'
        rtrace.warp = False

    corner_dof = domain[-1, -1, -1, -1, -1, -1].dofs[0, 0, 2]

    ts = TS(sdomain=domain, bcond_list=bcond_list, rtrace_list=rtrace_list)

    # Time integration
    #

    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=3, max=1.0))
    tloop.eval()

    # Postprocessing
    #
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
    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()
Пример #19
0
def example_with_new_domain():    
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainField, TLoop, \
        TLine, BCDofGroup, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic
    
    fets_eval = FETS1D2Lxfem(mats_eval = MATS1DElastic(E=10., A=1.))        

    # Tseval for a discretized line domain
    tseval  = DOTSEval( fets_eval = fets_eval )

    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid( coord_max = (1.,0.,0.), 
                           shape   = (1,),
                           n_nodal_dofs = fets_eval.n_nodal_dofs,
                           dof_r = fets_eval.dof_r,
                           geo_r = fets_eval.geo_r)
                                                 
    ts = TS( tse = tseval,
             dof_resultants = True,
             sdomain = domain,
            bcond_list =  [ BCDofGroup( var='u', value = 0., dims = [0],
                                  get_dof_method = domain.get_left_dofs ),                                
                         BCDofGroup( var='u', value = 1., dims = [0],
                                  get_dof_method = domain.get_right_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),
                    RTraceDomainField(name = 'Stress' ,
                         var = 'sig_app', idx = 0),
                     RTraceDomainField(name = 'Displacement' ,
                                    var = 'u', idx = 0)
                      
                ]             
            )
    
    # Add the time-loop control
    tloop = TLoop( tstepper = ts,
                   tline  = TLine( min = 0.0,  step = 1, max = 1.0 ))
    
    print '---- result ----'
    print tloop.eval()
    print ts.F_int
    print ts.rtrace_list[0].trace.ydata
    
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #20
0
def __demo__():

    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic

    fets_eval = FETS1D2L(mats_eval=MATS1DElastic(E=10.))
    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid(coord_max=(3., ), shape=(3, ), fets_eval=fets_eval)

    ts = TS(dof_resultants=True,
            sdomain=domain,
            bcond_list=[
                BCDof(var='u', dof=0, value=0.),
                BCDof(
                    var='f',
                    dof=3,
                    value=1,
                )
            ],
            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),
                RTraceDomainListField(name='Displacement',
                                      var='u',
                                      idx=0,
                                      warp=True),
                RTraceDomainListField(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=0.5, max=1.0))

    print '---- result ----'
    print tloop.eval()
    print ts.F_int
    print ts.rtrace_list[0].trace.ydata

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #21
0
def test_bar2( ):
    '''Clamped bar composed of two linked bars loaded at the right end
    [00]-[01]-[02]-[03]-[04]-[05]-[06]-[07]-[08]-[09]-[10]
    [11]-[12]-[13]-[14]-[15]-[16]-[17]-[18]-[19]-[20]-[21]
    u[0] = 0, u[5] = u[16], R[-1] = R[21] = 10
    '''
    fets_eval = FETS1D2L(mats_eval = MATS1DElastic(E=10., A=1.))        

    # Discretization
    fe_domain1 = FEGrid( coord_max = (10.,0.,0.), 
                                    shape   = (10,),
                                    n_nodal_dofs = 1,
                                    dof_r = fets_eval.dof_r,
                                    geo_r = fets_eval.geo_r )

    fe_domain2 = FEGrid( coord_min = (10.,0.,0.),  
                               coord_max = (20.,0.,0.), 
                               shape   = (10,),
                               n_nodal_dofs = 1,
                               dof_r = fets_eval.dof_r,
                               geo_r = fets_eval.geo_r )

    ts = TS( iterms = [ ( fets_eval, fe_domain1 ), (fets_eval, fe_domain2 ) ],
             dof_resultants = True,
             bcond_list =  [BCDof(var='u', dof = 0, value = 0.),
                           BCDof(var='u', dof = 5, link_dofs = [16], link_coeffs = [1.],
                                  value = 0. ),
                           BCDof(var='f', dof = 21, value = 10 ) ],
             rtrace_list =  [ RTraceGraph(name = 'Fi,right over u_right (iteration)' ,
                                   var_y = 'F_int', idx_y = 0,
                                   var_x = 'U_k', idx_x = 1),
                                   ]             
                )

    # Add the time-loop control
    tloop = TLoop( tstepper = ts,
                        tline  = TLine( min = 0.0,  step = 1, max = 1.0 ))    
    u = tloop.eval()
    print 'u', u
    #
    # '---------------------------------------------------------------'
    # 'Clamped bar composed of two linked bars control displ at right'
    # 'u[0] = 0, u[5] = u[16], u[21] = 1'
    # Remove the load and put a unit displacement at the right end
    # Note, the load is irrelevant in this case and will be rewritten
    #
    ts.bcond_list =  [BCDof(var='u', dof = 0, value = 0.),
                      BCDof(var='u', dof = 5, link_dofs = [16], link_coeffs = [1.],
                            value = 0. ),
                            BCDof(var='u', dof = 21, value = 1. ) ]
    # system solver
    u = tloop.eval()
    print 'u',u
Пример #22
0
def test_bar4( ):
    '''Clamped bar 3 domains, each with 2 elems (displ at right end)
    [0]-[1]-[2] [3]-[4]-[5] [6]-[7]-[8]
    u[0] = 0, u[2] = u[3], u[5] = u[6], u[8] = 1'''

    fets_eval = FETS1D2L(mats_eval = MATS1DElastic(E=10., A=1.))        

    # Discretization
    fe_domain1 = FEGrid( coord_max = (2.,0.,0.), 
                                    shape   = (2,),
                                    n_nodal_dofs = 1,
                                    dof_r = fets_eval.dof_r,
                                    geo_r = fets_eval.geo_r )

    fe_domain2 = FEGrid( coord_min = (2.,0.,0.),  
                               coord_max = (4.,0.,0.), 
                               shape   = (2,),
                               n_nodal_dofs = 1,
                               dof_r = fets_eval.dof_r,
                               geo_r = fets_eval.geo_r )

    fe_domain3 = FEGrid( coord_min = (4.,0.,0.),  
                               coord_max = (6.,0.,0.), 
                               shape   = (2,),
                               n_nodal_dofs = 1,
                               dof_r = fets_eval.dof_r,
                               geo_r = fets_eval.geo_r )
        
    ts = TS( iterms = [ ( fets_eval, fe_domain1 ), (fets_eval, fe_domain2 ), (fets_eval, fe_domain3 ) ], 
             dof_resultants = True,
             bcond_list =  [BCDof(var='u', dof = 0, value = 0.),
                            BCDof(var='u', dof = 2, link_dofs = [3], link_coeffs = [1.],
                                  value = 0. ),
                            BCDof(var='u', dof = 5, link_dofs = [6], link_coeffs = [1.],
                                  value = 0. ),
                            BCDof(var='u', dof = 8, value = 1) ],
             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 = 'Displacement', var = 'u', idx = 0 )
                                   ]             
                )
    
    # 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
    app = IBVPyApp( ibv_resource = tloop )
    app.main()      
Пример #23
0
def notched_bended_beam():

    fets_eval_4u      = FETS2D4Q( mats_eval = MATS2DScalarDamage() )
    fets_eval_cracked = FETSLSEval( parent_fets  = fets_eval_4u )

    # Discretization
    fe_domain1 = FEGrid( coord_max = (5.,2.,0.), 
                               shape   = (3,2),
                               fets_eval = fets_eval_4u )

    fe_child_domain = FERefinementGrid( parent_domain = fe_domain1,
                                    fets_eval = fets_eval_cracked,
                                    fine_cell_shape = (1,1) )

    crack_level_set = lambda X: X[0] - 2.5  
    
    fe_child_domain.refine_elem( (1,0), crack_level_set )
    dots = fe_child_domain.new_dots()

    fe_domain  = FEDomainList( subdomains = [ fe_domain1 ] )
    fe_domain_tree = FEDomainTree( domain_list = fe_domain )
    
    ts = TS( dof_resultants = True,
             sdomain = [ fe_domain1, fe_child_domain ],
             bcond_list =  [BCDofGroup(var='u', value = 0., dims = [0,1],
                                       get_dof_method = fe_domain1.get_left_dofs ),
                            BCDofGroup(var='u', value = 0., dims = [0,1],
                                       get_dof_method = fe_domain1.get_right_dofs ),
                            BCDofGroup(var='f', value = -1., dims = [1],
                                       get_dof_method = fe_domain1.get_top_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()
Пример #24
0
def run_example():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, \
        RTraceDomainListInteg, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats2D.mats2D_conduction.mats2D_conduction import MATS2DConduction

    from ibvpy.api import BCDofGroup
    fets_eval = FETS2D4Q4T(mats_eval=MATS2DConduction(k=1.))

    print fets_eval.vtk_node_cell_data

    from ibvpy.mesh.fe_grid import FEGrid
    from ibvpy.mesh.fe_refinement_grid import FERefinementGrid
    from ibvpy.mesh.fe_domain import FEDomain
    from mathkit.mfn import MFnLineArray

    # Discretization
    fe_grid = FEGrid(coord_max=(1., 1., 0.),
                     shape=(2, 2),
                     fets_eval=fets_eval)

    tstepper = TS(sdomain=fe_grid,
                  bcond_list=[BCDofGroup(var='u', value=0., dims=[0],
                                         get_dof_method=fe_grid.get_left_dofs),
                              #                                   BCDofGroup( var='u', value = 0., dims = [1],
                              # get_dof_method = fe_grid.get_bottom_dofs ),
                              BCDofGroup(var='u', value=.005, dims=[0],
                                             get_dof_method=fe_grid.get_top_right_dofs)],
                  rtrace_list=[
                      #                     RTraceDomainListField(name = 'Damage' ,
                      #                                    var = 'omega', idx = 0,
                      #                                    record_on = 'update',
                      #                                    warp = True),
                      #                     RTraceDomainListField(name = 'Displacement' ,
                      #                                    var = 'u', idx = 0,
                      #                                    record_on = 'update',
                      #                                    warp = True),
                      #                    RTraceDomainListField(name = 'N0' ,
                      #                                      var = 'N_mtx', idx = 0,
                      # record_on = 'update')
                  ]
                  )

    print tstepper.setup()
    return
    # Add the time-loop control
    tloop = TLoop(tstepper=tstepper, debug=False,
                  tline=TLine(min=0.0,  step=1.0, max=1.0))

    tloop.eval()
def demo3d():

    # Geometry
    #
    length = 1.0

    from ibvpy.fets.fets3D import FETS3D8H, FETS3D8H20U, FETS3D8H27U, FETS3D8H20U
    from ibvpy.mats.mats3D import MATS3DElastic

    # Material and FE Formulation
    #
    lin_x_temperature = TemperatureLinFn( length = length, n_dims = 3, offset = 0.5 )
    fets_eval = FETS3D8H20U( mats_eval = MATS3DElastic( E = 30e3, nu = 0.2,
                                                       initial_strain = lin_x_temperature ) )
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid( coord_max = ( length, length, length ),
                     shape = ( 6, 3, 3 ),
                     fets_eval = fets_eval )

    bcond_list = [BCSlice( var = 'u', dims = [0, 1, 2], slice = domain[0, 0, 0, 0, 0, 0], value = 0 ),
                  BCSlice( var = 'u', dims = [0], slice = domain[0, -1, 0, 0, -1, 0], value = 0 ),
                  BCSlice( var = 'u', dims = [0, 1], slice = domain[0, 0, -1, 0, 0, -1], value = 0 ),
                  ]
    rtrace_list = [ sig_trace, eps_trace, eps0_trace, eps1t_trace, max_p_sig_trace, u_trace ]
    for rtrace in rtrace_list:
        rtrace.position = 'int_pnts'
        rtrace.warp = False

    corner_dof = domain[-1, -1, -1, -1, -1, -1].dofs[0, 0, 2]


    ts = TS( sdomain = domain,
             bcond_list = bcond_list,
             rtrace_list = rtrace_list
             )

    # Time integration
    #

    tloop = TLoop( tstepper = ts,
                   tline = TLine( min = 0.0, step = 3, max = 1.0 ) )
    tloop.eval()

    # Postprocessing
    #
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #26
0
def L_shape( ):
    '''L-shaped domain constructed by deleting elements from the quadrangle'''
    
    mp = MATS2DElastic( E = 34.e3,
                        nu = 0.2 ) 

    fets_eval = FETS2D4Q(mats_eval = mp ) 

    discr = ( 3, 2 )
    # Discretization
    fe_domain1 = FEGrid( coord_min = (0,0,0),
                              coord_max = (2.,2.,0.), 
                              shape   = discr,
                              inactive_elems = [3,5],
                              fets_eval = fets_eval )

    ts = TS( sdomain = fe_domain1,
             dof_resultants = True,
             bcond_list =  [ BCDofGroup( var='u', value = 0., dims = [0,1],
                                         get_dof_method = fe_domain1.get_top_dofs ),
                             BCDofGroup( var='u', value = 0., dims = [0,1],
                                         get_dof_method = fe_domain1.get_left_dofs ),                                         
#                             BCDof( var='u', value = 0., dof = 20 ),
#                             BCDof( var='u', value = 0., dof = 21 ), 
#                             BCDof( var='u', value = 0., dof = 16 ), 
#                             BCDof( var='u', value = 0., dof = 17 ), 
                             BCDofGroup( var='f', value = -1, dims = [1],
                                         get_dof_method = fe_domain1.get_right_dofs ) 
                        ],
             rtrace_list =  [ RTraceDomainListField( name = 'Displacement', 
                                                     var = 'u', 
                                                     idx = 1, warp = False ),
                              RTraceDomainField(name = 'Stress' ,
                              var = 'sig_app', idx = 0,
                              record_on = 'update',
                              warp = True),
                              ]             
            )

    # Add the time-loop control
    global tloop
    tloop = TLoop( tstepper = ts, tolerance = 1e-4, KMAX = 50,
                        tline  = TLine( min = 0.0,  step = 1.0, max = 1.0 ))

    print tloop.eval()

    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()      
def app():

    mdm = MATS2DElastic()

    fets_eval = FETS2D4Q(mats_eval=mdm)

    fe_domain = FEDomain()

    fe_rgrid = FERefinementGrid(name='fe_grid1', fets_eval=fets_eval, domain=fe_domain)

    fe_grid = FEGrid(coord_max=(2.0, 1.0),
                      shape=(2, 1),
                      fets_eval=fets_eval,
                      level=fe_rgrid)

    for i in range(0, 1):
        fe_grid.deactivate((1, 0))

    ts = TS(sdomain=fe_grid,
             bcond_list=[
                         BCSlice(var='u', slice=fe_grid[-1, :, -1, :], dims=[0, 1], value=0.),
                         BCSlice(var='u', slice=fe_grid[0, 0, :-1, :], dims=[0, 1], value=0.),
                         BCSlice(var='u', slice=fe_grid[-1, 0, 0, -1], dims=[1],
                                 value= -1.0),
                        ],
            rtrace_list=[
                          RTraceDomainListField(name='Strain' ,
                                      var='eps_app', idx=0,
                                      record_on='update'),
                          RTraceDomainListField(name='Stress' ,
                                      var='sig_app', idx=0,
                                      record_on='update'),
                          RTraceDomainListField(name='Displacement' ,
                                      var='u', idx=1,
                                      record_on='update',
                                      warp=True)
                         ]
            )

    tl = TLoop(tstepper=ts,
                tolerance=5.0e-5,
                KMAX=200,
                tline=TLine(min=0.0, step=.1, max=0.1))

    tl.eval()

    from ibvpy.plugins.ibvpy_app import IBVPyApp
    ibvpy_app = IBVPyApp(ibv_resource=ts)
    ibvpy_app.main()
Пример #28
0
def __demo__():

    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic

    fets_eval = FETS1D2L(mats_eval=MATS1DElastic(E=10.))
    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid(coord_max=(3.,),
                    shape=(3,),
                    fets_eval=fets_eval)

    ts = TS(dof_resultants=True,
            sdomain=domain,
            bcond_list=[BCDof(var='u', dof=0, value=0.),
                        BCDof(var='f', dof=3, value=1,)],
            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),
                         RTraceDomainListField(name='Displacement',
                                               var='u', idx=0,
                                               warp=True),
                         RTraceDomainListField(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=0.5, max=1.0))

    print '---- result ----'
    print tloop.eval()
    print ts.F_int
    print ts.rtrace_list[0].trace.ydata

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #29
0
def demo1d():

    # Geometry
    #
    length = 1.0

    # Material and FE Formulation
    #
    from ibvpy.fets.fets1D import FETS1D2L, FETS1D2L3U
    from ibvpy.mats.mats1D import MATS1DElastic

    mats_eval = MATS1DElastic(E=100.,
                              initial_strain=TemperatureLinFn(length=length,
                                                              n_dims=1,
                                                              offset=0.5))
    fets_eval = FETS1D2L3U(mats_eval=mats_eval)
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid(coord_max=(length, 0., 0.),
                    n_elems=(10, ),
                    fets_eval=fets_eval)

    bcond_list = [
        BCSlice(var='u', dims=[0], slice=domain[0, 0], value=0),
        #BCSlice( var = 'u', dims = [0], slice = domain[-1, -1], value = 0 )
    ]

    ts = TS(sdomain=domain,
            bcond_list=bcond_list,
            rtrace_list=[sig_trace, eps_trace, eps0_trace, eps1t_trace])

    # Time integration
    #
    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0))

    tloop.eval()

    # Postprocessing
    #
    legend = []
    plot_sig(eps_trace, 'eps', legend)
    plot_sig(eps0_trace, 'eps0', legend)
    plot_sig(eps1t_trace, 'eps1t', legend)
    p.legend(legend)
    p.show()
Пример #30
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTDofGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic

    fets_eval = FETS1D2L3U(mats_eval=MATS1DElastic(E=10.))

    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid(coord_max=(3., ),
                    shape=(3, ),
                    fets_eval=fets_eval)

    ts = TS(dof_resultants=True,
            sdomain=domain,
            # conversion to list (square brackets) is only necessary for slicing of
            # single dofs, e.g "get_left_dofs()[0,1]"
            #         bcond_list =  [ BCDof(var='u', dof = 0, value = 0.)     ] +
            #                    [ BCDof(var='u', dof = 2, value = 0.001 ) ]+
            #                    [ )     ],
            bcond_list=[BCDof(var='u', dof=0, value=0.),
                        #                        BCDof(var='u', dof = 1, link_dofs = [2], link_coeffs = [0.5],
                        #                              value = 0. ),
                        #                        BCDof(var='u', dof = 2, link_dofs = [3], link_coeffs = [1.],
                        #                              value = 0. ),
                        BCDof(var='f', dof=6, value=1,
                              # link_dofs = [2], link_coeffs = [2]
                              )],
            rtrace_list=[RTDofGraph(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),
                         RTraceDomainListField(name='Displacement',
                                               var='u', idx=0),
                         RTraceDomainListField(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('---- result ----')
    print(tloop.eval())
    print(ts.F_int)
    print(ts.rtrace_list[0].trace.ydata)

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
def demo1d():

    # Geometry
    #
    length = 1.0

    # Material and FE Formulation
    #
    from ibvpy.fets.fets1D import FETS1D2L, FETS1D2L3U
    from ibvpy.mats.mats1D import MATS1DElastic

    mats_eval = MATS1DElastic( E = 100.,
                               initial_strain = TemperatureLinFn( length = length, n_dims = 1 ) )
    fets_eval = FETS1D2L( mats_eval = mats_eval )
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid( coord_max = ( length, 0., 0. ),
                     shape = ( 100, ),
                     fets_eval = fets_eval )

    bcond_list = [BCSlice( var = 'u', dims = [0], slice = domain[0, 0], value = 0 ),
                  BCSlice( var = 'u', dims = [0], slice = domain[-1, -1], value = 0 )
                  ]

    ts = TS( sdomain = domain,
             bcond_list = bcond_list,
             rtrace_list = [ sig_trace, eps_trace, eps0_trace, eps1t_trace ] )

    # Time integration
    #
    tloop = TLoop( tstepper = ts,
                        tline = TLine( min = 0.0, step = 1, max = 1.0 ) )

    tloop.eval()

    # Postprocessing
    #
    legend = []
    plot_sig( eps_trace, 'eps', legend )
    plot_sig( eps0_trace, 'eps0', legend )
    plot_sig( eps1t_trace, 'eps1t', legend )
    p.legend( legend )
    p.show()
Пример #32
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval

#    fets_eval = FETS2D4Q( mats_eval = MATS2DElastic( E = 1., nu = 0. ) )
#
#
#    # Discretization
#    fe_grid1 = FEGrid( coord_max = ( 1., 1., 0. ),
#                    shape = ( 1, 1 ),
#                    fets_eval = fets_eval )


    ts = TS( dof_resultants = True,
             sdomain = fe_grid1,
         # conversion to list (square brackets) is only necessary for slicing of 
         # single dofs, e.g "get_left_dofs()[0,1]"

         bcond_list = [
                        ],
         rtrace_list = [
#                        RTraceDomainListField( name = 'Stress' ,
#                         var = 'sig_app', idx = 0 ),
                         RTraceDomainListField( name = 'Displacement' ,
                                    var = 'u', idx = 0,
                                    warp = True ),
                ]
            )

    # Add the time-loop control
    tloop = TLoop( tstepper = ts, debug = True,
                   adap = ChangeBC(),
                   tline = TLine( min = 0.0, step = 1., max = 2.0 ) )

    print '---- result ----'
    print tloop.eval()

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
def demo2d():

    # Geometry
    #
    length = 1.0

    from ibvpy.fets.fets2D import FETS2D4Q, FETS2D4Q8U, FETS2D4Q16U
    from ibvpy.mats.mats2D import MATS2DElastic

    # Material and FE Formulation
    #
    lin_x_temperature = TemperatureLinFn( length = length, n_dims = 2, offset = 0.5 )
    fets_eval = FETS2D4Q8U( # use 2x2 integration scheme:
                           ngp_r = 3, ngp_s = 3,
                           mats_eval = MATS2DElastic( E = 30e3, nu = 0.2,
                                                       initial_strain = lin_x_temperature ) )
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid( coord_max = ( length, length, 0. ),
                                shape = ( 10, 10 ),
                                fets_eval = fets_eval )

    bcond_list = [BCSlice( var = 'u', dims = [0, 1], slice = domain[0, 0, 0, 0], value = 0 ),
                  BCSlice( var = 'u', dims = [1], slice = domain[0, -1, 0, -1], value = 0 ),
                  ]
    rtrace_list = [ sig_trace, eps_trace, eps0_trace, eps1t_trace, u_trace ]
    ts = TS( sdomain = domain,
             bcond_list = bcond_list,
             rtrace_list = rtrace_list,
             )

    # Time integration
    #
    tloop = TLoop( tstepper = ts,
                   tline = TLine( min = 0.0, step = 1, max = 1.0 ) )
    tloop.eval()


    # Postprocessing
    #
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #34
0
def demo2d():

    # Geometry
    #
    length = 1.0

    from ibvpy.fets.fets2D import FETS2D4Q, FETS2D4Q8U, FETS2D4Q12U
    from ibvpy.mats.mats2D import MATS2DElastic

    # Material and FE Formulation
    #
    lin_x_temperature = TemperatureLinFn(length=length, n_dims=2)
    fets_eval = FETS2D4Q12U(mats_eval=MATS2DElastic(
        E=30e5, nu=0.2, initial_strain=lin_x_temperature))
    fets_eval.vtk_r *= 0.99

    # Discretization
    #
    domain = FEGrid(coord_max=(length, length, 0.),
                    shape=(10, 10),
                    fets_eval=fets_eval)

    bcond_list = [
        BCSlice(var='u', dims=[0, 1], slice=domain[0, 0, 0, 0], value=0),
        BCSlice(var='u', dims=[1], slice=domain[0, -1, 0, -1], value=0),
    ]
    rtrace_list = [sig_trace, eps_trace, eps0_trace, eps1t_trace, u_trace]
    ts = TS(
        sdomain=domain,
        bcond_list=bcond_list,
        rtrace_list=rtrace_list,
    )

    # Time integration
    #
    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0))
    tloop.eval()

    # Postprocessing
    #
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #35
0
    def eval(self):
        
        mats = MATS2DElastic( E = 35000., nu = self.nu, stress_state  = "plane_strain" )
        
        fets_eval = FETS2D4Q( mats_eval = mats ) 
        
        domain = FEGrid( coord_max = ( self.edge_length,  self.edge_length, 0.), 
                         shape   = ( int( self.shape ), int( self.shape ) ),
                         fets_eval = fets_eval )

        upper_right_corner_dof = domain[-1,-1,-1,-1].dofs
        
        ts = TS(
                sdomain = domain,
        
        #        # simple shear test: clamped at left side loaded at right side
        #        bcond_list = [BCSlice( var = 'u', value = 0., dims = [0,1], slice = domain[0, 0, 0, :] ),
        #                      BCSlice( var = 'u', value = 0., dims = [0]  , slice = domain[0, 0,-1, :] ),
        #                      BCSlice( var = 'f', value = 1.0, dims = [1] , slice = domain[0, 0,-1, :] )],
        
                # shear test: fixed at 000, one support in x-direction at left top; load at top right
                bcond_list = [BCSlice( var = 'u', value = 0., dims = [0,1], slice = domain[0, 0, 0, 0] ),
                              BCSlice( var = 'u', value = 0., dims = [0]  , slice = domain[0, 0, 0,-1] ),
                              BCSlice( var = 'f', value = 1.0, dims = [1] , slice = domain[0, 0,-1,-1] )],

                rtrace_list = [ 
                                
                             RTraceDomainListField(name = 'Displacement' ,
                                            var = 'u', idx = 0, warp = True),
                             RTraceDomainListField(name = 'Stress' ,
                                            var = 'sig_app', idx = 0, warp = True, 
                                            record_on = 'update'),
                            ]             
                )
         
        # Add the time-loop control
        tloop = TLoop( tstepper = ts,
                       tline  = TLine( min = 0.0,  step = 1., max = 1.0 ) )                   
        
        tloop.eval()
        return tloop
Пример #36
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats1D.mats1D_elastic.mats1D_elastic import MATS1DElastic
    from ibvpy.fets.fets1D.fets1D2l import FETS1D2L

    fets_eval = FETS1D2L( mats_eval = MATS1DElastic( E = 10. ) )
    from ibvpy.mesh.fe_grid import FEGrid

    # Discretization
    domain = FEGrid( coord_max = ( 2., 0., 0. ),
                           shape = ( 2, ),
                           fets_eval = fets_eval )

    ts = TS( dof_resultants = True,
             sdomain = domain,
         # conversion to list (square brackets) is only necessary for slicing of 
         # single dofs, e.g "get_left_dofs()[0,1]"

         bcond_list = [
#                       BCDof( var = 'u', dof = 0, value = 0. ),
#                       BCDof( var = 'u', dof = 2, value = 1. )
                        ],
         rtrace_list = [RTraceDomainListField( name = 'Stress' ,
                         var = 'sig_app', idx = 0 ),
                         RTraceDomainListField( name = 'Displacement' ,
                                    var = 'u', idx = 0,
                                    warp = True ),
                ]
            )

    # Add the time-loop control
    tloop = TLoop( tstepper = ts, debug = True,
                   adap = ChangeBC(),
                   tline = TLine( min = 0.0, step = 1., max = 2.0 ) )

    print '---- result ----'
    print tloop.eval()
Пример #37
0
def run():
    fets_eval = FETS2D4Q( mats_eval = MATS2DElastic() )

    # Discretization
    fe_grid = FEGrid( coord_max = ( 10., 4., 0. ),
                      shape = ( 10, 3 ),
                      fets_eval = fets_eval )

    bcg = BCDofGroup( var = 'u', value = 0., dims = [0],
                   get_dof_method = fe_grid.get_left_dofs )
    bcg.setup( None )
    print 'labels', bcg._get_labels()
    print 'points', bcg._get_mvpoints()

    mf = MFnLineArray( #xdata = arange(10),
                       ydata = array( [0, 1, 2, 3] ) )

    right_dof = 2
    tstepper = TS( sdomain = fe_grid,
                   bcond_list = [ BCDofGroup( var = 'u', value = 0., dims = [0, 1],
                                               get_dof_method = fe_grid.get_left_dofs ),
                                 BCDofGroup( var = 'u', value = .005, dims = [1],
                                          time_function = mf.get_value,
                                          get_dof_method = fe_grid.get_right_dofs ) ],
            )

    # Add the time-loop control
    tloop = TLoop( tstepper = tstepper, KMAX = 300, tolerance = 1e-4,
                   tline = TLine( min = 0.0, step = 1.0, max = 1.0 ) )

    U_k = tloop.eval()
    print 'dir', tloop.rtrace_mngr.dir

    # RTrace should not contain backward link to RTraceMngr
    # The definition should be forward. 
    #

    rt1 = RTraceGraph( sd = tstepper.sdomain,
                       rmgr = tstepper.rtrace_mngr,
                       name = 'Fi,right over u_right (iteration)' ,
                       var_y = 'F_int', idx_y = right_dof,
                       var_x = 'U_k', idx_x = right_dof,
                       record_on = 'update' )
    print 'dir', rt1.dir
Пример #38
0
    def example_2d():
        from ibvpy.api import FEDomain, FERefinementGrid, FEGrid, TStepper as TS, \
            BCDofGroup, RTraceDomainListField
        from ibvpy.api import TLoop, TLine
        from ibvpy.mesh.xfe_subdomain import XFESubDomain
        from ibvpy.tmodel.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic
        from ibvpy.tmodel.mats2D import MATS2DPlastic
        from ibvpy.fets.fets2D.fets2D4q import FETS2D4Q
        from ibvpy.fets.fets2D import FETS2D9Q
        from ibvpy.fets.fets2D.fets2D4q8u import FETS2D4Q8U
        from ibvpy.fets.fets_ls.fets_crack import FETSCrack
        #fets_eval = FETS2D4Q( mats_eval = MATS2DPlastic( E = 1., nu = 0. ) )
        fets_eval = FETS2D4Q8U(mats_eval=MATS2DPlastic(E=1., nu=0.))
        xfets_eval = FETSCrack(parent_fets=fets_eval,
                               int_order=5,
                               tri_subdivision=1)

        # Discretization

        fe_domain = FEDomain()
        fe_level1 = FERefinementGrid(domain=fe_domain, fets_eval=fets_eval)
        fe_grid1 = FEGrid(coord_max=(1., 1.),
                          shape=(8, 8),
                          fets_eval=fets_eval,
                          level=fe_level1)

        #ls_function = lambda X, Y: X - Y - 0.13
        ls_function = lambda X, Y: (X - 0.52)**2 + (Y - 0.72)**2 - 0.51**2
        bls_function = lambda X, Y: -((X - 0.5)**2 + (Y - 0.21)**2 - 0.28**2)
        bls_function2 = lambda X, Y: -((X - 0.5)**2 + (Y - 0.21)**2 - 0.38**2)

        # design deficits:
        # - How to define a level set spanned over several fe_grids
        #   (i.e. it is defined over the hierarchy of FESubDomains)
        # - Patching of subdomains within the FEPatchedGrid (FERefinementGrid)
        # - What are the compatibility conditions?
        # - What is the difference between FEGridLeveSetSlice
        #   and FELSDomain?
        #   FELSDomain is associated with a DOTS - Slice is not.

        # FEGrid has a multidimensional array - elem_grid
        # it can be accessed through this index.
        # it is masked by the activity map. The activity map can
        # be defined using slices and level sets.
        # the elems array enumerates the elements using the activity map.
        # in this way, the specialization of grids is available implicitly.
        #
        fe_xdomain = FELSDomain(
            domain=fe_domain,
            fets_eval=xfets_eval,
            fe_grid=fe_grid1,
            ls_function=ls_function,
            bls_function=bls_function,
        )

        fe_tip_xdomain = FELSDomain(
            domain=fe_domain,
            fets_eval=xfets_eval,
            fe_grid=fe_xdomain,
            ls_function=bls_function,
        )

        # deactivation must be done only after the dof enumeration has been completed
        fe_xdomain.deactivate_intg_elems_in_parent()
        fe_tip_xdomain.deactivate_intg_elems_in_parent()

        fe_xdomain.bls_function = bls_function2
        fe_tip_xdomain.ls_function = bls_function2

        # deactivation must be done only after the dof enumeration has been completed
        fe_xdomain.deactivate_intg_elems_in_parent()
        fe_tip_xdomain.deactivate_intg_elems_in_parent()

        #
        # General procedure:
        # 1) define the level sets with the boundaries
        # 2) use the bls to identify the tips of the level set
        # 3) use independent level sets to introduce indpendently junctions.
        #
        # get the extended dofs of the bls_elems and constrain it
        #
        cdofs = fe_tip_xdomain.elem_xdof_map.flatten()
        bc_list = [BCDof(var='u', dof=dof, value=0.0) for dof in cdofs]

        # construct the time stepper

        ts = TS(
            dof_resultants=True,
            sdomain=fe_domain,
            bcond_list=[
                BCSlice(
                    var='u', value=-0.1, dims=[1], slice=fe_grid1[:, 0, :, 0]),
                BCSlice(
                    var='u', value=0., dims=[0], slice=fe_grid1[:, 0, :, 0]),
                BCSlice(var='u',
                        value=0.,
                        dims=[0, 1],
                        slice=fe_grid1[:, -1, :, -1])
            ] + bc_list,
            rtrace_list=[
                #                                 RTDofGraph(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),
                RTraceDomainListField(name='Displacement',
                                      var='u',
                                      idx=0,
                                      warp=True),
                #                                     RTraceDomainField(name = 'N0' ,
                #                                                  var = 'N_mtx', idx = 0,
                #                                                  record_on = 'update')
            ])
        #

        do = 'print'

        if do == 'print':

            p = 'state'

            if p == 'grids':
                print('fe_xdomain.ls mask')
                print(fe_xdomain.ls_mask)
                print('fe_xdomain.idx mask')
                print(fe_xdomain.idx_mask)
                print('fe_xdomain.intg mask')
                print(fe_xdomain.intg_mask)
                print('fe_xdomain.xelems_mask')
                print(fe_xdomain.xelems_mask)
                print('fe_xdomain.xelems_grid_ix')
                print(fe_xdomain.xelems_grid_ix)
                print('fe_xdomain.ls_elem_grid')
                print(fe_xdomain.ls_elem_grid)
                print('fe_xdomain.ls_ielem_grid')
                print(fe_xdomain.ls_ielem_grid)
                print('fe_xdomain.intg_elem_grid')
                print(fe_xdomain.intg_elem_grid)

                print('fe_tip_xdomain.ls_mask`')
                print(fe_tip_xdomain.ls_mask)
                print('fe_tip_xdomain.intg_mask`')
                print(fe_tip_xdomain.intg_mask)
                print('fe_tip_xdomain.idx_mask`')
                print(fe_tip_xdomain.idx_mask)
                print('fe_tip_xdomain.xelems_mask')
                print(fe_tip_xdomain.xelems_mask)
                print('fe_tip_xdomain.xelems_grid_ix')
                print(fe_tip_xdomain.xelems_grid_ix)
                print('fe_tip_xdomain.ls_elem_grid')
                print(fe_tip_xdomain.ls_elem_grid)
                print('fe_tip_xdomain.ls_ielems_grid')
                print(fe_tip_xdomain.ls_ielem_grid)
                print('fe_tip_xdomain.intg_elem_grid')
                print(fe_tip_xdomain.intg_elem_grid)

            if p == 'maps':

                print('fe_xdomain.elem_dof_map')
                print(fe_xdomain.elem_dof_map)
                print('fe_tip_xdomain.elem_dof_map')
                print(fe_tip_xdomain.elem_dof_map)

                print('fe_xdomain.elems')
                print(fe_xdomain.elems)
                print('fe_tip_xdomain.elems')
                print(fe_tip_xdomain.elems)

                print('fe_xdomain.elem_X_map')
                print(fe_xdomain.elem_X_map)
                print('fe_tip_xdomain.elem_X_map')
                print(fe_tip_xdomain.elem_X_map)

            if p == 'fields':

                print("ls_values ", fe_xdomain.dots.dof_node_ls_values)
                print("tip ls_values ", fe_tip_xdomain.dots.dof_node_ls_values)

                print('intersection points ', fe_xdomain.ls_intersection_r)
                print('tip intersection points ',
                      fe_tip_xdomain.ls_intersection_r)

                print("triangles ", fe_xdomain.dots.rt_triangles)
                print("vtk points ", fe_xdomain.dots.vtk_X)
                print("vtk data ",
                      fe_xdomain.dots.get_vtk_cell_data('blabla', 0, 0))

                print('ip_triangles', fe_xdomain.dots.int_division)
                print('ip_coords', fe_xdomain.dots.ip_coords)
                print('ip_weigths', fe_xdomain.dots.ip_weights)
                print('ip_offset', fe_xdomain.dots.ip_offset)
                print('ip_X_coords', fe_xdomain.dots.ip_X)
                print('ip_ls', fe_xdomain.dots.ip_ls_values)
                print('vtk_ls', fe_xdomain.dots.vtk_ls_values)
                print('J_det ', fe_xdomain.dots.J_det_grid)

            if p == 'state':

                # Add the time-loop control
                print('STATE: initial')

                print('fe_xdomain.old_dots.state_elem grid')
                print(fe_xdomain.dots.state_start_elem_grid)
                print('fe_tip_xdomain.old_dots.state_elem grid')
                print(fe_tip_xdomain.dots.state_start_elem_grid)
                print('fe_xdomain.old_dots.state_end_elem grid')
                print(fe_xdomain.dots.state_end_elem_grid)
                print('fe_tip_xdomain.old_dots.state_end_elem grid')
                print(fe_tip_xdomain.dots.state_end_elem_grid)

                fe_xdomain.dots.state_array[:] = 25.5
                print('state_array 25', fe_xdomain.dots.state_array)
                fe_tip_xdomain.dots.state_array[:] = 58

                bls_function3 = lambda X, Y: -((X - 0.5)**2 +
                                               (Y - 0.21)**2 - 0.58**2)

                fe_xdomain.bls_function = bls_function3
                fe_tip_xdomain.ls_function = bls_function3

                print('STATE: changed')

                print('fe_xdomain.old_dots.state_elem grid')
                print(fe_xdomain.dots.state_start_elem_grid)
                print('fe_tip_xdomain.old_dots.state_elem grid')
                print(fe_tip_xdomain.dots.state_start_elem_grid)
                print('fe_xdomain.old_dots.state_end_elem grid')
                print(fe_xdomain.dots.state_end_elem_grid)
                print('fe_tip_xdomain.old_dots.state_end_elem grid')
                print(fe_tip_xdomain.dots.state_end_elem_grid)

                print('state_array 25', fe_xdomain.dots.state_array.shape)
                print('state_array 25', fe_xdomain.dots.state_array[570:])
                print('state_array 58', fe_tip_xdomain.dots.state_array.shape)

        elif do == 'ui':

            tloop = TLoop(tstepper=ts,
                          debug=False,
                          tolerance=1e-4,
                          KMAX=3,
                          RESETMAX=0,
                          tline=TLine(min=0.0, step=1, max=1.0))

            tloop.eval()
            from ibvpy.plugins.ibvpy_app import IBVPyApp
            ibvpy_app = IBVPyApp(ibv_resource=ts)
            ibvpy_app.main()
Пример #39
0
            #                        RTraceDomainListField(name = 'Deformation' ,
            #                                       var = 'eps', idx = 0,
            #                                       record_on = 'update'),
            RTraceDomainListField(name='Displacement',
                                  var='u',
                                  idx=0,
                                  warp=True),
            #                         RTraceDomainListField(name = 'Stress' ,
            #                                        var = 'sig', idx = 0,
            #                                        record_on = 'update'),
            #                        RTraceDomainListField(name = 'N0' ,
            #                                       var = 'N_mtx', idx = 0,
            #                                       record_on = 'update')
        ])

    # Add the time-loop control
    tloop = TLoop(tstepper=ts,
                  KMAX=4,
                  RESETMAX=0,
                  tolerance=1e-3,
                  tline=TLine(min=0.0, step=1.0, max=1.0))

    print 'u', tloop.eval()

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #40
0
                    fets_eval=fets_eval
                    )

    ts = TS(sdomain=domain,
            dof_resultants=True
            )
    tloop = TLoop(tstepper=ts,
                  tline=TLine(min=0.0,  step=1, max=1.0))

    '''Clamped bar loaded at the right end with unit displacement
    [00]-[01]-[02]-[03]-[04]-[05]-[06]-[07]-[08]-[09]-[10]
    'u[0] = 0, u[10] = 1'''

    domain.coord_max = (10, 0, 0)
    domain.shape = (10,)
    ts.bcond_list = [BCDof(var='u', dof=0, value=0.),
                     BCDof(var='u', dof=10, value=1.)]
    ts.rtrace_list = [RTDofGraph(name='Fi,right over u_right (iteration)',
                                 var_y='F_int', idx_y=10,
                                 var_x='U_k', idx_x=10)]

    u = tloop.eval()
    # expected solution
    u_ex = array([0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.],
                 dtype=float)
    difference = sqrt(norm(u - u_ex))
    print('difference')
    # compare the reaction at the left end
    F = ts.F_int[0]
    print(F)
Пример #41
0
    def eval(self):

        elem_length = self.length / float(self.shape)
        flaw_radius = self.flaw_radius

        mats = MATS1DElasticWithFlaw(E=10.,
                                     flaw_position=self.flaw_position,
                                     flaw_radius=flaw_radius,
                                     reduction_factor=self.reduction_factor)

        #fets_eval = FETS1D2L( mats_eval = mats )
        fets_eval = FETS1D2L3U(mats_eval=mats)

        domain = FEGrid(coord_max=(self.length, 0., 0.),
                        shape=(self.shape, ),
                        fets_eval=fets_eval)

        avg_processor = RTNonlocalAvg(
            avg_fn=QuarticAF(radius=self.avg_radius, correction=True))

        eps_app = RTraceDomainListField(name='Strain',
                                        position='int_pnts',
                                        var='eps_app',
                                        warp=False)

        damage = RTraceDomainListField(name='Damage',
                                       position='int_pnts',
                                       var='omega',
                                       warp=False)

        disp = RTraceDomainListField(name='Displacement',
                                     position='int_pnts',
                                     var='u',
                                     warp=False)

        sig_app = RTraceDomainListField(name='Stress',
                                        position='int_pnts',
                                        var='sig_app')

        right_dof = domain[-1, -1].dofs[0, 0, 0]
        rt_fu = RTDofGraph(name='Fi,right over u_right (iteration)',
                           var_y='F_int',
                           idx_y=right_dof,
                           var_x='U_k',
                           idx_x=right_dof)

        ts = TS(
            u_processor=avg_processor,
            dof_resultants=True,
            sdomain=domain,
            # conversion to list (square brackets) is only necessary for slicing of
            # single dofs, e.g "get_left_dofs()[0,1]"
            #         bcond_list =  [ BCDof(var='u', dof = 0, value = 0.)     ] +
            #                    [ BCDof(var='u', dof = 2, value = 0.001 ) ]+
            #                    [ )     ],
            bcond_list=[
                BCDof(var='u', dof=0, value=0.),
                #                        BCDof(var='u', dof = 1, link_dofs = [2], link_coeffs = [0.5],
                #                              value = 0. ),
                #                        BCDof(var='u', dof = 2, link_dofs = [3], link_coeffs = [1.],
                #                              value = 0. ),
                BCDof(
                    var='u',
                    dof=right_dof,
                    value=0.01,
                )
            ],
            rtrace_list=[
                rt_fu,
                eps_app,
                # damage,
                sig_app,
                disp,
            ])

        # Add the time-loop control
        tloop = TLoop(tstepper=ts,
                      KMAX=100,
                      tolerance=1e-5,
                      verbose_iteration=False,
                      tline=TLine(min=0.0, step=1.0, max=1.0))

        U = tloop.eval()

        p.subplot(221)
        rt_fu.refresh()
        rt_fu.trace.plot(p)

        eps = eps_app.subfields[0]
        xdata = eps.vtk_X[:, 0]
        ydata = eps.field_arr[:, 0, 0]
        idata = argsort(xdata)

        p.subplot(222)
        p.plot(xdata[idata], ydata[idata], 'o-')

        disp = disp.subfields[0]
        xdata = disp.vtk_X[:, 0]
        ydata = disp.field_arr[:, 0]
        idata = argsort(xdata)

        p.subplot(223)
        p.plot(xdata[idata], ydata[idata], 'o-')

        sig = sig_app.subfields[0]
        xdata = sig.vtk_X[:, 0]
        ydata = sig.field_arr[:, 0, 0]
        idata = argsort(xdata)

        p.subplot(224)
        p.plot(xdata[idata], ydata[idata], 'o-')
Пример #42
0
    ts = TS(dof_resultants=True,
            sdomain=fe_domain,
            bcond_list=[
                BCDof(var='u', dof=0, value=0.),
                BCDof(var='u',
                      dof=5,
                      link_dofs=[16],
                      link_coeffs=[1.],
                      value=0.),
                BCDof(var='f', dof=21, value=10)
            ],
            rtrace_list=[
                RTDofGraph(name='Fi,right over u_right (iteration)',
                           var_y='F_int',
                           idx_y=0,
                           var_x='U_k',
                           idx_x=1),
            ])

    # Add the time-loop control
    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0))

    ts.set(sdomain=FEDomain(subdomains=[fe_domain1, fe_domain2]))

    ts.set(bcond_list=[
        BCDof(var='u', dof=0, value=0.),
        BCDof(var='u', dof=5, link_dofs=[16], link_coeffs=[1.], value=0.),
        BCDof(var='f', dof=21, value=10)
    ])
    print(tloop.eval())
Пример #43
0
def app():
    avg_radius = 0.03

    md = MATS2DScalarDamage(E=20.0e3,
                            nu=0.2,
                            epsilon_0=1.0e-4,
                            epsilon_f=8.0e-4,
                            #epsilon_f = 12.0e-4, #test doubling the e_f
                            stress_state="plane_strain",
                            stiffness="secant",
                            #stiffness  = "algorithmic",
                            strain_norm=Rankine())


#    me = MATS2DElastic( E = 20.0e3,
#                       nu = 0.2,
#                       stress_state = "plane_strain" )

    fets_eval = FETS2D4Q(mats_eval=md)#, ngp_r = 3, ngp_s = 3)                                               

    n_el_x = 60
    # Discretization
    fe_grid = FEGrid(coord_max=(.6, .15, 0.),
                      shape=(n_el_x, 15),
                      fets_eval=fets_eval)

    mf = MFnLineArray(xdata=array([0, 1, 2, 7, 8 , 28]),
                       ydata=array([0, 3., 3.2, 3.3, 3.32, 3.72 ]))

    #averaging function
    avg_processor = RTNonlocalAvg(avg_fn=QuarticAF(radius=avg_radius,
                                                       correction=True))

    ts = TS(sdomain=fe_grid,
             u_processor=avg_processor,
             bcond_list=[
                        # constraint for all left dofs in y-direction:
                        BCSlice(var='u', slice=fe_grid[0, 0, 0, 0], dims=[0, 1], value=0.),
                        BCSlice(var='u', slice=fe_grid[-1, 0, -1, 0], dims=[1], value=0.),
                        BCSlice(var='u', slice=fe_grid[n_el_x / 2, -1, 0, -1], dims=[1],
                                time_function=mf.get_value,
                                value= -2.0e-5),
                        ],
             rtrace_list=[
    #                        RTDofGraph(name = 'Fi,right over u_right (iteration)' ,
    #                                  var_y = 'F_int', idx_y = right_dof,
    #                                  var_x = 'U_k', idx_x = right_dof,
    #                                  record_on = 'update'),
                            RTraceDomainListField(name='Deformation' ,
                                           var='eps_app', idx=0,
                                           record_on='update'),
                            RTraceDomainListField(name='Displacement' ,
                                           var='u', idx=1,
                                           record_on='update',
                                           warp=True),
                            RTraceDomainListField(name='Damage' ,
                                           var='omega', idx=0,
                                           record_on='update',
                                           warp=True),
    #                         RTraceDomainField(name = 'Stress' ,
    #                                        var = 'sig', idx = 0,
    #                                        record_on = 'update'),
    #                        RTraceDomainField(name = 'N0' ,
    #                                       var = 'N_mtx', idx = 0,
    #                                       record_on = 'update')
                        ]
            )

    # Add the time-loop control
    #
    tl = TLoop(tstepper=ts,
                tolerance=5.0e-4,
                KMAX=100,
                tline=TLine(min=0.0, step=.25, max=10.0))
    tl.eval()
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    ibvpy_app = IBVPyApp(ibv_resource=ts)
    ibvpy_app.main()
Пример #44
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceDomainListField, TLoop, \
        TLine, BCSlice
    from ibvpy.fets.fets2D.fets2D4q8u import FETS2D4Q8U
    from ibvpy.tmodel.mats3D.mats3D_cmdm import \
        MATS3DMicroplaneDamage
    from ibvpy.tmodel.matsXD.matsXD_cmdm import PhiFnStrainSoftening

#    tmodel =  MATS2DElastic(E=2,nu= .2,
#                          stress_state= 'rotational_symetry')
    mats = MATS3DMicroplaneDamage(model_version='stiffness',
                                  E=34e3,
                                  nu=0.2,
                                  phi_fn=PhiFnStrainSoftening(G_f=0.001117,
                                                              f_t=2.8968))

    fets_eval = FETS2Drotsym(prototype_fets=FETS2D4Q8U(),
                             mats_eval=mats)

    fets_eval.vtk_r *= 0.9
    from ibvpy.mesh.fe_grid import FEGrid

    radius = sqrt(1. / pi)
#    f_i = (radius/2.)*2*pi
#    f_o = (radius)*2*pi
#    print 'f ',f_i,' ', f_o
    # Discretization
    fe_grid = FEGrid(  # coord_min = (0.,radius/2.,0.),
        coord_max=(1., radius, 0.),
        shape=(20, 20),
        fets_eval=fets_eval)

    tstepper = TS(sdomain=fe_grid,
                  bcond_list=[
                      BCSlice(var='u', value=0., dims=[0],
                              slice=fe_grid[0, :, 0, :]),
                      BCSlice(var='u', value=0., dims=[1],
                              slice=fe_grid[0, 0, 0, 0]),
                      BCSlice(var='u', value=1.e-3, dims=[0],
                              slice=fe_grid[-1, :, -1, :]),
                  ],

                  rtrace_list=[
                      RTraceDomainListField(name='Stress',
                                            var='sig_app', idx=0, warp=True,
                                            record_on='update'),
                      RTraceDomainListField(name='fracture_energy',
                                            var='fracture_energy', idx=0, warp=True,
                                            record_on='update'),
                      RTraceDomainListField(name='Displacement',
                                            var='u', idx=0,
                                            record_on='update',
                                            warp=True),
                      #                    RTraceDomainListField(name = 'N0' ,
                      #                                      var = 'N_mtx', idx = 0,
                      # record_on = 'update')
                  ]
                  )

    # Add the time-loop control
    #global tloop
    tloop = TLoop(tstepper=tstepper, KMAX=300, tolerance=1e-4,
                  tline=TLine(min=0.0,  step=1.0, max=1.0))

    #import cProfile
    #cProfile.run('tloop.eval()', 'tloop_prof' )
    print(tloop.eval())
    #import pstats
    #p = pstats.Stats('tloop_prof')
    # p.strip_dirs()
    # print 'cumulative'
    # p.sort_stats('cumulative').print_stats(20)
    # print 'time'
    # p.sort_stats('time').print_stats(20)

    # Put the whole thing into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #45
0
# Add the time-loop control
tloop = TLoop( tstepper = ts,
               tolerance = 1e-3,
               tline  = TLine( min = 0.0,  step = 1., max = 1.0 ))

use_profiling = True
start_ui = True
calculate = True

if calculate:
    if use_profiling:
        import cProfile
        cProfile.run('tloop.eval()', 'lost_formwork_tprof' )
        
        import pstats
        p = pstats.Stats('lost_formwork_tprof')
        p.strip_dirs()
        print 'cumulative'
        p.sort_stats('cumulative').print_stats(50)
        print 'time'
        p.sort_stats('time').print_stats(50)
    
    else:
        tloop.eval()
    
if start_ui:  
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
        
Пример #46
0
def example():
    from ibvpy.api import \
        TStepper as TS, RTDofGraph, RTraceDomainListField, TLoop, \
        TLine, IBVPSolve as IS, DOTSEval, BCSlice
    from ibvpy.mesh.fe_grid import FEGrid
    from mathkit.mfn import MFnLineArray

    stiffness_concrete = 34000 * 0.03 * 0.03
    A_fiber = 1.
    E_fiber = 1.
    stiffness_fiber = E_fiber * A_fiber

    d = 2 * sqrt(Pi)
    tau_max = 0.1 * d * Pi
    G = 100
    u_max = 0.023
    f_max = 0.2
    mats_eval = MATS1D5Bond(mats_phase1=MATS1DElastic(E=stiffness_fiber),
                            mats_phase2=MATS1DElastic(E=0),
                            mats_ifslip=MATS1DPlastic(E=G,
                                                      sigma_y=tau_max,
                                                      K_bar=0.,
                                                      H_bar=0.),
                            mats_ifopen=MATS1DElastic(E=0))

    fets_eval = FETS1D52L4ULRH(mats_eval=mats_eval)
    domain = FEGrid(coord_max=(1., 0.2),
                    shape=(16, 1),
                    fets_eval=fets_eval)

    end_dof = domain[-1, 0, -1, 0].dofs[0, 0, 0]
    ts = TS(dof_resultants=True,
            sdomain=domain,
            # conversion to list (square brackets) is only necessary for slicing of
            # single dofs, e.g "get_left_dofs()[0,1]"
            bcond_list=[
                BCSlice(var='u', value=0., dims=[0],
                        slice=domain[:, :, :, -1]),
                BCSlice(var='u', value=0., dims=[1],
                        slice=domain[:, :, :, :]),
                BCSlice(var='f', value=f_max, dims=[0],
                        slice=domain[-1, 0, -1, 0])
            ],
            rtrace_list=[RTDofGraph(name='Fi,right over u_right (iteration)',
                                    var_y='F_int', idx_y=end_dof,
                                    var_x='U_k', idx_x=end_dof),
                         RTraceDomainListField(name='slip',
                                               var='slip', idx=0),
                         RTraceDomainListField(name='eps1',
                                               var='eps1', idx=0),
                         RTraceDomainListField(name='eps2',
                                               var='eps2', idx=0),
                         RTraceDomainListField(name='shear_flow',
                                               var='shear_flow', idx=0),
                         RTraceDomainListField(name='sig1',
                                               var='sig1', idx=0),
                         RTraceDomainListField(name='sig2',
                                               var='sig2', idx=0),
                         RTraceDomainListField(name='Displacement',
                                               var='u', idx=0)
                         ])

    # Add the time-loop control
    tloop = TLoop(tstepper=ts, KMAX=30, debug=False,
                  tline=TLine(min=0.0, step=0.1, max=1.0))

    print(tloop.eval())
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #47
0
def xtest_L_shaped():
    '''Clamped bar 3 domains, each with 2 elems (displ at right end)
    [0]-[1]-[2] [3]-[4]-[5] [6]-[7]-[8]
    u[0] = 0, u[2] = u[3], u[5] = u[6], u[8] = 1'''

    mp = MATS2DScalarDamage(
        E=34.e3,
        nu=0.2,
        epsilon_0=59.e-6,
        epsilon_f=3.2e-3,
        #epsilon_f = 3.2e-1,
        #stiffness  = "algorithmic",
        strain_norm_type='Mises')

    #    mp = MATS2DElastic( E = 34.e3,
    #                        nu = 0.2 )
    fets_eval = FETS2D4Q(mats_eval=mp)

    discr = (10, 10)
    # Discretization
    fe_domain1 = FEGrid(coord_min=(0, 0, 0),
                        coord_max=(1., 1., 0.),
                        shape=discr,
                        n_nodal_dofs=fets_eval.n_nodal_dofs,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    fe_domain2 = FEGrid(coord_min=(0., 1., 0),
                        coord_max=(1., 2., 0.),
                        shape=discr,
                        n_nodal_dofs=fets_eval.n_nodal_dofs,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    fe_domain3 = FEGrid(coord_min=(1., 1., 0),
                        coord_max=(2., 2., 0.),
                        shape=discr,
                        n_nodal_dofs=fets_eval.n_nodal_dofs,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    ts = TS(
        iterms=[(fets_eval, fe_domain1), (fets_eval, fe_domain2),
                (fets_eval, fe_domain3)],
        dof_resultants=True,
        bcond_list=[
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_domain1.get_bottom_dofs),
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_domain3.get_left_dofs,
                       get_link_dof_method=fe_domain2.get_right_dofs,
                       link_coeffs=[1.]),
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_domain2.get_bottom_dofs,
                       get_link_dof_method=fe_domain1.get_top_dofs,
                       link_coeffs=[1.]),
            BCDofGroup(var='u',
                       value=0.0004,
                       dims=[1],
                       get_dof_method=fe_domain3.get_right_dofs)
        ],
        rtrace_list=[
            RTraceDomainListField(name='Displacement', var='u', idx=1),
            RTraceDomainListField(name='Damage',
                                  var='omega',
                                  idx=0,
                                  record_on='update',
                                  warp=True),
            #                              RTraceDomainListField(name = 'Stress' ,
            #                              var = 'sig_app', idx = 0,
            #                              record_on = 'update',
            #                              warp = False),
            #                              RTraceDomainListField(name = 'Strain' ,
            #                              var = 'eps_app', idx = 0,
            #                              record_on = 'update',
            #                              warp = False),
        ])

    # Add the time-loop control
    global tloop
    tloop = TLoop(tstepper=ts,
                  tolerance=1e-4,
                  KMAX=50,
                  tline=TLine(min=0.0, step=0.2, max=1.0))

    tloop.eval()
    #    import cProfile
    #    cProfile.run('tloop.eval()', 'tloop_prof' )
    #
    #    import pstats
    #    p = pstats.Stats('tloop_prof')
    #    p.strip_dirs()
    #    print 'cumulative'
    #    p.sort_stats('cumulative').print_stats(20)
    #    print 'time'
    #    p.sort_stats('time').print_stats(20)

    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #48
0
    def example_1d():
        fets_eval = FETS1D2L3U(mats_eval=MATS1DElastic(E=20.))
        xfets_eval = FETSCrack(parent_fets=fets_eval, int_order=2)

        # Discretization

        fe_domain = FEDomain()
        fe_level1 = FERefinementGrid(domain=fe_domain, fets_eval=fets_eval)
        fe_grid1 = FEGrid(coord_max=(2., 0., 0.),
                          shape=(2, ),
                          fets_eval=fets_eval,
                          level=fe_level1)

        enr = True
        if enr:
            fe_xdomain = XFESubDomain(
                domain=fe_domain,
                fets_eval=xfets_eval,
                #fe_grid_idx_slice = fe_grid1[1,0],
                fe_grid_slice=fe_grid1['X  - .75'])
            fe_xdomain.deactivate_sliced_elems()

        ts = TS(
            dof_resultants=True,
            sdomain=fe_domain,
            bcond_list=[
                BCSlice(var='u',
                        value=-1. / 2.,
                        dims=[0],
                        slice=fe_grid1[0, 0]),
                BCSlice(var='u', value=0., dims=[0], slice=fe_grid1[-1, -1]),
            ],
            rtrace_list=[
                #                                 RTDofGraph(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='eps',
                                      idx=0,
                                      warp=True),
                RTraceDomainListField(name='Displacement',
                                      var='u',
                                      idx=0,
                                      warp=True),
                #                                     RTraceDomainField(name = 'N0' ,
                #                                                  var = 'N_mtx', idx = 0,
                #                                                  record_on = 'update')
            ])
        #
        #        # Add the time-loop control
        tloop = TLoop(tstepper=ts,
                      debug=True,
                      tolerance=1e-4,
                      RESETMAX=0,
                      tline=TLine(min=0.0, step=1, max=1.0))

        #print "elements ",fe_xdomain.elements[0]
        if enr:
            print('parent elems ', fe_xdomain.fe_grid_slice.elems)
            print('parent dofs ', fe_xdomain.fe_grid_slice.dofs)
            print("dofmap ", fe_xdomain.elem_dof_map)
            print("ls_values ", fe_xdomain.dots.dof_node_ls_values)
            print('intersection points ', fe_xdomain.fe_grid_slice.r_i)  #
            print("triangles ", fe_xdomain.dots.int_division)
            print('ip_coords', fe_xdomain.dots.ip_coords)
            print('ip_weigths', fe_xdomain.dots.ip_weights)
            print('ip_offset ', fe_xdomain.dots.ip_offset)
            print('ip_X_coords', fe_xdomain.dots.ip_X)
            print('ip_ls', fe_xdomain.dots.ip_ls_values)
            print('vtk_X ', fe_xdomain.dots.vtk_X)
            print('vtk triangles ', fe_xdomain.dots.rt_triangles)
            print("vtk data ",
                  fe_xdomain.dots.get_vtk_cell_data('blabla', 0, 0))
            print('vtk_ls', fe_xdomain.dots.vtk_ls_values)
            print('J_det ', fe_xdomain.dots.J_det_grid)

        tloop.eval()

        from ibvpy.plugins.ibvpy_app import IBVPyApp
        ibvpy_app = IBVPyApp(ibv_resource=ts)
        ibvpy_app.main()
Пример #49
0
            #                                  var_y = 'F_int', idx_y = right_dof,
            #                                  var_x = 'U_k', idx_x = right_dof,
            #                                  record_on = 'update'),
            #                        RTraceDomainListField(name = 'Deformation' ,
            #                                       var = 'eps', idx = 0,
            #                                       record_on = 'update'),
            #                         RTraceDomainListField(name = 'Displacement_ip' ,
            #                                        var = 'u', idx = 0,
            #                                        position = 'int_pnts'),
            RTraceDomainListField(name='Displacement', var='u', idx=0),
            #                         RTraceDomainListField(name = 'Stress' ,
            #                                        var = 'sig', idx = 0,
            #                                        record_on = 'update'),
            #                        RTraceDomainListField(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=0.5, max=1.0))

    tloop.eval()

    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
def run():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, IBVPSolve as IS, DOTSEval, BCSlice, FEGrid, BCDofGroup
    from ibvpy.fets.fets1D5.fets1D52l4uLRH import \
        FETS1D52L4ULRH, MATS1DElastic, MATS1DPlastic, MATS1D5Bond
    from ibvpy.fets.fets2D.fets2D4q import FETS2D4Q
    from ibvpy.mats.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic
    from mathkit.mfn.mfn_line.mfn_line import \
        MFnLineArray
    from math import sqrt, pi as Pi

    # Concrete parameters
    E_concrete = 34000.0               # [MPa]  E-Modulus of concrete
    nu_concrete = 0.2                  # [-]    Poisson ratio

    # Yarn parameters
    A_epoxy  = 1.760                   # [mm^2] cross-sectional area of epoxy
    A_glass  = 0.896                   # [mm^2] cross-sectional area of glass
    A_yarn   = A_epoxy + A_glass       # [mm^2] cross-sectional area of yarn
    P_yarn   = sqrt( 4 * A_yarn * Pi ) # [mm] perimeter of the yarn
    E_yarn   = 17000.0                 # [MPa]  effective E-Modulus of the impregnated yarn
    stiffness_fiber   = E_yarn * A_yarn
    
    penalty_stiffness = 1.e6
    
    # Bond parameters
    tau_max  = 13.0             # [N/mm^2] - frictional shear stress
    T_max    = tau_max * P_yarn # [N/mm] - frictional shear flow
    s_crit   = 0.028            # [mm] - onset of inelastic slip
    G        = T_max / s_crit   # [N/mm] - shear flow stiffness
    
    # Geometry
    L_e      = 5.                            # [mm] - embedded length
    
    # Loading conditions
    u_max    = 0.3
    # f_max   = 1200
    
    # Discretization
    fineness_x = 4
    fineness_y = 4
    
    # Material model construction
    mats_eval_bond = MATS1D5Bond( mats_phase1 = MATS1DElastic( E = stiffness_fiber ),
                                  mats_phase2 = MATS1DElastic( E = 0 ),
                                  mats_ifslip = MATS1DElastic( E = G ),
                                  mats_ifopen = MATS1DElastic( E = penalty_stiffness))
    
    mats_eval_matrix = MATS2DElastic( E = E_concrete,
                                      nu = nu_concrete,
                                      stress_state="plane_strain")

    # Finite element construction
    fets_eval_bond = FETS1D52L4ULRH( mats_eval = mats_eval_bond )
    fets_eval_matrix = FETS2D4Q( mats_eval = mats_eval_matrix )

    # Discretization
    domain_bond = FEGrid( coord_min = (0., -L_e/5.),
                          coord_max = (L_e,  0.),
                          shape   = (fineness_x,1),
                          fets_eval = fets_eval_bond )
    
    domain_matrix1 = FEGrid( coord_max = (L_e, L_e),
                             shape   = (fineness_x,fineness_y),
                             fets_eval = fets_eval_matrix )
    
#    domain_matrix2 = FEGrid( coord_min = (L_e, 0.),
#                             coord_max = (L_e*2, L_e),
#                             shape   = (fineness_x,fineness_y),
#                             fets_eval = fets_eval_matrix )

    end_dof = domain_bond[-1,0,-1,0 ].dofs[0,0,0]
    ts = TS( dof_resultants = True,
             sdomain = [ domain_bond, domain_matrix1],#, domain_matrix2 ],
             bcond_list =  [                                
                            # Fixed fiber at the left end
                            BCSlice( var='u', value = 0., dims = [0],
                                     slice = domain_bond[0,0,0,0] ),

                            # Fixed y-displacement - no crack opening
                            BCSlice( var='u', value = 0., dims = [1],
                                     slice = domain_bond[:,0,:,0] ),
                                 
                            # Loading at the right end of the fiber
                            BCSlice( var='u', value = u_max, dims = [0],
                                     slice = domain_bond[-1,0,-1,0] ), 
                        
                            # Support the matrix in the horizontal direction
                            BCSlice( var='u', value = 0., dims = [0],
                                     slice = domain_matrix1[0,:,0,:]),
                                 
#                            # Support the matrix in the vertical direction
#                            BCSlice( var='u', value = 0., dims = [1],
#                                     slice = domain_matrix1[:,0,:,0]),
                        
#                            # Connect bond and matrix domains
#                            BCSlice( var='u', value = 0., dims = [0,1],
#                                     link_slice = domain_bond[:,-1,:,-1],
#                                     slice = domain_matrix1[:,0,:,0],
#                                     link_coeffs = [1.]),

                            BCDofGroup( var='u', value = 0., dims = [0,1],
                                        get_link_dof_method = domain_bond.get_top_dofs,
                                        get_dof_method = domain_matrix1.get_bottom_dofs,
                                        link_coeffs = [1.] ),
                                               
#                            # Connect two matrix domains
#                            BCSlice( var='u', value = 0., dims = [0,1],
#                                     slice = domain_matrix1[-1,:,-1,:],
#                                     link_slice = domain_matrix2[0,:,0,:],
#                                     link_coeffs = [1.]),
                                    
                        ],
         rtrace_list =  [ RTraceGraph(name = 'Fi,right over u_right (iteration)' ,
                               var_y = 'F_int', idx_y = end_dof,
                               var_x = 'U_k', idx_x = end_dof),
                          RTraceDomainListField(name = 'slip' ,
                                var = 'slip', idx = 0 ),
                          RTraceDomainListField(name = 'eps1' ,
                                var = 'eps1', idx = 0 ),
                          RTraceDomainListField(name = 'eps2' ,
                                var = 'eps2', idx = 0 ),
                          RTraceDomainListField(name = 'shear_flow' ,
                                var = 'shear_flow', idx = 0 ),
                          RTraceDomainListField(name = 'sig1' ,
                                var = 'sig1', idx = 0 ),
                          RTraceDomainListField(name = 'sig2' ,
                                var = 'sig2', idx = 0 ),
                          RTraceDomainListField(name = 'Displacement' ,
                                var = 'u', idx = 0), 
                          RTraceDomainListField(name = 'Stress' ,
                                var = 'sig_app', idx = 0)                   
                ] )
    
    # Add the time-loop control
    tloop = TLoop( tstepper = ts, KMAX = 30, debug = False,
                   tline  = TLine( min = 0.0,  step = 1.0, max = 1.0 ))
    
    print tloop.eval()    
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #51
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceDomainListField, TLoop, \
        TLine, BCSlice
    from ibvpy.fets.fets2D.fets2D4q8u import FETS2D4Q8U
    from ibvpy.mats.mats3D.mats3D_cmdm import \
        MATS3DMicroplaneDamage
    from ibvpy.mats.matsXD.matsXD_cmdm import PhiFnStrainSoftening

#    mats =  MATS2DElastic(E=2,nu= .2,
#                          stress_state= 'rotational_symetry')
    mats = MATS3DMicroplaneDamage(model_version='stiffness',
                                  E=34e3,
                                  nu=0.2,
                                  phi_fn=PhiFnStrainSoftening(G_f=0.001117,
                                                              f_t=2.8968))

    fets_eval = FETS2Drotsym(prototype_fets=FETS2D4Q8U(),
                             mats_eval=mats)

    fets_eval.vtk_r *= 0.9
    from ibvpy.mesh.fe_grid import FEGrid

    radius = sqrt(1. / pi)
#    f_i = (radius/2.)*2*pi
#    f_o = (radius)*2*pi
#    print 'f ',f_i,' ', f_o
    # Discretization
    fe_grid = FEGrid(  # coord_min = (0.,radius/2.,0.),
        coord_max=(1., radius, 0.),
        shape=(20, 20),
        fets_eval=fets_eval)

    tstepper = TS(sdomain=fe_grid,
                  bcond_list=[
                      BCSlice(var='u', value=0., dims=[0],
                              slice=fe_grid[0, :, 0, :]),
                      BCSlice(var='u', value=0., dims=[1],
                              slice=fe_grid[0, 0, 0, 0]),
                      BCSlice(var='u', value=1.e-3, dims=[0],
                              slice=fe_grid[-1, :, -1, :]),
                  ],

                  rtrace_list=[
                      RTraceDomainListField(name='Stress',
                                            var='sig_app', idx=0, warp=True,
                                            record_on='update'),
                      RTraceDomainListField(name='fracture_energy',
                                            var='fracture_energy', idx=0, warp=True,
                                            record_on='update'),
                      RTraceDomainListField(name='Displacement',
                                            var='u', idx=0,
                                            record_on='update',
                                            warp=True),
                      #                    RTraceDomainListField(name = 'N0' ,
                      #                                      var = 'N_mtx', idx = 0,
                      # record_on = 'update')
                  ]
                  )

    # Add the time-loop control
    #global tloop
    tloop = TLoop(tstepper=tstepper, KMAX=300, tolerance=1e-4,
                  tline=TLine(min=0.0,  step=1.0, max=1.0))

    #import cProfile
    #cProfile.run('tloop.eval()', 'tloop_prof' )
    print tloop.eval()
    #import pstats
    #p = pstats.Stats('tloop_prof')
    # p.strip_dirs()
    # print 'cumulative'
    # p.sort_stats('cumulative').print_stats(20)
    # print 'time'
    # p.sort_stats('time').print_stats(20)

    # Put the whole thing into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #52
0
def test_bar4():
    '''Clamped bar 3 domains, each with 2 elems (displ at right end)
    [0]-[1]-[2] [3]-[4]-[5] [6]-[7]-[8]
    u[0] = 0, u[2] = u[3], u[5] = u[6], u[8] = 1'''

    fets_eval = FETS1D2L(mats_eval=MATS1DElastic(E=10., A=1.))

    # Discretization
    fe_domain1 = FEGrid(coord_max=(2., 0., 0.),
                        shape=(2, ),
                        n_nodal_dofs=1,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    fe_domain2 = FEGrid(coord_min=(2., 0., 0.),
                        coord_max=(4., 0., 0.),
                        shape=(2, ),
                        n_nodal_dofs=1,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    fe_domain3 = FEGrid(coord_min=(4., 0., 0.),
                        coord_max=(6., 0., 0.),
                        shape=(2, ),
                        n_nodal_dofs=1,
                        dof_r=fets_eval.dof_r,
                        geo_r=fets_eval.geo_r)

    ts = TS(iterms=[(fets_eval, fe_domain1), (fets_eval, fe_domain2),
                    (fets_eval, fe_domain3)],
            dof_resultants=True,
            bcond_list=[
                BCDof(var='u', dof=0, value=0.),
                BCDof(var='u',
                      dof=2,
                      link_dofs=[3],
                      link_coeffs=[1.],
                      value=0.),
                BCDof(var='u',
                      dof=5,
                      link_dofs=[6],
                      link_coeffs=[1.],
                      value=0.),
                BCDof(var='u', dof=8, value=1)
            ],
            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='Displacement', var='u', idx=0)
            ])

    # 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
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
def run():
    '''
    Pull-Out test with epoxy-impregnated yarn. Publisched in 
    
    Konrad, M., Chudoba, R., Tensile Behavior of Cementitous Composite Reinforced
    with Epoxy Impregnated Multifilament Yarns, Int. J. for Multiscale 
    Computational Engineering, 7(2)115-133(2009)
 
    Parameters set in such a way that the Figure 18 gets reproduced.
    At the moment no yarn damage assumed.
    '''
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, TLoop, \
        TLine, IBVPSolve as IS, DOTSEval, BCSlice, FEGrid
    from ibvpy.fets.fets1D5.fets1D52l4uLRH import \
        FETS1D52L4ULRH,  MATS1DElastic, MATS1DPlastic, MATS1D5Bond
    from ibvpy.fets.fets1D5.fets1D52l6uLRH import FETS1D52L6ULRH
    from ibvpy.fets.fets1D5.fets1D52l8uLRH import FETS1D52L8ULRH
    from mathkit.mfn.mfn_line.mfn_line import \
        MFnLineArray
        
    from math import sqrt, pi as Pi

    # Concrete parameters
    A_concrete = 30. * 30.             # [mm^2] cross-sectional area of concrete
    E_concrete = 32000.0               # [MPa]  E-Modulus of concrete
    stiffness_concrete = E_concrete * A_concrete

    # Yarn parameters
    A_epoxy  = 1.760                   # [mm^2] cross-sectional area of epoxy
    A_glass  = 0.896                   # [mm^2] cross-sectional area of glass
    A_yarn   = A_epoxy + A_glass       # [mm^2] cross-sectional area of yarn
    P_yarn   = sqrt( 4 * A_yarn * Pi ) # [mm] perimeter of the yarn
    E_yarn   = 17000.0                 # [MPa]  effective E-Modulus of the impregnated yarn
    stiffness_fiber    = E_yarn * A_yarn
    
    # Bond parameters
    tau_max   = 13.0             # [N/mm^2] - frictional shear stress
    T_max     = tau_max * P_yarn # [N/mm] - frictional shear flow
    s_crit    = 0.028            # [mm] - onset of inelastic slip
    G         = T_max / s_crit   # [N/mm^2] - shear flow stiffness

    # Geometry
    L_e = 30.                            # [mm] - embedded length
    
    # Loading conditions
    u_max   = 0.1
    # f_max   = 1200
    
    # Material model construction
    mats_eval = MATS1D5Bond( mats_phase1 = MATS1DElastic( E = stiffness_fiber ),
                             mats_phase2 = MATS1DElastic( E = stiffness_concrete ),
                             mats_ifslip = MATS1DPlastic(E = G,
                                                         sigma_y = T_max,
                                                         K_bar = 0.,
                                                         H_bar = 0. ),
                             mats_ifopen = MATS1DElastic( E = 0. ))

    # Finite element construction
 #   fets_eval = FETS1D52L4ULRH( mats_eval = mats_eval ) # bilinear
 #   fets_eval = FETS1D52L6ULRH( mats_eval = mats_eval ) #quadratic
    fets_eval = FETS1D52L6ULRH( mats_eval = mats_eval ) #cubic
    # Dicretization
    domain = FEGrid( coord_max = (L_e, L_e/5.),
                     #shape   = (16,1), # for bilinear
                     #shape   = (8,1), # for quadratic
                     shape   = (4,1), # for cubic
                     fets_eval = fets_eval )

    end_dof = domain[-1,0,-1,0 ].dofs[0,0,0]
    ts = TS( dof_resultants = True,
         sdomain = domain,
         bcond_list =  [
                        # Matrix is fixed along the whole embedded length
                        BCSlice( var='u', value = 0., dims = [0], slice = domain[0,0,0,-1] ),
                                 
                        # Fixed fiber at the left end
                        BCSlice( var='u', value = 0., dims = [0],
                                  slice = domain[0,0,0,0] ),

                        # Fixed y-displacement - no crack opening
                        BCSlice( var='u', value = 0., dims = [1], slice = domain[:,:,:,:] ),
                                 
                        # Loading at the right end of the fiber
                        BCSlice( var='u', value = u_max, dims = [0], slice = domain[-1,0,-1,0] ) 
                        ],
         rtrace_list = [ RTraceGraph(name = 'Fi,right over u_right (iteration)' ,
                                     var_y = 'F_int', idx_y = end_dof,
                                     var_x = 'U_k', idx_x = end_dof),
                         RTraceDomainListField(name = 'slip', var = 'slip' ),
                         RTraceDomainListField(name = 'eps1', var = 'eps1' ),
                         RTraceDomainListField(name = 'eps2', var = 'eps2' ),
                         RTraceDomainListField(name = 'shear_flow', var = 'shear_flow' ),
                         RTraceDomainListField(name = 'sig1', var = 'sig1' ),
                         RTraceDomainListField(name = 'sig2', var = 'sig2' ),
                         RTraceDomainListField(name = 'Displacement', var = 'u' )                      
                ] )
    
    # Add the time-loop control
    tloop = TLoop( tstepper = ts, KMAX = 30, debug = False,
                   tline  = TLine( min = 0.0,  step = 0.1, max = 1.0 ))
    
    print tloop.eval()    
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp( ibv_resource = tloop )
    app.main()
Пример #54
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceDomainListField, TLoop, TLine

    from ibvpy.tmodel.mats2D5.mats2D5_bond.mats2D_bond import MATS2D5Bond
    from ibvpy.api import BCDofGroup
    from ibvpy.fets.fets2D.fets2D4q import FETS2D4Q
    fets_eval = FETS2DTF(parent_fets=FETS2D4Q(),
                         mats_eval=MATS2D5Bond(E_m=30, nu_m=0.2,
                                               E_f=10, nu_f=0.1,
                                               G=10.))

    from ibvpy.mesh.fe_grid import FEGrid
    from mathkit.mfn import MFnLineArray

    # Discretization
    fe_grid = FEGrid(coord_max=(10., 4., 0.),
                     n_elems=(10, 3),
                     fets_eval=fets_eval)

    mf = MFnLineArray(  # xdata = arange(10),
        ydata=array([0, 1, 2, 3]))

    tstepper = TS(sdomain=fe_grid,
                  bcond_list=[BCDofGroup(var='u', value=0., dims=[0, 1],
                                         get_dof_method=fe_grid.get_left_dofs),
                              #                                   BCDofGroup( var='u', value = 0., dims = [1],
                              # get_dof_method = fe_grid.get_bottom_dofs ),
                              BCDofGroup(var='u', value=.005, dims=[0],
                                         time_function=mf.get_value,
                                         get_dof_method=fe_grid.get_right_dofs)],
                  rtrace_list=[
                      #                     RTDofGraph(name = 'Fi,right over u_right (iteration)' ,
                      #                               var_y = 'F_int', idx_y = right_dof,
                      #                               var_x = 'U_k', idx_x = right_dof,
                      #                               record_on = 'update'),
                      #                         RTraceDomainListField(name = 'Stress' ,
                      #                         var = 'sig_app', idx = 0,
                      #                         #position = 'int_pnts',
                      #                         record_on = 'update'),
                      #                     RTraceDomainListField(name = 'Damage' ,
                      #                                    var = 'omega', idx = 0,
                      #                                    record_on = 'update',
                      #                                    warp = True),
                      RTraceDomainListField(name='Displ matrix',
                                            var='u_m', idx=0,
                                            record_on='update',
                                            warp=True),
                      RTraceDomainListField(name='Displ reinf',
                                            var='u_f', idx=0,
                                            record_on='update',
                                            warp=True),

                      #                    RTraceDomainListField(name = 'N0' ,
                      #                                      var = 'N_mtx', idx = 0,
                      # record_on = 'update')
                  ]
                  )

    # Add the time-loop control
    #global tloop
    tloop = TLoop(tstepper=tstepper, KMAX=300, tolerance=1e-4,
                  tline=TLine(min=0.0, step=1.0, max=1.0))

    #import cProfile
    #cProfile.run('tloop.eval()', 'tloop_prof' )
    print(tloop.eval())
    #import pstats
    #p = pstats.Stats('tloop_prof')
    # p.strip_dirs()
    # print 'cumulative'
    # p.sort_stats('cumulative').print_stats(20)
    # print 'time'
    # p.sort_stats('time').print_stats(20)

    # Put the whole thing into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #55
0
def app():
    avg_radius = 0.03

    md = MATS2DScalarDamage( E = 20.0e3,
                            nu = 0.2,
                            epsilon_0 = 1.0e-4,
                            epsilon_f = 8.0e-4,
                            #epsilon_f = 12.0e-4, #test doubling the e_f
                            stress_state = "plane_strain",
                            stiffness = "secant",
                            #stiffness  = "algorithmic",
                            strain_norm = Rankine() )

    mdm = MATS2DMicroplaneDamage( E = 20.0e3,
                                 nu = 0.2,
                                 #epsilon_f = 12.0e-4, #test doubling the e_f
                                 stress_state = "plane_strain",
                                model_version = 'compliance',
                                phi_fn = PhiFnStrainSoftening( 
                                                              G_f = 0.0014,
                                                              f_t = 2.0,
                                                              md = 0.0,
                                                              h = 2. * avg_radius ) )

#    mp = MATSProxy( mats_eval = mdm )
#    mp.varpars['epsilon_0'].switch = 'varied'
#    mp.varpars['epsilon_0'].spatial_fn = MFnNDGrid( shape = ( 8, 5, 1 ),
#                                    active_dims = ['x', 'y'],
#                                    x_mins = GridPoint( x = 0., y = 0. ),
#                                    x_maxs = GridPoint( x = length, y = heigth ) )
#    mp.varpars['epsilon_0'].spatial_fn.set_values_in_box( 500., [0, 0, 0], [0.2, 0.2, 0.] )
#    mp.varpars['epsilon_0'].spatial_fn.set_values_in_box( 500., [0.8, 0, 0], [1., 0.2, 0.] )
#    mp.varpars['epsilon_0'].spatial_fn.set_values_in_box( 50., [0., 0.46, 0], [1., 0.5, 0.] )


#    me = MATS2DElastic( E = 20.0e3,
#                       nu = 0.2,
#                       stress_state = "plane_strain" )

    fets_eval = FETS2D4Q( mats_eval = mdm )#, ngp_r = 3, ngp_s = 3)                                               

    n_el_x = 60
    # Discretization
    fe_grid = FEGrid( coord_max = ( .6, .15, 0. ),
                      shape = ( n_el_x, 15 ),
                      fets_eval = fets_eval )

    mf = MFnLineArray( xdata = array( [0, 1, 2 ] ),
                       ydata = array( [0, 3., 3.2 ] ) )

    #averaging function
    avg_processor = RTNonlocalAvg( avg_fn = QuarticAF( radius = avg_radius,
                                                       correction = True ) )

    loading_dof = fe_grid[n_el_x / 2, -1, 0, -1].dofs.flatten()[1]
    print 'loading_dof', loading_dof
    ts = TS( sdomain = fe_grid,
             u_processor = avg_processor,
             bcond_list = [
                        # constraint for all left dofs in y-direction:
                        BCSlice( var = 'u', slice = fe_grid[0, 0, 0, 0], dims = [0, 1], value = 0. ),
                        BCSlice( var = 'u', slice = fe_grid[-1, 0, -1, 0], dims = [1], value = 0. ),
                        BCSlice( var = 'u', slice = fe_grid[n_el_x / 2, -1, 0, -1], dims = [1],
                                time_function = mf.get_value,
                                value = -2.0e-5 ),
                        ],
             rtrace_list = [
                            RTraceGraph( name = 'Fi,right over u_right (iteration)' ,
                                      var_y = 'F_int', idx_y = loading_dof,
                                      var_x = 'U_k', idx_x = loading_dof,
                                      record_on = 'update' ),
                            RTraceDomainListField( name = 'Deformation' ,
                                           var = 'eps_app', idx = 0,
                                           record_on = 'update' ),
                            RTraceDomainListField( name = 'Deformation' ,
                                           var = 'sig_app', idx = 0,
                                           record_on = 'update' ),
                            RTraceDomainListField( name = 'Displacement' ,
                                           var = 'u', idx = 1,
                                           record_on = 'update',
                                           warp = True ),
                            RTraceDomainListField( name = 'fracture_energy' ,
                                           var = 'fracture_energy', idx = 0,
                                           record_on = 'update',
                                           warp = True ),
                            RTraceDomainListField( name = 'Damage' ,
                                        var = 'omega_mtx', idx = 0, warp = True,
                                        record_on = 'update' ),

    #                         RTraceDomainField(name = 'Stress' ,
    #                                        var = 'sig', idx = 0,
    #                                        record_on = 'update'),
    #                        RTraceDomainField(name = 'N0' ,
    #                                       var = 'N_mtx', idx = 0,
    #                                       record_on = 'update')
                        ]
            )

    # Add the time-loop control
    #
    tl = TLoop( tstepper = ts,
                tolerance = 5.0e-5,
                KMAX = 25,
                tline = TLine( min = 0.0, step = .5, max = 200.0 ) )
    tl.eval()
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    ibvpy_app = IBVPyApp( ibv_resource = ts )
    ibvpy_app.main()
Пример #56
0
                        fets_eval=fets_eval)

    fe_domain2 = FEGrid(coord_min=(10., 0., 0.),
                        coord_max=(20., 0., 0.),
                        shape=(10,),
                        fets_eval=fets_eval)

    fe_domain = FEDomain(subdomains=[fe_domain1, fe_domain2])
    ts = TS(dof_resultants=True,
            sdomain=fe_domain,
            bcond_list=[BCDof(var='u', dof=0, value=0.),
                        BCDof(
                            var='u', dof=5, link_dofs=[16], link_coeffs=[1.], value=0.),
                        BCDof(var='f', dof=21, value=10)],
            rtrace_list=[RTraceGraph(name='Fi,right over u_right (iteration)',
                                     var_y='F_int', idx_y=0,
                                     var_x='U_k', idx_x=1),
                         ]
            )

    # Add the time-loop control
    tloop = TLoop(tstepper=ts, tline=TLine(min=0.0, step=1, max=1.0))

    ts.set(sdomain=FEDomain(subdomains=[fe_domain1, fe_domain2]))

    ts.set(bcond_list=[BCDof(var='u', dof=0, value=0.),
                       BCDof(
                           var='u', dof=5, link_dofs=[16], link_coeffs=[1.], value=0.),
                       BCDof(var='f', dof=21, value=10)])
    print tloop.eval()
Пример #57
0
def example_with_new_domain():
    from ibvpy.api import \
        TStepper as TS, RTraceGraph, RTraceDomainListField, \
        RTraceDomainListInteg, TLoop, \
        TLine, BCDof, IBVPSolve as IS, DOTSEval
    from ibvpy.mats.mats2D.mats2D_elastic.mats2D_elastic import MATS2DElastic
    from ibvpy.mats.mats2D.mats2D_sdamage.mats2D_sdamage import MATS2DScalarDamage

    from ibvpy.api import BCDofGroup

    mats_eval = MATS2DElastic()
    fets_eval = FETS2D4Q(mats_eval=mats_eval)
    #fets_eval = FETS2D4Q(mats_eval = MATS2DScalarDamage())

    print fets_eval.vtk_node_cell_data

    from ibvpy.mesh.fe_grid import FEGrid
    from ibvpy.mesh.fe_refinement_grid import FERefinementGrid
    from ibvpy.mesh.fe_domain import FEDomain
    from mathkit.mfn import MFnLineArray

    # Discretization
    fe_grid = FEGrid(coord_max=(10., 4., 0.),
                     shape=(10, 3),
                     fets_eval=fets_eval)

    bcg = BCDofGroup(var='u',
                     value=0.,
                     dims=[0],
                     get_dof_method=fe_grid.get_left_dofs)
    bcg.setup(None)
    print 'labels', bcg._get_labels()
    print 'points', bcg._get_mvpoints()

    mf = MFnLineArray(  # xdata = arange(10),
        ydata=array([0, 1, 2, 3]))

    right_dof = 2
    tstepper = TS(
        sdomain=fe_grid,
        bcond_list=[
            BCDofGroup(var='u',
                       value=0.,
                       dims=[0, 1],
                       get_dof_method=fe_grid.get_left_dofs),
            #                                   BCDofGroup( var='u', value = 0., dims = [1],
            # get_dof_method = fe_grid.get_bottom_dofs ),
            BCDofGroup(var='u',
                       value=.005,
                       dims=[1],
                       time_function=mf.get_value,
                       get_dof_method=fe_grid.get_right_dofs)
        ],
        rtrace_list=[
            RTraceGraph(name='Fi,right over u_right (iteration)',
                        var_y='F_int',
                        idx_y=right_dof,
                        var_x='U_k',
                        idx_x=right_dof,
                        record_on='update'),
            RTraceDomainListField(name='Stress',
                                  var='sig_app',
                                  idx=0,
                                  position='int_pnts',
                                  record_on='update'),
            #                     RTraceDomainListField(name = 'Damage' ,
            #                                    var = 'omega', idx = 0,
            #
            #                    record_on = 'update',
            #                                    warp = True),
            RTraceDomainListField(name='Displacement',
                                  var='u',
                                  idx=0,
                                  record_on='update',
                                  warp=True),
            RTraceDomainListField(name='Strain energy',
                                  var='strain_energy',
                                  idx=0,
                                  record_on='update',
                                  warp=False),
            RTraceDomainListInteg(name='Integ strain energy',
                                  var='strain_energy',
                                  idx=0,
                                  record_on='update',
                                  warp=False),
            #                    RTraceDomainListField(name = 'N0' ,
            #                                      var = 'N_mtx', idx = 0,
            # record_on = 'update')
        ])

    # Add the time-loop control
    #global tloop
    tloop = TLoop(tstepper=tstepper,
                  KMAX=300,
                  tolerance=1e-4,
                  tline=TLine(min=0.0, step=1.0, max=1.0))

    #import cProfile
    #cProfile.run('tloop.eval()', 'tloop_prof' )
    # print tloop.eval()
    #import pstats
    #p = pstats.Stats('tloop_prof')
    # p.strip_dirs()
    # print 'cumulative'
    # p.sort_stats('cumulative').print_stats(20)
    # print 'time'
    # p.sort_stats('time').print_stats(20)

    tloop.eval()
    # Put the whole thing into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tloop)
    app.main()
Пример #58
0
def combined_fe2D4q_with_fe2D4q8u():

    fets_eval_4u_conc = FETS2D4Q(mats_eval=MATS2DElastic(E=28500, nu=0.2))
    fets_eval_4u_steel = FETS2D4Q(mats_eval=MATS2DElastic(E=210000, nu=0.25))
    fets_eval_8u = FETS2D4Q8U(mats_eval=MATS2DElastic())

    # Discretization
    fe_domain = FEDomain()

    fe_grid_level1 = FERefinementGrid(name='master grid',
                                      fets_eval=fets_eval_4u_conc,
                                      domain=fe_domain)

    fe_grid = FEGrid(level=fe_grid_level1,
                     coord_max=(2., 6., 0.),
                     shape=(11, 30),
                     fets_eval=fets_eval_4u_conc)

    fe_grid_level2 = FERefinementGrid(name='refinement grid',
                                      parent=fe_grid_level1,
                                      fets_eval=fets_eval_4u_steel,
                                      fine_cell_shape=(1, 1))

    # fe_grid_level1[ 5, :5 ].refine_using( fe_grid_level2 )
    # 1. first get the slice for the level - distinguish it from the slice at the subgrid
    #    this includes slicing in the subgrids. what if the subgrid does not exist?
    #
    #    Each subgrid must hold its own slice within the level. The index operator fills
    #    the grid [...] instanciates the whole grid and returns the instance of
    #    FEGridLevelSlice. The expanded subgrid contains its constructor slice.
    #
    # 2. If the slice is within an existing slice no change in the FESubgrid is required
    #    only the instance of the slice is returned. The FEGridLevelSlice goes always into
    #    an expanded part of FEGrid.
    #
    # 3. If the slice does not fit into any existing slice - all domain with an intersection
    #    of the existing slice must be constructed as well.
    #
    # 2. deactivate elements
    # 3.
    # BUT how to impose the boundary conditions on the particular refinement? The
    # slice has an attribute

    fe_grid_level2.refine_elem((5, 0))
    fe_grid_level2.refine_elem((5, 1))
    fe_grid_level2.refine_elem((5, 2))
    fe_grid_level2.refine_elem((5, 3))
    fe_grid_level2.refine_elem((5, 4))
    fe_grid_level2.refine_elem((5, 5))

    # apply the boundary condition on a subgrid
    #
    print fe_grid_level2.fe_subgrids
    fe_first_grid = fe_grid_level2.fe_subgrids[0]

    ts = TS(
        dof_resultants=True,
        sdomain=fe_domain,
        bcond_list=[
            BCSlice(var='f', value=1., dims=[0], slice=fe_grid[:, -1, :, -1]),
            BCSlice(var='u',
                    value=0.,
                    dims=[0, 1],
                    slice=fe_first_grid[:, 0, :, 0])
        ],
        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()
Пример #59
0
                       dims=[1],
                       get_dof_method=domain.get_bottom_left_dofs),
            BCDofGroup(var='u',
                       value=0.002,
                       dims=[0],
                       get_dof_method=domain.get_right_dofs)
        ],
        rtrace_list=[
            #                         RTDofGraph(name = 'Fi,right over u_right (iteration)' ,
            #                               var_y = 'F_int', idx_y = right_dof,
            #                               var_x = 'U_k', idx_x = right_dof),
            #                         RTraceDomainField(name = 'Stress' ,
            #                         var = 'sig_app', idx = 0,
            #                         record_on = 'update'),
            RTraceDomainListField(name='Displacement', var='u', idx=0),
            #                             RTraceDomainField(name = 'N0' ,
            #                                          var = 'N_mtx', idx = 0,
            #                                          record_on = 'update')
        ])

    # Add the time-loop control
    tl = TLoop(tstepper=ts, tline=TLine(min=0.0, step=0.5, max=1.0))

    tl.eval()
    # Put the whole stuff into the simulation-framework to map the
    # individual pieces of definition into the user interface.
    #
    from ibvpy.plugins.ibvpy_app import IBVPyApp
    app = IBVPyApp(ibv_resource=tl)
    app.main()
Пример #60
0
    def peval( self ):
        '''Evaluation procedure.
        '''
        #mv = MATS1DDamageView( model = mats_eval )
        #mv.configure_traits()

        self.mats_m.reset_state()
        # Discretization
        #
        length = self.length
        domain = FEGrid( coord_min = ( 0., length / 5. ),
                          coord_max = ( length, 0. ),
                          shape = ( self.shape, 1 ),
                          fets_eval = self.fets )

        right_dofs = domain[-1, -1, -1, :].dofs[0, :, 0]
        print 'concrete_dofs', id( domain ), domain[:, 0, :, 0].dofs
        # Response tracers
        self.stress_strain = RTraceGraph( name = 'Fi,right over u_right (iteration)' ,
                                   var_y = 'F_int', idx_y = right_dofs[0],
                                   var_x = 'U_k', idx_x = right_dofs[0] )
        self.eps_m_field = RTraceDomainListField( name = 'eps_m' , position = 'int_pnts',
                                           var = 'eps1', idx = 0,
                                           warp = True )

        self.eps_f_field = RTraceDomainListField( name = 'eps_f' , position = 'int_pnts',
                                           var = 'eps2', idx = 0,
                                           warp = True )

        # Response tracers
        self.sig_m_field = RTraceDomainListField( name = 'sig_m' , position = 'int_pnts',
                                              var = 'mats_phase1_sig_app', idx = 0 )
        self.sig_f_field = RTraceDomainListField( name = 'sig_f' , position = 'int_pnts',
                                              var = 'mats_phase2_sig_app', idx = 0 )
        self.omega_m_field = RTraceDomainListField( name = 'omega_m' , position = 'int_pnts',
                                           var = 'mats_phase1_omega', idx = 0,
                                           warp = True )
        # 

        damage_onset_displ = self.mats_m.epsilon_0 * self.length
        go_behind = 1.5
        finish_displ = go_behind * damage_onset_displ
        n_steps = 20
        step_size = ( finish_displ - damage_onset_displ ) / n_steps
        tmax = 1 + n_steps

        def ls( t ):
            if t <= 1:
                return t
            else:
                return 1.0 + ( t - 1.0 ) / n_steps * ( go_behind - 1 )

        ts = TSCrackLoc( 
                 dof_resultants = True,
                 on_update = self.plot,
                 sdomain = domain,
                 bcond_list = [# define the left clamping 
                                BCSlice( var = 'u', value = 0., dims = [0], slice = domain[ 0, 0, 0, :] ),
                                # loading at the right edge
                                 BCSlice( var = 'f', value = 1, dims = [0], slice = domain[-1, -1, -1, 0],
                                         time_function = ls ),
#                                 BCSlice(var='u', value = finish_displ, dims = [0], slice = domain[-1,-1,-1, 0],
#                                         time_function = ls ),
                                # fix horizontal displacement in the top layer
                                 BCSlice( var = 'u', value = 0., dims = [0], slice = domain[:, -1, :, -1] ),
                                # fix the vertical displacement all over the domain
                                 BCSlice( var = 'u', value = 0., dims = [1], slice = domain[ :, :, :, :] )
                                ],
                 rtrace_list = [ self.stress_strain,
                                  self.eps_m_field,
                                  self.eps_f_field,
                                  self.sig_m_field,
                                  self.sig_f_field,
                                  self.omega_m_field ]
                )

        # Add the time-loop control
        tloop = TLoop( tstepper = ts, KMAX = 200, debug = True, tolerance = 1e-5,
                       tline = TLine( min = 0.0, step = 1.0, max = 1.0 ) )

        print ts.rte_dict.keys()
        U = tloop.eval()

        self.plot()

        return array( [ U[right_dofs[-1]] ], dtype = 'float_' )