def volumeStiffness(self): ''' The contribution of the volume terms to the stiffness matrix (should be zero if using Trefftz basis functions)''' E = pms.ElementMatrices(self.problem.mesh) L2K = self.weightedassembly.assemble([[E.I, E.Z],[E.Z, E.Z]]) H1 = self.volumeassembly.assemble([[E.Z,E.Z],[E.Z, E.I]]) AJ = pms.AveragesAndJumps(self.problem.mesh) B = pms.sumfaces(self.problem.mesh, self.internalassembly.assemble([[AJ.Z,AJ.Z],[AJ.I,AJ.Z]])) return H1 - L2K - B
def internalStiffness(self): ''' The contribution of the internal faces to the stiffness matrix''' jk = 1j * self.problem.k AJ = pms.AveragesAndJumps(self.problem.mesh) B = self.problem.mesh.boundary # This is the integration by parts term that generally gets folded into the boundary data, but is more appropriate here SI = self.internalassembly.assemble([[jk * self.alpha * AJ.JD, -AJ.AN - B], [AJ.AD + B, -(self.beta / jk) * AJ.JN]]) SFSI = pms.sumfaces(self.problem.mesh,SI) return SFSI
def stiffness(self): delta = self.delta dik = delta / (1j * self.k) B = self.B # The contribution of the boundary conditions SB = self.bdyassembly.assemble([[(1-delta) * B, (1-delta)*B], [-dik * B, -dik *B]]) # SB = self.bdyassembly.assemble([[-(1-delta) * B, (1-delta)*B], # [dik * B, -dik *B]]) return pms.sumfaces(self.mesh,SB)
def getPerturbation(self): return pms.sumfaces(self.mesh, self.internalassembly.assemble([[self.B, self.Z], [self.B, self.Z]]))