/** * \file * \copyright * Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org) * Distributed under a Modified BSD License. * See accompanying file LICENSE.txt or * http://www.opengeosys.org/project/license * */ #pragma once #include #include "NumLib/Extrapolation/ExtrapolatableElement.h" #include "ProcessLib/LocalAssemblerInterface.h" namespace ProcessLib { namespace PhaseField { struct PhaseFieldLocalAssemblerInterface : public ProcessLib::LocalAssemblerInterface, public NumLib::ExtrapolatableElement { virtual std::vector const& getIntPtSigma( const double t, std::vector const& x, std::vector const& dof_table, std::vector& cache) const = 0; virtual std::vector const& getIntPtEpsilon( const double t, std::vector const& x, std::vector const& dof_table, std::vector& cache) const = 0; virtual void computeCrackIntegral( std::size_t mesh_item_id, std::vector< std::reference_wrapper> const& dof_tables, GlobalVector const& x, double const t, double& crack_volume, CoupledSolutionsForStaggeredScheme const* const cpl_xs) = 0; virtual void computeEnergy( std::size_t mesh_item_id, std::vector< std::reference_wrapper> const& dof_tables, GlobalVector const& x, double const t, double& elastic_energy, double& surface_energy, double& pressure_work, CoupledSolutionsForStaggeredScheme const* const cpl_xs) = 0; }; } // namespace PhaseField } // namespace ProcessLib