- add
TracePlot
class - add
MeshPlot
class - add
GlobalFunctionPlot
class - add
LocalFunctionPlot
class - add
get_quad_dict()
function - make
edgespaces
an optional parameter inLocalFunctionSpace
init method
-
examples/ex1d-hat-tile.ipynb
: add example of hat tile local basis functions
- deprecate
unittest
in favor ofpytest
- add
test_edge_space
- add
test_solver
- use enumerate to replace
range(len(...))
loops - rectify nested min/max statements
-
locfun.locfunsp
: make interior value calculation optional - use
functools.partial
to pass logarithmic terms to integrators -
locfun.poly.poly
: use list of tuples for polynomial initialization - clean up integration methods
- add safety check to
add_edge()
method inPlanarMesh
-
mesh.edgelib.teardrop
: passalpha
as keyword argument -
solver.solver
:- move color printing to separate module
- move plotting functions to separate module
- add init file for
util
subpackage - rename classes to use CapWords convention
- fix invalid names introduced by class renaming
- fix type hints in tests
- fix colorbar position in contour plots
- change exceptions to specific error types
- document TODO comments in
doc/TODO.md
- modify
CHANGELOG.md
,TODO.md
,WISHLIST.md
to reflect semantic versioning- future versions will use
git
branches to isolate development - git tags and GitHub releases will be used to track versions
- small commits get a descriptive message
- branch merges get a release number
- future versions will use
- rename
id
variables to eitheridx
orkey
to avoid shadowing built-ins
- write docstrings
- modules
- classes
- methods
- functions
- add
__init__.py
tosolver
subpackage
- use generators where appropriate
- fix imports
- use f-strings
- fix spelling errors
- use
enumerate
in loops where appropriate - fix superfluous
return
statements - fix unnecessary
else
statements - change underscore methods in
edgelib
to capitalized- update
edge
class to reflect change - update
ex0
example to reflect change
- update
- add type hints
- functions
- methods
- classes
- fix other
pylint
andmypy
errors - update
pyproject.toml
- rename
setup.cgf
to.flake8
(untilflake8
supportspyproject.toml
) - update
devtools/convert_examples.sh
to support being executed from any directory
- added support for
pytest
- added
pytest
and dependencies torequirements-dev.txt
- added
pytest
parameters topyproject.toml
- Reformatted with
black
andisort
- Linted with
flake8
andpylint
(ongoing) - Type-checked with
mypy
(ongoing) - Added
requirements.txt
andrequirements-dev.txt
- Added
CHECKLIST.md
- Added
setup.cnf
,pyproject.toml
- Added local function spaces (
locfunspace
) tolocfun/
- Class containing a basis of the local Poisson space
$V_p(K)$
- Class containing a basis of the local Poisson space
- Added edge spaces (
edgespace
) tolocfun/
- Added support for high order (including
$p > 3$ , unstable for some edges) - Added barycentric coordinates and Legendre polynomials to
poly/
- High order edge spaces obtained by traces of integrated Legendre polynomials
- Added support for high order (including
- Overhaul of
locfun
traces- Local function traces are by default considered a list of
polynomial
s, one for each edge - This list of
polynomial
s is stored intrace_polys
attribute - Trace values are computed only as needed
- Trace values can be set manually as before
- The flag
has_poly_trace
can be set toFalse
if working functions with functions that do not have a trace that is the trace of a polynomial on each edge -
locfun
objects are now initialized with the Laplacian polynomial, the list of polynomial traces, and an option
- Local function traces are by default considered a list of
- Overhaul of Nystrom solver
- Replaced
nystrom
module withnystrom_solver
class - Overhead of constructing the Nystrom matrix is now consolidated into the constructor
- Harmonic conjugate computations are now handled as method of
nystrom_solver
- Replaced
- Added
vert
class- Vertices of a mesh
- Overhaul of
edge
class- Added topological properties needed for mesh construction
- Parameterization values computed and stored only as needed
- Removed dependence on
copy
package - Added
integrate_over_edge
method - Added
global_orientation
attribute
- Overhaul of
cell
class- Added topological properties needed for mesh construction
- Edge list replaced with
closed_contour
list
- Added
PlanarMesh
class- Initialized as a collection of
edge
andvert
objects -
cell
objects are constructed in situ using topological information fromedge
objects
- Initialized as a collection of
- Added
solver
class- Handles all aspects of solving a PDE on a mesh
- Initialized with a
PlanarMesh
object and abilinear_form
object -
solve
method solves the PDE on the mesh -
plot
method plots the solution
- Added
bilinear_form
class- Stores info about the PDE to be solved
- Also stores the right-hand side of the PDE as a polynomial
- Added
global_function_space
class to manage global function space - Added
global_key
class to manage continuity across cells
- Moved
quad
module tomesh/
frommesh/quad/
- Added
polynomial
functionality- Added division of a polynomial by a scalar
- Added powers of polynomials
- Added polynomial composition
- Changed directory management in Jupyter notebook examples
- Added
devtools/
directory - Added
doc/
directory - Added
.py
versions of examples- Thanks to
nbconvert
for making this easy!
- Thanks to
- Added
ex2-pacman-fem
example - Updated tests and examples
- Moved examples to a dedicated
examples
directory- Added "Examples used in publications" to
README
- Added "Examples used in publications" to
- Introduced API for more convenient user experience
- Users call
pf.thing
rather thanpf.foo.bar.baz.thing
- Updated all examples to reflect API change
- Restructured
puncturedfem
directory
- Users call
- Polynomial overhaul
- Changed initialization method to something sensible
set()
method behaves as a re-initializer- Added support for polynomial-scalar addition for
+
,+=
,-
,-=
operators - Added support for
*=
operator - Moved
integrate_over_cell()
method tolocfun.int_poly
- Unit tests
- Relocated
test
to parent directory - Polynomials:
test_poly.py
- Local functions:
test_locfun.py
- Relocated
- Added
intval
module tolocfun
for computing interior values - Added
get_conjugable_part()
method tolocfun
that returns the trace of$\psi$ - Renamed
is_in_interior()
method forcontour
tois_in_interior_contour()
- Added
is_in_interior_cell()
method tocell
- Added interior value demo to Punctured Square, Pac-Man, and Ghost examples
- Added ex1b-pacman.ipynb
- Added ex1c-ghost.ipynb
- Updated ex1a-square-hole.ipynb with more accurate reference values
- Added
compute_h1()
andcompute_l2()
methods tolocfun
- Added
integrate_over_cell()
method topolynomial
- Added methods to
contour
andcell
to integrate over the boundary without multiplying by the norm of the derivative (i.e. 'preweighted' integrands) - Monomials now default to zero monomial
- Fixed evaluation of zero
monomial
and zeropolynomial
to return same size as input - Removed
ext_pt
field fromcell
- Added
id
field tocontour
- Added
get_integrator()
method tocontour
(cell
inherits) - Added
neumann
module tonystrom
for solving Neumann problem- Modified
harmconj
module accordingly
- Modified
- Completely overhauled anti-Laplacian calculation for punctured cells
- ex1: "Square with circular hole" updated
- Added /poly subpackage
-
monomial
andpolynomial
objects
-
- Added locfun/ subpackage
-
locfun
object holds all data for local function$v\in V_p(K)$
-
- Added
ext_pt
field tocell
object, which is an exterior point such that centering the origin atext_pt
placing the cell strictly in the first quadrant
- MATLAB code rewritten in Python to increase accessibility
- Examples presented with Jupyter Notebook
- ex0-mesh-building: defining edges, cells, and meshes
-
ex1-inner-prod:
compute
$H^1$ and$L^2$ (semi-)inner products on punctured cell
- New subpackages/modules
- quad: trapezoid, Kress, and Martensen quadrature objects
-
mesh: mesh construction tools
- edge: parameterization of an edge
- contour: collection of edges forming a simple closed contour
- cell: mesh cell (subclass of contour)
-
plot: functions for
- plot edges, contours, cell boundaries
- trace of a function along a collection of edges
-
nystrom: Nystr$\text{"o}$m method for solving integral equations
- includes single and double layer operators
- block system support
-
d2n: Dirichlet-to-Neumann map for harmonic functions
- computation of harmonic conjugate
- FFT (anti-)derivatives
- antilap: tools to compute anti-Laplacians of harmonic functions
- Added unit tests to puncturedfem/test/
- test_harmconj for harmonic conjugates
- test_fft_deriv for FFT differentiation
Only a simple diffusion operator (the Laplacian) is currently supported. Dirichlet and mixed Dirichlet-Neumann boundary conditions are available, but are assumed to be homogeneous. Used to run a simple "pegboard" example.