**DAE Tools** is a cross-platform equation-based and object-oriented process
modelling and optimization software. It is not a modelling language nor a collection of numerical
libraries but rather a higher level structure – an architectural design of interdependent
software components providing an API for:

- Model development/specification
- Activities on developed models, such as simulation, optimization, and parameter estimation
- Processing of the results, such as plotting and exporting to various file formats
- Report generation
- Code generation, co-simulation and model exchange

**DAE Tools** runs on all major operating systems (Windows, GNU Linux and Mac OS X)
and architectures (x86, x86_64, arm).

It is free to use, since it is free software and released under the GNU General Public Licence.

**DAE Tools** is initially developed to model and simulate processes in chemical process industry
(mass, heat and momentum transfers, chemical reactions, separation processes, thermodynamics).
However, **DAE Tools** can be used to develop high-accuracy models of (in general) many different
kind of processes/phenomena, simulate/optimize them, visualize and analyse the results.

The following approaches/paradigms are adopted in **DAE Tools**:

- A hybrid approach between general-purpose programming languages (such as c++ and Python) and
domain-specific modelling languages (such as Modelica,
gPROMS, Ascend etc.)
(more information:
*The Hybrid approach*). - An object-oriented approach to process modelling (more information:
*The Object-Oriented approach*). - An Equation-Oriented (acausal) approach where all model variables and equations are generated and
gathered together and solved simultaneously using a suitable mathematical algorithm
(more information:
*The Equation-Oriented approach*). - Separation of the model definition from the activities that can be carried out on that model. The structure of the model (parameters, variables, equations, state transition networks etc.) is given in the model class while the runtime information in the simulation class. This way, based on a single model definition, one or more different simulation/optimization scenarios can be defined.
- Core libraries are written in standard c++, however Python is used as
the main modelling language (more information:
*Programming language*).

Class of problems that can be solved by **DAE Tools**:

- Initial value problems of implicit form, described by a system of linear, non-linear, and (partial-)differential algebraic equations
- Index-1 DAE systems
- With lumped or distributed parameters: Finite Difference or Finite Elements Methods (still experimental)
- Steady-state or dynamic
- Continuous with some elements of event-driven systems (discontinuous equations, state transition networks and discrete events)

Type of activities that can be performed on models developed in **DAE Tools**:

- Simulation (steady-state or dynamic, with simple or complex operating procedures)
- Optimization (NLP and MINLP problems)
- Parameter estimation (the least squares method: Levenberg–Marquardt algorithm)
- Generation of model reports (in XML + MathML format with XSL transformations for XHTML code generation)
- Code generation for other modelling or general-purpose programming languages
- Simulation in other simulators using standard co-simulation interfaces
- Export of the simulation results to various file formats:

More information about DAE Tools can be found in the *Introduction* section
of the *Documentation* and the following publications:

- Nikolić DD. (2016)
*DAE Tools: equation-based object-oriented modelling, simulation and optimisation software*.**PeerJ Computer Science**2:e54. doi:10.7717/peerj-cs.54 (preprint available on: ResearchGate). - Introduction to DAE Tools (on ResearchGate)

The current release is 1.4.0.

Installation files can be found in the SourceForge website download section, and the source code in the SourceForge subversion repository.

More information on system requirements, downloading and installing **DAE Tools**
can be found in *Getting DAE Tools*.

- [
**April 8 2016**] The first article on DAE Tools has been published in*PeerJ Computer Science*: - Nikolić DD. (2016)
*DAE Tools: equation-based object-oriented modelling, simulation and optimisation software*.**PeerJ Computer Science**2:e54. doi:10.7717/peerj-cs.54.

The new 1.4.0 version is released on 28 December 2014. It contains a large number of important features and bug fixes.

The most important new features:

- Code generators for Modelica, gPROMS and c99. They can be found in daetools/code_generators. Almost all features available in daetools are supported except event ports, user defined actions, external functions and finite element objects whose equations need to be updated during a simulation.
- Support for simulation in other simulators using standard interfaces for Co-Simulation: Functional Mockup Interface, Matlab MEX-functions and Simulink S-functions.
- DAE Tools objects such as adouble can be used as NumPy native data type. The most of the NuPy and SciPy functions are supported.
- New data reporters that export the simulation results to various file formats (MS Excel, hdf5, xml, json) and to Pandas data sets.
- Added new math functions: Sinh, Cosh, Tanh, ASinh, ACosh, ATanh, ATan2 and Erf to adouble/adouble_array.
- Added Pardiso linear solver.
- Added SimulationExplorer GUI that lists all domains, parameters, initial conditions, degrees of freedom and state transition networks.
- Simulations can export the initialization values to JSON format and initialize using a JSON string. daetools.cfg config file is now in JSON format.
- Domains and parameters can now be propagated through the whole model hierarchy (daeModel.PropagateDomain() and daeModel.PropagateParameter()). All domains/parameters with the same name will have identical properties.
- daeVariable functions SetValues, SetInitialConditions, AssignValues etc. accept NumPy arrays as arguments. Now, values and initial conditions can be set using numpy float or quantity arrays.
- All equation can generate Jacobian expressions by setting daeEquation.BuildJacobianExpressions to True. This is useful when an expression is huge and contains a large number of variables. Calculation of a Jacobian for such equation would take a very long time. Generation of Jacobian expressions will increase the memory requirements but may tremendously decrease the computational time.
- Numerical simulation of partial differential equations on adaptive unstructured grids using Finite Elements Method. deal.II library is used for low-level tasks such as mesh loading/processing and assembly of the system stiffness/mass matrices and the system load vector. deal.II structures are then used to generate daetools equations which are solved together with the rest of the model equations. All details about the mesh, basis functions, quadrature rules, refinement etc. are handled by the deal.II library. The advantage of this concept is that the generated equations (linear, nonlinear or differential - depending on the class of the system) can be coupled with other FE-unrelated equations in a daetools model and solved together by daetools solvers; system discontinuities can be handled as usual in daetools; modelled processes can be optimized, etc.

Full list of news can be found here: *News*

The author and the main developer is dr. Dragan Nikolic

Please send your comments and questions to: dnikolic at daetools dot com.

More information about the author can be found in *Contact*.

Detailed information about using **DAE Tools**, presentations, API reference and tutorials
can be found in *Documentation*.