diff --git a/ProcessLib/PhaseField/LocalAssemblerInterface.h b/ProcessLib/PhaseField/LocalAssemblerInterface.h index dde11de5eadf0fd644c1913dc04f6e32a25b93c2..28915ce8aa65217a33c3835d4a0e7916137b0fb1 100644 --- a/ProcessLib/PhaseField/LocalAssemblerInterface.h +++ b/ProcessLib/PhaseField/LocalAssemblerInterface.h @@ -29,12 +29,30 @@ struct PhaseFieldLocalAssemblerInterface std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, std::vector<double>& cache) const = 0; + virtual std::vector<double> const& getIntPtSigmaTensile( + const double t, + std::vector<GlobalVector*> const& x, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, + std::vector<double>& cache) const = 0; + + virtual std::vector<double> const& getIntPtSigmaCompressive( + const double t, + std::vector<GlobalVector*> const& x, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, + std::vector<double>& cache) const = 0; + virtual std::vector<double> const& getIntPtEpsilon( const double t, std::vector<GlobalVector*> const& x, std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, std::vector<double>& cache) const = 0; + virtual std::vector<double> const& getIntPtEpsilonTensile( + const double t, + std::vector<GlobalVector*> const& x, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_table, + std::vector<double>& cache) const = 0; + virtual void computeCrackIntegral( std::size_t mesh_item_id, std::vector< diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 1408afc5f14ca49e79c25753004f2cf77912599d..000f99472b66186aefb40472417c48d9fb70b19a 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -137,6 +137,27 @@ void PhaseFieldProcess<DisplacementDim>::initializeConcreteProcess( getExtrapolator(), _local_assemblers, &LocalAssemblerInterface::getIntPtEpsilon)); + _secondary_variables.addSecondaryVariable( + "sigma_tensile", + makeExtrapolator(MathLib::KelvinVector::KelvinVectorType< + DisplacementDim>::RowsAtCompileTime, + getExtrapolator(), _local_assemblers, + &LocalAssemblerInterface::getIntPtSigmaTensile)); + + _secondary_variables.addSecondaryVariable( + "sigma_compressive", + makeExtrapolator(MathLib::KelvinVector::KelvinVectorType< + DisplacementDim>::RowsAtCompileTime, + getExtrapolator(), _local_assemblers, + &LocalAssemblerInterface::getIntPtSigmaCompressive)); + + _secondary_variables.addSecondaryVariable( + "eps_tensile", + makeExtrapolator(MathLib::KelvinVector::KelvinVectorType< + DisplacementDim>::RowsAtCompileTime, + getExtrapolator(), _local_assemblers, + &LocalAssemblerInterface::getIntPtEpsilonTensile)); + // Initialize local assemblers after all variables have been set. GlobalExecutor::executeMemberOnDereferenced( &LocalAssemblerInterface::initialize, _local_assemblers,