Skip to main content

Emperical Method of Fundamental Solutions solver for Python.

Project description

empirical README

Getting Started

Check out the examples directory; initial development will focus on getting
these working first.

Getting the latest version

If the pypi releases are not up-to-date enough for your tastes, or if you'd
like to see how the development is moving along, visit

Empirical Interpolation

The empirical interpolation module included has the capability to handle
multiple dimensions in both variables and parameters.

Why does this project exist?

The focus of this project is to create a reduced basis solver for collocation
problems. Initially, the collocation problems will be formulated using the
method of fundamental solutions, but ideally the framework will allow for easy
extension to other collocation formulations as well.

There is an existing solver for a variety of methods using MATLAB codes, called
mpspack. (See the 'Thanks' section for details). The mfs code base is basically
a port of this code to Python.

Since mpspack is available under the GPLv3, there should be no legal issues
with creating a Python version. It should be a benefit to the mathematical
world to make code like this more widely available. Unfortunately, since
this project has no official affiliation with mpspack, or its creators Alex
Barnett and Timo Betcke, it will make it harder to keep up with any updates
or additions to their library. At the time of inception for this library, I
used the 1.31 version of mpspack.

The biggest reason to port mpspack to Python is the fact that Python is
free, and MATLAB is expensive. For my Master's thesis, I need to use their
code, but I also need to run it a huge number of times. While my school does
have MATLAB, I did not find it simple to get MATLAB to run in parallel. This
problem seems to stem from the fact that each running process must have it's
own license; my school does not have an unlimited number of such licenses,
and even if they did, I have had lots of trouble getting it to work.

The speed impacts are not anticipated to be significant; numpy benchmarks do
not typically have much difference from similar MATLAB code.


Special thanks to Alex Barnett and Timo Betcke, for their MPSPACK software.

Originally, much of the code base is based upon their project, which they have
distributed MATLAB codes for under the GPLv3. They have a fantastic design and
a well documented, maintained, and complete package, at

legendre-gauss-lobatto algorithm
Credit for the LGL algorithm goes to Greg von Winckel. Originally implemented in
MATLAB, I found the algorithm at



* Improved the empirical interpolation interface.
- It no longer tries to perform interpolations, but leaves that to the
calling function.
- More and improved examples are added, copying a reference text, see
Aanonsen, "Empirical Interpolation with Application to Reduced Basis
Approximations", Chapter 3. 2009, Norwegian University of Science and

* Quadrature points:
- Added a linear quadrature function.
- Added a function for genericly transforming quadrature from [-1, 1] to some
other range [a, b].
- Added a common selection method for quadratures.

* Added a couple of mesh classes for convenience. Currently only 1- and 2-
dimensional classes are implemented, but if they prove useful then a generic
version may be called for.

* Removed some of the interpolation code. It has been deemed relatively

* Various asthetics:
- Added pylint configuration file, and improved from some of the suggestions.
- Made various improvements to the testing functions.


What works:

* Basic support for empirical interpolation method is implemented. The API may
change significantly in future releases.

* Method of fundamental solutions, along with basic domain/segment codes.

* Quadrature generators all pass some basic tests (code is thanks to mpspack
and lglnodes.m):
- Periodic trapezoid
- Trapezoid
- Gaussian
- Clenshaw-Curtis
- Legendre-Gauss-Lobatto

* Interpolation codes have been written, using the following algorithms:
- Newton interpolating polynomial (nested form)
- Lagrange interpolating polynomial (uses slow method for cardinal
polynomials, probably numerically unstable for large number of nodes)
- Lagrange bivariate (also uses a slow method for cardinal polynomials, does
not yet interface well with the EI class)

* Example scripts for empirical interpolation and, method of fundamental

* A variety of unit tests have been implemented.

* A few of the different classes (Domain, Segment, Scattering) can plot some of
their features using matplotlib.

* Restructured package layout (and changed name from emfs to empirical).


* Initial version

What works:

* The examples/ script is a port of the mpspack script of the same
name. While it is slightly different in some ways, it does successfully
calculate a plane wave scattering problem, and display the resultant fields.

* All of the unit tests written so far run successfully. However, there is only
60% coverage with these, and even that is not a thorough coverage of all the
methods called.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

empirical-0.2.tar.gz (59.2 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page