v0.14.0
Todo List
File arc_length_interface.cpp

Mak it work with multi-grid and distributed mesh

Make more clever step adaptation

File BiLinearFormsIntegrators.hpp
SSome operators could be optimised. To do that, we need to write tests and use Valgrind to profile code, shaking cache misses. For example, some operators should have iteration first over columns, then rows. ome operators. Since those operators are used in many problems, an implementation must be efficient.
File BiLinearFormsIntegratorsImpl.hpp
Some operators could be optimised. To do that, we need to write tests and use Valgrind to profile code, shaking cache misses. For example, some operators should have iteration first over columns, then rows. ome operators. Since those operators are used in many problems, an implementation must be efficient.
Class CellEngineering::OpVirtualCurlRho
Should be done with Prisms, no need to have three kinds of elements, tets for solid, prisms for constrains and triangles to do post-processing. We can do post-pocessing with prisms.
Class CellEngineering::OpVirtualPotentialRho
Should be done with Prisms, no need to have three kinds of elements, tets for solid, prisms for constrains and triangles to do post-processing. We can do post-pocessing with prisms.
Page COR-0: Mixed formulation and integration on skeleton (h-adaptivity)

Should be implemented and tested problem from this article [23]. In this paper analytical solution is available, allowing to tested efficiency of evaluated error. You are very welcome to improve that documentation.

You can find two other papers, [17] and [5] which have efficient error estimator working in the natural norm. Those error estimators are not very different from an implementation point of view and could be easily added here.

To do numerical experiment testing error bound, we can solve the problem from [23] where analytical solutions are given. That will involve modification how boundary conditions are applied. Again, this is easy to implement, so if you are willing to add this to this documentation, it is very welcome.

Based on this work, you can write a good journal article about the efficiency of error estimator, taking into account two above remarks. If you are interested, we are happy to help. Extension to hp-adaptivity is straightforward.

A useful add-on is to construct preconditioner, which will take into account hierarchy created during hp-adaptivity, this involves some work, again we are happy to help.

Make this documentation better

hp-adaptive

Problem tailored preconditioner for Krylov solver

Convergence study, estimation of constants

Page COR-1: Time dependent nonlinear mix formulation (unsaturated flow)

Add example with hp-adaptivity

Implement block-solver and multigrid

Apply Kirchhoff transform

Add boundary condition for evaporation

Add air phase and mechanical filed

Add diffusion and other physical phenomena

Make example with flux history or head history. That is implemented but no example is added

Add diffusion and other physical phenomenas

File DeleteCore.cpp
Implement tag_field_delete, tag_field_delete_by_bit_ref to remove field tags from entities. This is for entities which are as well removed, thus cleared as well.
Page Density mapping from CT scans

Make a video tutorial of the presented example

Add scale parameter, in case when ct-image data and FE mesh are defined in different units (e.g. mm and m)

Input directly DICOM files (itk library)

Solving boundary and partial volume effects artifacts in a more elegant way

Add more capabilities to mhd_merger.cpp

Integrate into code (or descibe in documentation) tetrahedral meshing from .stl files by using available open source codes.

File EdgePolynomialBase.hpp
L2 base on edge
File EshelbianPlasticity.hpp
Implementation of plasticity
File FatPrismPolynomialBase.cpp
Prism element can be integrated exploiting tonsorial product. Current implementation do not take that opportunity. That can be viewed as a bug.
File FEMultiIndices.hpp
Add proc into feUId to reduce number of keys is multi-index
File FluidLevel.hpp
Implement time depended fluid level.
Class FluidPressure
Implementation for large displacements
Page FTensor library

Some operator for tensor4 and Tensor4_ddg are not tested for varied number of dimensions. For example first two indices has dimension 2 and last two 4.

Some operators for symmetric tensor 4 need to be implemented.

Some operators for symmetric tensor 3 on last two indices are not implemented.

More documentation and examples. Documentation of functions and very limited at this point

File gel_analysis.cpp

Current version is limited only to one material. If one like to have general problem for nonlinear elasticity should implement general time dependent problem. If inertia terms need to be considered, this material should be add to nonlinear dynamics problem.

Internal history state variables need to be statically condensed. It can be done by implementing static condensation on finite element level or by implementing pre-conditioner.

File h_adaptive_transport.cpp
Should be implemented and tested problem from this article Demkowicz, Leszek, and Jayadeep Gopalakrishnan. "Analysis of the DPG method for the Poisson equation." SIAM Journal on Numerical Analysis 49.5 (2011): 1788-1809.
Class MagneticElement

Extension for mix formulation

Use appropriate pre-conditioner for large problems

File MedInterface.hpp

Reading higher order entities

Reading fields data

Member MixTransport::MixTransportElement::evaluateError ()
this functions runs serial, in future should be parallel and work on distributed meshes.
Member MoFEM::BcManager::BcMapByBlockName
Add markers for standard BCs from cubit on Nodests and Sidesets used bu cubit for displacements, forces, etc. Also add function to add blockset by id and type.
Member MoFEM::CommInterface::exchangeFieldData (const std::string field_name, int verb=DEFAULT_VERBOSITY)
It is not working if field has entities diffrent than vertices.
Class MoFEM::CoreInterface
Clean interface, organize groups outsource some functions to independent interface
Class MoFEM::CoreTmp< 0 >
Implement static functions for Initialization and Finalization of MoFEM. Those functions should keep all static variables and initialize/finalize other libs like PETSc. Moreover initialization functions should set error handlers, etc.
Member MoFEM::CoreTmp< 0 >::add_broken_field (const std::string name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_coefficients, std::vector< std::pair< EntityType, std::function< MoFEMErrorCode(BaseFunction::DofsSideMap &)> >> list_dof_side_map, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)
MB_TAG_DENSE will not work properly in general case. It is need to separate field tags for each entity separately. That will allow for HO orders but homogenous approx. order on each entity. Need some discussion what is optimal solution. MB_TAG_SPARSE gives flexibility, but it not memory efficient. MB_TAG_DENSE uses memory more efficient and in principle allow for better efficiency if properly utilized.
Member MoFEM::CoreTmp< 0 >::add_field (const std::string name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)
MB_TAG_DENSE will not work properly in general case. It is need to separate field tags for each entity separately. That will allow for HO orders but homogenous approx. order on each entity. Need some discussion what is optimal solution. MB_TAG_SPARSE gives flexibility, but it not memory efficient. MB_TAG_DENSE uses memory more efficient and in principle allow for better efficiency if properly utilized.
Class MoFEM::CreateRowCompressedADJMatrix

It is obsolete implementation, code should be moved to interface MatrixManager.

While matrix is created is assumed that all entities on element are adjacent to each other, in some cases, this is created denser matrices than it should be. Some kind of filtering can be added.

Creation of the block matrices

Some efficiency improvement are possible

Member MoFEM::DeprecatedCoreInterface::seed_ref_level (const Range &ents, const BitRefLevel &bit, const bool only_tets=true, int verb=-1)
Should be outsourced to separate interface, i.e. BitLevelManager
Member MoFEM::DeprecatedCoreInterface::seed_ref_level_2D (const EntityHandle meshset, const BitRefLevel &bit, int verb=-1)
Should be outsourced to separate interface, i.e. BitLevelManager
Member MoFEM::DeprecatedCoreInterface::seed_ref_level_3D (const EntityHandle meshset, const BitRefLevel &bit, int verb=-1)
Should be outsourced to separate interface, i.e. BitLevelManager
Class MoFEM::EntitiesFieldData::EntData
Hdiv and Hcurl functions should be accessed through common interface.
Member MoFEM::FaceElementForcesAndSourcesCoreOnSide::getEdgeConnMap () const
That this is not general, e.g., for quad number of nodes is 4.
Class MoFEM::FatPrismElementForcesAndSourcesCore
Need to implement operators that will make this element work as Volume element
Member MoFEM::ForcesAndSourcesCore::getRuleHook
check preferred format how works with gcc and clang, see http://www.boost.org/doc/libs/1_64_0/doc/html/function/tutorial.html#idp247873024
Member MoFEM::FormsIntegrators< EleOp >::Assembly< A >::OpMass
It should be considered another template parameter RANK which will allow to distinguish between scalar, vectorial and tensorial fields
Member MoFEM::getFTensor1FromArray (VectorDouble &data)
Generalise for different arrays and data types
Member MoFEM::getFTensor1FromArrayDiag (MatrixDouble &data, const size_t rr)
Generalise for diffrent arrays and data types
Member MoFEM::MeshsetsManager::checkMeshset (const int ms_id, const CubitBCType cubit_bc_type) const
All cubit interface functions should be outsourced to dedicated interface
Member MoFEM::OpAddParentEntData::opRhs (EntitiesFieldData &data, const bool error_if_no_base=false)
add swap for Bernstein-Bezier base
Class MoFEM::Problem
fix names following name convention
Member MoFEM::ProblemsManager::removeDofsOnEntities (const std::string problem_name, const std::string field_name, const Range ents, const int lo_coeff=0, const int hi_coeff=MAX_DOFS_ON_ENTITY, const int lo_order=0, const int hi_order=100, int verb=VERBOSE, const bool debug=false)
Not yet implemented update for AO maps and IS ranges if removed entities in composite problem or sub-problem
Member MoFEM::VolumeElementForcesAndSourcesCoreOnContactPrismSide::getFaceConnMap () const
That this is not general, e.g., for quad number of nodes is 4.
Member MoFEM::VolumeElementForcesAndSourcesCoreOnContactPrismSide::getOppositeNode () const
That this is not general, e.g., for prism or hex, opposite node is not unique.
Member MoFEM::VolumeElementForcesAndSourcesCoreOnContactPrismSide::getTetConnMap () const
That this is not general, e.g., for prism or hex, size of fixed array is wrong.
Member MoFEM::VolumeElementForcesAndSourcesCoreOnSide::getFaceConnMap () const
That this is not general, e.g., for quad number of nodes is 4.
Member MoFEM::VolumeElementForcesAndSourcesCoreOnSide::getOppositeNode () const
That this is not general, e.g., for prism or hex, opoosite node is not unique.
Member MoFEM::VolumeElementForcesAndSourcesCoreOnSide::getTetConnMap () const
That this is not general, e.g., for prism or hex, size of fixed array is wrong.
Class NeumannForcesSurfaceComplexForLazy
This is old implementation, need to be reimplemented, using auto-differentiation. It is well tested and works. well.
Page Periodic boundary conditions with Nitsche's method

Implement integration for Nitsche's method with periodic constraints where faces on opposite sides do not align.

Implement interface in main MoAB library for projecting surface/volume meshes, such that the resulting mesh encapsulates all entities of both meshes.

Implement example for RVE with nonlinear material.

Example for mesh generated by TetGen/NetGen

Implement surface constraints for mesh smoothing, as an example nonlinear constrains.

For some cases, it was discovered that integration quadrature was insufficient. That is corrected however some plots need to be recalculated and updated.

In new contact module case for non-conforming meshes is implemented. The algorithm implemented there can be used to here.

For proposes of integration on skeleton new new element has been implemented, MoFEM::VolumeElementForcesAndSourcesCoreOnSide and user operator MoFEM::VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator. Those developemnt can be used here to futher simplify implementation. Such elements are used in UltraWeakTransportElement.hpp to inegrate jumps on mesh skeleton.

Class PostProcCommonOnRefMesh::OpGetFieldGradientValues
Implementation for Hdiv and Hcurl to be implemented
Class PostProcCommonOnRefMesh::OpGetFieldValues
Implamentation of setting values to fieldMap for Hcurl and Hdiv not implemented
File PrismInterface.cpp
FIXME this is not so good implementation
File QuadPolynomialBase.hpp
Quad element can be integrated exploiting tonsorial product. Current implementation do not take that opportunity. That can be viewed as a bug.
Page Soap film spanned on wire

Make this documentation better

Error estimator for L2, H1 and H1 semi-norm

Mesh hp-adaptivity (All tools are there, need be used in this example).

Generalization to arbitrary wire curve in 3d space.

Write documentation about mesh bit levels and mesh refining.

Convergence analysis h- vs. p- refinement.

Adaptive time stepping

File thermal_steady.cpp
Make it work in distributed meshes with multigird solver. At the moment it is not working efficient as can.
File thermal_unsteady.cpp
Make it work in distributed meshes with multigird solver. At the moment it is not working efficient as can.
File TSEPAdapt.hpp
Implementation of plasticity
Page VEC-7: Automatic Differentiation for Plasticity

Fix notation, use bold for vectors and tensors. Commas and dots at the end of equations. Other issues.

For simplicity we predefine one model to the mesh, however, using MoFEM::MeshsetsManager it is possible to assign different models to mesh blocks baes on the block name. We should implement this extension. Block names can be set in Cubit, gMesh, or Salome. In particular MED format can handle block names.

Page Writing documentation
Each module can copy figures to a directory with the unique name for USER_MODULE_figures.