--
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 dealii+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/CAEyr2zhNC9RpZVjD%2B4ggHp-PCBCRz9YCtBLSyxxqqeCDE-giSA%40mail.gmail.com.
Dear Jean-Paul,
Thank you for your information. It seems tensor is an elegant way to do the computation. However I don’t know how to translate the following formulation with tensor notation. The Voigt notation is used ubiquitous in the FEM formulation of solid mechanics. It is straightforward to use matrix vector operation as demonstrated in many references. In the following equation, the B matrix (displacement-strain matrix with geometric nonlinearity) is not square, so it looks like B cannot be represented by a tensor. If I use Voigt notation, then it seems I can only choose FullMatrix class which looks clumsy and not fully exploiting deal.II. I suppose it can be implemented in deal.II using tensor notation but just have no idea how to do that.

Thanks,
Michael
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/6A8D385C-1E4F-4F9A-87DA-9DC57966D289%40gmail.com.
On 22. Jul 2021, at 17:47, Michael Li <lian...@gmail.com> wrote:
Dear Jean-Paul,Thank you for your information. It seems tensor is an elegant way to do the computation. However I don’t know how to translate the following formulation with tensor notation. The Voigt notation is used ubiquitous in the FEM formulation of solid mechanics. It is straightforward to use matrix vector operation as demonstrated in many references. In the following equation, the B matrix (displacement-strain matrix with geometric nonlinearity) is not square, so it looks like Bcannot be represented by a tensor. If I use Voigt notation, then it seems I can only choose FullMatrix class which looks clumsy and not fully exploiting deal.II. I suppose it can be implemented in deal.II using tensor notation but just have no idea how to do that.
<991EE976D38946F2A751BB07719E062B.png>
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/F4D234B2-05F1-4DF7-B3C6-81AA828CB0D9%40hxcore.ol.
Hi Jean-Paul,
I revisited the code gallery example “The deal.II Library: The 'Quasi-Static Finite-Strain Compressible Elasticity' code gallery program (dealii.org)”. It seems I just need to modify two functions, i.e., getJc(det_F, b_bar) and get_tau(det_F, b_bar) if I want to implement the St. Vienant Kirchhoff material. Is that correct?
I compiled cook_membrane.cc a couple of days ago, but for no reason, it fails giving the following errors:
/home/michael/dealii-9.2.0/examples/code-gallery/Quasi_static_Finite_strain_Compressible_Elasticity/cook_membrane.cc:1815:5: required from here
/home/michael/share/trilinos/include/Sacado_Fad_Exp_Ops.hpp:775:1: error: no type named ‘type’ in ‘struct Sacado::mpl::disable_if<Sacado::mpl::is_same<double, double>, Sacado::Fad::Exp::MultiplicationOp<Sacado::Fad::Exp::PowerOp<Sacado::Fad::Exp::GeneralFad<Sacado::Fad::Exp::DynamicStorage<double, double> >, double, false, true, Sacado::Fad::Exp::ExprSpecDefault, Sacado::Fad::Exp::PowerImpl::Scalar>, double, false, true, Sacado::Fad::Exp::ExprSpecDefault> >’
/usr/local/include/deal.II/physics/elasticity/kinematics.h:294:47: error: no match for ‘operator*’ (operand types are ‘Sacado::Fad::Exp::PowerOp<Sacado::Fad::Exp::GeneralFad<Sacado::Fad::Exp::DynamicStorage<double, double> >, double, false, true, Sacado::Fad::Exp::ExprSpecDefault, Sacado::Fad::Exp::PowerImpl::Scalar>’ and ‘const dealii::Tensor<2, 2, Sacado::Fad::Exp::GeneralFad<Sacado::Fad::Exp::DynamicStorage<double, double> > >’)
294 | return std::pow(determinant(F), -1.0 / dim) * F;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
And some warnings:
/home/michael/dealii-9.2.0/examples/code-gallery/Quasi_static_Finite_strain_Compressible_Elasticity/cook_membrane.cc: In instantiation of ‘void Cook_Membrane::Solid<dim, NumberType>::system_setup() [with int dim = 2; NumberType = double]’:
/home/michael/dealii-9.2.0/examples/code-gallery/Quasi_static_Finite_strain_Compressible_Elasticity/cook_membrane.cc:1005:5: required from ‘void Cook_Membrane::Solid<dim, NumberType>::run() [with int dim = 2; NumberType = double]’
/home/michael/dealii-9.2.0/examples/code-gallery/Quasi_static_Finite_strain_Compressible_Elasticity/cook_membrane.cc:2263:24: required from here
/home/michael/dealii-9.2.0/examples/code-gallery/Quasi_static_Finite_strain_Compressible_Elasticity/cook_membrane.cc:1136:35: warning: ‘void dealii::DoFTools::count_dofs_per_block(const DoFHandlerType&, std::vector<unsigned int>&, const std::vector<unsigned int>&) [with DoFHandlerType = dealii::DoFHandler<2, 2>]’ is deprecated [-Wdeprecated-declarations]
1136 | DoFTools::count_dofs_per_block(dof_handler_ref, dofs_per_block,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1137 | block_component);
| ~~~~~~~~~~~~~~~~
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/AEA8E996-CA7C-4792-A508-927BB4224662%40gmail.com.
I revisited the code gallery example “The deal.II Library: The 'Quasi-Static Finite-Strain Compressible Elasticity' code gallery program (dealii.org)”. It seems I just need to modify two functions, i.e., getJc(det_F, b_bar) and get_tau(det_F, b_bar) if I want to implement the St. Vienant Kirchhoff material. Is that correct?
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/92338699-DA50-4AD2-9432-7423219E5089%40hxcore.ol.
Hi Jean-Paul,
Thanks for confirming that. I have made the Kirchhoff model with your suggestion. The Physics::Transformations is so convenient for elasticity problems.
In case someone wonders how I did it, I enclose the codes here.
SymmetricTensor<4,dim,NumberType>
get_Jc(const Tensor< 2, dim, NumberType > &F) const
{
SymmetricTensor<4,dim, NumberType> D = get_stress_strain_tensor(lambda, mu);
return Physics::Transformations::Contravariant::push_forward(D, F);
}
SymmetricTensor<2,dim,NumberType>
get_tau(const Tensor< 2, dim, NumberType > &F)
{
// Second Piola Kirchhoff stress
SymmetricTensor<2,dim,NumberType> S = get_stress_strain_tensor(lambda, mu) *
Physics::Elasticity::Kinematics::E(F);
return Physics::Transformations::Contravariant::push_forward(S, F);
}
I just undefine the variable to circumvent the Sacado error. #define ENABLE_SACADO_FORMULATION
To view this discussion on the web visit https://groups.google.com/d/msgid/dealii/5A904EBE-1AD3-4F9E-B70B-2A0037FB7BC1%40gmail.com.