=== Maintenance ===
- Avoiding duplicated information (impossible to keep things up-to-date in the manuals). Good would be to store everything in-code (perhaps with some script scavengers all information from the headers automatically)
- Modularity: Having each REGISTER_CLASS() in the respective source file. Code for registering components exists for string-only versions (I'm hoping that classtype versions should rather be removed). Currently works for dynamic linking, but static linking is a problem (static symbols are optimized away). Solution could be to push for dynamic linking.
- ''classType'' has to go. Replace with strings (Note: ''int DataStream::write(const std::string &data); + read'' already exists!). This effects context files and load balancing.
- Reduce numbering of engineering models
- SM-module: Replace ''DEIDynamic'', ''DIIDynamic'', ''NLDEIDynamic'', ''NonLinearDynamic'' with ''Dynamic''
- TM-module: Replace ''NonStationary'', ''NLTransient'' with ''Transient''
- Automatic tools:
- More tests (at least 1 for each element type, at least 1 for each material, and 1 for each engineering model).
- Coverage testing (static analyzers could help, gcov + ctest is an option but it will miss tons of unstestable, optional but used, code). Possible to run with ctest now
- Aiming at zero-warning policy, even with MSVC (some thing that MSVC warns about could be fixed, some could be turned off). Usage of ''-DCMAKE_CXX_COMPILER_FLAG=-Werror'' is recommended. We still produce quite a lot of warnings in Clang and Intels compilers.
=== For new developers ===
- Add ''BasicElement'' (linear triangle with plane stress) and ''BasicMaterial'' (isotropic plasticity + hardening) for the structural analysis problems which could help new developers get started without having to understand complex inheritance and tons of optional features. These are kept in-code with tests so that we make sure to keep them up-to-date.
=== Consistent naming schemes ===
- Geometric type, interpolation order, and equation type should be part of the name.
- Number of spatial dimensions rarely need to be part of the name.
- Will definitely break backwards compatibility.
- Tricky cases: Bi-quadratic v.s. Serendipity interpolation. Beams and shells. Springs.
- Suggested naming for standard elements: Type-Geometry-Order. E.g: ''PlaneStressTr2'', ''HeatTransferHexa1''
- Should we try to be consistent with ''SpringLine1'' and ''Beam2dLine1'' ? I think these structural elements could have their own naming / Mikael
- Add ClassFactory for interpolation classes, allowing to create more flexible
- ''FEInterpolation *ClassFactory :: createInterpolation(const char* name)'' <-- Needs empty (or consistent constructors).
- ''PlaneStressTr2
=== Sets ===
- Mikael will be adding sets (boundary/edge/surface sets and bulk sets to start with)
- Active boundary conditions will use sets instead of storing their own list of elements.
- See where to go from there (perhaps it's possible to keep backwards compability)
=== License ===
- Keep GPL - Might cut of commercial interest that could be benefitial
- Switch to LGPL - Commercial might pay developers to extend OOFEM to include new elements, materials, contact models, etc. This option has been applied
- Offer separate commercial license - We would probably require a copyright assignment agreement for contributions to work with this. Seems unlikely to happen.