diff --git a/simpegEM/Base.py b/simpegEM/Base.py index 2b005540..d1e6bb08 100644 --- a/simpegEM/Base.py +++ b/simpegEM/Base.py @@ -17,6 +17,14 @@ class BaseEMProblem(Problem.BaseProblem): verbose = False + #################################################### + # Make A Symmetric + #################################################### + @property + def _makeASymmetric(self): + if getattr(self, '__makeASymmetric', None) is None: + self.__makeASymmetric = True + return self.__makeASymmetric #################################################### # Mu Model diff --git a/simpegEM/FDEM/FDEM.py b/simpegEM/FDEM/FDEM.py index 81b0d3ab..9943665d 100644 --- a/simpegEM/FDEM/FDEM.py +++ b/simpegEM/FDEM/FDEM.py @@ -242,6 +242,7 @@ class ProblemFDEM_e(BaseFDEMProblem): return C.T*mui*C + 1j*omega(freq)*sig + def getADeriv(self, freq, u, v, adjoint=False): sig = self.curModel.transform dsig_dm = self.curModel.transformDeriv @@ -259,7 +260,7 @@ class ProblemFDEM_e(BaseFDEMProblem): :return: RHS """ - j_s = getSource(self,freq) #C.T*mui*C*a + j_s = getSource(self,freq) return -1j*omega(freq)*j_s def calcFields(self, sol, freq, fieldType, adjoint=False): @@ -303,7 +304,11 @@ class ProblemFDEM_b(BaseFDEMProblem): C = self.mesh.edgeCurl iomega = 1j * omega(freq) * sp.eye(self.mesh.nF) - return C*sigI*C.T*mui + iomega + A = C*sigI*C.T*mui + iomega + + if self._makeASymmetric is True: + return mui.T*A + return A def getADeriv(self, freq, u, v, adjoint=False): @@ -332,7 +337,11 @@ class ProblemFDEM_b(BaseFDEMProblem): b_0 = getSource(self,freq) - return -1j*omega(freq)*b_0 + rhs = -1j*omega(freq)*b_0 + if self._makeASymmetric is True: + mui = self.MfMui + return mui.T*rhs + return rhs def calcFields(self, sol, freq, fieldType, adjoint=False): b = sol @@ -421,7 +430,11 @@ class ProblemFDEM_j(BaseFDEMProblem): C = self.mesh.edgeCurl iomega = 1j * omega(freq) * sp.eye(self.mesh.nF) - return C * MeMuI * C.T * MfSigi + iomega + A = C * MeMuI * C.T * MfSigi + iomega + + if self._makeASymmetric is True: + return MfSigi.T*A + return A def getADeriv(self, freq, u, v, adjoint=False): @@ -453,7 +466,12 @@ class ProblemFDEM_j(BaseFDEMProblem): :return: RHS """ j_s = getSource(self,freq) - return -1j*omega(freq)*j_s + rhs = -1j*omega(freq)*j_s + + if self._makeASymmetric is True: + MfSigi = self.MfSigmai + return MfSigi.T*rhs + return rhs def calcFields(self, sol, freq, fieldType, adjoint=False): j = sol