@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
@GeoBrain-Project

GeoBrain

Geoscientific Bayesian Reasoning with Artificial Intelligence

Welcome to GeoBrain!

GeoBrain Project

PythonPyTorchLicenseVersion

What is the GeoBrain Project?

GeoBrain is an open, modular, and extensible platform for Geoscientific Bayesian Reasoning with Artificial Intelligence, designed specifically for integrated subsurface modeling.

By combining differentiable physics, Bayesian inference, and deep learning, GeoBrain enables end-to-end workflows for subsurface characterization, from geomodeling and rock physics to geophysical simulation and inversion. Every forward model is a composable operator, every operator declares how it differentiates, and the same problem object serves a deterministic optimiser and a posterior sampler alike.

The core architecture

Four contracts make that possible. Everything else, from the physics families to the samplers to the neural parameterizations, is something you can add without touching them.

  • An operator is a contract, not a function. Every forward model is a ForwardOperator that declares a DifferentiabilitySpec: its trainable inputs, its outputs, and how its gradient is obtained (full autograd, an implicit adjoint, or a hand-written VJP). The declaration is machine-checked against finite differences, so "this is differentiable" is a statement the platform can be held to rather than a promise in a docstring.
  • Physics composes with @. Chain operators in series (Gravity2D(survey) @ GardnerOperator()), run them in parallel as an OperatorBundle, and the composition's contract is derived from its links: trainable inputs from the entry link, outputs from the terminal link, differentiability level the weakest of the members. A chain that cannot be honoured is refused when you build it, not when you run it.
  • A mesh declares capabilities; physics declares requirements.TensorMesh (uniform or graded), OctreeMesh and UnstructuredMesh each satisfy a set of named protocols (UniformMesh, StructuredMesh, GeometryMesh, PrismGeometryMesh, ConnectivityMesh), and each physics declares which it needs, so "this kernel cannot run on that mesh" is caught by the type system rather than by a wrong answer. A differentiable MeshProjection bridges them, which is what lets a joint inversion run the wave equation on a structured grid and gravity straight on triangles, and still return one gradient from one backward pass.
  • One problem, two doors. The same InverseProblem serves a deterministic optimiser (create_inverter().run()) and a posterior sampler (as_posterior().sample("nuts")). Uncertainty quantification is a method call on the object you already built, not a second pipeline that has to be kept in step with the first.

Key Features

  • Differentiable Multiphysics Modeling: geostatistics, rock physics, seismic, electromagnetics, potential fields and reservoir flow in one computational graph.
  • Automatic Differentiation: inversion without hand-crafted gradients. Where autograd is the wrong tool, an implicit adjoint or a custom VJP is declared and checked against finite differences.
  • Mesh Taxonomy with Capability Contracts: tensor, graded, octree and unstructured meshes; physics runs where it is allowed to run.
  • Deep Neural Network Integration: Deep Image Prior and latent-space reparameterizations that compose onto a physics chain like any other operator.
  • Bayesian Gradient-Informed Samplers: HMC, NUTS, Langevin and SVGD behind one Posterior, with change-of-variable transforms and R-hat / ESS diagnostics.
  • Geostatistics: the kriging family, sequential and indicator simulation, variogram fitting with diagnostics, declustering and transforms.
  • Decision Under Uncertainty: the efficacy of information of a proposed measurement, scored cell by cell from a prior ensemble. What to measure next, costed before it is measured.
  • Plug-and-Play Architecture: each physics module is self-contained and composable, so new physics goes in without rewriting core logic.

Getting Started

git clone https://github.com/GeoBrain-Project/GeoBrain.git
cd GeoBrain
pip install -e ".[examples]"

See the documentation for tutorials and API reference.

Pinned Loading

  1. GeoBrainGeoBrainPublic

    An End-to-End Differentiable Platform for Integrated Subsurface Modeling

    Python 84 10

Repositories

Showing 3 of 3 repositories

Top languages

Loading…

Most used topics

Loading…