Line data Source code
1 : // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 : // SPDX-License-Identifier: Apache-2.0
3 :
4 : #ifndef PALACE_MODELS_FARFIELD_BOUNDARY_OPERATOR_HPP
5 : #define PALACE_MODELS_FARFIELD_BOUNDARY_OPERATOR_HPP
6 :
7 : #include <mfem.hpp>
8 :
9 : namespace palace
10 : {
11 :
12 : class IoData;
13 : class MaterialOperator;
14 : class MaterialPropertyCoefficient;
15 :
16 : //
17 : // A class handling farfield, or absorbing, boundaries.
18 : //
19 0 : class FarfieldBoundaryOperator
20 : {
21 : private:
22 : // Reference to material property data (not owned).
23 : const MaterialOperator &mat_op;
24 :
25 : // List of all absorbing boundary condition attributes.
26 : mfem::Array<int> farfield_attr;
27 :
28 : // First- or second-order absorbing boundary condition.
29 : int order;
30 :
31 : mfem::Array<int> SetUpBoundaryProperties(const IoData &iodata, const mfem::ParMesh &mesh);
32 :
33 : public:
34 : FarfieldBoundaryOperator(const IoData &iodata, const MaterialOperator &mat_op,
35 : const mfem::ParMesh &mesh);
36 :
37 : // Returns array of farfield BC attributes.
38 17 : const auto &GetAttrList() const { return farfield_attr; }
39 :
40 : // Returns order of absorbing BC approximation.
41 : int GetOrder() const { return order; }
42 :
43 : // Add contributions to system matrices from first- or second-order absorbing boundary
44 : // condition.
45 : void AddDampingBdrCoefficients(double coeff, MaterialPropertyCoefficient &fb);
46 : void AddExtraSystemBdrCoefficients(double omega, MaterialPropertyCoefficient &dfbr,
47 : MaterialPropertyCoefficient &dfbi);
48 : };
49 :
50 : } // namespace palace
51 :
52 : #endif // PALACE_MODELS_FARFIELD_BOUNDARY_OPERATOR_HPP
|