v0.15.0
Loading...
Searching...
No Matches
OpAdJointObjective Struct Reference
Inheritance diagram for OpAdJointObjective:
[legend]
Collaboration diagram for OpAdJointObjective:
[legend]

Public Types

using OP = ForcesAndSourcesCore::UserDataOperator
 

Public Member Functions

 OpAdJointObjective (boost::shared_ptr< ObjectiveFunctionData > python_ptr, boost::shared_ptr< HookeOps::CommonData > comm_ptr, boost::shared_ptr< MatrixDouble > jac_ptr, boost::shared_ptr< MatrixDouble > diff_jac, boost::shared_ptr< VectorDouble > cof_vals, boost::shared_ptr< MatrixDouble > d_grad_ptr, boost::shared_ptr< MatrixDouble > u_ptr, boost::shared_ptr< double > glob_objective_ptr, boost::shared_ptr< double > glob_objective_grad_ptr)
 
MoFEMErrorCode doWork (int side, EntityType type, EntitiesFieldData::EntData &data)
 

Private Attributes

boost::shared_ptr< ObjectiveFunctionDatapythonPtr
 
boost::shared_ptr< HookeOps::CommonDatacommPtr
 
boost::shared_ptr< MatrixDoublejacPtr
 
boost::shared_ptr< MatrixDoublediffJacPtr
 
boost::shared_ptr< VectorDoublecofVals
 
boost::shared_ptr< MatrixDoubledGradPtr
 
boost::shared_ptr< MatrixDoubleuPtr
 
boost::shared_ptr< doubleglobObjectivePtr
 
boost::shared_ptr< doubleglobObjectiveGradPtr
 

Detailed Description

Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1571 of file adjoint.cpp.

Member Typedef Documentation

◆ OP

using OpAdJointObjective::OP = ForcesAndSourcesCore::UserDataOperator

Definition at line 1572 of file adjoint.cpp.

Constructor & Destructor Documentation

◆ OpAdJointObjective()

OpAdJointObjective::OpAdJointObjective ( boost::shared_ptr< ObjectiveFunctionData > python_ptr,
boost::shared_ptr< HookeOps::CommonData > comm_ptr,
boost::shared_ptr< MatrixDouble > jac_ptr,
boost::shared_ptr< MatrixDouble > diff_jac,
boost::shared_ptr< VectorDouble > cof_vals,
boost::shared_ptr< MatrixDouble > d_grad_ptr,
boost::shared_ptr< MatrixDouble > u_ptr,
boost::shared_ptr< double > glob_objective_ptr,
boost::shared_ptr< double > glob_objective_grad_ptr )
inline
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1573 of file adjoint.cpp.

1582 : OP(NOSPACE, OP::OPSPACE), pythonPtr(python_ptr), commPtr(comm_ptr),
1583 jacPtr(jac_ptr), diffJacPtr(diff_jac), cofVals(cof_vals),
1584 dGradPtr(d_grad_ptr), uPtr(u_ptr), globObjectivePtr(glob_objective_ptr),
1585 globObjectiveGradPtr(glob_objective_grad_ptr) {}
@ NOSPACE
Definition definitions.h:83
boost::shared_ptr< MatrixDouble > dGradPtr
Definition adjoint.cpp:1709
boost::shared_ptr< double > globObjectiveGradPtr
Definition adjoint.cpp:1713
boost::shared_ptr< ObjectiveFunctionData > pythonPtr
Definition adjoint.cpp:1704
boost::shared_ptr< double > globObjectivePtr
Definition adjoint.cpp:1712
ForcesAndSourcesCore::UserDataOperator OP
Definition adjoint.cpp:1572
boost::shared_ptr< HookeOps::CommonData > commPtr
Definition adjoint.cpp:1705
boost::shared_ptr< VectorDouble > cofVals
Definition adjoint.cpp:1708
boost::shared_ptr< MatrixDouble > uPtr
Definition adjoint.cpp:1710
boost::shared_ptr< MatrixDouble > diffJacPtr
Definition adjoint.cpp:1707
boost::shared_ptr< MatrixDouble > jacPtr
Definition adjoint.cpp:1706

Member Function Documentation

◆ doWork()

MoFEMErrorCode OpAdJointObjective::doWork ( int side,
EntityType type,
EntitiesFieldData::EntData & data )
inline
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1587 of file adjoint.cpp.

1588 {
1590
1595
1598
1599 constexpr auto symm_size = (SPACE_DIM * (SPACE_DIM + 1)) / 2;
1600
1601 auto t_diff_symm = diff_symmetrize(FTensor::Number<SPACE_DIM>());
1602
1603 auto nb_gauss_pts = getGaussPts().size2();
1604 auto objective_ptr = boost::make_shared<VectorDouble>(nb_gauss_pts);
1605 auto objective_dstress =
1606 boost::make_shared<MatrixDouble>(symm_size, nb_gauss_pts);
1607 auto objective_dstrain =
1608 boost::make_shared<MatrixDouble>(symm_size, nb_gauss_pts);
1609 auto obj_grad = boost::make_shared<MatrixDouble>(SPACE_DIM, nb_gauss_pts);
1610
1611 auto evaluate_python = [&]() {
1613 auto &coords = OP::getCoordsAtGaussPts();
1614 CHKERR pythonPtr->evalObjectiveFunction(
1615 coords, uPtr, commPtr->getMatCauchyStress(), commPtr->getMatStrain(),
1616 objective_ptr);
1617 CHKERR pythonPtr->evalObjectiveGradientStress(
1618 coords, uPtr, commPtr->getMatCauchyStress(), commPtr->getMatStrain(),
1619 objective_dstress);
1620 CHKERR pythonPtr->evalObjectiveGradientStrain(
1621 coords, uPtr, commPtr->getMatCauchyStress(), commPtr->getMatStrain(),
1622 objective_dstrain);
1623
1624 auto t_grad_u =
1626 auto t_D =
1630 auto t_cof = getFTensor0FromVec(*(cofVals));
1632
1633 auto t_obj = getFTensor0FromVec(*objective_ptr);
1634 auto t_obj_dstress =
1635 getFTensor2SymmetricFromMat<SPACE_DIM>(*objective_dstress);
1636 auto t_obj_dstrain =
1637 getFTensor2SymmetricFromMat<SPACE_DIM>(*objective_dstrain);
1638
1639 auto vol = OP::getMeasure();
1640 auto t_w = getFTensor0IntegrationWeight();
1641 for (auto gg = 0; gg != nb_gauss_pts; ++gg) {
1642
1643 auto t_det = determinantTensor(t_jac);
1645 CHKERR invertTensor(t_jac, t_det, t_inv_jac);
1646
1648 t_diff_inv_jac(i, j) =
1649 -(t_inv_jac(i, I) * t_diff_jac(I, J)) * t_inv_jac(J, j);
1651 t_diff_grad(i, j) = t_grad_u(i, k) * t_diff_inv_jac(k, j);
1652
1654 t_d_strain(i, j) = t_diff_symm(i, j, k, l) * (
1655
1656 t_d_grad(k, l)
1657
1658 +
1659
1660 t_diff_grad(k, l)
1661
1662 );
1663
1664 auto alpha = t_w * vol;
1665
1666 (*globObjectivePtr) += alpha * t_obj;
1667 (*globObjectiveGradPtr) +=
1668 alpha *
1669 (
1670
1671 t_obj_dstress(i, j) * (t_D(i, j, k, l) * t_d_strain(k, l))
1672
1673 +
1674
1675 t_obj_dstrain(i, j) * t_d_strain(i, j)
1676
1677 +
1678
1679 t_obj * t_cof
1680
1681 );
1682
1683 ++t_w;
1684 ++t_jac;
1685 ++t_diff_jac;
1686 ++t_cof;
1687
1688 ++t_obj;
1689 ++t_obj_dstress;
1690 ++t_obj_dstrain;
1691
1692 ++t_grad_u;
1693 ++t_d_grad;
1694 }
1696 };
1697
1698 CHKERR evaluate_python();
1699
1701 }
#define FTENSOR_INDEX(DIM, I)
auto diff_symmetrize(FTensor::Number< DIM >)
Definition adjoint.cpp:1441
constexpr int SPACE_DIM
[Define dimension]
Definition adjoint.cpp:22
constexpr IntegrationType I
Definition adjoint.cpp:27
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'J', DIM1 > J
Definition level_set.cpp:30
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
static FTensor::Ddg< FTensor::PackPtr< T *, 1 >, Tensor_Dim01, Tensor_Dim23 > getFTensor4DdgFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 4 on first two and last indices from form data matrix.
static MoFEMErrorCode invertTensor(FTensor::Tensor2< T1, DIM, DIM > &t, T2 &det, FTensor::Tensor2< T3, DIM, DIM > &inv_t)
FTensor::Tensor2< FTensor::PackPtr< double *, 1 >, Tensor_Dim1, Tensor_Dim2 > getFTensor2FromMat(MatrixDouble &data)
Get tensor rank 2 (matrix) form data matrix.
static auto getFTensor2SymmetricFromMat(ublas::matrix< T, L, A > &data)
Get symmetric tensor rank 2 (matrix) form data matrix.
static auto determinantTensor(FTensor::Tensor2< T, DIM, DIM > &t)
Calculate the determinant of a tensor of rank DIM.
static auto getFTensor0FromVec(ublas::vector< T, A > &data)
Get tensor rank 0 (scalar) form data vector.

Member Data Documentation

◆ cofVals

boost::shared_ptr<VectorDouble> OpAdJointObjective::cofVals
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1708 of file adjoint.cpp.

◆ commPtr

boost::shared_ptr<HookeOps::CommonData> OpAdJointObjective::commPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1705 of file adjoint.cpp.

◆ dGradPtr

boost::shared_ptr<MatrixDouble> OpAdJointObjective::dGradPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1709 of file adjoint.cpp.

◆ diffJacPtr

boost::shared_ptr<MatrixDouble> OpAdJointObjective::diffJacPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1707 of file adjoint.cpp.

◆ globObjectiveGradPtr

boost::shared_ptr<double> OpAdJointObjective::globObjectiveGradPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1713 of file adjoint.cpp.

◆ globObjectivePtr

boost::shared_ptr<double> OpAdJointObjective::globObjectivePtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1712 of file adjoint.cpp.

◆ jacPtr

boost::shared_ptr<MatrixDouble> OpAdJointObjective::jacPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1706 of file adjoint.cpp.

◆ pythonPtr

boost::shared_ptr<ObjectiveFunctionData> OpAdJointObjective::pythonPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1704 of file adjoint.cpp.

◆ uPtr

boost::shared_ptr<MatrixDouble> OpAdJointObjective::uPtr
private
Examples
mofem/tutorials/vec-7/adjoint.cpp.

Definition at line 1710 of file adjoint.cpp.


The documentation for this struct was generated from the following file: