https://mooseframework.inl.gov
Loading...
Searching...
No Matches
NonlinearThread.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "ThreadedElementLoop.h"
14
15#include "libmesh/elem_range.h"
16
17// Forward declarations
18class FEProblemBase;
21class DGKernelBase;
23class TimeKernel;
24class KernelBase;
25class Kernel;
26class ResidualObject;
28class HDGKernel;
29
30class NonlinearThread : public ThreadedElementLoop<ConstElemRange>
31{
32public:
33 NonlinearThread(FEProblemBase & fe_problem);
34
35 // Splitting Constructor
37
38 virtual ~NonlinearThread();
39
40 virtual void operator()(const ConstElemRange & range, bool bypass_threading = false) override;
41
42 virtual void subdomainChanged() override;
43 virtual void onElement(const Elem * elem) override;
44 virtual void onBoundary(const Elem * elem,
45 unsigned int side,
46 BoundaryID bnd_id,
47 const Elem * lower_d_elem = nullptr) override;
48 virtual void onInterface(const Elem * elem, unsigned int side, BoundaryID bnd_id) override;
49 virtual void onInternalSide(const Elem * elem, unsigned int side) override;
50 virtual void onExternalSide(const Elem * elem, unsigned int side) override;
51 virtual void postElement(const Elem * /*elem*/) override;
52 virtual void post() override;
53 bool shouldComputeInternalSide(const Elem & elem, const Elem & neighbor) const override;
54
55protected:
66 void prepareFace(const Elem * elem,
67 unsigned int side,
69 const Elem * lower_d_elem = nullptr);
70
73 virtual void computeOnElement();
74 virtual void computeOnBoundary(BoundaryID bnd_id, const Elem * lower_d_elem);
75 virtual void computeOnInterface(BoundaryID bnd_id);
76 virtual void computeOnInternalFace(const Elem * neighbor);
77 virtual void computeOnInternalFace() = 0;
79
84 virtual void compute(ResidualObject & ro) = 0;
85
88 virtual void compute(KernelBase & kernel);
89 virtual void compute(FVElementalKernel & kernel);
90 virtual void compute(IntegratedBCBase & bc);
91 virtual void compute(DGKernelBase & dg, const Elem * neighbor);
92 virtual void compute(InterfaceKernelBase & ik);
94
98 virtual void accumulateNeighbor() = 0;
99
103 virtual void accumulateNeighborLower() = 0;
104
108 virtual void accumulateLower() = 0;
109
113 virtual void accumulate() = 0;
114
118 virtual void determineObjectWarehouses() = 0;
119
121 void printGeneralExecutionInformation() const override;
122
124 void printBlockExecutionInformation() const override;
125
127 void printBoundaryExecutionInformation(const unsigned int bid) const override;
128
130 virtual std::string objectType() const { return ""; };
131
134
135 unsigned int _num_cached;
136
139
141
144
146
149
151
155
158
162
165
167 std::vector<FVElementalKernel *> _fv_kernels;
168
171
172private:
177 mutable bool _should_execute_dg;
182};
boundary_id_type BoundaryID
Serves as a base class for DGKernel and ADDGKernel.
Specialization of SubProblem for solving nonlinear equations plus auxiliary equations.
FVElemental is used for calculating residual contributions from volume integral terms of a PDE where ...
Base kernel for hybridized finite element formulations.
Definition HDGKernel.h:18
Base class for deriving any boundary condition of a integrated type.
InterfaceKernelBase is the base class for all InterfaceKernel type classes.
This is the common base class for the three main kernel types implemented in MOOSE,...
Definition KernelBase.h:29
A storage container for MooseObjects that inherit from SetupInterface.
A storage container for MooseObjects that inherit from SetupInterface.
Nonlinear system to be solved.
MooseObjectTagWarehouse< HDGKernel > & _hdg_kernels
MooseObjectTagWarehouse< KernelBase > & _kernels
virtual std::string objectType() const
Return what the loops is meant to compute.
virtual void onBoundary(const Elem *elem, unsigned int side, BoundaryID bnd_id, const Elem *lower_d_elem=nullptr) override
Called when doing boundary assembling.
bool shouldComputeInternalSide(const Elem &elem, const Elem &neighbor) const override
Whether to compute the internal side for the provided element-neighbor pair.
virtual void onInternalSide(const Elem *elem, unsigned int side) override
Called when doing internal edge assembling.
MooseObjectTagWarehouse< IntegratedBCBase > & _integrated_bcs
Reference to BC storage structures.
virtual void accumulateNeighbor()=0
Add neighbor residual/Jacobian into assembly global data.
virtual void operator()(const ConstElemRange &range, bool bypass_threading=false) override
virtual void determineObjectWarehouses()=0
Determine the objects we will actually compute based on vector/matrix tag information.
virtual void computeOnInterface(BoundaryID bnd_id)
void prepareFace(const Elem *elem, unsigned int side, BoundaryID bnd_id=Moose::INVALID_BOUNDARY_ID, const Elem *lower_d_elem=nullptr)
Reinitialize variables and materials on a face.
MooseObjectWarehouse< InterfaceKernelBase > * _ik_warehouse
bool _subdomain_has_dg
Whether the subdomain has DGKernels.
virtual void computeOnBoundary(BoundaryID bnd_id, const Elem *lower_d_elem)
MooseObjectTagWarehouse< DGKernelBase > & _dg_kernels
Reference to DGKernel storage structure.
virtual void post() override
Called after the element range loop.
virtual void accumulateNeighborLower()=0
Add neighbor and lower residual/Jacobian into assembly global data.
void printBlockExecutionInformation() const override
Print list of specific objects executed on each block and in which order.
unsigned int _num_cached
virtual void accumulate()=0
Add element residual/Jacobian into assembly global data.
virtual void onExternalSide(const Elem *elem, unsigned int side) override
Called when iterating over external sides (no side neighbor)
virtual void compute(ResidualObject &ro)=0
Will dispatch to computeResidual/computeJacobian/computeResidualAndJacobian based on the derived clas...
virtual void computeOnElement()
virtual void computeOnInternalFace()=0
std::vector< FVElementalKernel * > _fv_kernels
Current subdomain FVElementalKernels.
bool _subdomain_has_hdg
Whether the subdomain has HDGKernels.
NonlinearSystemBase & _nl
Reference to the underlying NonlinearSystemBase.
void printBoundaryExecutionInformation(const unsigned int bid) const override
Print list of specific objects executed on each boundary and in which order.
virtual void subdomainChanged() override
Called every time the current subdomain changes (i.e.
const bool _has_active_objects
Whether there are any active residual objects; otherwise we will do an early return.
MooseObjectWarehouse< DGKernelBase > * _dg_warehouse
MooseObjectWarehouse< HDGKernel > * _hdg_warehouse
MooseObjectWarehouse< KernelBase > * _tag_kernels
void printGeneralExecutionInformation() const override
Print information about the loop, mostly order of execution of objects.
virtual ~NonlinearThread()
MooseObjectTagWarehouse< InterfaceKernelBase > & _interface_kernels
Reference to interface kernel storage structure.
virtual void accumulateLower()=0
Add lower-d residual/Jacobian into assembly global data.
virtual void onInterface(const Elem *elem, unsigned int side, BoundaryID bnd_id) override
Called when doing interface assembling.
virtual void postElement(const Elem *) override
Called after the element assembly is done (including surface assembling)
MooseObjectWarehouse< IntegratedBCBase > * _ibc_warehouse
bool _should_execute_dg
Whether DG kernels should be executed for a given elem-neighbor pairing.
virtual void onElement(const Elem *elem) override
Assembly of the element (not including surface assembly)
This is the common base class for objects that give residual contributions.
Base class for assembly-like calculations.
All time kernels should inherit from this class.
Definition TimeKernel.h:19
const BoundaryID INVALID_BOUNDARY_ID
Definition MooseTypes.C:22