Hello ,
Thanks for your time to see this question.
The given conditions are stiffness matrix,destination function and x from Ax=b,x is movement ,b is force,A is global stiffness matrix.
J(x)=||x||norm-1
There is one equation:
dJ(x,θ)/dθ=∂J(x,θ)/∂θ+∂J(x,θ)/∂x *∂x/∂θ=∂J(x,θ)/∂θ+∂J(x,θ)/∂x*[A^-1(θ))(-∂A(θ)/∂θ)x],because b has no relation with density.
I don't know how to get [A^-1(θ))(-∂A(θ)/∂θ)x],A is matrix with nxn,if θ is mx1 vector,∂A(θ)/∂θ is nxnxm matrix.
But I don't know how to calculate (A^-1(θ))(-∂A(θ)/∂θ),I can simply get the value of A^-1.
I use cook_membrane.cc this file for dJ(x,θ)/dθ.
I found the density was just included from the mu invoked from parameters.prm.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
public:
Material_Compressible_Neo_Hook_One_Field(const double mu,
const double nu)
:
kappa((2.0 * mu * (1.0 + nu)) / (3.0 * (1.0 - 2.0 * nu))),
c_1(mu / 2.0)
{
Assert(kappa > 0, ExcInternalError());
}
const double kappa;
const double c_1;
// Value of the volumetric free energy
NumberType
get_Psi_vol(const NumberType &det_F) const
{
return (kappa / 4.0) * (det_F*det_F - 1.0 - 2.0*std::log(det_F));
}
NumberType
get_dPsi_vol_dJ(const NumberType &det_F) const
{
return (kappa / 2.0) * (det_F - 1.0 / det_F);
}
get_d2Psi_vol_dJ2(const NumberType &det_F) const
{
return ( (kappa / 2.0) * (1.0 + 1.0 / (det_F * det_F)));
} NumberType
get_Psi_iso(const SymmetricTensor<2,dim,NumberType> &b_bar) const
{
return c_1 * (trace(b_bar) - dim);
}
SymmetricTensor<2,dim,NumberType>
get_tau_bar(const SymmetricTensor<2,dim,NumberType> &b_bar) const
{
return 2.0 * c_1 * b_bar;
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
assemble_system_one_cell(const typename DoFHandler<dim>::active_cell_iterator &cell,
ScratchData_ASM &scratch,
PerTaskData_ASM &data)
{
// Due to the C++ specialization rules, we need one more
// level of indirection in order to define the assembly
// routine for all different number. The next function call
// is specialized for each NumberType, but to prevent having
// to specialize the whole class along with it we have inlined
// the definition of the other functions that are common to
// all implementations.
assemble_system_tangent_residual_one_cell(cell, scratch, data);
assemble_neumann_contribution_one_cell(cell, scratch, data);
}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Unfortunately ,I did not find density vector in this file to calculate -∂A(θ)/∂θ.
Could anyone provide any hint or suggestions?
Thanks in advance!
Best regards
Lance