FEMTIC
Forward3D.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
25 #define DBLDEF_FORWARD_3D
26 
27 //#include "ComplexSparseSquareMatrix.h"
29 #include "CommonParameters.h"
30 #include <map>
31 #include <set>
32 #include <iostream>
33 #include <stdlib.h>
34 #include "MeshData.h"
35 
36 // Class of 3D forward analysis
37 class Forward3D{
38 
39 public:
40  // Constructer
41  Forward3D();
42 
43  // Destructer
44  virtual ~Forward3D();
45 
46  //Run 3D forward calculation
47  virtual void forwardCalculation( const double freq, const int iPol ) = 0;
48 
49  // Calculate X component of electric field
50  virtual std::complex<double> calcValueElectricFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
51 
52  // Calculate Y component of electric field
53  virtual std::complex<double> calcValueElectricFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
54 
55  // Calculate Z component of electric field
56  virtual std::complex<double> calcValueElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
57 
58  // Calculate Z component of rotated electric field
59  virtual std::complex<double> calcValueRotatedElectricFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
60 
61  // Calculate X component of electric field only from the edges on the Earth's surface
62  virtual std::complex<double> calcValueElectricFieldXDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord ) const = 0;
63 
64  // Calculate Y component of electric field only from the edges on the Earth's surface
65  virtual std::complex<double> calcValueElectricFieldYDirectionFromEdgesOnEarthSurface( const int iElem, const int iFace, const double uCoord, const double vCoord ) const = 0;
66 
67  // Calculate tangential electric field directed to X from all edges of owner element
68  virtual std::complex<double> calcValueElectricFieldTangentialXFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal ) const = 0;
69 
70  // Calculate tangential electric field directed to Y from all edges of owner element
71  virtual std::complex<double> calcValueElectricFieldTangentialYFromAllEdges( const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal ) const = 0;
72 
73  // Calculate tangential electric field directed to X
74  virtual std::complex<double> calcValueElectricFieldTangentialX( const int iElem, const int iFace, const double uCoord, const double vCoord ) const = 0;
75 
76  // Calculate tangential electric field directed to Y
77  virtual std::complex<double> calcValueElectricFieldTangentialY( const int iElem, const int iFace, const double uCoord, const double vCoord ) const = 0;
78 
79  // Calculate X component of magnetic field
80  virtual std::complex<double> calcValueMagneticFieldXDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
81 
82  // Calculate Y component of magnetic field
83  virtual std::complex<double> calcValueMagneticFieldYDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
84 
85  // Calculate Z component of magnetic field
86  virtual std::complex<double> calcValueMagneticFieldZDirection( const int iElem, const double xLocal, const double yLocal, const double zLocal ) const = 0;
87 
88  // Calculate interpolator vector of X component of electric field
89  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) ) = 0;
90 
91  // Calculate interpolator vector of Y component of electric field
92  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) ) = 0;
93 
94  // Calculate interpolator vector of Z component of electric field
95  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) ) = 0;
96 
97  // Calculate interpolator vector of Z component of rotated electric field
98  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) ) = 0;
99 
100  // Calculate interpolator vector of X component of electric field only from the edges on the Earth's surface
101  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) ) = 0;
102 
103  // Calculate interpolator vector of Y component of electric field only from the edges on the Earth's surface
104  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) ) = 0;
105 
106  // Calculate interpolator vector of tangential electric field directed to X from all edges
107  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) ) = 0;
108 
109  // Calculate interpolator vector of tangential electric field directed to Y from all edges
110  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) ) = 0;
111 
112  // Calculate interpolator vector of tangential electric field directed to X
113  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) ) = 0;
114 
115  // Calculate interpolator vector of tangential electric field directed to Y
116  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) ) = 0;
117 
118  // Calculate interpolator vector of X component of magnetic field
119  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) ) = 0;
120 
121  // Calculate interpolator vector of Y component of magnetic field
122  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) ) = 0;
123 
124  // Calculate interpolator vector of Z component of magnetic field
125  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) ) = 0;
126 
127  // Calculate interpolator vector of difference of voltage
128  virtual void calcInterpolatorVectorOfVoltageDifference( const int nElem, const int* elememtsIncludingDipole, const CommonParameters::locationXY* localCoordinateValuesStartPoint, const CommonParameters::locationXY* localCoordinateValuesEndPoint, const int irhs ) = 0;
129 
130  // Calculate interpolator vector of difference of voltage
131  virtual void calcInterpolatorVectorOfVoltageDifference( const int nElem, const int* elememtsIncludingDipole, const int* const facesIncludingDipole,
132  const CommonParameters::AreaCoords* const areaCoordValStartPoint, const CommonParameters::AreaCoords* const areaCoordValEndPoint, const int irhs ) = 0;
133 
134  // Set non-zero strucuture of matrix for forward calculation
136 
137  // Set non-zero values of matrix and right-hande side vector for forward calculation
139 
140  //----- DO NOT DELETE FOR FUTURE USE >>>>>
142  //virtual void setNonZeroStrucuture( ComplexSparseSquareSymmetricMatrix& matrix, const int blkID, std::set<int>& nonZeroRowsAndCols ) = 0;
143 
145  //virtual void setNonZeroValues( ComplexSparseSquareSymmetricMatrix& matrix, const int blkID ) = 0;
146  //----- DO NOT DELETE FOR FUTURE USE <<<<<
147 
148  // Calculate vector x of the reciprocity algorithm of Rodi (1976)
149  virtual void calVectorXOfReciprocityAlgorithm( const std::complex<double>* const vecIn, const int blkID, std::complex<double>* const vecOut, std::vector<int>& nonZeroRows ) = 0;
150 
151  // Copy solution vector degenerated
152  virtual void copySolutionVectorDegenerated( const int iPol, std::complex<double>* solutionVector ) const;
153 
154  // Call function inputMeshData of the class MeshData
155  virtual void callInputMeshData() = 0;
156 
157  // Get pointer to the class MeshData
158  virtual const MeshData* getPointerToMeshData() const = 0;
159 
160  // Get polarization at present for which forward analysis is executed
161  int getPolarizationCurrent() const;
162 
163  // Get frequency at present for which forward analysis is executed
164  double getFrequencyCurrent() const;
165 
166  // Get order of finite element
167  int getOrderOfFiniteElement() const;
168 
169  // Get total number of equations after degeneration
170  int getNumOfEquationDegenerated() const;
171 
172  // Get total number of equations finally solved
173  virtual int getNumOfEquationFinallySolved() const;
174 
175  // Release memory of total matrix and sparse solver
177 
178  // Initialize right-hand side vectors
179  void initializeRhsVectors( const int nrhs );
180 
181  // Perform solve phase for right-hand sides consisting of interpolator vectors
182  void solvePhaseForRhsConsistingInterpolatorVectors( const int numInterpolatorVectors, std::complex<double>* solutionForInterpolatorVectors );
183 
184  // Calculate derivative of EM field
185  void calculateDerivativesOfEMField( const int numInterpolatorVectors, const std::complex<double>* const solutionForInterpolatorVectors, std::complex<double>* const derivatives );
186 
187  // Allocate memory for derivatives of interpolator vectors
188  void allcateMemoryForDerivativeOfInterpolatorVectors( const int numInterpolatorVectors );
189 
190  // Calculate difference of voltage for brick element
191  virtual std::complex<double> calcVoltageDifference( const int nElem, const int* elememtsIncludingDipole,
192  const CommonParameters::locationXY* localCoordinateValuesStartPoint, const CommonParameters::locationXY* localCoordinateValuesEndPoint ) const = 0;
193 
194  // Calculate difference of voltage for tetra element
195  virtual std::complex<double> calcVoltageDifference( const int nElem, const int* const elememtsIncludingDipole, const int* const facesIncludingDipole,
196  const CommonParameters::AreaCoords* const areaCoordValStartPoint, const CommonParameters::AreaCoords* const areaCoordValEndPoint ) const = 0;
197 
198 protected:
199 
200  struct Matrix2x2{
201  double mat11;
202  double mat12;
203  double mat21;
204  double mat22;
205  };
206 
207  struct Matrix3x3{
208  double mat11;
209  double mat12;
210  double mat13;
211  double mat21;
212  double mat22;
213  double mat23;
214  double mat31;
215  double mat32;
216  double mat33;
217  };
218 
219  // Total number of the equation
221 
222  // Total number of equations after degeneration
224 
225  // Array converting local edge IDs to global ones
227 
228  // Whether array converting local edge IDs to global ones has already been set or not
230 
231  // Array converting global node IDs to the ones after degeneration
233 
234  // Array converting global node IDs non-zero electric field values specified to the nodes
235  std::map< int, std::complex<double> > m_globalID2NonZeroValues;
236 
237  // Whether array converting global node IDs to the ones after degeneration has already been set or not
239 
240  // Array converting global node IDs of slaves to the ones of its master
241  std::map<int, int> m_globalIDSlave2Master[2];
242 
243  // Array of the matrix of 3D anaysis
245 
246  // Whether matrix structure has already been set or not
248 
249  // Solution vector of 3D analysis
250  std::complex<double>* m_solution;
251 
252  // Set polarization at present for which forward analysis is executed
253  void setPolarizationCurrent( const int iPol );
254 
255  // Set frequency at present for which forward analysis is executed
256  void setFrequencyCurrent( const double freq );
257 
258  // Set order of finite element
259  void setOrderOfFiniteElement( const int order );
260 
261  // Add values to right-hand sides matrix consisting of interpolator vectors
262  void addValuesToRhsVectors( const int irow, const int irhs, const std::complex<double>& val );
263 
264  // Output results of forward calculation to VTK file
265  virtual void outputResultToVTK() const = 0;
266 
267  // Initialize sparse solver
268  void initializeSparseSolver();
269 
270 private:
271  // Copy constructer
272  Forward3D(const Forward3D& rhs){
273  std::cerr << "Error : Copy constructer of the class Forward3D is not implemented." << std::endl;
274  exit(1);
275  }
276 
277  // Copy assignment operator
279  std::cerr << "Error : Copy constructer of the class Forward3D is not implemented." << std::endl;
280  exit(1);
281  }
282 
283  // Polarization at present for which forward analysis is executed
285 
286  // Frequency at present for which forward analysis is executed
288 
289  // Order of finite element
291 
292 };
293 
294 #endif
Definition: ComplexSparseSquareSymmetricMatrix.h:32
Definition: Forward3D.h:37
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))=0
virtual std::complex< double > calcValueMagneticFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
virtual std::complex< double > calcValueElectricFieldTangentialX(const int iElem, const int iFace, const double uCoord, const double vCoord) const =0
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))=0
virtual void calcInterpolatorVectorOfVoltageDifference(const int nElem, const int *elememtsIncludingDipole, const CommonParameters::locationXY *localCoordinateValuesStartPoint, const CommonParameters::locationXY *localCoordinateValuesEndPoint, const int irhs)=0
void addValuesToRhsVectors(const int irow, const int irhs, const std::complex< double > &val)
Definition: Forward3D.cpp:118
int m_numOfEquation
Definition: Forward3D.h:220
virtual std::complex< double > calcValueElectricFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
virtual void forwardCalculation(const double freq, const int iPol)=0
Definition: Forward3D.cpp:87
Forward3D()
Definition: Forward3D.cpp:37
void allcateMemoryForDerivativeOfInterpolatorVectors(const int numInterpolatorVectors)
int getPolarizationCurrent() const
Definition: Forward3D.cpp:405
virtual void calcInterpolatorVectorOfVoltageDifference(const int nElem, const int *elememtsIncludingDipole, const int *const facesIncludingDipole, const CommonParameters::AreaCoords *const areaCoordValStartPoint, const CommonParameters::AreaCoords *const areaCoordValEndPoint, const int irhs)=0
int getNumOfEquationDegenerated() const
Definition: Forward3D.cpp:420
bool m_hasSetIDsLocal2Global
Definition: Forward3D.h:229
int ** m_IDsLocal2Global
Definition: Forward3D.h:226
void setFrequencyCurrent(const double freq)
Definition: Forward3D.cpp:98
virtual std::complex< double > calcValueMagneticFieldYDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
virtual void copySolutionVectorDegenerated(const int iPol, std::complex< double > *solutionVector) const
Definition: Forward3D.cpp:393
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))=0
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))=0
int m_numOfEquationDegenerated
Definition: Forward3D.h:223
void calculateDerivativesOfEMField(const int numInterpolatorVectors, const std::complex< double > *const solutionForInterpolatorVectors, std::complex< double > *const derivatives)
Definition: Forward3D.cpp:218
Forward3D(const Forward3D &rhs)
Definition: Forward3D.h:272
virtual std::complex< double > calcValueElectricFieldXDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord) const =0
std::map< int, int > m_globalIDSlave2Master[2]
Definition: Forward3D.h:241
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))=0
virtual std::complex< double > calcValueElectricFieldXDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
double m_frequencyCurrent
Definition: Forward3D.h:287
virtual std::complex< double > calcVoltageDifference(const int nElem, const int *const elememtsIncludingDipole, const int *const facesIncludingDipole, const CommonParameters::AreaCoords *const areaCoordValStartPoint, const CommonParameters::AreaCoords *const areaCoordValEndPoint) const =0
std::map< int, std::complex< double > > m_globalID2NonZeroValues
Definition: Forward3D.h:235
void setPolarizationCurrent(const int iPol)
Definition: Forward3D.cpp:93
std::complex< double > * m_solution
Definition: Forward3D.h:250
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))=0
virtual const MeshData * getPointerToMeshData() const =0
virtual void calVectorXOfReciprocityAlgorithm(const std::complex< double > *const vecIn, const int blkID, std::complex< double > *const vecOut, std::vector< int > &nonZeroRows)=0
virtual std::complex< double > calcVoltageDifference(const int nElem, const int *elememtsIncludingDipole, const CommonParameters::locationXY *localCoordinateValuesStartPoint, const CommonParameters::locationXY *localCoordinateValuesEndPoint) const =0
bool m_hasIDsGlobal2AfterDegenerated[2]
Definition: Forward3D.h:238
virtual std::complex< double > calcValueElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
void releaseMemoryOfMatrixAndSolver()
Definition: Forward3D.cpp:430
double getFrequencyCurrent() const
Definition: Forward3D.cpp:410
virtual ~Forward3D()
Definition: Forward3D.cpp:58
virtual void setNonZeroValues(ComplexSparseSquareSymmetricMatrix &matrix)=0
virtual std::complex< double > calcValueRotatedElectricFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
Forward3D & operator=(const Forward3D &rhs)
Definition: Forward3D.h:278
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))=0
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))=0
void setOrderOfFiniteElement(const int order)
Definition: Forward3D.cpp:103
virtual std::complex< double > calcValueElectricFieldTangentialY(const int iElem, const int iFace, const double uCoord, const double vCoord) const =0
int * m_IDsGlobal2AfterDegenerated[2]
Definition: Forward3D.h:232
int getOrderOfFiniteElement() const
Definition: Forward3D.cpp:415
void solvePhaseForRhsConsistingInterpolatorVectors(const int numInterpolatorVectors, std::complex< double > *solutionForInterpolatorVectors)
Definition: Forward3D.cpp:163
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))=0
virtual void callInputMeshData()=0
virtual int getNumOfEquationFinallySolved() const
Definition: Forward3D.cpp:425
ComplexSparseSquareSymmetricMatrix m_matrix3DAnalysis
Definition: Forward3D.h:244
virtual void setNonZeroStrucuture(ComplexSparseSquareSymmetricMatrix &matrix)=0
virtual std::complex< double > calcValueElectricFieldTangentialXFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal) const =0
virtual std::complex< double > calcValueElectricFieldTangentialYFromAllEdges(const int iElem, const int iFace, const double xLocal, const double yLocal, const double zLocal) const =0
virtual std::complex< double > calcValueMagneticFieldZDirection(const int iElem, const double xLocal, const double yLocal, const double zLocal) const =0
virtual std::complex< double > calcValueElectricFieldYDirectionFromEdgesOnEarthSurface(const int iElem, const int iFace, const double uCoord, const double vCoord) const =0
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))=0
void initializeSparseSolver()
Definition: Forward3D.cpp:436
bool m_hasMatrixStructureSetAndAnalyzed
Definition: Forward3D.h:247
int m_polarizationCurrent
Definition: Forward3D.h:284
int m_orderOfFiniteElement
Definition: Forward3D.h:290
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))=0
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))=0
void initializeRhsVectors(const int nrhs)
Definition: Forward3D.cpp:137
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))=0
virtual void outputResultToVTK() const =0
Definition: MeshData.h:31
Definition: CommonParameters.h:99
Definition: CommonParameters.h:38
Definition: Forward3D.h:200
double mat11
Definition: Forward3D.h:201
double mat12
Definition: Forward3D.h:202
double mat22
Definition: Forward3D.h:204
double mat21
Definition: Forward3D.h:203
Definition: Forward3D.h:207
double mat11
Definition: Forward3D.h:208
double mat13
Definition: Forward3D.h:210
double mat33
Definition: Forward3D.h:216
double mat23
Definition: Forward3D.h:213
double mat22
Definition: Forward3D.h:212
double mat32
Definition: Forward3D.h:215
double mat31
Definition: Forward3D.h:214
double mat12
Definition: Forward3D.h:209
double mat21
Definition: Forward3D.h:211