All Projects → feelpp → Feelpp

feelpp / Feelpp

Licence: other
💎 Feel++: Finite Element Embedded Language and Library in C++

Programming Languages

metaprogramming
66 projects

Projects that are alternatives of or similar to Feelpp

Mfem
Lightweight, general, scalable C++ library for finite element methods
Stars: ✭ 667 (+191.27%)
Mutual labels:  parallel-computing, finite-elements, scientific-computing, fem, high-performance-computing
PyMFEM
Python wrapper for MFEM
Stars: ✭ 91 (-60.26%)
Mutual labels:  parallel-computing, scientific-computing, fem, finite-elements
Elmerfem
Official git repository of Elmer FEM software
Stars: ✭ 523 (+128.38%)
Mutual labels:  parallel-computing, finite-elements, fem
Sundials
SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. This is a mirror of current releases, and development will move here eventually. Pull requests are welcome for bug fixes and minor changes.
Stars: ✭ 194 (-15.28%)
Mutual labels:  parallel-computing, scientific-computing, high-performance-computing
PSyclone
Domain-specific compiler for Finite Difference/Volume/Element Earth-system models in Fortran
Stars: ✭ 67 (-70.74%)
Mutual labels:  parallel-computing, high-performance-computing, finite-elements
Solidspy
2D-Finite Element Analysis with Python
Stars: ✭ 142 (-37.99%)
Mutual labels:  finite-elements, scientific-computing, fem
Opencoarrays
A parallel application binary interface for Fortran 2018 compilers.
Stars: ✭ 151 (-34.06%)
Mutual labels:  parallel-computing, scientific-computing, high-performance-computing
Moose
Multiphysics Object Oriented Simulation Environment
Stars: ✭ 652 (+184.72%)
Mutual labels:  finite-elements, fem, object-oriented
Ngsolve
Netgen/NGSolve is a high performance multiphysics finite element software. It is widely used to analyze models from solid mechanics, fluid dynamics and electromagnetics. Due to its flexible Python interface new physical equations and solution algorithms can be implemented easily.
Stars: ✭ 171 (-25.33%)
Mutual labels:  parallel-computing, finite-elements, fem
P4pdes
C and Python examples from my book on using PETSc to solve PDEs
Stars: ✭ 67 (-70.74%)
Mutual labels:  parallel-computing, scientific-computing
Brieffiniteelement.net
BriefFiniteElementDotNET (BFE.NET) is a library for linear-static Finite Element Method (FEM) analysis of solids and structures in .NET
Stars: ✭ 81 (-64.63%)
Mutual labels:  finite-elements, fem
Boinc
Open-source software for volunteer computing and grid computing.
Stars: ✭ 1,320 (+476.42%)
Mutual labels:  scientific-computing, high-performance-computing
Coretran
An easy to follow library to make Fortran easier in general with wrapped interfaces, sorting routines, kD-Trees, and other algorithms to handle scientific data and concepts. The library contains core fortran routines and object-oriented classes.
Stars: ✭ 59 (-74.24%)
Mutual labels:  scientific-computing, object-oriented
Pwrake
Parallel Workflow extension for Rake, runs on multicores, clusters, clouds.
Stars: ✭ 57 (-75.11%)
Mutual labels:  parallel-computing, scientific-computing
Nutils
The nutils project
Stars: ✭ 40 (-82.53%)
Mutual labels:  finite-elements, scientific-computing
Core
parallel finite element unstructured meshes
Stars: ✭ 124 (-45.85%)
Mutual labels:  parallel-computing, finite-elements
Batchtools
Tools for computation on batch systems
Stars: ✭ 127 (-44.54%)
Mutual labels:  parallel-computing, high-performance-computing
Nasoq
NASOQ:Numerically Accurate Sparsity Oriented QP Solver
Stars: ✭ 30 (-86.9%)
Mutual labels:  scientific-computing, high-performance-computing
Pyhpc Benchmarks
A suite of benchmarks to test the sequential CPU and GPU performance of most popular high-performance libraries for Python.
Stars: ✭ 119 (-48.03%)
Mutual labels:  parallel-computing, high-performance-computing
Pysph
A framework for Smoothed Particle Hydrodynamics in Python
Stars: ✭ 223 (-2.62%)
Mutual labels:  scientific-computing, high-performance-computing

:feelpp: Feel++ :cpp: C++ = {feelpp}: Finite Element Embedded Library in {cpp} Feel++ Consortium https://github.com/feelpp[@feelpp]

:toc: macro

:toclevels: 2 :stem: latexmath :uri-rel-file-base: link: :uri-rel-tree-base: link: ifdef::env-site[] :uri-rel-file-base: {uri-repo}/blob/develop/ :uri-rel-tree-base: {uri-repo}/tree/develop/ endif::[] ifndef::env-github[:icons: font] ifdef::env-github[] :status: :outfilesuffix: .adoc :caution-caption: 🔥 :important-caption: ❗️ :note-caption: 📎 :tip-caption: 💡 :warning-caption: ⚠️ :!toc-title: :badges: endif::[] ifdef::env-github,env-browser[:outfilesuffix: .adoc] // URIs: :uri-org: https://github.com/feelpp :uri-repo: {uri-org}/feelpp :uri-www: http://www.feelpp.org :uri-project: http://book.feelpp.org :uri-docs: {uri-project}/ :uri-news: {uri-www}/news :uri-manpage: {uri-project}/man/asciidoctor :uri-help-base: https://help.github.com/articles :uri-contribute: {uri-rel-file-base}CONTRIBUTING.adoc :uri-license: {uri-rel-file-base}LICENSE.adoc :uri-issues: {uri-repo}/issues :uri-contributors: {uri-repo}/graphs/contributors :uri-fork-help: {uri-help-base}/fork-a-repo :uri-branch-help: {uri-fork-help}#create-branches :uri-pr-help: {uri-help-base}/using-pull-requests :uri-gist: https://gist.github.com :uri-freesoftware: https://www.gnu.org/philosophy/free-sw.html

ifdef::badges[] image:https://github-basic-badges.herokuapp.com/release/feelpp/feelpp.svg[link=https://github.com/feelpp/feelpp/releases/latest] image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/feelpp"] image:https://api.codacy.com/project/badge/Grade/ee741577e2454024a18d44603be62a6d[link="https://www.codacy.com/app/prudhomm/feelpp?utm_source=github.com&utm_medium=referral&utm_content=feelpp/feelpp&utm_campaign=Badge_Grade"] endif::[]

toc::[]

link:http://www.feelpp.org[{feelpp}] is a {cpp} library for continuous or discontinuous Galerkin methods including finite element method(FEM), spectral element methods(SEM), reduced basis methods, discontinuous galerkin methods (DG and HDG) in 1D 2D and 3D and in parallel. Checkout <>, {feelpp} <> and some <>.

== Releases

The latest release of {feelpp} is https://github.com/feelpp/feelpp/releases/latest[here] image:https://github-basic-badges.herokuapp.com/release/feelpp/feelpp.svg[link=https://github.com/feelpp/feelpp/releases/latest]

{feelpp} has a DOI provided by Zenodo. Please use this to cite {feelpp} if you use it in a publication image:https://zenodo.org/badge/4392591.svg["DOI",link=https://zenodo.org/badge/latestdoi/4392591]

{feelpp} is split into three components:

feelpp:: library and tools feelpp-toolboxes:: mono and multiphysics toolboxes (cfd, csm, heat transfer, fsi, heat and fluid, hdg(poisson and elasticity), thermo-electric and maxwell) feelpp-mor:: model order reduction applications and tools

These components are built and delivered in two distribution channels: stable and latest. The channels are currently available via Docker containers, Debian and Ubuntu packages.

stable:: Once a year, sometimes more, we make a release of {feelpp} and it becomes the basis of the stable channel. The channel is updated infrequently, only for a new release or a major bug.

latest:: {feelpp} has a very active development and changes are made everyday with the research done by http://www.cemosis.fr[Cemosis] and its collaborators. Each commit in the main development branch triggers a new full build with more than 800 tests from unit test to full pde solves.

Instructions are available for http://docs.feelpp.org/user/0.107/install/containers/[docker] and http://docs.feelpp.org/user/0.107/install/distributions/[debian and ubuntu packages].

WARNING: Providing Debian and ubuntu packages for feelpp-toolboxes and feelpp-mor is a work in progress.

[[cipkg]] === Packaging health

{feelpp} supports Docker, Debian and Ubuntu packaging.

The following tables present the Continuous Integration status of the packaging of {feelpp}.

.Build status for each component for the latest channel of Long Term Support distribution |=== | Component | Docker | Debian/Buster(10.8) | Ubuntu/Bionic(18.04 LTS) | Ubuntu/Focal(20.04 LTS)

| feelpp | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/feelpp"] | image:https://badge.buildkite.com/8b8635a2a63929d7d2087b5169d8d6e4e1e3d5417ee83d0754.svg?branch=develop[https://buildkite.com/feelpp/pkg-feelpp] | image:https://badge.buildkite.com/62d58af01a599314b4ecf5751cedc062d386fbb636d0039b32.svg?branch=develop[https://buildkite.com/feelpp/pkg-feelpp-bionic] | image:https://badge.buildkite.com/001f62767f40f08e353509962eff783c0e2318429356728e6f.svg?branch=develop[https://buildkite.com/feelpp/pkg-feelpp-focal]

| feelpp-toolboxes | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/feelpp"] | image:https://badge.buildkite.com/90ee47c7b5c62a516f7ef0911058f7a41626ccd752147119f0.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-toolboxes-buster"] | image:https://badge.buildkite.com/62d58af01a599314b4ecf5751cedc062d386fbb636d0039b32.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-toolboxes-bionic"] | image:https://badge.buildkite.com/c9763aa25f307c5d404c9354780d4d0eca94d0c0c6343b5cc2.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-toolboxes-focal"]

| feelpp-mor | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/feelpp"] | | | image:https://badge.buildkite.com/67c2155af0d97f29f825af63b112cfa79db0da6f5b12cbea69.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-mor-focal"] |===

.Build status for each component for the latest channel Ubuntu non-LTS and Debian testing/unstable diztributions |=== | Component | Debian/Sid(unstable) | Ubuntu/Groovy(20.10) | Ubuntu/Hirsute Hippo(21.04)

| feelpp | image:https://badge.buildkite.com/368edd7805ed486da3c0f4498610120516f3a1a12dd975b34e.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-sid"] | image:https://badge.buildkite.com/354837a786c31536c7fd2d5f60192f790c88d17e3c6b767b5f.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-groovy"] | image:https://badge.buildkite.com/c8e5435a675ee5415a1ed80c660da19d9117738997295cbc85.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/pkg-feelpp-hirsute"]

| feelpp-toolboxes | | |

| feelpp-mor | | |

|===

.Build status for each component for the stable channel |=== | Component | Docker | Debian/Buster | Ubuntu/Focal

| feelpp | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=master["Build Status", link="https://buildkite.com/feelpp/feelpp"] | image:https://badge.buildkite.com/8b8635a2a63929d7d2087b5169d8d6e4e1e3d5417ee83d0754.svg?branch=master[https://buildkite.com/feelpp/pkg-feelpp] | image:https://badge.buildkite.com/001f62767f40f08e353509962eff783c0e2318429356728e6f.svg?branch=master[https://buildkite.com/feelpp/pkg-feelpp-focal]

| feelpp-toolboxes | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=master["Build Status", link="https://buildkite.com/feelpp/feelpp"] | |

| feelpp-mor | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=master["Build Status", link="https://buildkite.com/feelpp/feelpp"] | |

|===

== {feelpp} Documentation

.link:http://docs.feelpp.org[{feelpp} Docs web site] image::https://github.com/feelpp/book.feelpp.org/raw/master/images/cover_small.jpg[{feelpp} Docs,link=http://docs.feelpp.org]

== Slack Discussion Forum

We encourage you to ask questions and discuss any aspects of the project on https://feelpp.slack.com[Slack]. New contributors are always welcome!

== Continuous Integration

{feelpp} maintains various branches. At the core, the development model is greatly inspired by existing models out there. The central repo holds two main branches with an infinite lifetime: master and develop

master:: Main branch where the source code of HEAD always reflects a production-ready state.

develop:: Main branch where the source code of HEAD always reflects a state with the latest delivered development changes for the next release. Some would call this the “integration branch”. This is where any automatic nightly builds are built from.

feature/*:: Feature branches (or sometimes called topic branches) are used to develop new features for the upcoming or a distant future release. When starting development of a feature, the target release in which this feature will be incorporated may well be unknown at that point. The essence of a feature branch is that it exists as long as the feature is in development, but will eventually be merged back into develop (to definitely add the new feature to the upcoming release) or discarded (in case of a disappointing experiment).

|=== | Platform & Compiler | master | develop

| Ubuntu Focal/20.04 clang-9 | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=master["Build Status", link="https://buildkite.com/feelpp/feelpp"] | image:https://badge.buildkite.com/192023cd78277ebeb80f48580ea813c586ec6dcd0365531b33.svg?branch=develop["Build Status", link="https://buildkite.com/feelpp/feelpp"]

| Debian Buster/10 clang-7 |image:https://badge.buildkite.com/3828dcf05f226bd39dfe7dc4da7effb6c1e84af2fa7eab4d0c.svg?branch=master[https://buildkite.com/feelpp/feelpp-debian-buster-10-clang-7] |image:https://badge.buildkite.com/3828dcf05f226bd39dfe7dc4da7effb6c1e84af2fa7eab4d0c.svg?branch=develop[https://buildkite.com/feelpp/feelpp-debian-buster-10-clang-7]

|===

== What is {feelpp}?

link:http://www.feelpp.org[{feelpp}] is a {cpp} library for continuous or discontinuous Galerkin methods including finite element method(FEM), spectral element methods(SEM), reduced basis methods, discontinuous galerkin methods (DG and HDG) in 1D 2D and 3D and in parallel. The objectives of this framework is quite ambitious; ambitions which could be express in various ways such as :

  • the creation of a versatile mathematical kernel solving easily problems using different techniques thus allowing testing and comparing methods, e.g. cG versus dG,
  • the creation of a small and manageable library which shall nevertheless encompass a wide range of numerical methods and techniques,
  • build mathematical software that follows closely the mathematical abstractions associated with partial differential equations (PDE),
  • the creation of a library entirely in C++ allowing to create complex and typically multi-physics applications such as fluid-structure interaction or mass transport in haemodynamic.

Some basic installation procedure are available in the link:INSTALL.md[INSTALL] file, the detailled process is available link:http://www.feelpp.org/docs/develop/BuildingP.html[here].

== Features

  • 1D 2D and 3D (including high order) geometries and also lower topological dimension 1D(curve) in 2D and 3D or 2D(surface) in 3D
  • continuous and discontinuous (dG and hdG) arbitrary order Galerkin Methods in 1D, 2D and 3D including finite and spectral element methods
  • domain specific embedded language in C++ for variational formulations
  • interfaced with link:http://www.mcs.anl.gov/petsc/[PETSc] for linear and non-linear solvers
  • seamless parallel computations using PETSc
  • interfaced with link:http://www.grycap.upv.es/slepc/[SLEPc] for large-scale sparse standard and generalized eigenvalue solvers
  • supports link:http://www.geuz.org/gmsh[Gmsh] for mesh generation
  • supports link:http://www.geuz.org/gmsh[Gmsh] for post-processing (including on high order geometries)
  • supports link:http://www.paraview.org[Paraview] and CEI/Ensight for post-processing and the following file formats: ensight gold, gmsh, xdmf.

== Contributing

In the spirit of {uri-freesoftware}[free software], everyone is encouraged to help improve this project. If you discover errors or omissions in the source code, documentation, or website content, please don't hesitate to submit an issue or open a pull request with a fix. New contributors are always welcome!

Here are some ways you can contribute:

  • by using develop versions
  • by {uri-issues}[reporting bugs]
  • by {uri-issues}[suggesting new features]
  • by writing or editing documentation
  • by writing specifications
  • by writing code -- No patch is too small. ** fix typos ** add comments ** write examples! ** write tests!
  • by refactoring code
  • by fixing {uri-issues}[issues]
  • by reviewing Pull Requests

The {uri-contribute}[Contributing] guide provides information on how to create, style, and submit issues, feature requests, code, and documentation to the {feelpp} Project.

== Getting Help

The {feelpp} project is developed to help you easily do (i) modelisation simulation and optimisation and (ii) high performance computing. But we can't do it without your feedback! We encourage you to ask questions and discuss any aspects of the project on the discussion list, on Twitter or in the chat room.

Twitter:: #feelpp hashtag or @feelpp mention Chat (Slack):: image:https://img.shields.io/badge/slack-feelpp-blue[Slack, link=https://feelpp.slack.com]

ifdef::env-github[] Further information and documentation about {feelpp} can be found on the project's website.

{uri-project}/[Home] | {uri-news}[News] | {uri-docs}[Docs] endif::[]

The {feelpp} organization on GitHub hosts the project's source code, issue tracker, and sub-projects.

Source repository (git):: {uri-repo} Issue tracker:: {uri-issues} {feelpp} organization on GitHub:: {uri-org}

== Copyright and Licensing

Copyright (C) 2011-2019 {feelpp} Consortium. Free use of this software is granted under the terms of the GPL License.

See the {uri-license}[LICENSE] file for details.

== Authors

{feelpp} is led by https://github.com/prudhomm[Christophe Prud'homme] and has received contributions from {uri-contributors}[many other individuals]. The project was initiated in 2006 by https://github.com/prudhomm[Christophe Prud'homme] and based initially on link:https://cmcsforge.epfl.ch/projects/lifev/[lifeV] and completely re-written since then.

== Examples

=== Laplacian in 2D using P3 Lagrange basis functions

Here is a full example to solve

$$-\Delta u = f \mbox{ in } \Omega,\quad u=g \mbox{ on } \partial \Omega$$

[source,cpp]

#include <feel/feel.hpp>

int main(int argc, char**argv ) { using namespace Feel; Environment env( _argc=argc, _argv=argv, _desc=feel_options(), _about=about(_name="qs_laplacian", _author="Feel++ Consortium", _email="[email protected]"));

auto mesh = unitSquare();
auto Vh = Pch<1>( mesh );
auto u = Vh->element();
auto v = Vh->element();

auto l = form1( _test=Vh );
l = integrate(_range=elements(mesh),
              _expr=id(v));

auto a = form2( _trial=Vh, _test=Vh );
a = integrate(_range=elements(mesh),
              _expr=gradt(u)*trans(grad(v)) );
a+=on(_range=boundaryfaces(mesh), _rhs=l, _element=u,
      _expr=constant(0.) );
a.solve(_rhs=l,_solution=u);

auto e = exporter( _mesh=mesh, _name="qs_laplacian" );
e->add( "u", u );
e->save();
return 0;

}

=== Bratu equation in 2D

Here is a full non-linear example - the Bratu equation - to solve

[stem] ++++ -\Delta u + e^u = 0 \mbox{ in } \Omega,\quad u=0 \mbox{ on } \partial \Omega$$. ++++

[source,cpp]

#include <feel/feel.hpp>

inline Feel::po::options_description makeOptions() { Feel::po::options_description bratuoptions( "Bratu problem options" ); bratuoptions.add_options() ( "lambda", Feel::po::value()->default_value( 1 ), "exp() coefficient value for the Bratu problem" ) ( "penalbc", Feel::po::value()->default_value( 30 ), "penalisation parameter for the weak boundary conditions" ) ( "hsize", Feel::po::value()->default_value( 0.1 ), "first h value to start convergence" ) ( "export-matlab", "export matrix and vectors in matlab" ) ; return bratuoptions.add( Feel::feel_options() ); }

/**

  • Bratu Problem

  • solve \f$ -\Delta u + \lambda \exp(u) = 0, \quad u_\Gamma = 0\f$ on \f$\Omega\f$ / int main( int argc, char* argv ) {

    using namespace Feel; Environment env( _argc=argc, _argv=argv, _desc=makeOptions(), _about=about(_name="bratu", _author="Christophe Prud'homme", _email="[email protected]")); auto mesh = unitSquare(); auto Vh = Pch<3>( mesh ); auto u = Vh->element(); auto v = Vh->element(); double penalbc = option(_name="penalbc").as(); double lambda = option(_name="lambda").as();

    auto Jacobian = [=](const vector_ptrtype& X, sparse_matrix_ptrtype& J) { auto a = form2( _test=Vh, _trial=Vh, _matrix=J ); a = integrate( elements( mesh ), gradt( u )trans( grad( v ) ) ); a += integrate( elements( mesh ), lambda( exp( idv( u ) ) )*idt( u )id( v ) ); a += integrate( boundaryfaces( mesh ), ( - trans( id( v ) )( gradt( u )N() ) - trans( idt( u ) )( grad( v )N() + penalbctrans( idt( u ) )*id( v )/hFace() ) ); }; auto Residual = [=](const vector_ptrtype& X, vector_ptrtype& R) { auto u = Vh->element(); u = *X; auto r = form1( _test=Vh, _vector=R ); r = integrate( elements( mesh ), gradv( u )trans( grad( v ) ) ); r += integrate( elements( mesh ), lambdaexp( idv( u ) )id( v ) ); r += integrate( boundaryfaces( mesh ), ( - trans( id( v ) )( gradv( u )N() ) - trans( idv( u ) )( grad( v )N() ) + penalbctrans( idv( u ) )*id( v )/hFace() ) ); }; u.zero(); backend()->nlSolver()->residual = Residual; backend()->nlSolver()->jacobian = Jacobian; backend()->nlSolve( _solution=u );

    auto e = exporter( _mesh=mesh ); e->add( "u", u ); e->save(); }


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].