17.11.2020 PR-#138
- Disable scheduling of default operations with the new parameter:
Param::unschedule_default_operations
. Any operation name listed inParam::unschedule_default_operations
shall not be scheduled by default. The name must match the name of the registered operation. - Rename DisplacementOp to MechanicalForcesOp, and accordingly other similar-named parameters
For example, to disable the mechanical forces between agents:
auto* param = Simulation::GetActive()->GetParam();
param->unschedule_default_operations = { "mechanical forces" };
11.11.2020 PR-#138
With regard to the upcoming v1.0 release, we decided to improve the API by integrating user feedback and eliminating inconsistencies that have accumulated over time.
This commit helps us to minimize backwards compatibility breaking changes in the future.
The major changes are:
Renaming BaseBiologyModule to Behavior
Renaming SimObject to Agent
Refactoring the Event mechanism and renaming it to NewAgentEvent
A more detailed list of changes can be found here: https://docs.google.com/spreadsheets/d/1peXSsBIhfLDGU3_FYjPkO3qI2zk-1nwScYBOftT12fY/edit#gid=0
08.10.2020 PR-#110
Complete rewrite of ParaView visualization adaptor.
The most relevant changes from the user perspective are parameters and the structure of paraview python scripts
04.09.2020 PR-#110
Rewrite of operations and operation management. See the docs of Operation for details on how to create, register and (un)schedule operations in BioDynaMo.
02.08.2020 4cca726
Change biodynamo.org/bioapi to biodynamo.org/api
11.02.2020 0d6407d
Upgrade to Python 3.
Since Python 2 is not supported in 2020 anymore, we upgrade to Python 3 (Mac OS
excluded momentarily). We rely on PyEnv to create a consistent Python 3
environment through thisbdm.sh
. For those who are not on Mac OS, please make
sure that PyEnv is installed correctly by rerunning the prerequisites script, or
check out the installation guide.
11.09.2019 0719cd6
Add SBML integration. Currently SBML is not supported on MacOS (see https://trello.com/c/vKPbh4iG).
05.08.2019 d7bab00
Major improvements of the BioDynaMo's build system.
- Refactor build procedure.
- Improve dependency detection and diagnostic messages for the user.
- Rename
biodynamo-env.sh
tothisbdm.sh
. - BioDynaMo can be used directly from the build directory. The install step has become optional.
- Improve user and developer guide.
20.06.2019 257f1a3
Add support for multiscale simulations.
14.06.2019 cb15679
Release BioDynaMo dynamic.
This is a more user-friendly version of BioDynaMo. It removes most template code, and does not require compile time parameters, resulting in a simpler API. However, this comes at a small cost in performance. In due time we hope to regain the lost performance.
There are too many small API changes to present an exhaustive list here. We recommend to have a look at the demo folder folder or directly inspect the changes of the demo folder.
31.01.2019 3a51e76
Improve file structure in directory src/ and test/unit
API changes
Old | New |
---|---|
SimulationObject |
SimObject |
21.01.2019 1968ec2
This commit introduces a series of changes to encapsulate different discretization strategies. Other modifications have been made along the way to facilitate this change and solve known issues.
Discretization governs three main questions:
- When should new simulation objects be visible?
- When should simulation objects be removed from the simulation?
- If a simulation object is updated, when should the change be visible?
- Should operations observe the values from the last iteration or from the previous operation?
Since simulations might have different requirements, this commit introduces execution contexts to define and encapsulate this behavior in one place.
First, this commit introduces unique ids for simulation objects that stay constant during the whole simulation and are not reused if a simulation object is removed from the simulation. Among other things, this improves debugging simulations.
Second, building upon the introduction of unique ids, manual updates of SoPointer
(references to another simulation object--e.g. NeuriteElement::daughter_left_
)
becomes obsolete. This is now managed by the ResourceManager
.
Third, this commit adds an in-place execution context.
- Simulation objects that are added or removed are visible to the whole simulation after the next timestep.
- Operations directly modify simulation objects inside the
ResourceManager
. Thus, the result depends on the order in which sim objects are updated. Operations (biology modules or mechanical interactions) see the updated values from the previous operation.
Forth, this commit solves two race condition issues:
- Adding new simulation objects to the
ResourceManager
caused issues if it triggered a growth. References and pointers to simulation objects were invalidated during this operation. - Modifications of neighbors. Two threads could potentially update the same neighbor.
Fifth, result from mechanical interactions will change. Up to now the implementation
was inconsistent with respect to when updates will take effect. Biology modules
were updated in place, while results from mechanical interactions where cached
and applied once all simulation objects have been updated. Now, this behavior is the
responsibility of the execution context. In case of the InPlaceExecutionContext
this means
that during iteration t
some cells observe neighbors that have already been updated
to timestep t'
.
API changes
Several API changes were necessary to implement the described functionality.
A general rule is to use the new execution context to perform actions instead of
using the ResourceManager
, or Grid
directly. The thread local execution context
can be obtained from the simulation object (e.g. calling sim->GetExecutionContext()
).
Exemplary API changes:
- Method
ResourceManager::New
was removed. During a simulation only use e.g.InPlaceExecutionContext::New
. During setup of the initial model usingResourceManager::push_back
is also fine. - Method
ResourceManager::Get
has been changed to return a const pointer. Thusrm->Get<Cell>()->push_back(new_cell)
won't work anymore. However, callingrm->Get<Cell>()->size()
is still fine.
For the full set of changes that are visible to the user, it is best to have a look at the demo folder and the differences of this commit.
25.10.2018 b197542
Resolve ROOT-9321 by removing TBase template parameter of simulation objects
Motivation:
- Workaround for ROOT-9321
- Shortens full name of simulation objects
Move duplicated biology module code from Cell
and NeuriteELement
to SimulationObject
This change requires a different signature of BDM_SIM_OBJECT_HEADER
.
- Remove the suffix
Ext
from the first parameter - Add the base class name as a second parameter.
In other words, copy the parameters from BDM_SIM_OBJECT
to the beginning of BDM_SIM_OBJECT_HEADER
class Cell : public SimulationObject {
BDM_SIM_OBJECT_HEADER(Cell, SimulationObject, 1, ...)
Old | New |
---|---|
BDM_SIM_OBJECT_HEADER(CellExt, 1, ...) |
BDM_SIM_OBJECT_HEADER(Cell, SimulationObject , 1, ...) |
08.10.2018 8a97cf2
Allow builds without dictionaries to speed up compile time
Early development of a simulation requires fast iteration cycles. During this stage serialization features are not needed. Thus, we support builds without dictionaries.
By default dictionaries will be built. To turn them off, run: cmake -Ddict=off ..
Old | New |
---|---|
ClassDef(...) | BDMCLASSDEF(...) |
ClassDefNV(...) | BDMCLASSDEF_NV(...) |
18.09.2018 3a380e4
Refactor parameters.
- Add functionality to define compile time parameters for a specific simulation object. This was necessary due to compile time errors of neurite biology modules. (Although they were not used for neurons, the compiler tried to compile them) This replaces the reinterpret cast workaround.
Simulation::GetActive()->GetParam()
returns const pointer Runtime parameter should not be changed during the simulation. This simplifies the distributed runtime.- Add macros to simplify definition of compile time parameter.
- All compile time parameter that take more than one type will be defined using
CTList
. No more distinction betweenVariant
andVariadicTypedef
. - Improve modularity. Each module can have its own parameter class.
All parameter classes will be combined into
CompileTimeParam::Param
. - Make all runtime parameters non static.
- Rename
AtomicTypes
toSimObjectTypes
Please have a look at the changes of the demos to see which lines need to be changed in your simulation after this commit.
29.08.2018 a373fca
Add the concept of Events. This is an important change to support extensibility. Now, there is a clear way to tell BioDynaMo what should happen with a new data member for a specific event.
Old | New |
---|---|
gAllBmEvents |
gAllEventIds |
gNullEvent |
gNullEventId |
gCellDivision |
CellDivisionEvent::kEventId |
gNeuriteElongation |
SplitNeuriteElementEvent::kEventId |
gNeuriteBranching |
NeuriteBranchingEvent::kEventId |
gNeuriteBifurcation |
NeuriteBifurcationEvent::kEventId |
gNeuriteSideCylinderExtension |
SideNeuriteExtensionEvent::kEventId |
Simulation objects and biology modules must have an event constructor and event handler function in order to support an event. |
16.07.2018 3bac827
Change github option for biodynamo new
. Previously it was opt-out (--no-github
).
This commit changes it to opt-in (--github
).
Old | New |
---|---|
biodynamo new --no-github |
biodynamo new |
biodynamo new |
biodynamo new --github |
11.07.2018 82e7e15
- Add
biodynamo demo
command to try out the demosbiodynamo demo
lists all the available demosbiodynamo demo <demo-name> <dir>
sets up the demo<demo-name>
in directory<dir>
. If<dir>
is not specified, it defaults to the current working directory.
26.06.2018 ba4fe1f
- Add support for multiple simulations per process. Only one simulation
can be active at the same time. Introduces new class
Simulation
(see API). This change causes many API changes -- see subsection below. - Write simulation files to separate directory:
output/simulation-id/
- Integrate simulation template for
biodynamo new
into the biodynamo repository to avoid inconsistencies with the biodynamo version.
Old | New |
---|---|
InitializeBioDynaMo(...) |
Simulation simulation(...) |
Rm() TRm::Get() TResourceManager::Get() |
auto* rm = simulation.GetResourceManager(); |
GetDiffusionGrid(...) |
rm->GetDiffusionGrid(...) |
Grid::GetInstance() |
auto* grid = simulation.GetGrid(); |
Param::some_parameter_; |
auto* param = simulation.GetParam(); param->some_parameter_; |