GithubHelp home page GithubHelp logo

web's Introduction

                Finite Element Discretization Library
                               __
                   _ __ ___   / _|  ___  _ __ ___
                  | '_ ` _ \ | |_  / _ \| '_ ` _ \
                  | | | | | ||  _||  __/| | | | | |
                  |_| |_| |_||_|   \___||_| |_| |_|

                           https://mfem.org

MFEM is a modular parallel C++ library for finite element methods. Its goal is to enable high-performance scalable finite element discretization research and application development on a wide variety of platforms, ranging from laptops to supercomputers.

We welcome contributions and feedback from the community. Please see the file CONTRIBUTING.md for additional details about our development process.

  • For building instructions, see the file INSTALL, or type "make help".

  • Copyright and licensing information can be found in files LICENSE and NOTICE.

  • The best starting point for new users interested in MFEM's features is to review the examples and miniapps at https://mfem.org/examples.

  • Instructions for learning with Docker are in config/docker.

Conceptually, MFEM can be viewed as a finite element toolbox that provides the building blocks for developing finite element algorithms in a manner similar to that of MATLAB for linear algebra methods. In particular, MFEM provides support for arbitrary high-order H1-conforming, discontinuous (L2), H(div)-conforming, H(curl)-conforming and NURBS finite element spaces in 2D and 3D, as well as many bilinear, linear and nonlinear forms defined on them. It enables the quick prototyping of various finite element discretizations, including Galerkin methods, mixed finite elements, Discontinuous Galerkin (DG), isogeometric analysis, hybridization and Discontinuous Petrov-Galerkin (DPG) approaches.

MFEM includes classes for dealing with a wide range of mesh types: triangular, quadrilateral, tetrahedral and hexahedral, as well as surface and topologically periodical meshes. It has general support for mesh refinement, including local conforming and non-conforming (AMR) adaptive refinement. Arbitrary element transformations, allowing for high-order mesh elements with curved boundaries, are also supported.

When used as a "finite element to linear algebra translator", MFEM can take a problem described in terms of finite element-type objects, and produce the corresponding linear algebra vectors and fully or partially assembled operators, e.g. in the form of global sparse matrices or matrix-free operators. The library includes simple smoothers and Krylov solvers, such as PCG, MINRES and GMRES, as well as support for sequential sparse direct solvers from the SuiteSparse library. Nonlinear solvers (the Newton method), eigensolvers (LOBPCG), and several explicit and implicit Runge-Kutta time integrators are also available.

MFEM supports MPI-based parallelism throughout the library, and can readily be used as a scalable unstructured finite element problem generator. Starting with version 4.0, MFEM offers support for GPU acceleration, and programming models, such as CUDA, HIP, OCCA, RAJA and OpenMP. MFEM-based applications require minimal changes to switch from a serial to a highly-performant MPI-parallel version of the code, where they can take advantage of the integrated linear solvers from the hypre library. Comprehensive support for other external packages, e.g. PETSc, SUNDIALS and libCEED is also included, giving access to additional linear and nonlinear solvers, preconditioners, time integrators, etc.

For examples of using MFEM, see the examples/ and miniapps/ directories, as well as the OpenGL visualization tool GLVis which is available at https://glvis.org.

License

MFEM is distributed under the terms of the BSD-3 license. All new contributions must be made under this license. See LICENSE and NOTICE for details.

SPDX-License-Identifier: BSD-3-Clause
LLNL Release Number: LLNL-CODE-806117
DOI: 10.11578/dc.20171025.1248

web's People

Contributors

acfisher avatar adrienbernede avatar barker29 avatar brendankeith avatar bslazarov avatar dan2997925 avatar delyank avatar dylan-copeland avatar gillette7 avatar hauten avatar idoakkerman avatar jakubcerveny avatar jamiebramwell avatar jandrej avatar jdahm avatar kmittal2 avatar mlstowell avatar najlkin avatar nmnobre avatar pazner avatar psocratis avatar rhebergens avatar sshiraiwa avatar stefanhenneking avatar tangqi avatar tobiasduswald avatar tzanio avatar v-dobrev avatar vladotomov avatar yohanndudouit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

web's Issues

Update publications

There have been several recent preprints (with arxiv versions) that will be good to mention on the publication page:

  • "Uniform Subspace Correction Preconditioners for Discontinuous Galerkin Methods with hp-Refinemenet"
  • "hr−adaptivity for nonconforming high-order meshes with the target matrix optimization paradigm"
  • ...

How to restart

At the workshop we received a request for a HowTo article on setting up and using restart capabilities with the DataCollection object.

Possible README changes

I recently set up a new laptop, then cloned my fork of this repo and started following the README instructions: https://github.com/mfem/web/blob/master/README.md. Specifically these commands:

  1. pip install --upgrade --user mkdocs==1.0.4
  2. pip install --upgrade --user Markdown==2.6.8
  3. pip install --upgrade --user PyYAML==3.13
  4. pip install --upgrade --user futures==3.3.0

Questions and/or suggested changes:

  • I didn't need to run the fourth command in order to get mkdocs serve or mkdocs build to work. I still haven't run it. Is futures necessary? If so, why?
  • Both the specified mkdocs and markdown versions are old. Other repos I work on use mkdocs 1.1 and markdown 3.3.4. When switching to this one and back, I had to up/downgrade until I got tired of it and installed mkdocs 1.1 and markdown 3.3.4 here to see if they would work. The site seems to build fine locally with these newer versions (including the dynamic /examples dropdowns), so perhaps the first two commands could be updated. Or must the respective versions 1.0.4 and 2.6.8 be enforced? If so, why?

(I don't know why these issues didn't come up on my old laptop, where I had been contributing to this repo since 2019. Maybe these are my problems and not the repo's problems! If you want the README updated according to anything in this issue, I'd be happy to do it.)

Document the difference between LinearFormIntegrator::AssembleRHSElementVect methods L2 vs H1

From mfem/mfem#2550:

Mixing together several discretizations, i.e. H1 and L2, requires either implementation of the two versions of LinearFormIntegrator::AssembleRHSElementVect, or a single version with FaceElementTransformations. The documentation does not provide any guidance how the different versions are used in the code. The method with FaceElementTransformations is more general and can be used with H1 and L2 fields.

Clarify limitations of periodic meshes

As part of a recent discussion with @pazner on the mfem slack channel, it sounds like there may be a handful of limitations of periodic meshes in mfem that do not seem to be currently communicated in https://mfem.org/howto/periodic-boundaries/ . Concretely, if the mechanism of enforcing periodicity in mfem is just a 1-to-1 correspondence between nodes on periodic faces then it may not work correctly in general for:

  • vector-valued H1 spaces (e.g. rotational symmetry like in the torus example on the web page)
  • Hcurl (due to sign / orientation discrepancies, especially with triangular faces of cubic or higher order in 3D)
  • Hdiv (due to sign)

I'm hoping to find out more information on the potential limitations above (the signedness problem for Hcurl/Hdiv could likely be resolved easily if not already, but the orientation mismatch might be more involved). Has anyone successfully simulated elasticity or E&M problems with periodic meshes, especially with more interesting symmetries than just translation?

Also, the webpage does not indicate if the discretization is expected to be conforming along the periodic boundaries (I'm guessing this is a requirement, given the discussion above). If so, does this impose restrictions on mesh refinement (adaptive, uniform)?

Doxygen frame cuts off bottom of page

Showing the Doxygen documentation inside a frame is great, but currently the bottom of the page is cut off, see e.g. the bottom of the main page

Screen Shot 2021-09-03 at 12 32 50 PM

which should look like this:

Screen Shot 2021-09-03 at 12 33 55 PM

Can we adjust dox.md to show the full page?

Add workshop artifacts to website

  • Update /workshop/ with
    • Presenters' slides
    • Links to presentation videos (YouTube) @hauten
    • Link to contest winners on /gallery/
  • Update /gallery/ with contest submissions, noting which are the winners
  • Update /news/ with link to forthcoming computing.llnl.gov article @hauten

Provide navigational context for tertiary+ pages

Pages that are not in the top-level menu (either primary or secondary dropdown) can lose a little context without navigational cues.

Example: Documentation > HowTo Articles > Parallel Element Numbering. To get back to the HowTo list (i.e., the parent of this page), I would have to know to go back to the top nav and select Documentation > HowTo Articles. I can't get back to the parent directly, and it's not active in the nav dropdown.

Breadcrumbs could be one solution. The bootstrap CSS files have a breadcrumbs style already defined. Another idea is to insert a "Back to HowTo Articles" link (or similar) on these pages, though contributors would have to remember to do that manually if it's not built in. Alternatively, I wonder if the right-side nav within a page (where the page's headings are listed) could be modified to include a link back to the parent page.

I don't have enough practice with mkdocs sites to know the correct logic. My initial attempts to modify content.html failed: capture breadcrumb from page title, link it to page URL, loop through a URL by its slashes to see if it has parents, add those to the breadcrumb string, etc.

(Side note: This site has many pages where the parent is Home and/or where they are only navigable from a link on another page. For instance, I got to https://mfem.org/mesh-format-v1.0/ via Documentation > Mesh Formats > MFEM's mesh formats page. For something like that, a breadcrumb to Home isn't helpful. Or I could ask, why isn't that page under Mesh Formats in the directory? Same with Documentation > Getting Started > Parallel Tutorial. But I like having things in directories and have zero insight into site analytics. Perhaps users aren't as confused as I think they might be. In any case, in the near term, I think the biggest user impact would be to focus on the non-Doxygen pages under Documentation. At minimum the HowTo pages.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.