Code Monkey home page Code Monkey logo

openfluid's Introduction


About OpenFLUID

OpenFLUID is a software environment for spatial modelling in landscapes. Based on an explicit representation of spatial objects and their interactions, OpenFLUID is designed for modelling dynamics at different spatial and temporal scales. It provides functionalities for the development and integration of computational codes, model coupling, parameterization and execution of simulations. It is also a collaborative framework for the capitalization and sharing of multi-disciplinary scientific models.
OpenFLUID has already been applied in various contexts: hydrology, diffuse pollution, agricultural practices, erosion, land use planning, etc. Free, open-source and based on open standards, OpenFLUID is fully commited to open and reproducible science approaches.

Builder screenshot

Features

  • 🚀 Performance oriented simulation engine
  • 👩‍💻 Open architecture to plug your own simulation models
  • 🗂️ Extensible output formats through plugins
  • 🖥️ User friendly software environment for development and integration of models
  • ⌨️ Command line interface
  • 📚 Integrated documentation system for models
  • 🤝 Collaborative system to store and share models source codes

Built with

OpenFLUID relies on several tools and libraries

  • C++17
  • Boost for low-level structures
  • GDAL for geospatial data I/O and management
  • JSON for metadata and settings I/O
  • TinyXML for datasets I/O
  • libcurl for network operations
  • Qt6 for UI framework and applications (Qt5 deprecated)
  • CMake for build/test/packaging configuration and management
  • Doxygen for technical documentation

Getting started

Installation

OpenFLUID is available for Linux, MacOS and Windows. You can download it from the official web site.

Once the installation has been performed using instructions below according to the operating system, open a terminal (Linux, MacOS) or a command prompt (Windows) an type openfluid version to check if the installation is successful.
The OpenFLUID version is displayed if it is correctly installed.

Command line version

Linux

  1. Download the package corresponding to the Linux distribution
  2. Open a terminal
  3. Use the dedicated package installer tool

Ubuntu/Debian

sudo apt install /path/to/<openfluidpackagfile>.deb

Fedora

sudo dnf install /path/to/<openfluidpackagfile>.rpm

MacOS

  1. Install Brew if not already present (see also https://brew.sh/)
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. Add OpenFLUID tap for Brew
brew tap OpenFLUID/openfluid
  1. Install OpenFLUID using Brew (with --no-quarantine option to avoid Gatekeeper restrictions in recent MacOS versions)
brew cask install --no-quarantine openfluid

Windows

  1. Download the OpenFLUID installer
  2. Download the OpenFLUID additional tools installer
  3. Execute the OpenFLUID installer (optional but recommended)
  4. Execute the OpenFLUID additional tools installer (optional but recommended)

Additional information is available on the OpenFLUID Community site

From sources

Detailed instructions for build and installation from sources are available on the OpenFLUID Community site.

Manuals and Trainings

The OpenFLUID manual and the training sessions docs are available online.
(the training sessions documents are in french 🇫🇷)

Resources

Authors and License

OpenFLUID is developed at LISAH (Montpellier, France), a research joint unit on interactions between soil, agrosystems and hydrosystems. It is actively supported by the INRAE research institute on agriculture, environment and food.

See the AUTHORS.md file for details about the developers.

OpenFLUID is distributed as a free and open-source software. See the LICENSE file for details.

Contact

To contact us, see the OpenFLUID team page.
You can also join the OpenFLUID slack workspace. Ask the team for an invitation link.

openfluid's People

Contributors

alibres avatar arthoni avatar chataignerm avatar doriangerardin avatar fabrejc avatar jctophefabre avatar rabotin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

openfluid's Issues

Check descriptors mandatory data

Check descriptors mandatory data that should be parameters of the constructors of the descriptors classes, e.g. event date, function id, datastore item id, ...

Enhanced exception system

Improve the current exception system with enhanced embedded information with exception. This could be donne through a hierachy of exception classes, giving more precise information
-OFException
-OFModelException
-OFSpatialException
-OFSimulationException
-OFIOExecption
-OFFluidXException
-OFBuddyException

  • ....

Refactor logging system

Refactor logging system for:

  • messages
  • profiling, including performance and call sequences

Provide an observer for exporting graph as dot file(s)

Transform the void OPENFLUID_ExportUnitsGraphAsDotFile method in the PluggableFunction class to an observer

allow

  • configurable styles (colors, shapes, ...)
  • set when export is done
  • set title

style.SU.fillcolor = blue
style.SU.shape = egg
when.init=1
when.final=0
when.everytime=0

Add packaging dependencies

-> update cmake dependency version (currently 2.6, must be >= 2.8.9)
-> review Cmake checking of geos library, must also check the C++ version of the library, not only the C version

DEB

  • gnuplot
  • 7zip
  • libgeos++-dev (optional)

Rename datatypes

"Remove _t suffix in datatypes,
ex: openfluid::core::Duration_t -> openfluid::core::Duration"

Provide basic builder extensions

Provide basic OpenFLUID-builder extensions with the installation package

  • Spatial domain importer from GIS files
  • Spatial graph viewer using Graphviz
  • Attributes importer from spreadsheets (csv, ...)

MapView crashes on Win7 (specific dataset)

System: Windows seven 64 bits, OpenFLUID 1.7.2 32 bits
OpenFLUID project : example project of the M2 "eau et ressources" course

When using mapview with this project, openfluid-builder crashes (classical error message displayed by windows).

Improve unit class management

Improve unit class management by creating a class UnitClass, ensuring that input data attributes and variables are strictly the same for all spatial units of the same class see friend qualifier

Review structure of RuntimeEnvironment

Classes: SystemEnvironment <-- OpenFLUIDEnvironment <-- ProjectEnvironment <-- RunEnvironment

SystemEnvironment (tout est statique)

  • Architecture, ...
  • ...

OpenFLUIDEnvironment (tout est statique)

  • UserHomeDir
  • TempDir
  • ...

ProjectEnvironment

  • loadProject, saveProject
  • isProject
  • getInputDir, getOutputDir
  • ...

RunEnvironment

  • setInputDir, setOutputDir
  • set/getExtraSimulatorsPaths, ...ObserversPaths, ...
  • ...

Set tests dependencies

Set tests dependencies in CMake config files, avoiding wrong order of tests excecutions

Set up a rich scheduling information

Set up a rich scheduling information returned byfunctions, as an object

  • type (never, attheend, duration)
  • duration (if any)

set durations as unsigned long long

Redesign of the plugin manager and the plugins layout

Redesign the plugin manager in order to manage any kind of plugins

  • simulation functions
  • simulation outputs

Redesign the plugins layout to publish at least the following entries - get the plugin type - get the famework version used to build the plugin - get the plugin signature - get the plugin instance

New scheduling modes with dependencies between functions

Introduce new scheduling modes based on dependencies between simulators

return FollowOther("sim.id");
the simulator will be executed on the next time point when the simulator sim.id is executed

return FollowAnyOther();
the simulator will be executed on the next time point when any other simulator is executed

Update generators for variable coupling time

Review inject and interp generators workflow:

    1. precalculate series and save as temporary files
    1. produce variables as injected series

Update generators for variable coupling time:

  • add a time step parameters to interp, fixed and random generators
  • set inject generator to follow datetime from file

Mapview as a reusable component

"Refactor mapview as a reusable component, for embed it either in OpenFLUID-Builder main application or in extensions.

The component should be parameterizable for different usages (this list is not exhaustive):

  • data source (datastore or otrher sources) and accpeted data types
  • enabled internal components (toolbar, layers bar)
  • enabled interactions (tools in toolbar, right-click, ...)
  • etc ..."

Update simulation window in OpenFLUID-Builder

Update simulation window in OpenFLUID-Builder to take into account variable time step

  • Presimulation
  • Initialize
  • Simulation with progress as a percentage instead of step completion
  • Finalize

Provide realistic examples in OpenFLUID bundle

Provide realistic examples/demos in OpenFLUID bundle

  • simulation functions
  • fully functional projects

When using builder for the first time, the examples/demos are copied in the OpenFLUID user directory in order to be used.
A menu item in the Help menu allow the user to force this copy if needed

Physical units (SI) associated to variables and parameters

Objective: associate each variable, parameter, to its physical SI unit.

  • Storing information about the units inside the objects
  • performing runtime check to detect errors
    Source form WEB IEEE Software article, “Dimensional Analysis with C++,” by Robert F. Cmelik and Narain H. Gehani. They described an approach to detecting units errors in computations involving physical units

Listeners in buddies

Use listeners in buddies for better interactions with the calling application, and possible integration in OpenFLUID-Builder

CMake modules

Create CMake modules to ease the build of OpenFLUID wares

Create file OpenFLUIDWaresMacros.cmake including the following macros

Propose default compoents based on build of libraries (GUI/no GUI, builder/no builder, landr/no_landr, ...)
Manage the ability to select other components in a second call to module

macros to build and install wares

  • OPENFLUID_BUILD_FUNCTION
  • OPENFLUID_BUILD_OBSERVER
  • OPENFLUID_BUILD_BUILDEREXT

Ressources:

Copyright text

Update copyright text in header of source files and COPYING files

Accessors names

Remove the "get" prefix in accessors names when the accessor returns a reference to a private member

Review GEOS lib management

Review GEOS lib management in CMakeLists.txt by adding standard GEOS_FOUND, GEOS_LIBRARIES and GEOS_INCLUDE_DIRS variables. Should be done using the FindGEOS module: https://github.com/mloskot/cmake-modules/blob/master/modules/FindGEOS.cmake
-lgeos in compile build target links should be removed

If not GEOS_FOUND, do not raise a fatal error but disable the build of landr and all dependent source code (parts of core, tests on GeoRasterValue, GeoVectorValue, ...)

openfluid-core should not be dependent on geos, only GDAL. Parts of GeoVectorValue and GeoRasterValue that uses geos should be transferred into the landr lib

GEOS defines must be removed from config.hpp, and should be given as definitions in the compiling options of landr

Variable time step

Introduce a scheduler which plan the executions of simulations functions during the simulation period.
The sim functions are executed following the model order at t0, then return the number of second before their own re-execution, and so on until the end of the simulation period.
If two simulation functions have to be executed on the same time step, they are sorted to follow the original model order

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.