|
|
# TODO list
|
|
|
This page presents a list of ideas for possible future development.
|
|
|
Most projects require some knowledge of using (and programming for) Linux, because the software is mainly intended for such operating system and environment.
|
|
|
|
|
|
_For a list of [Google Summer of Code](https://summerofcode.withgoogle.com/) project ideas, click [here](https://gitlab.polimi.it/Pub/mbdyn/wikis/Google-Summer-of-Code/GSoC-Project-Ideas)_
|
|
|
|
|
|
|
|
|
------------------------------------------
|
|
|
|
|
|
Guideline for developers: whenever you plan to address an item of this TODO list, open an issue, so that it can be tracked.
|
|
|
|
|
|
------------------------------------------
|
|
|
|
|
|
# Large projects
|
|
|
1. implement binary, or hard, restart. See also [this GSoC project idea](https://gitlab.polimi.it/Pub/mbdyn/wikis/Google-Summer-of-Code/GSoC-Project-Ideas#cascaded-analysis)
|
|
|
2. remove node/element type listing (count) from `control data` block; use STL containers to keep track of model components (support **partially DONE** for elements, drivers and nodes
|
|
|
3. implement _smart_ structural nodes, so that their type (`static`/`dynamic`) is automatically detected
|
|
|
4. implement optional binary/ascii output (_[NetCDF](https://www.unidata.ucar.edu/software/netcdf/)_ support **partially DONE**)
|
|
|
5. abstract NetCDF use for aggregate data (e.g. Vec3) (**partially DONE**)
|
|
|
6. add relative reference frame overall dynamics (modal element, gravity (?))
|
|
|
7. add absolute/relative reference frame dynamics interface
|
|
|
8. generalize inflow models for fixed wing lifting surfaces (**partially DONE**)
|
|
|
|
|
|
## Medium projects
|
|
|
1. recover existing soft restart. See also [this GSoC project idea](https://gitlab.polimi.it/Pub/mbdyn/wikis/Google-Summer-of-Code/GSoC-Project-Ideas#cascaded-analysis)
|
|
|
2. add a shell (supporting scripting languages) element that executes external programs and allow exploitation for entities like elements, drives, constitutive laws and so on
|
|
|
3. develop a trim control as external command that drives simulations
|
|
|
4. review output to allow selective ascii/binary output (**partially DONE**; see _NetCDF_)
|
|
|
5. add friction to contacts. See also [this GSoC project idea](https://gitlab.polimi.it/Pub/mbdyn/wikis/Google-Summer-of-Code/GSoC-Project-Ideas#friction-in-joints)
|
|
|
6. rework modal element to use momentum and momenta moment instead of linear and angular velocities (so that a regular `dynamic` node can be used instead of the `modal` node)
|
|
|
7. rework revolute joints to allow normal force to be computed as a combination of constraint reactions (based on constraint geometry)
|
|
|
8. implement modal element binary data, using [NetCDF](https://www.unidata.ucar.edu/software/netcdf/):
|
|
|
- `.fem`:
|
|
|
- femgen > ascii
|
|
|
- femgen > netcdf
|
|
|
- mbdyn < ascii > netcdf
|
|
|
- `.mod`
|
|
|
- mbdyn > ascii
|
|
|
- mbdyn > netcdf (in global output database)
|
|
|
9. add sparse eigenvalue extraction (**DONE** using [ARPACK](https://www.caam.rice.edu/software/ARPACK/); check and improve)
|
|
|
10. add matrix scaling (**partially DONE**; needs extensive testing)
|
|
|
|
|
|
## Small project
|
|
|
1. add variant of "component" template drive caller that can be re-oriented using a constant rotation matrix
|
|
|
2. "shell" element, drive and so that executes Unix commands including scripts, significantly Matlab scripts (see module-octave)
|
|
|
3. move critical Reynolds numbers from constants to fluid properties with pressure/temperature dependencies
|
|
|
4. add Reynolds dependence to AeroData
|
|
|
5. improve symbolic constitutive law (based on [GiNaC](https://www.ginac.de/))
|
|
|
6. move GiNaC constitutive laws and drives into a run-time loadable module
|
|
|
7. move exception handling towards <stdexcept> (**DONE** _otherwise_)
|
|
|
8. review/improve user-configurable statistics output (**partially DONE**; see `output` statement in `problem` data block)
|
|
|
9. add Matlab/Octave-compatible sparse matrix generation for sparse matrix eigenvalue analysis (**DONE**)
|
|
|
10. add selected output streamed on sockets for interactive analysis by implementing sort of "sensors", possibly based on the elements' "private data" (**DONE** see _output elements_ and _RTAI_ related features)
|
|
|
11. add rot2any/any2rot utilities
|
|
|
12. try to rewrite hydraulic nodes as scalar differential (?)
|
|
|
13. add joints like:
|
|
|
- 2-node clamp (spherical + prismatic) (**DONE** see `total joint` family)
|
|
|
- "inplane" and "inline" between one node and the ground (**DONE** see `total pin joint`)
|
|
|
14. link to [Taucs](http://www.tau.ac.il/~stoledo/taucs) sparse solver ([Marco Morandini](@marco.morandini) is working at it)
|
|
|
15. add aircraft instruments as sensors (e.g. writing measures to parameter nodes; reference [here](http://www.allstar.fiu.edu/aero/FlightIns.htm)):
|
|
|
- airspeed indicator
|
|
|
- ground speed indicator
|
|
|
- altimeter
|
|
|
- attitude indicator (pitch and bank)
|
|
|
- turn and slip indicator
|
|
|
- vertical speed indicator
|
|
|
- angle of attack indicator
|
|
|
(**partially DONE**, the `aircraft instruments` element provides measures as private data, and as output to .aer files)
|
|
|
16. allow the FEM data filename as command-line arg in utils/femgen
|
|
|
17. add orthogonality test when reading orientation matrix (**DONE**, with optional tolerance; warning only)
|
|
|
18. append constitutive law output, if any, to elements' output (**DONE** infrastructure, shock absorber and rods)
|
|
|
19. merge tool to generate [ADAMS](http://www.mscsoftware.com/product/adams/)/View `.cmd` models from raw output (Gian Luca Ghiringhelli is working at it; **OBSOLETE**)
|
|
|
20. add piecewise linear or other simple generic elastic constitutive laws (**DONE**: scalar function-based CL)
|
|
|
21. generate a binary form of the `.fem` data for the modal element that can be loaded instead of the text version according to time stamps, to speed-up large models input (**DONE**)
|
|
|
22. add an optional configuration-dependent constitutive law to the unconstrained displacements/rotations of selected joints:
|
|
|
- the revolute family (**DONE** differently, see `deformable axial joint`)
|
|
|
- ..
|
|
|
23. implement an output trigger (replaces `output frequency` **DONE**)
|
|
|
24. modal element (see also [this GSoC project idea](https://gitlab.polimi.it/Pub/mbdyn/wikis/Google-Summer-of-Code/GSoC-Project-Ideas#revamp-the-modal-joint)):
|
|
|
- add singularity checks (warn if modal stiffness matrix $`k`$ is singular; ???)
|
|
|
- add consistency checks of modal mass matrices ($`m = X^T M X`$; **DONE**)
|
|
|
25. modal interface node: accelerations can be recovered for use in loose connections; design and implement a solution (**DONE**)
|
|
|
26. use `getopt(3)` in `utils/*`
|
|
|
27. use 3D (or 6D) templates for force and couple elements, preserving backward compatibility of the input as much as possible (**DONE**, 3D)
|
|
|
28. add modal constraint: framework for generic constraints among modal variables; constraint that imposes the value of modal vars
|
|
|
29. add "static" modal element (no dynamics equations)
|
|
|
30. allow deformable hinge to have optional (useless) "position" spec
|
|
|
31. output of incremental Euler vector (?)
|
|
|
32. add elastic and viscous variants of linear time variant const law
|
|
|
33. add record for damping matrix to modal input format (**DONE**, `RECORD 13`)
|
|
|
34. define a `UserDefinedElem` class; inherit `LoadableElem` from it; allow `UserDefined` elements to be loaded run-time (obsoletes `LoadableElem`; `UserDefinedElem`, **DONE**)
|
|
|
35. let symbolic constitutive law optionally know about "Time" & so
|
|
|
36. allow math parser to generate expression tree (~~bison?~~ DONE, reusing MBDyn's parser to create expression tree, with contributions from Ankit Aggarwal within [Google Summer of Code 2015](https://www.mbdyn.org/?News&id=14))
|
|
|
37. allow to switch on/off iteration, residual, ... output with meter
|
|
|
38. allow configurable `float`, `int`, `bool` (`string`?) & `hton` in stream I/O (**DONE** [no `hton`], check)
|
|
|
39. allow to specify parameters independently for each eigenanalysis
|
|
|
40. implement coaxial rotor inflow model (which?)
|
|
|
41. allow strain sign in hunt-crossley (now cont-contact) module (**DONE**; in all constitutive laws?)
|
|
|
42. implement an exponential viscoelastic const law 1D
|
|
|
|
|
|
## Bugs/missing features
|
|
|
- modal joint private data:
|
|
|
- currently uses lowercase `x`, `w` to access FEM node motion in absolute frame; this is inconsistent with structural nodes, which use uppercase `X`, `Omega`, reserving `x`, `omega` for motion in node frame
|
|
|
- no access to FEM node orientation is available
|
|
|
- access to FEM node motion also in modal joint reference frame would be desirable
|
|
|
- eliminate nasty dependence from f2c typedef's (`doublereal` and so)
|
|
|
- check "universal pin"
|
|
|
- fix `etc/modal.d/MBDyn_NASTRAN_alter_[1-2].nas`; allow the use of node sets to reduce the amount of FEM nodes that are passed to the modal element (e.g. no nodes without inertia that do not participate in the interface)
|
|
|
- clarify how to increase the size of models `utils/femgen` can handle (change `parameter(maxnod=20000,maxmod=1000)` accordingly?)
|
|
|
- introduce references for hints (?)
|
|
|
- allow strings as mode names in modal elements (joint, force, ...)
|
|
|
- add `SetInitialValue` to modal element
|
|
|
- check initial assembly of joints in `slidercrank_r` example
|
|
|
- allow 0 modes in modal element (nearly useless, except for testing)
|
|
|
- `UseSocket` without host listens only on localhost (**BY DESIGN**)
|
|
|
- allow (configurable) preamble in communications with pairs `{string,value}`
|
|
|
- rework rejected modes handling in modal joint
|
|
|
- check initial assembly of `distance` when nodes velocity is not null
|
|
|
- check & fix NetCDF library detection
|
|
|
- allow re-orientation of FEM reference system in modal node
|
|
|
- allow offset & re-orientation of exported motion in external structural [mapping]
|
|
|
- optionally send "delta" instead of position in external structural [mapping]
|
|
|
- support float instead of double in NetCDF output
|
|
|
- support "med" in output
|
|
|
- reject `mt` from naive when configured without support
|
|
|
- allow `mt` from command-line (**DONE**; `-N` switch)
|
|
|
- allow make of `mod-*` and `moddae-*` modules
|
|
|
- implement support for `pardiso` linear solver when compiled with `icc` (need `icc`...)
|
|
|
- check "new" distance joint
|
|
|
- take care of nodes with output "off" in `mbdyn2easyanim.sh`
|
|
|
- allow "relative" node view in EasyAnim
|
|
|
- `GetPosAbs/GetRotAbs` dependent on other (pos, rot, ...) (**WONTFIX**; use `Get.*Rel(AbsRefFrame, ...)` instead)
|
|
|
- `module-loadinc`: improve initialization and handling of driven load increment element
|
|
|
- math parser: handle uninitialized values (**DONE**?)
|
|
|
- add capability to run-time load a generic (context-dependent?) "description" (generic **DONE**; context-dependent **TODO**) |