I am trying to set up a linear elasticity problem for u(x,y) where some
select nodes have a prescribed displacement u0(x,y), and the entire
boundary should be of no_penetration type such that u(x,y) . n(x,y) = 0
Using Sfepy 2014.4, I appear to have some problems setting up the linear
combination boundary conditions - I may not understand their syntax.
lcbcs = Conditions( [
LinearCombinationBC(name=*'normal'*, regions=[gamma,None], dofs={*'u.all'*
: None, }, dof_map_fun=None, kind=*'no_penetration'*, arguments=()),
])
Running it I get the error chain:
Traceback (most recent call last):
File "E:\pyspace\Experiments\src\sfepyelastic1.py", line 68, in <module>
main()
File "E:\pyspace\Experiments\src\sfepyelastic1.py", line 60, in main
pb.time_update(ebcs=ebcs, lcbcs=lcbcs)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\problem.py",
line 595, in time_update
functions, create_matrix)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\problem.py",
line 556, in update_equations
functions, self)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\equations.py",
line 287, in time_update
self.variables.setup_lcbc_operators(lcbcs, ts, functions)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\variables.py",
line 335, in setup_lcbc_operators
ops.add_from_bc(bc, ts)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\fem\lcbc_operators.py",
line 427, in add_from_bc
bc.dof_map_fun, *args)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\fem\lcbc_operators.py",
line 159, in __init__
variables, functions=functions)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\fem\lcbc_operators.py",
line 45, in __init__
self._setup_dof_names(variables)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\fem\lcbc_operators.py",
line 56, in _setup_dof_names
self.all_dof_names = variables[self.var_name].dofs
TypeError: 'TimeStepper' object has no attribute '__getitem__'
When choosing a different LinearCombinationBC, e.g., rigid, I get an
assertion error:
lcbcs = Conditions( [
LinearCombinationBC(name=*'rigid'*, regions=[gamma,None], dofs={*'u.all'* :
None, }, dof_map_fun=None, kind=*'rigid'*, arguments=()),
])
Traceback (most recent call last):
File "E:\pyspace\Experiments\src\sfepyelastic1.py", line 68, in <module>
main()
File "E:\pyspace\Experiments\src\sfepyelastic1.py", line 61, in main
vec = pb.solve()
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\discrete\problem.py",
line 984, in solve
vec = solvers.nls(vec0, status=self.nls_status)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\solvers\nls.py",
line 396, in __call__
eps_a=eps_a, eps_r=eps_r, mtx=mtx_a)
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\solvers\ls.py",
line 42, in _standard_call
assert_(x0.shape[0] == rhs.shape[0])
File
"C:\Users\m9imhof\LocalApps\XOMEPD\lib\site-packages\sfepy\base\base.py",
line 198, in assert_
raise ValueError(msg)
ValueError: assertion failed!
Clearly, I am missing something wrt LinearCombinationBC, but what?
Matthias