Hello all,
I am going to solve a generalized plane stain problem based on step 44. I
have three displacement components (3 dofs per node) on a 2D geometry (dim
=2) and mesh (compressible material hence no pressure). All displacements
are function of x and y coordinates only, i, e u = u(x,y), v=v(x,y), and
w = w(x,y). Hence solution_grads_u_total tensor and F tensor (deformation
gradient) are 3x3 tensors with the following forms (u, v, and w are
displacements, suffixes denote derivative; and semicolon denotes end of a
row):
solution_grads_u_total = [u_x, u_y, 0; v_x, v_y, 0; w_x, w_y, 0]
F = [F_11, F_12, 0; F_21, F_22, 0; F_31, F_32, 1]
I just wanted to confirm the following things. Please correct me if there
is a problem my approach:
Since my deformation grad, strain, stress tensors are 2nd rank and having
3x3 elements,
here I define the tensors (say F_inv) as (note that *dim = 2*)
Tensor<2, *dim+1*> F_inv;
Now in the function assemble_system_tangent_one_cell I need to compute
the grad_Nx and symm_grad_Nx
tensors which, as I understand, should also be of type Tensor<2, *dim+1*>
Thus my point is when we compute the gradient of the shape functions using
the piece of command in the below
(taken from function assemble_system_tangent_one_cell) we should expect to
get first two columns with non-zero
entries and last column with all zero entry as we not have derivatives of
shape functions w.r.t. x and y only (note that
the tensor has already been initialized with 0 in scratch as done in step
44). A part of the structure ScratchData_K is
also given in the below.
I shall be thankful if someone tells me if my approach about solving the
problem is correct and
if there is issue somewhere.
Thanks and regards,
Anup.
for (unsigned int q_point = 0; q_point < n_q_points; ++q_point)
{
const Tensor<2, *dim+1*> F_inv = lqph[q_point].get_F_inv();
for (unsigned int k = 0; k < dofs_per_cell; ++k)
{
scratch.grad_Nx[q_point][k] = scratch.fe_values_ref[u_fe].gradient(k,
q_point)
* F_inv;
scratch.symm_grad_Nx[q_point][k] =
symmetrize(scratch.grad_Nx[q_point][k]);
}
}
////////////////////////////////////// part of the structure Scratchdata_K
////////////////////////////////////////////////
template <int dim>
struct Solid<dim>::ScratchData_K
{
FEValues<dim> fe_values_ref;
std::vector<std::vector<double> > Nx;
std::vector<std::vector<Tensor<2, *dim+1*> > > grad_Nx;
std::vector<std::vector<SymmetricTensor<2, *dim+1*> > > symm_grad_Nx;
ScratchData_K(const FiniteElement<dim> &fe_cell,
const QGauss<dim> &qf_cell,
const UpdateFlags uf_cell)
:
fe_values_ref(fe_cell, qf_cell, uf_cell),
Nx(qf_cell.size(),
std::vector<double>(fe_cell.dofs_per_cell)),
grad_Nx(qf_cell.size(),
std::vector<Tensor<2, *dim+1*> >(fe_cell.dofs_per_cell)),
symm_grad_Nx(qf_cell.size(),
std::vector<SymmetricTensor<2, *dim+1*> >
(fe_cell.dofs_per_cell))
{}
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see
https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.