-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathHarmonicBasis.py
63 lines (57 loc) · 2.25 KB
/
HarmonicBasis.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 30 16:24:22 2018
@author: lukemcculloch
"""
import numpy as np
import weakref
#https://eli.thegreenplace.net/2009/06/12/
# safely-using-destructors-in-python/
class HarmonicBases(object):
def __init__(self, mesh):
#self.mesh = weakref.ref(mesh)
self.mesh = mesh
def buildClosedPrimalOneForm(self, hgenerator, edgeIndex):
"""
Builds a closed, but not exact, primal 1-form ω.
private
method module:Projects.HarmonicBases#buildClosedPrimalOneForm
param {module:Core.Halfedge[]} hgenerator: An array of halfedges
representing a homology generator of the input mesh.
@link https://en.wikipedia.org/wiki/Homology_(mathematics)#Surfaces homology generator}
param {Object} edgeIndex: A dictionary mapping
each edge of the input mesh to a unique index.
returns {module:LinearAlgebra.DenseMatrix}
#"""
E = len(self.mesh.edges)
omega = np.zeros((E,1),float)
for h in hgenerator:
i = edgeIndex[h.edge]
if h.edge.anyHalfEdge is h:
sign = 1
else:
sign = -1
omega[i,0] = sign
return omega
def compute(self, hodgeDecomposition):
"""
Computes the harmonic bases [γ1, γ2 ... γn] of the input mesh.
method module:Projects.HarmonicBases#compute
param {module:Projects.HodgeDecomposition} hodgeDecomposition:
A hodge decomposition object that
can be used to compute the exact component
of the closed, but not exact, primal
1-form ω.
returns {module:LinearAlgebra.DenseMatrix[]}
"""
gammas = []
generators = self.mesh.generators
if len(generators)>0:
edgeIndex = self.mesh.enumerateEdges
for generator in generators:
omega = self.buildClosedPrimalOneForm(
generator, edgeIndex)
dAlpha = hodgeDecomposition.computeExactComponent(omega)
gammas.append(omega-dAlpha)
return gammas