def get_pars( lam, mu, dim, full = False ): from sfepy.mechanics.matcoefs import stiffness_tensor_lame, TransformToPlane if full: c = stiffness_tensor_lame( 3, lam, mu ) if dim == 2: tr = TransformToPlane() try: c = tr.tensor_plane_stress( c3 = c ) except: sym = (dim + 1) * dim / 2 c = nm.zeros( (sym, sym), dtype = nm.float64 ) return c else: return lam, mu
def get_pars(ts, coor, mode, output_dir='.', **kwargs): if mode == 'qp': n_nod, dim = coor.shape sym = (dim + 1) * dim / 2 out = {} out['D'] = nm.tile(stiffness_tensor_lame(dim, lam=1.7, mu=0.3), (coor.shape[0], 1, 1)) aa = nm.zeros((sym, 1), dtype=nm.float64) aa[:dim] = 0.132 aa[dim:sym] = 0.092 out['alpha'] = nm.tile(aa, (coor.shape[0], 1, 1)) perm = nm.eye(dim, dtype=nm.float64) out['K'] = nm.tile(perm, (coor.shape[0], 1, 1)) return out
'output_dir' : '.', 'output_format' : 'h5', # VTK reader cannot read cell data yet... 'post_process_hook' : 'post_process', 'gen_probes' : 'gen_lines', 'probe_hook' : 'probe_hook', } # Update materials, as de_cauchy_stress below needs the elastic constants in # the tensor form. from sfepy.mechanics.matcoefs import stiffness_tensor_lame solid = materials['solid'][0] lam, mu = solid['lam'], solid['mu'] solid.update({ 'D' : stiffness_tensor_lame(3, lam=lam, mu=mu), }) # Update fields and variables to be able to use probes for tensors. fields.update({ 'sym_tensor': ('real', 6, 'Omega', 0), }) variables.update({ 's' : ('parameter field', 'sym_tensor', None), }) # Define the function post_process, that will be called after the problem is # solved. def post_process(out, problem, state, extend=False): """
% (vn, vn), verbose=False) print 'dw_lin_elastic', vn, val except: pass return out options = { 'nls' : 'newton', 'ls' : 'ls', 'post_process_hook' : 'post_process', } materials = { 'm' : ({'D' : stiffness_tensor_lame(3, lam=0.0007, mu=0.0003), 'one' : 1.0},), } regions = { 'Omega' : ('all', {}), 'Gamma_Left' : ('nodes in (x < %f)' % xmin, {}), 'Gamma_Right' : ('nodes in (x > %f)' % xmax, {}), } fields = { 'displacements' : ('real', 'vector', 'Omega', 1), } variables = { 'u' : ('unknown field', 'displacements', 0),
def define(): """Define the problem to solve.""" from sfepy import data_dir filename_mesh = data_dir + '/meshes/3d/block.mesh' options = { 'post_process_hook' : 'post_process', 'nls' : 'newton', 'ls' : 'ls', } functions = { 'linear_tension' : (linear_tension,), } fields = { 'displacement': ('real', 3, 'Omega', 1), } materials = { 'solid' : ({ 'lam' : 5.769, 'mu' : 3.846, },), 'load' : (None, 'linear_tension') } from sfepy.mechanics.matcoefs import stiffness_tensor_lame solid = materials['solid'][0] lam, mu = solid['lam'], solid['mu'] solid.update({ 'D' : stiffness_tensor_lame(3, lam=lam, mu=mu), }) variables = { 'u' : ('unknown field', 'displacement', 0), 'v' : ('test field', 'displacement', 'u'), } regions = { 'Omega' : ('all', {}), 'Left' : ('nodes in (x < -4.99)', {}), 'Right' : ('nodes in (x > 4.99)', {}), } ebcs = { 'fixb' : ('Left', {'u.all' : 0.0}), # 'fixt' : ('Right', {'u.[1,2]' : 0.0}), } #! Integrals #! --------- #! Define the integral type Volume/Surface and quadrature rule #! (here: dim=3, order=1). integrals = { 'i1' : ('v', 'gauss_o1_d3'), } ## # Balance of forces. equations = { 'elasticity' : """dw_lin_elastic_iso.i1.Omega( solid.lam, solid.mu, v, u ) = - dw_surface_ltr.i1.Right( load.val, v )""", } ## # Solvers etc. solvers = { 'ls' : ('ls.scipy_direct', {}), 'newton' : ('nls.newton', { 'i_max' : 1, 'eps_a' : 1e-10, 'eps_r' : 1.0, 'macheps' : 1e-16, # Linear system error < (eps_a * lin_red). 'lin_red' : 1e-2, 'ls_red' : 0.1, 'ls_red_warp' : 0.001, 'ls_on' : 1.1, 'ls_min' : 1e-5, 'check' : 0, 'delta' : 1e-6, 'is_plot' : False, # 'nonlinear' or 'linear' (ignore i_max) 'problem' : 'nonlinear'}), } ## # FE assembling parameters. fe = { 'chunk_size' : 1000, 'cache_override' : False, } return locals()