https://gitlab.opengeosys.org/ogs/ogs.git
Raw File
Tip revision: a322618ab0dd7e51a44beba0823ad5358f6bdbd5 authored by Christoph Lehmann on 10 November 2021, 14:07:06 UTC
[T] Added unit tests for 4th order tet quadrature
Tip revision: a322618
TESLocalAssemblerInner.h
/**
 * \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
 *
 * The code of this file is used to decouple the evaluation of matrix elements
 * from the rest of OGS6,
 * not all of OGS6 has to be recompiled every time a small change is done.
 */

#pragma once

#include "NumLib/Fem/ShapeMatrixPolicy.h"
#include "ProcessLib/LocalAssemblerTraits.h"
#include "ProcessLib/VariableTransformation.h"

#include "TESLocalAssemblerData.h"

namespace ProcessLib
{
namespace TES
{
template <typename Traits>
class TESLocalAssemblerInner
{
public:
    explicit TESLocalAssemblerInner(AssemblyParams const& ap,
                                    const unsigned num_int_pts,
                                    const unsigned dimension);

    void assembleIntegrationPoint(
        unsigned integration_point,
        std::vector<double> const& localX,
        typename Traits::ShapeMatrices const& sm,
        const double weight,
        Eigen::Map<typename Traits::LocalMatrix>& local_M,
        Eigen::Map<typename Traits::LocalMatrix>& local_K,
        Eigen::Map<typename Traits::LocalVector>& local_b);

    void preEachAssemble();

    // TODO better encapsulation
    AssemblyParams const& getAssemblyParameters() const { return _d.ap; }
    TESFEMReactionAdaptor const& getReactionAdaptor() const
    {
        return *_d.reaction_adaptor;
    }
    TESFEMReactionAdaptor& getReactionAdaptor() { return *_d.reaction_adaptor; }
    TESLocalAssemblerData const& getData() const { return _d; }
private:
    Eigen::Matrix3d getMassCoeffMatrix(const unsigned int_pt);
    typename Traits::LaplaceMatrix getLaplaceCoeffMatrix(const unsigned int_pt,
                                                         const unsigned dim);
    Eigen::Matrix3d getAdvectionCoeffMatrix(const unsigned int_pt);
    Eigen::Matrix3d getContentCoeffMatrix(const unsigned int_pt);
    Eigen::Vector3d getRHSCoeffVector(const unsigned int_pt);

    void preEachAssembleIntegrationPoint(
        const unsigned int_pt,
        std::vector<double> const& localX,
        typename Traits::ShapeMatrices const& sm);

    void initReaction(const unsigned int_pt);

    TESLocalAssemblerData _d;
};

}  // namespace TES

}  // namespace ProcessLib

#include "TESLocalAssemblerInner-impl.h"
back to top