def save_strain_and_params(self, iteration: int) -> None: strain_vec = fenics.project(fenics.sym(fenics.grad(self.fields.u_new)), V=self.tensor_space).vector()[:] strain_tens = np.reshape(strain_vec, newshape=(self.number_of_vertices, 2, 2)) parameters = fenics.project( self.fields.new_constitutive_relation_multiplicative_parameters, V=self.fields.new_constitutive_relation_multiplicative_parameters. function_space()).vector()[:] if self.fields.new_constitutive_relation_multiplicative_parameters.function_space( ).dim() == self.fields.tensor_space.dim(): parameters = np.reshape(parameters, newshape=(self.number_of_vertices, 2, 2)) self.np_files.write(prefix='strain', iteration=iteration, array=strain_tens) self.np_files.write(prefix='params', iteration=iteration, array=parameters)
def strain(v): return fn.sym(fn.grad(v))
def k(u, v): return inner(sigma(u), sym(grad(v))) * dx
def epsilon(u): return fs.sym(fs.nabla_grad(u))
def get_new_value(self, r: fenics.Function) -> fenics.Expression: return fenics.elem_mult( self.fields.new_constitutive_relation_multiplicative_parameters, fenics.sym(fenics.grad(r)))
def strain(u): return fn.sym(fn.grad(u))
def eps(u): return fn.sym(fn.grad(u))
def k(self, u: fenics.Function, w: fenics.Function, constitutive_relation_function: Callable[[fenics.Function], fenics.Expression]) -> fenics.Expression: return fenics.inner(constitutive_relation_function(u), fenics.sym(fenics.grad(w))) * fenics.dx
def get_new_value(self, r: fenics.Function) -> fenics.Expression: return 2.0*self.lame_mu*fenics.sym(fenics.grad(r)) \ + self.lame_lambda*fenics.tr(fenics.sym(fenics.grad(r)))*fenics.Identity(len(r))
def k(u, w): return fnc.inner(sigma(u), fnc.sym(fnc.grad(w))) * fnc.dx
def sigma(r): return 2.0 * mu * fnc.sym(fnc.grad(r)) + lmbda * fnc.tr( fnc.sym(fnc.grad(r))) * fnc.Identity(len(r))
def eps(v): return fnc.sym(fnc.grad(v))
def create_strain_tensor(self, u): strain_vec = fenics.project(fenics.sym(fenics.grad((u))), V=self.fields.tensor_space).vector()[:] return np.reshape(strain_vec, newshape=(self.fields.function_space.dim(), 2, 2))