Ejemplo n.º 1
0
  def __init__(self, A_f, numLevels, theta=0.25, verb=0, graph=False):
    timer = Timer('AMG setup')
    self.seqA = [None]*numLevels
    self.updates = [None]*numLevels
    self.downdates = [None]*numLevels
    self.seqA[numLevels-1] = A_f

    tab1 = Tab()
    tab2 = Tab()
    for i in reversed(range(numLevels-1)):
      Debug.msg1(verb, '-------------------------------------------------------------')
      Debug.msg1(verb, tab1, 'coarsening level %d to level %d' % (i+1,i))
      np.set_printoptions(threshold=np.inf)
      Debug.msg4(verb, tab2, 'operator is A[%d]\n' % i, self.seqA[i+1].tolil())
      C = coarsen(self.seqA[i+1], theta = theta, verb=verb)
      Debug.msg2(verb, tab2, '#vertices: %d' % len(C))
      if graph:
        matrixGraph(self.seqA[i+1], C, name='graph-%d.gv' % i)
      Debug.msg1(verb, tab1, 'making update operator: level %d to level %d' % (i+1,i))
      I_up = smoothUpdate(self.seqA[i+1], C, verb)
      Debug.msg1(verb, tab1, 'making downdate operator: level %d to level %d' % (i,i+1))
      I_down = makeDowndate(I_up, verb)
      self.updates[i] = I_up
      self.downdates[i] = I_down
      self.seqA[i] = self.downdates[i]*(self.seqA[i+1]*self.updates[i])
Ejemplo n.º 2
0
def matrixGraph(A, C, name='graph.gv', verb=0):

    g = Graph(filename=name)
    ip = A.indptr
    allVals = A.data
    allCols = A.indices

    M = A.shape[0]

    for i in range(M):
        Debug.msg1(verb, 'i=%d' % i)
        if i in C:
            color = 'lightblue'
        else:
            color = 'lightgrey'
        g.node('%d' % i, '%d' % i, color=color, style='filled')

    for i in range(M):
        cols = allCols[ip[i]:ip[i + 1]]
        for j in cols:
            if i < j:
                g.edge('%d' % i, '%d' % j)

    g.view()
Ejemplo n.º 3
0
  from GoofySquare import GoofySquare1
  from AMGCoarsen import coarsen
  from UniformRectangleMesher import UniformRectangleMesher
  from MPLMeshViewer import MPLMeshViewer

  np.set_printoptions(precision=4)

  mesh = UniformRectangleMesher(0.0, 1.0, 2, 0.0, 1.0, 2)

  beta = 0.0
  load = ConstantFunc(beta*beta)
  (A,b) = DiscretizeDH(mesh, load, beta)

  np.set_printoptions(precision=4)
  verb=0
  Debug.msg1(verb, 'A=\n', A.todense())


  C = coarsen(A)


  I_up = smoothUpdate(A,C)
  I_down = makeDowndate(I_up)

  Debug.msg1(verb, 'Update matrix:')
  Debug.msg1(verb, I_up.todense())

  Debug.msg1(verb, "Update row sums:")
  Debug.msg1(verb, I_up*np.ones(I_up.shape[1]))

  Debug.msg1(verb, 'Downdate matrix:')