Git Product home page Git Product logo

What is EMFEM?

EMFEM is a parallel C++ program targeted at the forward modeling of 3D frequency-domain geophysical electromagnetic method using adaptive finite element method. The main features of EMFEM including:

  • Modular design
  • Support both MT and CSEM
  • Support Arbitrary anisotropic media
  • Use unstructured tetrahedral mesh to discretize complex structures including topography and bathymetry
  • The mesh is automatic refined guided by a goal-oriented error estimator
  • The linear system is solve by iterative method with AMS preconditioner to minimize the computation time and memory usage
  • To futher impore the efficiency, the code is paralized using mesh decomposition method

Prerequisites

EMFEM uses several open source libraries, including:

  • mpich or openmpi
  • PETSc
    • PETSc is a library that supports parallel linear algebra, krylov solvers, preconditioners and many other things. Note that PETSc must be compiled with MUMPS and HYPRE.
  • Metis
    • Metis is a library for partitioning graphs and finite element meshes.
  • Tetgen
    • TetGen is a program to generate tetrahedral meshes of any 3D polyhedral domains. EMFEM uses it to refine mesh adaptively.
  • Eigen
    • Eigen is a C++ template library for linear algebra.
  • nanoflann
    • nanoflann is a C++11 header-only library for building KD-Trees of datasets with different topologies. EMFEM uses it to find the vertex or cell closest to a receiver point efficiently.

The easiest way to install the dependencies of EMFEM is using spack. All the dependencies can be installed with

$ spack install mpi metis tetgen eigen petsc+mumps+hypre+superlu-dist nanoflann

Building

Once installed all the dependencies and unpacked the source code of EMFEM into a directory /path/to/emfem. Then configure, compile emfem with

$ cd /path/to/emfem
$ mkdir build
$ cd build
$ spack load mpi
$ cmake -DCMAKE_BUILD_TYPE=Release \
        -DPETSC_DIR=$(spack location -i petsc) \
        -DTETGEN_DIR=$(spack location -i tetgen) \
        -DNANOFLANN_DIR=$(spack location -i nanoflann) \
        -DEIGEN_DIR=$(spack location -i eigen) \
        -DMETIS_DIR=$(spack location -i metis) ..
$ make

Note that EMFEM has only been tested on Linux and macOS systems. For Windows users, we recommend using WSL1/WSL2 or a virtual machine.

Usage

To run the forward modeling process, the user needs to provide three files: the model file, the data template file, and the configuration file. Then use the flowing command to run emfem:

$ mpirun -np <# of processes> ./emfem -options_file <configuration-file-name>

For more details on the format of these files, please refer to the documentation.

License

EMFEM is distributed under MIT License. Please see the file LICENSE for more details.

Contributing

The users are encouraged to open an issue for any questions or bugs. Pull requests for any enhancement are also wellcomed.

Authors

How to cite EMFEM?

If you publish results made using EMFEM, please consider citing:

Ce Qin, Xuben Wang, Ning Zhao, 2023. EMFEM: A parallel 3D modeling code
for frequency-domain electromagnetic method using goal-oriented adaptive
finite element method. Computers & Geosciences, 178:105403. DOI:10.1016/j.cageo.2023.105403.

QIN Ce, WANG XuBen, ZHAO Ning, 2020. Research on the iterative solver
of linear equations in three-dimensional finite element forward modeling
for frequency domain electromagnetic method[J].
Chinese Journal Of Geophysics (in Chinese), 63(8): 3180–3191. DOI:10.6038/cjg2020N0194.

emfem's Projects

emfem doesn’t have any public repositories yet.

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.