diff --git a/src/docs/JOSS/paper.md b/src/docs/JOSS/paper.md index e5dacfdd1c4..ca0ea81c4c3 100644 --- a/src/docs/JOSS/paper.md +++ b/src/docs/JOSS/paper.md @@ -1,5 +1,5 @@ --- -title: 'GEOS: A portable multi-physics simulation framework' +title: 'GEOS-2023: A portable multi-physics simulation framework' tags: - reservoir simulations - computational mechanics @@ -12,6 +12,8 @@ authors: affiliation: 1 - name: Benjamin C. Corbett affiliation: 1 + - name: James Corbett + affiliation: 1 - name: Francois Hamon affiliation: 2 - name: Thomas Gazzola @@ -24,17 +26,17 @@ authors: affiliation: 3 - name: Nicola Castelletto affiliation: 1 - - name: Arturo Vargas - affiliation: 1 - - name: Joshua White + - name: Victor Paludetto Magri affiliation: 1 - name: William R. Tobin affiliation: 1 + - name: Joshua White + affiliation: 1 - name: Brian M. Han affiliation: 1 - name: Herve Gross affiliation: 2 - - name: Stefan Framba + - name: Stefano Framba affiliation: 2 - name: Aurilian Citrain affiliation: 2 @@ -62,47 +64,48 @@ bibliography: paper.bib GEOS is a simulation framework focused on implementing tightly-coupled multi-physics problems with an initial emphasis subsurface reservoir applications. Specifically, GEOS provides implementations for studying carbon sequestration, geothermal energy, hydrogen storage, and similar problems, and allows developers to easily extend or add new formulations to the suite of capabilities. The unique aspect of GEOS that differentiates it from existing reservoir simulators is the ability to provide tightly-coupled compositional flow, poromechanics, faults and fractures, and thermal effects. +Extensive documentation for GEOS is available at https://geosx-geosx.readthedocs-hosted.com/en/latest. # Statement of need The increasing threat of climate change has resulted in an increased focus on mitigating carbon emissions into the atmosphere. -Carbon Capture and Storage (CCS) of generated CO2 in subsurface reservoirs and saline aquifers is one of the most important technologies required to meet global climate goals. +Carbon Capture and Storage (CCS) of CO2 in subsurface reservoirs and saline aquifers is one of the most important technologies required to meet global climate goals. Given the 2050 net-zero GHG goals, CO2 storage capacities required to offset emissions is orders of magnitude greater than current levels.(reference needed) -One factor in the evaluation of CO2 storage sites are the risks associated with the injection of liquefied CO2 in the subsurface. -GEOS seeks to provide the community with an open-source tool that is capable of simulating the complex coupled physics that occurs when liquefied CO2 is injected into a subsurface reservoir. -Thus, GEOS is a freely available tool that may be used to evaluate reservoir integrity through various failure mechanisms such as caprock failure, fault leakage, and wellbore failure. +One factor in the evaluation of CO2 storage sites are the containment risks associated with the injection of liquefied CO2 in the subsurface. +The primary goal of GEOS is to provide the global community with an open-source tool that is capable of simulating the complex coupled physics that occurs when liquefied CO2 is injected into a subsurface reservoir. +Thus, GEOS is a freely available tool that is focused on the simulation of reservoir integrity through various failure mechanisms such as caprock failure, fault leakage, and wellbore failure. Additionally GEOS provides the potential to estimate seismic events induced by CO2 injection. -# Infrastructure Components +# C++ Infrastructure Components + +The core c++17 infrastructure provides components to perform common computer science tasks that are required in a simulation code. +The components of the infrastructure include a data hierarchy, a discrete mesh data structure, a physics package interface, MPI communications tools, degree-of-freedom management, IO facilities, and an event manager. -The computational core of GEOS is written in c++17, and includes a Python3 interface that allows for the integration of the simulation capabilities into complex python workflows -The c++ infrastructure provides components to isolate the domain science developer from the majority of common computer science tasks. -The components of the infrastructure includes a data hierarchy, a discrete mesh data structure, a physics package interface, MPI communications tools, degree-of-freedom management, IO facilities, etc. The data repository defines a `Wrapper` class to hold anything from data arrays to arbitrary objects, and a `Group` class that serves as a container to form a hierarchy. Drawing an analogy with a standard folder/file hierarchy, the `Group` class can be thought of as a "Folder" as it holds other `Group`'s as well as a collection of `Wrapper` objects. The `Wrapper` can be thought of as a "File" as it contains the relevant data that is stored in the repository. +The mesh interface is built on top of the data repository as a collection of managers for each mesh object type as shown in Figure \autoref{fig:meshHierarchy}. +On each MPI rank there is a `MeshBody` object that represents a physical body. +Each `MeshBody` contains a collection of `MeshLevel` objects that represent a discretization of the `MeshBody`. +Each `MeshLevel` holds a collection of managers objects that contain data on each type of discrete mesh object (i.e. nodes, edges, faces, elements). +The role of each mesh object manager is to hold maps between the mesh objects, and to hold field/dof data. -The mesh interface is built on top of the data repository as a collection of managers for each mesh object type. \autoref{fig:meshHierarchy} -A physical body is - -![UML diagram of the mesh interface hierarchy.\label{fig:meshHierarchy}](MeshHierarchy.png){ width=20% } - - -![UML diagram of the mesh interface hierarchy.\label{fig:meshHierarchy2}](MeshHierarchy.svg){ width=20% } - +![UML diagram of the mesh interface hierarchy.\label{fig:meshHierarchy}](MeshHierarchy.svg){ width=40% } -assist in the implementation of methods to solve constraint equations on complex unstructured grids. +The performance portability strategy utilized by GEOS applies LLNL's suite of portability tools RAJA[@Beckingsale:2019], CHAI[@CHAI:2023], and Umpire[@Beckingsale:2020]. +The RAJA performance portability layer provides portable kernel launching and wrappers for reductions, atomics, and local/shared memory to achieve performance on both CPU and GPU hardware. +The combination of CHAI/Umpire provides memory motion management for platforms with heterogeneous memory spaces (i.e. host memory and device memory). +Through this strategy GEOS has been successfully run on platforms ranging from GPU-based Exa-scale systems to CPU-based laptops. -that incorporate other tools such as machine learning components or geological modeling tools. +In addition to the c++ core, GEOS maintains a Python3 interface that allows for the integration of the simulation capabilities into complex python workflows involving components unrelated to GEOS. +The Python3 interface provides data exchange between GEOS simulations and the Python driver, as well as allowing the Python layer to call specific GEOS packages outside of standard GEOS event manager workflow. +# Applications +The development of GEOS specifically targets simulation of subsurfaces reservoirs. +To date GEOS has been used to simulate problems relevant to CO2 storage, enhanced geothermal systems, hydrogen storage, and both conventional and unconventional oil and gas extraction. - such as a discrete mesh data structure, MPI communications tools, degree-of-freedom management, IO facilities, etc. - -The performance portability strategy applies LLNL's suite of portability tools RAJA[@Beckingsale:2019], CHAI[@CHAI:2023], and Umpire[@Beckingsale:2020]. -Through this strategy GEOS has been successfully run on platforms ranging from GPU-based Exa-scale systems such as ORNL/Frontier down to CPU-based laptops. -Additionally GEOS may be executed on HPC cloud resources. - +However, GEOS is intended to be a generic multi-physics simulation platform. Single dollars ($) are required for inline mathematics e.g. $f(x) = e^{\pi/x}$ @@ -119,29 +122,6 @@ You can also use plain \LaTeX for equations \end{equation} and refer to \autoref{eq:fourier} from text. -# Citations - -Citations to entries in paper.bib should be in -[rMarkdown](http://rmarkdown.rstudio.com/authoring_bibliographies_and_citations.html) -format. - -If you want to cite a software repository URL (e.g. something on GitHub without a preferred -citation) then you can do it with the example BibTeX entry below for @fidgit. - -For a quick reference, the following citation commands can be used: -- `@author:2001` -> "Author et al. (2001)" -- `[@author:2001]` -> "(Author et al., 2001)" -- `[@author1:2001; @author2:2001]` -> "(Author1 et al., 2001; Author2 et al., 2002)" - -# Figures - -Figures can be included like this: -![Caption for example figure.\label{fig:example}](figure.png) -and referenced from text using \autoref{fig:example}. - -Figure sizes can be customized by adding an optional second parameter: -![Caption for example figure.](figure.png){ width=20% } - # Acknowledgements