Warning, /education/step/stepcore/Mainpage.dox is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2007 Vladimir Kuznetsov <ks.vladimir@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 namespace StepCore { 0008 0009 /** @mainpage StepCore 0010 0011 \section overview Overview 0012 0013 StepCore is a physical simulation library. StepCore focuses on accurate 0014 simulations with error estimations but still tries to be lightweight and fast. 0015 Currently StepCore can simulate two-dimensional classical mechanics. 0016 0017 StepCore provides collection of physical bodies and forces which can be 0018 used in simulations and collections of exchangeable solvers with various 0019 integration algorithms. It can be easily extended with new bodies, forces 0020 and solvers. 0021 0022 \section license License 0023 StepCore is distributed under the terms of the 0024 <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License (GPL), Version 2</a>. 0025 0026 \section features Features 0027 0028 - Object oriented, easy to use 0029 - Accurate simulations, local error estimations 0030 - Reflections for all objects and properties 0031 - Factory for reflections and object creation 0032 - \ref xmlfile "XML file save and load" (requires Qt4) 0033 - \ref bodies "Bodies:" 0034 - Particle 0035 - ChargedParticle 0036 - \ref forces "Forces:" 0037 - GravitationForce 0038 - WeightForce 0039 - CoulombForce 0040 - Spring 0041 - \ref solvers "Solvers:" 0042 - EulerSolver with error estimations 0043 - GslSolver - all solvers from GSL library (requires GSL library) 0044 0045 \section design Design 0046 Please refer to \ref design_intro "Introduction to StepCore design" for more 0047 information about StepCore design. 0048 0049 \section download Download 0050 0051 You can checkout the development tree of StepCore from git, by doing: 0052 <pre>git clone git://anongit.kde.org/step.git</pre> 0053 or view it online at this address: 0054 <a href="https://invent.kde.org/education/step">https://invent.kde.org/education/step</a> 0055 0056 \section authors Authors 0057 0058 <b>Original Author:</b> Vladimir Kuznetsov (ks dot vladimir at gmail dot com) 0059 0060 */ 0061 0062 ////////////////////////////////////////////////////////////////////////////// 0063 ////////////////////////////////////////////////////////////////////////////// 0064 ////////////////////////////////////////////////////////////////////////////// 0065 0066 /** \page design_intro Introduction to StepCore Design 0067 0068 Main classes in the StepCore are World, Item (Body and Force) and Solver. 0069 0070 Item is the root of the physical bodies and forces hierarchy. Body is an 0071 interface for bodies (anything that has dynamic variables that require 0072 ODE integration) and Force is an interface for forces (anything that acts 0073 upon bodies changing derivatives of dynamic variables). One Item can be 0074 a Body and a Force at the same time: for example massive spring or fluid. 0075 0076 World distinguishes between Body and Force using MetaObject::inherits(). 0077 This is also used by Force to distinguish between Body types. 0078 0079 Solver is an interface for generic ODE solvers. It is quite general so it 0080 can be used not only by World but also by Body or Force that may require 0081 it (massive springs ?), and it allows to implement variety of 0082 integration algorithms. 0083 0084 World encapsulates multiple Items and one Solver. It also provides 0085 World::doEvolve() function which control integration. 0086 0087 Integration algorithm (World::doEvolve()) is like the following: 0088 -# Gather all dynamic variables from all Bodies in one array 0089 -# Call Solver::doEvolve() function which will call World::solverFunction() 0090 as callback when Solver needs to calculate variable derivatives (Solver may 0091 call the callback several times during one step with different variable 0092 adjustments - it depends on integration algorithm) 0093 -# World::solverFunction() function does: 0094 -# scatters variables to Bodies and updates World::time 0095 -# calls Force::calcForce() for all forces 0096 -# gathers variable derivatives from all Bodies 0097 -# World::doEvolve() scatters variables to all Bodies and updates World::time 0098 0099 Currently I'm thinking how to avoid variables copying but preserve generic 0100 solvers. One of the ideas it to store variables in array permanently and 0101 only its indexes in bodies, as a side effect this will allow saving world 0102 state at several moments simultaneously. 0103 0104 Latter one more Item interface will be added: Restriction. It will 0105 manage all movement restrictions - anchors, collisions, etc. Restrictions 0106 will be calculated after Forces and will compute force adjustments. More 0107 details are still to be decided. 0108 0109 StepCore still depends on Qt (it uses QString, QVariant and QXml), this 0110 dependency will be removed in the future. 0111 0112 Vector is a template for generic fixed-length vector with some common 0113 methods on it. This is quite simple, if StepCore will require more I will 0114 look at Eigen library. 0115 0116 */ 0117 0118 } // namespace StepCore 0119