FEMTIC
Forward3DNonConformingHexaElement0thOrder.h
Go to the documentation of this file.
1 //-------------------------------------------------------------------------------------------------------
2 // The MIT License (MIT)
3 //
4 // Copyright (c) 2021 Yoshiya Usui
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to deal
8 // in the Software without restriction, including without limitation the rights
9 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 // copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in all
14 // copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 // SOFTWARE.
23 //-------------------------------------------------------------------------------------------------------
24 #ifndef DBLDEF_FORWARD_3D_NONCONFORMING_HEXA_ELEMENT_0TH_ORDER
25 #define DBLDEF_FORWARD_3D_NONCONFORMING_HEXA_ELEMENT_0TH_ORDER
26 
28 #include "Forward3D.h"
30 
31 // Class of 3D forward calculation by using the 0th order nonconforming hexahedral element
33 
34 public:
35 
36  // Constructer
38 
39  // Destructer
41 
42  // Run 3D forward calculation
43  virtual void forwardCalculation( const double freq, const int iPol );
44 
45  // Calculate X component of electric field
46  virtual std::complex<double> calcValueElectricFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
47 
48  // Calculate Y component of electric field
49  virtual std::complex<double> calcValueElectricFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
50 
51  // Calculate Z component of electric field
52  virtual std::complex<double> calcValueElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
53 
54  // Calculate Z component of rotated electric field
55  virtual std::complex<double> calcValueRotatedElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
56 
57  // Calculate X component of electric field only from the edges on the Earth's surface
58  std::complex<double> calcValueRotatedElectricFieldNormal( const int iElem, const double xLocal, const double yLocal ) const;
59 
60  // Calculate X component of electric field only from the edges on the Earth's surface
61  virtual std::complex<double> calcValueElectricFieldXDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord ) const;
62 
63  // Calculate Y component of electric field only from the edges on the Earth's surface
64  virtual std::complex<double> calcValueElectricFieldYDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord ) const;
65 
66  // Calculate tangential electric field directed to X from all edges of owner element
67  virtual std::complex<double> calcValueElectricFieldTangentialXFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal ) const;
68 
69  // Calculate tangential electric field directed to Y from all edges of owner element
70  virtual std::complex<double> calcValueElectricFieldTangentialYFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal ) const;
71 
72  // Calculate tangential electric field directed to X
73  virtual std::complex<double> calcValueElectricFieldTangentialX( const int iElem, const int iFace, const double uCoord, const double vCoord ) const;
74 
75  // Calculate tangential electric field directed to Y
76  virtual std::complex<double> calcValueElectricFieldTangentialY( const int iElem, const int iFace, const double uCoord, const double vCoord ) const;
77 
78  // Calculate X component of magnetic field
79  virtual std::complex<double> calcValueMagneticFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
80 
81  // Calculate Y component of magnetic field
82  virtual std::complex<double> calcValueMagneticFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
83 
84  // Calculate Z component of magnetic field
85  virtual std::complex<double> calcValueMagneticFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const;
86 
87  // Calculate interpolator vector of X component of electric field
88  virtual void calcInterpolatorVectorOfElectricFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
89 
90  // Calculate interpolator vector of Y component of electric field
91  virtual void calcInterpolatorVectorOfElectricFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
92 
93  // Calculate interpolator vector of Z component of electric field
94  virtual void calcInterpolatorVectorOfElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
95 
96  // Calculate interpolator vector of Z component of rotated electric field
97  virtual void calcInterpolatorVectorOfRotatedElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
98 
99  // Calculate interpolator vector of X component of electric field only from the edges on the Earth's surface
100  void calcInterpolatorVectorOfRotatedElectricFieldNormal( const int iElem, const double xLocal, const double yLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
101 
102  // Calculate interpolator vector of X component of electric field only from the edges on the Earth's surface
103  virtual void calcInterpolatorVectorOfElectricFieldXDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
104 
105  // Calculate interpolator vector of Y component of electric field only from the edges on the Earth's surface
106  virtual void calcInterpolatorVectorOfElectricFieldYDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
107 
108  // Calculate interpolator vector of tangential electric field directed to X from all edges
109  virtual void calcInterpolatorVectorOfElectricFieldTangentialXFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
110 
111  // Calculate interpolator vector of tangential electric field directed to Y from all edges
112  virtual void calcInterpolatorVectorOfElectricFieldTangentialYFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
113 
114  // Calculate interpolator vector of tangential electric field directed to X
115  virtual void calcInterpolatorVectorOfElectricFieldTangentialX( const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
116 
117  // Calculate interpolator vector of tangential electric field directed to Y
118  virtual void calcInterpolatorVectorOfElectricFieldTangentialY( const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
119 
120  // Calculate interpolator vector of X component of magnetic field
121  virtual void calcInterpolatorVectorOfMagneticFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
122 
123  // Calculate interpolator vector of Y component of magnetic field
124  virtual void calcInterpolatorVectorOfMagneticFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
125 
126  // Calculate interpolator vector of Z component of magnetic field
127  virtual void calcInterpolatorVectorOfMagneticFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex<double>& factor = std::complex<double>(1.0,0.0) );
128 
129  // Calculate interpolator vector of difference of voltage
130  virtual void calcInterpolatorVectorOfVoltageDifference( const int nElem, const int* elememtsIncludingDipole, const CommonParameters::locationXY* localCoordinateValuesStartPoint, const CommonParameters::locationXY* localCoordinateValuesEndPoint, const int irhs );
131 
132  // Calculate interpolator vector of difference of voltage
133  virtual void calcInterpolatorVectorOfVoltageDifference( const int nElem, const int* elememtsIncludingDipole, const int* const facesIncludingDipole,
134  const CommonParameters::AreaCoords* const areaCoordValStartPoint, const CommonParameters::AreaCoords* const areaCoordValEndPoint, const int irhs );
135 
136  // Set non-zero strucuture of matrix for forward calculation
138 
139  // Set non-zero values of matrix and right-hande side vector for forward calculation
141 
142  // Calculate vector x of the reciprocity algorithm of Rodi (1976)
143  virtual void calVectorXOfReciprocityAlgorithm( const std::complex<double>* const vecIn, const int blkID, std::complex<double>* const vecOut, std::vector<int>& nonZeroRows );
144 
145  // Copy solution vector degenerated
146  virtual void copySolutionVectorDegenerated( const int iPol, std::complex<double>* solutionVector ) const;
147 
148  // Call function inputMeshData of the class MeshData
149  virtual void callInputMeshData();
150 
151  // Get pointer to the class MeshData
152  virtual const MeshData* getPointerToMeshData() const;
153 
154  // Get pointer to the class MeshDataNonConformingHexaElement
156 
157  // Calculate difference of voltage for brick element
158  virtual std::complex<double> calcVoltageDifference( const int nElem, const int* elememtsIncludingDipole,
159  const CommonParameters::locationXY* localCoordinateValuesStartPoint, const CommonParameters::locationXY* localCoordinateValuesEndPoint ) const;
160 
161  // Calculate difference of voltage for tetra element
162  virtual std::complex<double> calcVoltageDifference( const int nElem, const int* const elememtsIncludingDipole, const int* const facesIncludingDipole,
163  const CommonParameters::AreaCoords* const areaCoordValStartPoint, const CommonParameters::AreaCoords* const areaCoordValEndPoint ) const;
164 
165  // Get total number of equations finally solved
166  virtual int getNumOfEquationFinallySolved() const;
167 
168 
169 private:
170 
171  const static int DIRICHLET_BOUNDARY_NONZERO_VALUE = -1;// This must be the same as the ones of other functions !!
172 
173  const static int DIRICHLET_BOUNDARY_ZERO_VALUE = -2;// This must be the same as the ones of other functions !!
174 
175  const static int SLAVE_ON_OUTER_EDGES = -3;
176 
177  const static int SLAVE_ON_INTERIOR_EDGES = -4;
178 
179  const static int m_numGauss = 2;
180 
182 
184 
186 
188 
190 
191  // Array of reference coord xi values for each node
192  double m_xiAtNode[8];
193 
194  // Array of reference coord eta values for each node
195  double m_etaAtNode[8];
196 
197  // Array of reference coord zeta values for each node
198  double m_zetaAtNode[8];
199 
200  // Array of reference coord xi values for each edge
201  double m_xiAtEdge[12];
202 
203  // Array of reference coord eta values for each edge
204  double m_etaAtEdge[12];
205 
206  // Array of reference coord zeta values for each edge
207  double m_zetaAtEdge[12];
208 
209  const static double m_eps;
210 
211  // Flag specifing wether map converting master dofs after degeneration and MPC factors from slave dof after degeneration has been made
213 
214  // Array converting global node IDs after degeneration to the ones after constraint
216 
217  // Total number of equations after degeneration and constraint
219 
220  // Solution vector after degeneration and constraint
222 
223  // Map converting master dofs after degeneration and MPC factors from slave dof after degeneration
224  // Even for master dofs, master dof and factors are inserted (in this case, master dof is equal to index and factor is one)
225  std::vector< std::pair<int,double> >* m_slaveDofToMasterDofAndFactors;
226 
227  // Vector of MPC constants;
228  std::complex<double>* m_vectorMPCConstants;
229 
230  // Copy constructer
232 
233  // Copy assignment operator
235 
236  // Class of 2D forward calculation using quadrilateral elements
238 
240 
241  // Calculate array converting local IDs to global ones
243 
244  // Calculate array converting global IDs to the ones after degeneration
246 
247  // Calculate array converting global edge IDs non-zero electric field values specified to the edges
249 
250  // Make map converting master dofs after degeneration and MPC factors from slave dof after degeneration
251  double calc2DJacobianMatrixForEarthSurface( const int elemID, const double xi, const double eta,
252  Forward3D::Matrix2x2& JacobMat ) const;
253 
254  // Make map converting master dofs after degeneration and MPC factors from slave dof after degeneration
256 
257  // Calculate MPC constants
258  void calcMPCConstants();
259 
260  // Add master dof and factor pair to m_slaveDofToMasterDofAndFactors
262  bool& rotationDirectionPlus, CommonParameters::locationXY& sharedPoint ) const;
263 
264  // Add master dof and factor pair to m_slaveDofToMasterDofAndFactors
265  void addMasterDofAndFactorPair( const int slaveDof, const int masterDof, const double factor );
266 
267  // Get shape functions of the x direction with respect to the reference element coordinate system
268  double getShapeFuncX( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
269 
270  // Get shape functions of the y direction with respect to the reference element coordinate system
271  double getShapeFuncY( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
272 
273  // Get shape functions of the z direction with respect to the reference element coordinate system
274  double getShapeFuncZ( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
275 
276  // Get x component of shape function rotated for 0th order edge-based elements
277  double getShapeFuncRotatedX( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
278 
279  // Get y component of shape function rotated for 0th order edge-based elements
280  double getShapeFuncRotatedY( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
281 
282  // Get z component of shape function rotated for 0th order edge-based elements
283  double getShapeFuncRotatedZ( const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3& invJacobMat ) const;
284 
285  // Calculate jacobian matrix of the elements
286  double get2DShapeFuncRotatedForEarthSurface( const double xi, const double eta, const int num, const Forward3D::Matrix2x2& invJacobMat ) const;
287 
288  // Calculate jacobian matrix of the elements
289  double calcJacobianMatrix( const int elemID, const double xi, const double eta, const double zeta, Forward3D::Matrix3x3& JacobMat ) const;
290 
291  // Calculate inverse of jacobian matrix multiplied by determinant
292  void calcInverseOfJacobianMatrix( const Forward3D::Matrix3x3& jacobMat, const double determinant, Forward3D::Matrix3x3& invJacobMat ) const;
293 
294  // Output results of forward calculation to VTK file
295  virtual void outputResultToVTK() const;
296 
297  // Output results of forward calculation to binary file
298  virtual void outputResultToBinary( const int iFreq, const int iPol ) const;
299 
300  // Add values to right-hand sides matrix consisting of interpolator vectors by taking into account MPC
301  void addValuesToRhsVectorsByConsideringMPC( const int irow, const int irhs, const std::complex<double>& val );
302 
304  //void makePairOfMasterDofAndFactorForASlaveDof( const int slaveDofAfterDegenerated, std::vector< std::pair<int,double> >& masterDofAndFactorsAfterDegenerated ) const;
305 
306  //void makePairOfMasterDofAndFactorForASlaveDofAux( const int slaveDofBeforeDegenerated, std::vector< std::pair<int,double> >& masterDofAndFactorsBeforeDegenerated ) const;
307 
309  //int getDofBeforeDegenerationFromDofAfterDegeneration( const int dofAfterDegeneration ) const;
310 
311 };
312 
313 #endif
Definition: ComplexSparseSquareSymmetricMatrix.h:32
Definition: Forward2DNonConformingQuadrilateralElement0thOrderEdgeBased.h:30
Definition: Forward3DNonConformingHexaElement0thOrder.h:32
double m_integralPointEta[m_numIntegralPoints]
Definition: Forward3DNonConformingHexaElement0thOrder.h:185
virtual void calcInterpolatorVectorOfRotatedElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:654
void calcArrayConvertIDsGlobal2AfterDegenerated()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1340
virtual void calcInterpolatorVectorOfElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:630
virtual void calVectorXOfReciprocityAlgorithm(const std::complex< double > *const vecIn, const int blkID, std::complex< double > *const vecOut, std::vector< int > &nonZeroRows)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1061
virtual void calcInterpolatorVectorOfElectricFieldTangentialXFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:722
virtual std::complex< double > calcValueElectricFieldXDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:453
Forward2DNonConformingQuadrilateralElement0thOrderEdgeBased * m_Fwd2DQuadrilateralElement[4]
Definition: Forward3DNonConformingHexaElement0thOrder.h:237
int * m_IDsAfterDegenerated2AfterConstrained
Definition: Forward3DNonConformingHexaElement0thOrder.h:215
virtual std::complex< double > calcValueElectricFieldYDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:459
virtual void calcInterpolatorVectorOfMagneticFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:842
virtual std::complex< double > calcValueElectricFieldTangentialX(const int iElem, const int iFace, const double uCoord, const double vCoord) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:511
double getShapeFuncZ(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2022
double m_xiAtNode[8]
Definition: Forward3DNonConformingHexaElement0thOrder.h:192
static const int m_numIntegralPoints
Definition: Forward3DNonConformingHexaElement0thOrder.h:181
static const int SLAVE_ON_OUTER_EDGES
Definition: Forward3DNonConformingHexaElement0thOrder.h:175
void makeMapSlaveDofToMasterDofAndFactors()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1555
const MeshDataNonConformingHexaElement * getPointerToMeshDataNonConformingHexaElement() const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1193
double m_etaAtEdge[12]
Definition: Forward3DNonConformingHexaElement0thOrder.h:204
virtual void calcInterpolatorVectorOfVoltageDifference(const int nElem, const int *elememtsIncludingDipole, const CommonParameters::locationXY *localCoordinateValuesStartPoint, const CommonParameters::locationXY *localCoordinateValuesEndPoint, const int irhs)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:852
Forward3DNonConformingHexaElement0thOrder()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:37
virtual std::complex< double > calcValueElectricFieldTangentialYFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:488
static const int DIRICHLET_BOUNDARY_ZERO_VALUE
Definition: Forward3DNonConformingHexaElement0thOrder.h:173
virtual void calcInterpolatorVectorOfElectricFieldYDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:716
virtual void copySolutionVectorDegenerated(const int iPol, std::complex< double > *solutionVector) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1170
virtual void calcInterpolatorVectorOfElectricFieldTangentialYFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:749
virtual std::complex< double > calcValueMagneticFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:548
virtual std::complex< double > calcValueElectricFieldTangentialY(const int iElem, const int iFace, const double uCoord, const double vCoord) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:517
virtual std::complex< double > calcValueElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:385
double m_integralPointXi[m_numIntegralPoints]
Definition: Forward3DNonConformingHexaElement0thOrder.h:183
virtual void calcInterpolatorVectorOfElectricFieldXDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:710
void calcInverseOfJacobianMatrix(const Forward3D::Matrix3x3 &jacobMat, const double determinant, Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2242
double calc2DJacobianMatrixForEarthSurface(const int elemID, const double xi, const double eta, Forward3D::Matrix2x2 &JacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1524
virtual std::complex< double > calcValueElectricFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:365
bool doesIntegralXCompFirst(const CommonParameters::locationXY &startPoint, const CommonParameters::locationXY &endPoint, bool &rotationDirectionPlus, CommonParameters::locationXY &sharedPoint) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1866
std::complex< double > * m_solutionVectorDegeneratedAndConstrained
Definition: Forward3DNonConformingHexaElement0thOrder.h:221
virtual int getNumOfEquationFinallySolved() const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1271
virtual void calcInterpolatorVectorOfElectricFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:606
double m_zetaAtEdge[12]
Definition: Forward3DNonConformingHexaElement0thOrder.h:207
virtual const MeshData * getPointerToMeshData() const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1186
double get2DShapeFuncRotatedForEarthSurface(const double xi, const double eta, const int num, const Forward3D::Matrix2x2 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2165
virtual ~Forward3DNonConformingHexaElement0thOrder()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:143
double getShapeFuncRotatedX(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2052
std::complex< double > calcValueRotatedElectricFieldNormal(const int iElem, const double xLocal, const double yLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:425
double m_etaAtNode[8]
Definition: Forward3DNonConformingHexaElement0thOrder.h:195
void calcArrayConvertIDGlobal2NonZeroValues()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1436
double m_xiAtEdge[12]
Definition: Forward3DNonConformingHexaElement0thOrder.h:201
static const int m_numGauss
Definition: Forward3DNonConformingHexaElement0thOrder.h:179
double m_integralPointZeta[m_numIntegralPoints]
Definition: Forward3DNonConformingHexaElement0thOrder.h:187
double getShapeFuncRotatedZ(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2128
double m_zetaAtNode[8]
Definition: Forward3DNonConformingHexaElement0thOrder.h:198
virtual void calcInterpolatorVectorOfElectricFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:582
virtual void calcInterpolatorVectorOfElectricFieldTangentialX(const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:776
virtual void forwardCalculation(const double freq, const int iPol)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:168
void calcArrayConvertLocalID2Global()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1276
void calcMPCConstants()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1753
bool m_hasMadeMapSlaveDofToMasterDofAndFactors
Definition: Forward3DNonConformingHexaElement0thOrder.h:212
virtual std::complex< double > calcValueMagneticFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:523
void calcInterpolatorVectorOfRotatedElectricFieldNormal(const int iElem, const double xLocal, const double yLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:678
virtual std::complex< double > calcValueRotatedElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:405
double calcJacobianMatrix(const int elemID, const double xi, const double eta, const double zeta, Forward3D::Matrix3x3 &JacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2190
Forward3DNonConformingHexaElement0thOrder(const Forward3DNonConformingHexaElement0thOrder &rhs)
std::vector< std::pair< int, double > > * m_slaveDofToMasterDofAndFactors
Definition: Forward3DNonConformingHexaElement0thOrder.h:225
std::complex< double > * m_vectorMPCConstants
Definition: Forward3DNonConformingHexaElement0thOrder.h:228
void addMasterDofAndFactorPair(const int slaveDof, const int masterDof, const double factor)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1922
double m_weights[m_numIntegralPoints]
Definition: Forward3DNonConformingHexaElement0thOrder.h:189
virtual std::complex< double > calcVoltageDifference(const int nElem, const int *elememtsIncludingDipole, const CommonParameters::locationXY *localCoordinateValuesStartPoint, const CommonParameters::locationXY *localCoordinateValuesEndPoint) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1200
virtual std::complex< double > calcValueElectricFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:345
virtual void outputResultToBinary(const int iFreq, const int iPol) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2340
MeshDataNonConformingHexaElement m_MeshDataNonConformingHexaElement
Definition: Forward3DNonConformingHexaElement0thOrder.h:239
virtual std::complex< double > calcValueMagneticFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:573
virtual void setNonZeroStrucuture(ComplexSparseSquareSymmetricMatrix &matrix)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:913
double getShapeFuncY(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1992
double getShapeFuncRotatedY(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2090
virtual std::complex< double > calcValueElectricFieldTangentialXFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:465
virtual void calcInterpolatorVectorOfMagneticFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:815
Forward3DNonConformingHexaElement0thOrder & operator=(const Forward3DNonConformingHexaElement0thOrder &rhs)
virtual void calcInterpolatorVectorOfElectricFieldTangentialY(const int iElem, const int iFace, const double uCoord, const double vCoord, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:782
static const int SLAVE_ON_INTERIOR_EDGES
Definition: Forward3DNonConformingHexaElement0thOrder.h:177
int m_numOfEquationDegeneratedAndConstrained
Definition: Forward3DNonConformingHexaElement0thOrder.h:218
static const double m_eps
Definition: Forward3DNonConformingHexaElement0thOrder.h:209
void addValuesToRhsVectorsByConsideringMPC(const int irow, const int irhs, const std::complex< double > &val)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2552
virtual void outputResultToVTK() const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:2261
virtual void callInputMeshData()
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1179
virtual void calcInterpolatorVectorOfMagneticFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal, const int irhs, const std::complex< double > &factor=std::complex< double >(1.0, 0.0))
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:788
virtual void setNonZeroValues(ComplexSparseSquareSymmetricMatrix &matrix)
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:950
double getShapeFuncX(const double xi, const double eta, const double zeta, const int num, const Forward3D::Matrix3x3 &invJacobMat) const
Definition: Forward3DNonConformingHexaElement0thOrder.cpp:1962
static const int DIRICHLET_BOUNDARY_NONZERO_VALUE
Definition: Forward3DNonConformingHexaElement0thOrder.h:171
Definition: Forward3D.h:37
Definition: MeshDataNonConformingHexaElement.h:31
Definition: MeshData.h:31
Definition: CommonParameters.h:99
Definition: CommonParameters.h:38
Definition: Forward3D.h:200
Definition: Forward3D.h:207