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_SURFACE_CONDUCTIVITY_OPERATOR_HPP
5 : #define PALACE_MODELS_SURFACE_CONDUCTIVITY_OPERATOR_HPP
6 :
7 : #include <vector>
8 : #include <mfem.hpp>
9 :
10 : namespace palace
11 : {
12 :
13 : class IoData;
14 : class MaterialOperator;
15 : class MaterialPropertyCoefficient;
16 :
17 : //
18 : // A class handling finite conductivity boundaries.
19 : //
20 0 : class SurfaceConductivityOperator
21 : {
22 : private:
23 : // Reference to material property data (not owned).
24 : const MaterialOperator &mat_op;
25 :
26 : // Surface properties for finite conductivity boundary attributes: conductor conductivity
27 : // and permeability, and (optionally) thickness.
28 0 : struct ConductivityData
29 : {
30 : double sigma, mu, h;
31 : mfem::Array<int> attr_list;
32 : };
33 : std::vector<ConductivityData> boundaries;
34 :
35 : void SetUpBoundaryProperties(const IoData &iodata, const mfem::ParMesh &mesh);
36 : void PrintBoundaryInfo(const IoData &iodata, const mfem::ParMesh &mesh);
37 :
38 : public:
39 : SurfaceConductivityOperator(const IoData &iodata, const MaterialOperator &mat_op,
40 : const mfem::ParMesh &mesh);
41 :
42 : // Returns array of finite conductivity boundary attributes.
43 : mfem::Array<int> GetAttrList() const;
44 :
45 : // Add contributions to system matrix for a finite conductivity boundary condition.
46 : void AddExtraSystemBdrCoefficients(double omega, MaterialPropertyCoefficient &fbr,
47 : MaterialPropertyCoefficient &fbi);
48 : };
49 :
50 : } // namespace palace
51 :
52 : #endif // PALACE_MODELS_SURFACE_CONDUCTIVITY_OPERATOR_HPP
|