All in one
Netgen/NGSolve provides the full workflow of finite element simulation: The constructive solid geometry module supports geometric modeling. Alternatively, geometric models can be imported from different formats. The Netgen mesh generator automatically generates high quality tetrahedal meshes. The NGSolve finite element library discretizes many physical models, and efficiently solves the arising systems of equations. The built-in visualization library allows fast and interactive visualization of the solution.
In an adaptive simulation, the mesh refinement routine needs access to the geometric model. Here, the error estimators of NGSolve mark elements for refinement, and Netgen performs the geometry-adapted mesh refinement. The mesh hierarchy is maintained and is used in fast multigrid solvers. Also for high order geometry approximation Netgen and NGSolve work together: Netgen generates the curved elements, and calculates Jacobians in the integration points required by NGSolve.
Flexible
The Python frontend NGS-Py provides a flexible way to setup and combine various physical models. The input is provided in the natural mathematical language of variational formulations, where trial- and test-functions are chosen from all usual function spaces. Solution fields of one model can be used as input for subsequent simulations. Automatic differentiation supports the solution of non-linear equations and optimization problems.
The program flow is defined by Python scripting. A parameterized constructive solid geometry is modelled by a Python progam, and also mesh generation is controlled by scripting. Predefined solvers can be called, or problem-adapted nonlinear solvers may be programmed on a high level.
Accurate
NGSolve provides the right finite element spaces for the common physical fields. Beside the usual scalar function spaces, NGSolve contains vector finite elements of Nedelec type for electromagnetic fields, and Raviart-Thomas or Brezzi-Douglas-Marini elements for fluxes. Discontinuous Galerkin (DG) as well as its hybrid version (HDG) is supported in NGSolve. For this, we have finite element spaces defined on facets between elements. Symmetric matrix-valued finite elements for mechanical stress tensors or moment tensors for plate or shell models are available. Function spaces of these types are available for all common cell types (segm, trig, quad, tet, prism, pyramid, hex), and are available for arbitrary order. The order can be individually adapted for every edge, face, and cell of the mesh supporting hp-adaptive simulations. Netgen/NGSolve supports curved elements of arbitrary order, which is important to achieve high accuracy.
Efficient
Typically, the most time consuming parts of a finite element simulation are equation solvers. For large scale problems iterative solvers with fast preconditioners are required. NGSolve provides a couple of efficient preconditioners such as multigrid or domain decomposition methods. We focus on preconditioning techniques which can be applied for various physical problems. The strength of NGSolve are preconditioners for higher order methods: Only local smoothing is applied for the high order basis function. The global behaviour is treated by the sub-system of lowest-order basis functions, which may be solved by a fast direct solver, or preconditioned by a geometric or algebraic multigrid method. This high-order/low-order strategy can be used within a multigrid preconditioner, or an element-level domain decomposition method of BDDC-type. Problem specific preconditioners or external solver packages can be included as plug-in modules.
High Performance
NGSolve uses various levels of parallel computing: All compute intense functions are task-parallelized. The working functions are organized as compute kernels, which are distributed by a task-manager to available threads. Netgen/NGSolve can be built for distributed memory parallel computing, where we distribute the mesh on the cluster. All the parallelization happens behind the Python interface. The same scripts run in sequential mode, shared memory as well as distributed memory mode. The finite element functions also take profit from modern vector operations such as AVX instructions. Here, shape functions in four points are processed simultaneously, leading nearly to a four-time speedup. We are prepared for the next generation desktop processors, which will support vector instructions of eight double operations in parallel.
Open
Netgen/NGSolve is distributed for free on the basis of the LGPL open source license. This allows you to use it in academic as well as commercial environments. You are invited to build extension modules for the Netgen/NGSolve finite element tool. You can implement new finite element function spaces in C++, and use them naturally within the NGS-Py language. You can program specific finite element operations, or improved and specialized preconditioners within C++. If you develop certain high level packages (like non-linear solvers, model order reduction or topology optimization algorithms), you may prefer to program it in Python. This makes it simple to share your package with the community.