def __init__(self, operator, pid=0, label=""): Epetra.Operator.__init__(self) from tools import RealOperator self.__comm = Epetra.PyComm() self.__label = label self.__pid = pid if self.__comm.MyPID() == pid: if operator.dtype == 'complex128' or operator.dtype == 'complex64': self.__operator = RealOperator(operator) else: self.__operator = operator else: self.__operator = None if self.__comm.MyPID() == pid: num_my_elems_domain = self.__operator.shape[1] num_my_elems_range = self.__operator.shape[0] else: num_my_elems_domain = 0 num_my_elems_range = 0 self.__rangeMap = Epetra.Map(-1, num_my_elems_range, 0, self.__comm) self.__domainMap = Epetra.Map(-1, num_my_elems_domain, 0, self.__comm)
def __init__(self,operator,pid=0,label=""): Epetra.Operator.__init__(self) from tools import RealOperator self.__comm = Epetra.PyComm() self.__label = label self.__pid = pid if self.__comm.MyPID() == pid: if operator.dtype == 'complex128' or operator.dtype == 'complex64': self.__operator = RealOperator(operator) else: self.__operator = operator else: self.__operator = None if self.__comm.MyPID() == pid: num_my_elems_domain = self.__operator.shape[1] num_my_elems_range = self.__operator.shape[0] else: num_my_elems_domain = 0 num_my_elems_range = 0 self.__rangeMap = Epetra.Map(-1,num_my_elems_range,0,self.__comm) self.__domainMap = Epetra.Map(-1,num_my_elems_domain,0,self.__comm)
class PyTrilinosOperator(Epetra.Operator): def __init__(self,operator,pid=0,label=""): Epetra.Operator.__init__(self) from tools import RealOperator self.__comm = Epetra.PyComm() self.__label = label self.__pid = pid if self.__comm.MyPID() == pid: if operator.dtype == 'complex128' or operator.dtype == 'complex64': self.__operator = RealOperator(operator) else: self.__operator = operator else: self.__operator = None if self.__comm.MyPID() == pid: num_my_elems_domain = self.__operator.shape[1] num_my_elems_range = self.__operator.shape[0] else: num_my_elems_domain = 0 num_my_elems_range = 0 self.__rangeMap = Epetra.Map(-1,num_my_elems_range,0,self.__comm) self.__domainMap = Epetra.Map(-1,num_my_elems_domain,0,self.__comm) def Label(self): return self.__label def OperatorDomainMap(self): return self.__domainMap def OperatorRangeMap(self): return self.__rangeMap def Comm(self): return self.__comm def ApplyInverse(self,x,y): return -1 def HasNormInf(self): return False def NormInf(self): return -1 def SetUseTranspose(self, useTranspose): return -1 def UseTranspose(self): return 0 def Apply(self,x,y): try: if self.__comm.MyPID() == self.__pid: xvec = x.ExtractView().T yvec = y.ExtractView().T if len(xvec.shape) == 1: yvec[:] = self.__operator.matvec(xvec) else: yvec[:] = self.__operator.matmat(xvec) return 0 except Exception, e: print "Exceptin in "+self.__label+".apply:" print e return -1
class PyTrilinosInverseOperator(Epetra.Operator): def __init__(self, operator, pid=0, label=""): Epetra.Operator.__init__(self) from tools import RealOperator self.__comm = Epetra.PyComm() self.__label = label self.__pid = pid if self.__comm.MyPID() == pid: if operator.dtype == 'complex128' or operator.dtype == 'complex64': self.__operator = RealOperator(operator) else: self.__operator = operator else: self.__operator = None if self.__comm.MyPID() == pid: num_my_elems_domain = self.__operator.shape[1] num_my_elems_range = self.__operator.shape[0] else: num_my_elems_domain = 0 num_my_elems_range = 0 self.__rangeMap = Epetra.Map(-1, num_my_elems_range, 0, self.__comm) self.__domainMap = Epetra.Map(-1, num_my_elems_domain, 0, self.__comm) def Label(self): return self.__label def OperatorDomainMap(self): return self.__domainMap def OperatorRangeMap(self): return self.__rangeMap def Comm(self): return self.__comm def Apply(self, x, y): return -1 def HasNormInf(self): return False def NormInf(self): return -1 def SetUseTranspose(self, useTranspose): return -1 def UseTranspose(self): return 0 def ApplyInverse(self, x, y): try: if self.__comm.MyPID() == self.__pid: xvec = x.ExtractView().T yvec = y.ExtractView().T if len(xvec.shape) == 1: yvec[:] = self.__operator.matvec(xvec) else: yvec[:] = self.__operator.matmat(xvec) return 0 except Exception, e: print "Exceptin in " + self.__label + ".apply:" print e return -1