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