All Projects → jcorbino → mole

jcorbino / mole

Licence: GPL-3.0 license
Mimetic Operators Library Enhanced

Programming Languages

matlab
3953 projects
C++
36643 projects - #6 most used programming language
TeX
3793 projects
Makefile
30231 projects
M
324 projects
c
50402 projects - #5 most used programming language
QMake
1090 projects

Projects that are alternatives of or similar to mole

NAGPythonExamples
Examples and demos showing how to call functions from the NAG Library for Python
Stars: ✭ 46 (+206.67%)
Mutual labels:  numerical-methods
dh-core
Functional data science
Stars: ✭ 123 (+720%)
Mutual labels:  numerical-methods
Kinetic.jl
Universal modeling and simulation of fluid dynamics upon machine learning
Stars: ✭ 82 (+446.67%)
Mutual labels:  pde
FinEtools.jl
Finite Element tools in Julia
Stars: ✭ 126 (+740%)
Mutual labels:  numerical-methods
GalerkinSparseGrids.jl
Sparse Grid Discretization with the Discontinuous Galerkin Method for solving PDEs
Stars: ✭ 39 (+160%)
Mutual labels:  pde
pyqentangle
Quantum Entanglement in Python
Stars: ✭ 16 (+6.67%)
Mutual labels:  numerical-methods
PyCannyEdge
Educational Python implementation of the Canny Edge Detector
Stars: ✭ 31 (+106.67%)
Mutual labels:  numerical-methods
ELEMENTS
The C++ ELEMENTS library contains a suite of sub-libraries to support mathematical functions (elements), data representations (MATAR), and novel mesh classes (geometry and SWAGE) to support a very broad range of element types, numerical methods, and mesh connectivity data structures useful for computational physics and engineering.
Stars: ✭ 13 (-13.33%)
Mutual labels:  numerical-methods
poisson-image-blending
🎨 Web-based implementation of the poisson image blending in HTML5 Canvas / JavaScript
Stars: ✭ 22 (+46.67%)
Mutual labels:  numerical-methods
SGpp
SG⁺⁺ – the numerical library for Sparse Grids in all their variants.
Stars: ✭ 59 (+293.33%)
Mutual labels:  pde
herbie
Optimize floating-point expressions for accuracy
Stars: ✭ 614 (+3993.33%)
Mutual labels:  numerical-methods
spfpm
Package for performing fixed-point, arbitrary-precision arithmetic in Python.
Stars: ✭ 61 (+306.67%)
Mutual labels:  numerical-methods
numerical-methods-python
Numerical methods implementation in Python.
Stars: ✭ 65 (+333.33%)
Mutual labels:  numerical-methods
BenchmarksPythonJuliaAndCo
Benchmark(s) of numerical programs with Python (and Scipy, Pythran, Numba), Julia and C++.
Stars: ✭ 19 (+26.67%)
Mutual labels:  numerical-methods
lubeck
High level linear algebra library for Dlang
Stars: ✭ 57 (+280%)
Mutual labels:  numerical-methods
QuantPDE
A high-performance, open-source, header-only C++(>=11) library for pricing derivatives.
Stars: ✭ 42 (+180%)
Mutual labels:  numerical-methods
Comp PhysChem Basic
A mini-course offered to Undergrad chemistry students
Stars: ✭ 19 (+26.67%)
Mutual labels:  numerical-methods
GurobiLink
Wolfram Language interface to the Gurobi numerical optimization library
Stars: ✭ 16 (+6.67%)
Mutual labels:  numerical-methods
nmmn
Miscellaneous methods for: astronomy, dealing with arrays, statistical distributions, computing goodness-of-fit, numerical simulations and much more
Stars: ✭ 16 (+6.67%)
Mutual labels:  numerical-methods
SciLean
Scientific computing in Lean 4
Stars: ✭ 86 (+473.33%)
Mutual labels:  numerical-methods

MOLE: Mimetic Operators Library Enhanced

1: Description

MOLE is a high quality (C++ & MATLAB) library that implements high-order mimetic operators to solve partial differential equations. It provides discrete analogs of the most common vector calculus operators: Gradient, Divergence, Laplacian, Bilaplacian and Curl. These operators (matrices) act on staggered grids (uniform and nonuniform) and they satisfy local and global conservation laws.

The mathematics is based on the work of [Corbino and Castillo, 2020]. However, the user may find useful previous publications such as [Castillo and Grone, 2003], in which similar operators are derived using a matrix analysis approach.

2: Licensing

MOLE is distributed under a GNU General Public License, please refer to the LICENSE file for more details.

3.1: Installation (Linux)

To use MOLE (C++ version), you need to have Armadillo C++ http://arma.sourceforge.net and SuperLU https://portal.nersc.gov/project/sparse/superlu installed on your computer.

Assuming a working installation of SuperLU (sudo apt install libsuperlu-dev or sudo yum install SuperLU-devel), follow these steps:

wget http://sourceforge.net/projects/arma/files/armadillo-10.2.1.tar.xz

tar xvf armadillo-10.2.1.tar.xz

cd armadillo-10.2.1

NOTE: We suggest to use the latest stable version that is available.

Undefine ARMA_USE_LAPACK and ARMA_USE_BLAS (in case you don't have them installed), then define ARMA_USE_SUPERLU and ARMA_USE_OPENMP in include/armadillo_bits/config.hpp. Make sure that you have cmake and g++ installed before executing:

./configure

make

this will create libarmadillo.so.

Now go to mole/ and set the path to Armadillo in the Makefile, e.g. ARMA = /home/johnny/armadillo-10.2.1.

Lastly, build MOLE by executing:

make

a static library named libmole.a will get created. From this point you just need to include mole.h in your projects and specify the location of libmole.a to the linker.

For the MATLAB version of our library, the only dependency is to have MATLAB installed. The two implementations of MOLE (C++ & MATLAB) are independent, that is, you don't need to build the C++ version if you are just interested in using MOLE from MATLAB.

3.2: Installation (MacOS)

First, download Eigen from https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz, and Armadillo C++ from http://arma.sourceforge.net.

Extract Eigen and Armadillo, you can use the following command for each compressed file:

tar xvf name_of_the_file_including_extension --directory target_directory

Now, proceed to download MOLE https://github.com/jcorbino/mole/archive/refs/heads/master.zip and extract the file:

unzip master.zip –d mole

after that, enter MOLE's directory cd mole and edit the following files:

mole_C++/utils.cpp (line 4) to be simply #include <Eigen/SparseLU>

mole_C++/Makefile (line 18) should be CXXFLAGS = -O3 -std=c++11

same for (line 19) of examples_C++/Makefile.

Lastly, (line 25) of examples_C++/Makefile should not include -larmadillo.

At this point, you just need to edit the Makefile located in MOLE's root directory by setting the correct path to each dependency (Eigen and Armadillo), that is:

(Line 2) of that Makefile should look like: ARMA = ../../armadillo-10.7.0 and (line 7) should be EIGEN = ../../eigen-3.4.0.

Now, just build the library and its examples by simply executing make from MOLE's root folder.

IMPORTANT: In order to build any of the aforementioned packages, the operating system needs to have g++ (GNU Compiler) and make (utility) installed. Those two packages will get installed when you set up Xcode on your Mac: xcode-select --install.

4: Documentation

The folder doc_MATLAB contains generated documentation about the MATLAB version. It was generated with a tool called m2html which can be found here: https://www.artefact.tk/software/matlab/m2html.

To generate the C++ documentation, just execute:

doxygen Doxyfile (requires Doxygen and Graphviz)

this will create a folder called doc_C++ containing a set of html files. Please refer to the index.html file to start browsing the documentation.

5: Citations

Please cite our work if you use MOLE in your research and/or software. Citations are useful for the continued development and maintenance of the library https://www.sciencedirect.com/science/article/abs/pii/S0377042719303231

View mole on File Exchange

Obtained with curvilinear operators Obtained with curvilinear operators Obtained with curvilinear operators Obtained with curvilinear operators Obtained with curvilinear operators Obtained with curvilinear operators Obtained with curvilinear operators

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].