# jgcri/gcam-core architecture

> Architecture diagram of the GitHub repository jgcri/gcam-core, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jgcri/gcam-core
- Repository: https://github.com/jgcri/gcam-core

## Overview

GCAM is a dynamic-recursive integrated assessment model. Its principal workflow is to run a configured scenario across population, economic, energy, and land systems, resolve interactions among sectors and markets, and produce projections of supply, demand, land use, emissions, and climate effects. The README documents the cross-system capabilities; sampled source confirms configuration parsing, scenario-runner entry points, technology/function responsibilities, and market-related model components. Some subsystem wiring is documented only at a high level, so the graph omits uncertain implementation-level links.

Main entry points: [`cvs/objects/sectors/source/sector.cpp`](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/sectors/source/sector.cpp) (Economic sectors), [`cvs/objects/marketplace/source/marketplace.cpp`](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/marketplace/source/marketplace.cpp) (Markets), [`cvs/objects/containers/source/scenario.cpp`](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/source/scenario.cpp) (Scenario state), [`cvs/objects/containers/include/iscenario_runner.h`](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/include/iscenario_runner.h) (Scenario runners)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Run orchestration"]
  node_main["Program entry<br/>[main.cpp]"]
  node_scenario_runner["Scenario runners<br/>[iscenario_runner.h]"]
  node_scenario["Scenario state<br/>[scenario.cpp]"]
  node_world["World model<br/>[world.cpp]"]
end

subgraph group_economy["Economy and energy"]
  node_population["Population<br/>[population.cpp]"]
  node_consumers["Consumers<br/>[consumer.cpp]"]
  node_sectors["Economic sectors<br/>[sector.cpp]"]
  node_technologies["Technologies<br/>[itechnology.h]"]
  node_functions["Demand and production"]
  node_markets[("Markets<br/>[marketplace.cpp]")]
  node_resources["Resources<br/>[resource.cpp]"]
end

subgraph group_environment["Land and climate"]
  node_land["Land allocation<br/>[land_allocator.cpp]"]
  node_emissions["Emissions"]
  node_carbon["Carbon accounting"]
  node_climate["Climate model<br/>[hector_model.cpp]"]
end

subgraph group_analysis["Policy and results"]
  node_policy["Climate policies<br/>[policy_ghg.cpp]"]
  node_target_finder["Target finding"]
  node_solver["Market solvers<br/>[solver_factory.cpp]"]
  node_reporting["Model reporting"]
end

node_user(("Model user"))

node_user -->|"starts run"| node_main
node_main -->|"selects runner"| node_scenario_runner
node_scenario_runner -->|"runs scenario"| node_scenario
node_scenario -->|"models world"| node_world
node_population -->|"informs demand"| node_consumers
node_consumers -->|"demands goods"| node_sectors
node_sectors -->|"uses technologies"| node_technologies
node_technologies -->|"calculates production"| node_functions
node_sectors -->|"exchanges quantities"| node_markets
node_resources -->|"supplies commodities"| node_markets
node_sectors -->|"allocates land use"| node_land
node_land -->|"contributes emissions"| node_emissions
node_sectors -->|"generates emissions"| node_emissions
node_emissions -->|"accounts carbon"| node_carbon
node_carbon -->|"informs climate"| node_climate
node_policy -->|"affects markets"| node_markets
node_target_finder -->|"runs target cases"| node_scenario_runner
node_solver -->|"solves markets"| node_markets
node_scenario -->|"writes results"| node_reporting

click node_main "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/main/source/main.cpp"
click node_scenario_runner "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/include/iscenario_runner.h"
click node_scenario "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/source/scenario.cpp"
click node_world "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/source/world.cpp"
click node_population "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/demographics/source/population.cpp"
click node_consumers "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/consumers/source/consumer.cpp"
click node_sectors "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/sectors/source/sector.cpp"
click node_technologies "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/technologies/include/itechnology.h"
click node_functions "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/functions/source/function_manager.cpp"
click node_markets "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/marketplace/source/marketplace.cpp"
click node_resources "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/resources/source/resource.cpp"
click node_land "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/land_allocator/source/land_allocator.cpp"
click node_emissions "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/emissions/source/emissions_summer.cpp"
click node_carbon "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/ccarbon_model/source/node_carbon_calc.cpp"
click node_climate "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/climate/source/hector_model.cpp"
click node_policy "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/policy/source/policy_ghg.cpp"
click node_target_finder "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/target_finder/source/policy_target_runner.cpp"
click node_solver "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/solution/solvers/source/solver_factory.cpp"
click node_reporting "https://github.com/jgcri/gcam-core/blob/master/cvs/objects/reporting/source/xml_db_outputter.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_scenario_runner,node_scenario,node_world,node_user toneBlue
class node_population,node_consumers,node_sectors,node_technologies,node_functions,node_markets,node_resources toneAmber
class node_land,node_emissions,node_carbon,node_climate toneMint
class node_policy,node_target_finder,node_solver,node_reporting toneRose
```

## Components

### Run orchestration

- [Program entry](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/main/source/main.cpp): `cvs/objects/main/source/main.cpp`
- [Scenario runners](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/include/iscenario_runner.h): `cvs/objects/containers/include/iscenario_runner.h`
- [Scenario state](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/source/scenario.cpp): `cvs/objects/containers/source/scenario.cpp`
- [World model](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/containers/source/world.cpp): `cvs/objects/containers/source/world.cpp`

### Economy and energy

- [Population](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/demographics/source/population.cpp): `cvs/objects/demographics/source/population.cpp`
- [Consumers](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/consumers/source/consumer.cpp): `cvs/objects/consumers/source/consumer.cpp`
- [Economic sectors](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/sectors/source/sector.cpp): `cvs/objects/sectors/source/sector.cpp`
- [Technologies](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/technologies/include/itechnology.h): `cvs/objects/technologies/include/itechnology.h`
- [Demand and production](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/functions/source/function_manager.cpp): `cvs/objects/functions/source/function_manager.cpp`
- [Markets](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/marketplace/source/marketplace.cpp): `cvs/objects/marketplace/source/marketplace.cpp`
- [Resources](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/resources/source/resource.cpp): `cvs/objects/resources/source/resource.cpp`

### Land and climate

- [Land allocation](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/land_allocator/source/land_allocator.cpp): `cvs/objects/land_allocator/source/land_allocator.cpp`
- [Emissions](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/emissions/source/emissions_summer.cpp): `cvs/objects/emissions/source/emissions_summer.cpp`
- [Carbon accounting](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/ccarbon_model/source/node_carbon_calc.cpp): `cvs/objects/ccarbon_model/source/node_carbon_calc.cpp`
- [Climate model](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/climate/source/hector_model.cpp): `cvs/objects/climate/source/hector_model.cpp`

### Policy and results

- [Climate policies](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/policy/source/policy_ghg.cpp): `cvs/objects/policy/source/policy_ghg.cpp`
- [Target finding](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/target_finder/source/policy_target_runner.cpp): `cvs/objects/target_finder/source/policy_target_runner.cpp`
- [Market solvers](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/solution/solvers/source/solver_factory.cpp): `cvs/objects/solution/solvers/source/solver_factory.cpp`
- [Model reporting](https://github.com/jgcri/gcam-core/blob/master/cvs/objects/reporting/source/xml_db_outputter.cpp): `cvs/objects/reporting/source/xml_db_outputter.cpp`

### Other components

- **Model user**

## Connections

- Model user → Program entry: starts run
- Program entry → Scenario runners: selects runner
- Scenario runners → Scenario state: runs scenario
- Scenario state → World model: models world
- Population → Consumers: informs demand
- Consumers → Economic sectors: demands goods
- Economic sectors → Technologies: uses technologies
- Technologies → Demand and production: calculates production
- Economic sectors → Markets: exchanges quantities
- Resources → Markets: supplies commodities
- Economic sectors → Land allocation: allocates land use
- Land allocation → Emissions: contributes emissions
- Economic sectors → Emissions: generates emissions
- Emissions → Carbon accounting: accounts carbon
- Carbon accounting → Climate model: informs climate
- Climate policies → Markets: affects markets
- Target finding → Scenario runners: runs target cases
- Market solvers → Markets: solves markets
- Scenario state → Model reporting: writes results
