Beispiel #1
0
void
Nonlinear3D::computeStrainAndRotationIncrement( const ColumnMajorMatrix & Fhat,
                                                SymmTensor & strain_increment )
{
  if ( _decomp_method == RashidApprox )
  {
    computeStrainIncrement( Fhat, strain_increment );
    computePolarDecomposition( Fhat );
  }

  else if ( _decomp_method == Eigen )
 {
 ////
 ////   const int ND = 3;
 ////
 ////   ColumnMajorMatrix eigen_value(ND,1), eigen_vector(ND,ND);
 ////   ColumnMajorMatrix invUhat(ND,ND), logVhat(ND,ND);
 ////   ColumnMajorMatrix n1(ND,1), n2(ND,1), n3(ND,1), N1(ND,1), N2(ND,1), N3(ND,1);
 ////
 ////   ColumnMajorMatrix Chat = Fhat.transpose() * Fhat;
 ////
 ////   Chat.eigen(eigen_value,eigen_vector);
 ////
 ////   for (int i = 0; i < ND; i++)
 ////   {
 ////     N1(i) = eigen_vector(i,0);
 ////     N2(i) = eigen_vector(i,1);
 ////     N3(i) = eigen_vector(i,2);
 ////   }
 ////
 ////   const Real lamda1 = std::sqrt(eigen_value(0));
 ////   const Real lamda2 = std::sqrt(eigen_value(1));
 ////   const Real lamda3 = std::sqrt(eigen_value(2));
 ////
 ////
 ////   const Real log1 = std::log(lamda1);
 ////   const Real log2 = std::log(lamda2);
 ////   const Real log3 = std::log(lamda3);
 ////
 ////   _Uhat = N1 * N1.transpose() * lamda1 +  N2 * N2.transpose() * lamda2 +  N3 * N3.transpose() * lamda3;
 ////
 ////   invertMatrix(_Uhat,invUhat);
 ////
 ////   _incremental_rotation = Fhat * invUhat;
 ////
 ////   strain_increment = N1 * N1.transpose() * log1 +  N2 * N2.transpose() * log2 +  N3 * N3.transpose() * log3;

   Element::polarDecompositionEigen( Fhat, _incremental_rotation, strain_increment);


  }
  else
  {
    mooseError("Unknown polar decomposition type!");
  }
}
Beispiel #2
0
void
Nonlinear::computeStrainAndRotationIncrement( const ColumnMajorMatrix & Fhat,
                                              SymmTensor & strain_increment )
{
  if ( _decomp_method == RashidApprox )
  {
    computeStrainIncrement( Fhat, strain_increment );
    computePolarDecomposition( Fhat );
  }

  else if ( _decomp_method == Eigen )
  {
    Element::polarDecompositionEigen( Fhat, _incremental_rotation, strain_increment);
  }

  else
  {
    mooseError("Unknown polar decomposition type!");
  }
}