Skip to content
Mike Airey edited this page Jan 27, 2022 · 2 revisions

ROOTMAP.Core

This is, as the name suggests, the core of the ROOTMAP project.

It contains two Visual C++ projects: core.vcxproj and simulation.vcxproj. These projects compile to .lib libraries to be consumed by a client application. The ROOTMAP project contains two such client applications: a Windows GUI application and a Windows command line application.

core contains common components required by every part of the model: coordinate types, exception classes, logging, the [Scoreboard](/Scoreboard.md the Scoreboard is ROOTMAP's fundamental spatial structure), string parsing utilities, and so on. Most of the code in core has not been meaningfully changed since the Y2K bug was the biggest concern in a developer's life. Developers who wish to add to ROOTMAP's simulation capabilities are unlikely to need to modify this project.

simulation is the meatiest component of ROOTMAP. This is where developers/researchers who wish to modify ROOTMAP for their purposes will spend most of their time. It is the backbone of the application, defining the Engine class which drives the simulation, the message passing PostOffice that facilitates interprocess1 communication, configuration file input, data file output, and all the infrastructure enabling storage of the simulation values computed each timestep. It also contains all the modelling classes, inherited from a common Process class: Nitrate, Water, Phosphorus and so on.

It is important to note that the ROOTMAP.Core repository does not have a main .sln file by design. It is intended to be consumed as a git submodule by solutions that add the core and simulation projects alongside their own project(s). When making changes to ROOTMAP.Core, ROOTMAP.Core.Test should be used for unit testing and to ensure that everything builds into an application correctly.


1 Note that 'interprocess communication' here refers to communication between Process modules in ROOTMAP, not Windows processes.

Clone this wiki locally