# Open3DCP v1.7.5

**Open Data Standard for 3D Concrete Printing**

> **Status: Draft** — under working-group review; the schema may change before ratification.
>
> **v1.7.5 (2026-06-10): preserve, don't presume.** Four columns (244 → **248**) that remove the schema's last forced guesses, driven by the honest ingestion-fidelity metric: `cement_unspecified`, `fine_agg_unspecified`, `coarse_agg_unspecified` (store the exact mass when the source states no type / FM / size — the generic-`fly_ash` pattern completed; classifications stay NULL instead of being defaulted) and `admixture_basis` (`solids` | `as_delivered` — record the as-delivered mass exactly with its basis instead of assuming a solids fraction). The ingestion tool no longer defaults an unstated cement type; unclassified constituents land in the `*_unspecified` columns with fidelity *exact*.
>
> **v1.7 (2026-06-04):** **kg/m³ adopted as the primary reporting basis** (industry/field standard; mass-% retained as a derived secondary representation), with lossless-conversion columns `original_basis`, `total_batched_mass_kg_m3`, `total_binder_kg_m3`; **per-measurement uncertainty** columns (`compressive_strength_stddev_mpa`, `flexural_strength_stddev_mpa`, `tensile_strength_stddev_mpa`, `elastic_modulus_stddev_gpa`, `interlayer_bond_stddev_mpa`); and **raw-data references** (`raw_data_doi`, `stress_strain_file`, `rheology_curve_file`, `microstructure_image`, `raw_data_file`). **Aggregate-conditioning columns added** so effective (free) mix water is recoverable when aggregates are batched off SSD: `aggregate_moisture_state`, `aggregate_absorption_pct`, `aggregate_moisture_content_pct` (ASTM C127/C128, C566), plus a process flag `aggregate_prewetted` for the common practice of pre-wetting aggregate to a damp condition. **Classification & batch timeline:** `material_class` (mix/binder system), `batch_label` (physical batch sub-identifier), and `date_of_casting` (t=0 of the curing clock — with the test date the ingestor can derive `test_age_days`) — three fields previously routed to the ingestion sidecar now have columns. **Intelligent ingestion:** the ingestor now maps these, routes `data` records by their `data_type` (scalar → property column; curve/image → the right `*_file` column; curve axis-unit descriptors → `provenance_notes`), corrects the wet-mass denominator to include admixtures/SCMs, and excludes consumed selector/metadata fields from the fidelity coverage denominator. Tooling/fidelity fixes: imperial-tonnage units (`lb_yd3`, US short ton, UK long ton) added and a bare "ton" rejected as ambiguous; ingestion fidelity refined so relational foreign keys no longer count against coverage; test-method crosswalk completed (and an `is_3d_printed`/curing enum-mapping bug fixed). Backward-compatible (additive); v1.6 datasets remain valid.
>
> **v1.6 (2026-05-05):** Experimental SCM per-grade taxonomy split (`slag_grade_80/100/120`, `metakaolin_high_purity/standard`, `pumice_coarse/powder/sand`; +8 columns, tagged V1.6.0) — **consolidated away in 1.6.5** before the v1.7 feature columns landed, with grade/purity now recorded in `provenance_notes`. The git-tag column counts therefore read v1.5 = 224 → v1.6 = 232 → v1.7 = 244, the 232 reflecting the since-reverted split. See CHANGELOG for detail.
>
> **v1.5 (2026-04-16):** Pigment columns: `iron_oxide_pigment`, `titanium_dioxide_pigment`, `chromium_oxide_pigment`, `carbon_black_pigment`, `pigment_other`. Pigments are ultra-fine (~1 um), used at 1-5% in architectural 3DCP, with significant impact on packing, water demand, and microstructure. The canonical column list below is the source of truth for the public v1.5 schema.
>
> **v1.4 (2026-04-16):** Alkali-activated material (AAM) columns: `sodium_hydroxide`, `sodium_silicate`, `potassium_hydroxide`, `potassium_silicate`, `activator_ms_ratio`, `na2o_dosage_pct`, `nano_clay`, `mineral_powder`, `mwcnt`, `graphene_oxide`, `rice_husk_ash`, `recycled_sand`.
>
> **v1.3 (2026-04-16):** Added `cellulose_fiber`, `sorptivity_secondary_mm_sqrt_s`. Removed 3 redundant columns.
>
> **v1.2 (2026-04-15):** 11 durability/transport columns (ASTM C642, C1202, C666, C157, C1585, C231, interlayer bond). Claude prompt caching for extraction. Relaxed minimum-bar gate: accepts any measurement, not just compressive.
>
> **v1.1 (2026-04-15):** Added `cement_type_2/3/4`, `hpmc`, `vma`, `shrinkage_reducer`, and expanded fiber/admixture synonym coverage.

A flat database schema for 3D-printable concrete (3DCP) mix design data. Open3DCP captures materials, process parameters, fresh-state rheology, hardened mechanical properties, durability performance, and environmental impact in a single table designed for analysis, exchange, and ML-oriented workflows.

---

## Design Principles

1. **Flat schema** -- Every feature is a named column, no JSON parsing required for ML.
2. **Dual basis, kg/m³ first-class (v1.7)** -- the constituent columns store mass-% of total wet mix (the self-normalizing projection); the source's kg/m³ — the industry/field standard — is preserved exactly via `total_batched_mass_kg_m3` (the sum of as-batched constituent masses — the bridge denominator, not a measured density) and `total_binder_kg_m3`, with `original_basis` recording what the source reported. Either basis is recoverable with no density assumption.
3. **ASTM/RILEM-aligned** -- Column naming follows established standards: ASTM C150 (cement types), ASTM C618 (fly ash), ASTM C989 (slag), ASTM C1240 (silica fume), ASTM C33 (aggregate grading by fineness modulus).
4. **3DCP-native** -- First-class columns for print process parameters (nozzle, layer, speed, pump), rheology (yield stress, thixotropy, open time), and interlayer properties that don't exist in conventional concrete schemas.
5. **Multi-age** -- Companion `strength_measurements` table stores multi-age data (1, 3, 7, 14, 28, 56, 90, 365 days).

---

## Units Convention

All values in Open3DCP are stored in **SI/metric units**. This is consistent with international research practice and simplifies ML training (no mixed-unit columns). For US users accustomed to imperial units, a conversion reference:

| Metric (stored) | US Equivalent | Conversion |
|-----------------|---------------|------------|
| MPa | psi | 1 MPa = 145.04 psi |
| mm | inches | 25.4 mm = 1 inch |
| kg/m3 | lb/yd3 | 1 kg/m3 = 1.686 lb/yd3 |
| bar | psi | 1 bar = 14.504 psi |
| meters | feet | 1 m = 3.281 ft |
| C | F | F = C × 9/5 + 32 |
| m/s | mph | 1 m/s = 2.237 mph |
| Pa | psi | 1 Pa = 0.000145 psi |

Use `NULL` when a value is unknown, not reported, not applicable, or not measured. Use `0` only when the source explicitly reports that the material or property was absent or equal to zero. This distinction is important for statistical analysis and model training.

---

## Main Table: `mix_designs`

### Identity & Versioning

| Column | Type | Description |
|--------|------|-------------|
| `id` | integer | Auto-increment primary key |
| `mix_id` | varchar | Unique human-readable identifier |
| `name` | varchar | Descriptive name |
| `parent_mix_id` | varchar | Links to parent formulation if this is a variant or iteration |
| `version` | varchar | Formulation version string |
| `material_class` | varchar | Mix/binder system classification: `OPC` / `blended_OPC` / `AAM` / `CAC` / `CSA` / `UHPC` / `mortar` / `paste` / `concrete`. A primary classification (also lets ingestion route by chemistry), not free metadata. |
| `batch_label` | varchar | Physical batch sub-identifier within a mix design (provenance; distinguishes repeat batches of one formulation) |
| `date_of_casting` | date | Casting/pour date = t=0 of the curing clock; with the test date it yields `test_age_days`. Distinct from `created_at` (record creation). |
| `created_at` | timestamptz | Record creation timestamp |

### Binder Materials (mass-% of total wet mix)

Cements are classified by ASTM C150 / EN 197-1 type. SCMs follow their respective ASTM standards.

| Column | Type | Description | Standard |
|--------|------|-------------|----------|
| `cement_type_1` | real | General purpose Portland cement | ASTM C150 Type I |
| `cement_type_1_2` | real | General purpose / moderate sulfate resistance (most commonly sold cement in the US) | ASTM C150 Type I/II |
| `cement_type_1l` | real | Portland-limestone cement (ASTM C595 Type IL: >5–15% limestone; EN 197-1 CEM II/A-L: 6–20%) | ASTM C595 / EN 197-1 CEM II/A-L |
| `cement_type_2` | real | Moderate sulfate resistance, moderate heat of hydration | ASTM C150 Type II |
| `cement_type_3` | real | High early strength / rapid hardening | ASTM C150 Type III |
| `cement_type_4` | real | Low heat of hydration (rarely manufactured) | ASTM C150 Type IV |
| `cement_type_5` | real | High sulfate resistance (required in sulfate-rich soils, common in western US) | ASTM C150 Type V |
| `cac` | real | Calcium aluminate cement (Ciment Fondu) | EN 14647 |
| `csa_cement` | real | Calcium sulfoaluminate cement | -- |
| `cement_unspecified` | real | Cement whose ASTM/EN type the source does not state (v1.7.5). Mass stored exactly; the type stays NULL — never defaulted. Refine to a `cement_type_*` column only when the source states the type | -- |
| `fly_ash` | real | Fly ash (class not specified in source) | -- |
| `fly_ash_type_f` | real | Class F fly ash (SiO2+Al2O3+Fe2O3 ≥ 70%) | ASTM C618 |
| `fly_ash_type_c` | real | Class C fly ash (SiO2+Al2O3+Fe2O3 ≥ 50%) | ASTM C618 |
| `silica_fume` | real | Silica fume / microsilica | ASTM C1240 |
| `nano_silica` | real | Nano-SiO2 (colloidal or fumed, <100 nm) | -- |
| `slag` | real | GGBS, grade not specified in source | ASTM C989 |
| `metakaolin` | real | Calcined kaolin clay, reactivity grade not specified in source | ASTM C618 Class N |
| `limestone` | real | Limestone filler / calcium carbonate | EN 12620 |
| `pumice` | real | Natural pozzolan (pumice), grade not specified in source | ASTM C618 Class N |
| `bottom_ash` | real | Coal bottom ash | -- |
| `rice_husk_ash` | real | Rice husk ash (pozzolan) | -- |

### Alkali Activators (mass-% of total wet mix)

For alkali-activated materials (AAM), the activator solution replaces water as the liquid phase. Record activator components as mass-% of total wet mix (including activator solution mass). Use `activator_ms_ratio` and `na2o_dosage_pct` to capture the key AAM design parameters.

| Column | Type | Description |
|--------|------|-------------|
| `sodium_hydroxide` | real | NaOH (mass-%, purity-adjusted solids) |
| `sodium_silicate` | real | Sodium silicate solution / waterglass (mass-%, as-delivered liquid) |
| `potassium_hydroxide` | real | KOH (mass-%, purity-adjusted solids) |
| `potassium_silicate` | real | Potassium silicate solution (mass-%, as-delivered liquid) |
| `activator_ms_ratio` | real | SiO2/Na2O molar modulus of the activator solution |
| `na2o_dosage_pct` | real | Na2O as % of binder mass (common AAM reporting convention) |

### Additional Modifiers (mass-% of total wet mix)

| Column | Type | Description |
|--------|------|-------------|
| `nano_clay` | real | Nano clay / montmorillonite / nanoclay (rheology modifier for AAM and OPC 3DCP) |
| `mineral_powder` | real | Generic mineral powder / filler (common in Chinese 3DCP literature) |
| `mwcnt` | real | Multi-walled carbon nanotubes |
| `graphene_oxide` | real | Graphene oxide / reduced graphene oxide (rGO) |
| `recycled_sand` | real | Recycled concrete aggregate sand |

### Pigments (mass-% of total wet mix)

Pigments are ultra-fine particles (~1 um) used at 1-5% in architectural 3DCP. At these dosages they significantly affect particle packing, water demand, and microstructure due to their high surface area and surface energy. The schema tracks pigment mass-% separately from fillers because their rheological and microstructural effects are distinct from inert fillers.

| Column | Type | Description |
|--------|------|-------------|
| `iron_oxide_pigment` | real | Iron oxide pigment — red (Fe2O3), yellow (FeOOH), black (Fe3O4), or brown blends. Most common concrete pigment. |
| `titanium_dioxide_pigment` | real | TiO2 white pigment. Also used for photocatalytic self-cleaning surfaces. |
| `chromium_oxide_pigment` | real | Cr2O3 green pigment |
| `carbon_black_pigment` | real | Carbon black pigment (distinct from coal bottom ash or fly ash) |
| `pigment_other` | real | Other/unspecified pigment (record type in `provenance_notes`) |

### Aggregate Materials (mass-% of total wet mix)

Sand is classified using US industry ordering terms. Fineness modulus (FM) ranges are adapted from ASTM C33 grading principles; note that ASTM C33 defines fine aggregate as FM 2.3-3.1 without further subdivision. Coarse aggregates use ASTM C33 size numbers. Many standard 3DCP systems are limited to Size #8 or smaller by pump and nozzle constraints, while larger sizes are included for large-nozzle systems, conventional concrete compatibility, and cross-dataset completeness.

| Column | Type | Description | ASTM C33 / FM | Typical US Order Name |
|--------|------|-------------|---------------|----------------------|
| `mason_sand` | real | Very fine sand, high fines content | FM 1.0-1.8 | Mason sand / plaster sand |
| `fine_sand` | real | Fine concrete sand | FM 1.6-2.2 | Fine sand |
| `concrete_sand` | real | Standard concrete sand (most common in US 3DCP) | FM 2.3-3.0 | Concrete sand / C33 sand |
| `coarse_sand` | real | Coarse washed sand | FM 3.1-3.7 | Coarse sand / torpedo sand |
| `fine_agg_unspecified` | real | Fine aggregate with no stated fineness modulus / grading (v1.7.5). Mass stored exactly; the FM bucket stays NULL — never guessed | -- | Fine aggregate / sand (grading unstated) |
| `agg_size_89` | real | Very fine gravel (3/8" - #16 sieve, 9.5-1.18 mm) | ASTM C33 Size #89 | #89 stone |
| `agg_size_8` | real | Fine pea gravel (3/8" - #8 sieve, 9.5-2.36 mm) | ASTM C33 Size #8 | Pea gravel / #8 stone |
| `agg_size_7` | real | 1/2" - #4 (12.5-4.75 mm) | ASTM C33 Size #7 | #7 stone |
| `agg_size_67` | real | 3/4" - #4 (19-4.75 mm) | ASTM C33 Size #67 | Common structural |
| `agg_size_6` | real | 3/4" - 3/8" (19-9.5 mm) | ASTM C33 Size #6 | #6 stone |
| `agg_size_57` | real | 1" - #4 (25-4.75 mm) | ASTM C33 Size #57 | Most common US concrete |
| `agg_size_5` | real | 1" - 1/2" (25-12.5 mm) | ASTM C33 Size #5 | #5 stone |
| `agg_size_467` | real | 1.5" - #4 (37.5-4.75 mm) | ASTM C33 Size #467 | Common ready-mix |
| `agg_size_4` | real | 1.5" - 3/4" (37.5-19 mm) | ASTM C33 Size #4 | #4 stone |
| `agg_size_357` | real | 2" - #4 (50-4.75 mm) | ASTM C33 Size #357 | Crusher run |
| `agg_size_3` | real | 2" - 1" (50-25 mm) | ASTM C33 Size #3 | #3 stone |
| `agg_size_2` | real | 2.5" - 1.5" (63-37.5 mm) | ASTM C33 Size #2 | #2 stone |
| `agg_size_1` | real | 3.5" - 1.5" (90-37.5 mm) | ASTM C33 Size #1 | Large stone |
| `coarse_agg_unspecified` | real | Coarse aggregate with no stated maximum size / C33 size number (v1.7.5). Mass stored exactly; the size class stays NULL — never defaulted | -- | Coarse aggregate (size unstated) |

Note: Most 3DCP systems are limited to Size #8 or smaller due to pump and nozzle constraints. Sizes #7 and above are included for large-nozzle systems, conventional concrete compatibility, and completeness as a global standard.

### Fiber Reinforcement (mass-% of total wet mix)

| Column | Type | Description |
|--------|------|-------------|
| `steel_fiber` | real | Steel fiber (hooked, crimped, or micro) |
| `pp_fiber` | real | Polypropylene fiber |
| `glass_fiber` | real | Alkali-resistant glass fiber |
| `carbon_fiber` | real | Carbon fiber |
| `pva_fiber` | real | Polyvinyl alcohol fiber |
| `basalt_fiber` | real | Basalt fiber |
| `nylon_fiber` | real | Nylon fiber |
| `aramid_fiber` | real | Aramid fiber (Kevlar) |
| `cellulose_fiber` | real | Cellulose fibers for FRC (ASTM D7357); natural plant/bast fibers recorded here, type in `provenance_notes` |
| `fiber_length_mm` | real | Fiber length (mm). Industry example: Dramix 3D 65/35 = 35 mm |
| `fiber_diameter_mm` | real | Fiber diameter (mm). Required to calculate aspect ratio |
| `fiber_aspect_ratio` | real | Length-to-diameter ratio (L/d). Common fiber bridging and ordering parameter. Example: Dramix 65/35 has L/d = 65 |
| `fiber_tensile_strength_mpa` | real | Fiber tensile strength as specified by supplier |

### Chemical Admixtures (mass-% of total wet mix)

**Important:** Admixture values in this schema represent **solids content by mass-%** of total wet mix. Most commercial admixtures are sold as liquid solutions (typically 20-40% solids by weight). When recording data from a liquid product, convert to solids content using the manufacturer's technical data sheet. For example, a PCE superplasticizer dosed at 1.0% liquid with 30% solids content should be recorded as 0.3% in this schema.

| Column | Type | Description |
|--------|------|-------------|
| `superplasticizer` | real | High-range water reducer (PCE, SNF, SMF) -- ASTM C494 Type F/G. Record as solids content. |
| `water_reducer` | real | Mid/normal-range water reducer -- ASTM C494 Type A |
| `accelerator` | real | Set/strength accelerator -- ASTM C494 Type C/E |
| `calcium_formate` | real | Organic salt accelerator (Ca(HCOO)2), promotes early C3S hydration. Used as set accelerator; not formally classified under the C494 admixture standard (no governing standard) |
| `retarder` | real | Set retarder -- ASTM C494 Type B/D |
| `air_entrainer` | real | Air-entraining admixture -- ASTM C260 |
| `vma` | real | Viscosity-modifying admixture (generic) |
| `shrinkage_reducer` | real | Shrinkage-reducing admixture |
| `corrosion_inhibitor` | real | Corrosion-inhibiting admixture |

### Clay / VMA Additives (mass-% of total wet mix)

Specialized rheology modifiers for 3DCP thixotropy and shape retention.

| Column | Type | Description | Mineral Class |
|--------|------|-------------|---------------|
| `hpmc` | real | Hydroxypropyl methylcellulose (cellulose ether VMA) | Organic polymer |
| `sepiolite_clay` | real | Sepiolite clay (fiber-network thixotropy) | Chain silicate |
| `attapulgite` | real | Attapulgite / palygorskite (fiber-network, US domestic) | Chain silicate |
| `calcium_bentonite` | real | Calcium bentonite (low-moderate swell) | Smectite |

### Water & Ratios

| Column | Type | Description |
|--------|------|-------------|
| `water` | real | Free (added) mix water, aggregates at SSD basis (mass-% of total wet mix). See *Aggregate Conditioning* to recover effective water when batched off SSD. |
| `w_c_ratio` | real | Water-to-cement ratio (water / cement only) |
| `w_b_ratio` | real | Water-to-binder ratio (water / all cementitious materials) |
| `a_b_ratio` | real | Aggregate-to-binder ratio |
| `water_premix_pct` | real | % of water added during pre-mix phase |
| `water_temperature_c` | real | Water temperature at mixing (C) |

### Aggregate Conditioning (v1.7)

As-batched aggregate moisture relative to the **SSD** (saturated surface-dry) reference, so the
**effective (free) mix water** can be recovered when aggregates are batched off SSD — a common
3DCP practice (see `aggregate_prewetted` in *Mixing Process*). Recorded at mix level, not per
aggregate fraction. The free water an aggregate contributes (+) or absorbs (−) is
`aggregate_moisture_content_pct − aggregate_absorption_pct`; together with the SSD-basis `water`
column this makes the water accounting unambiguous without duplicating the w/c and w/b ratios.

| Column | Type | Description | Test Method |
|--------|------|-------------|-------------|
| `aggregate_moisture_state` | varchar | As-batched condition: `oven_dry` / `air_dry` / `SSD` / `wet` | -- |
| `aggregate_absorption_pct` | real | 24-h aggregate absorption, % of oven-dry mass | ASTM C127 / C128 |
| `aggregate_moisture_content_pct` | real | Total as-batched aggregate moisture, % of oven-dry mass (free moisture = this − absorption) | ASTM C566 |

### Mix Basis (v1.7; `admixture_basis` v1.7.5)

The constituent columns store the mass-% projection; the source's kg/m³ basis is preserved exactly. Record the source's native basis and the batched-mass total so the two convert without any assumption.

| Column | Type | Description |
|--------|------|-------------|
| `original_basis` | varchar | Basis the source reported: `kg_m3` (primary), `mass_pct`, `volume`, or `lb_yd3` |
| `admixture_basis` | varchar | Basis of the row's admixture columns: `solids` \| `as_delivered` (v1.7.5). Recording the as-delivered mass WITH this flag preserves the source exactly when no solids fraction is stated; solids are derivable when the fraction is known |
| `total_batched_mass_kg_m3` | real | Sum of as-batched constituent masses per m³ — the mass-% ↔ kg/m³ bridge denominator (NOT a measured fresh density; use `unit_weight_fresh_kg_m3` for ASTM C138). Where the as-batched masses are design proportions, an absolute-volume yield note is recorded in `provenance_notes`. |
| `total_binder_kg_m3` | real | Total cementitious content (kg/m³); supports w/b and absolute back-conversion |

### Test Conditions

| Column | Type | Description |
|--------|------|-------------|
| `design_strength_mpa` | real | Specified/target compressive strength (f'c) the mix is designed to achieve. This is the number on a concrete order ticket. |
| `test_age_days` | integer | Age at testing (default: 28) |
| `specimen_prep` | varchar | Specimen preparation method |
| `specimen_geometry` | varchar | Specimen shape (see standard geometries below) |
| `specimen_length_mm` | real | Specimen dimension L |
| `specimen_width_mm` | real | Specimen dimension W |
| `specimen_height_mm` | real | Specimen dimension H |
| `test_orientation` | varchar | Loading direction relative to print layers |
| `test_orientation_code` | varchar | Coded orientation (X, Y, Z, XY_45, CAST) |
| `test_method_code` | varchar | Test standard reference (e.g., ASTM C39, EN 12390-3) |
| `n_specimens` | integer | Number of specimens averaged |
| `curing_regime` | varchar | Curing description (moist, sealed, ambient, steam) |
| `curing_regime_code` | varchar | Coded curing regime |
| `curing_temperature_c` | real | Curing temperature (C) |
| `curing_humidity_pct` | real | Curing relative humidity (%) |
| `curing_duration_days` | real | Curing duration in days |

**Standard specimen geometries:** 3DCP research commonly uses mortar-scale specimens (smaller than standard concrete specimens due to printable mix proportions and nozzle constraints). Both standard concrete and mortar geometries are listed below.

| Geometry | Dimensions (mm) | Dimensions (in) | Test | Standard |
|----------|-----------------|-----------------|------|----------|
| **Mortar specimens (common in 3DCP)** | | | | |
| Mortar cube | 50 × 50 × 50 | 2" × 2" × 2" | Compressive | ASTM C109 |
| Mortar prism | 40 × 40 × 160 | 1.6" × 1.6" × 6.3" | Flexural / Compressive | EN 196-1 |
| Mini cylinder | 50 dia × 100 | 2" dia × 4" | Compressive | -- |
| Dog-bone (uniaxial tension) | varies | varies | Direct tensile | -- |
| **Standard concrete specimens** | | | | |
| Cylinder (small) | 100 dia × 200 | 4" dia × 8" | Compressive | ASTM C39 |
| Cylinder (standard) | 150 dia × 300 | 6" dia × 12" | Compressive | ASTM C39 |
| Cube | 150 × 150 × 150 | 6" × 6" × 6" | Compressive | EN 12390-3 |
| Beam | 150 × 150 × 500 | 6" × 6" × 20" | Flexural | ASTM C78 |
| Split cylinder | 150 dia × 300 | 6" dia × 12" | Splitting tensile | ASTM C496 |

### 3DCP Process Parameters

These columns capture the full extrusion printing process. Null for cast specimens.

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `is_3d_printed` | boolean | True if specimen was 3D printed (false = cast/moulded) | -- |
| `print_speed_mm_s` | real | Nozzle travel speed | mm/s |
| `layer_height_mm` | real | Deposited layer height | mm |
| `layer_time_gap_s` | real | Time interval between successive layers | seconds |
| `nozzle_diameter_mm` | real | Nozzle exit diameter | mm |
| `nozzle_shape` | varchar | Nozzle cross-section (circular, rectangular, custom) | -- |
| `nozzle_area_mm2` | real | Nozzle exit area | mm2 |
| `filament_width_mm` | real | Deposited filament width | mm |
| `layer_width_mm` | real | Layer width after deposition | mm |
| `extrusion_rate_l_min` | real | Volumetric extrusion rate | L/min |
| `num_layers` | integer | Total number of printed layers | -- |
| `path_length_mm` | real | Total toolpath length per layer | mm |
| `infill_pattern` | varchar | Internal fill pattern (solid, zigzag, contour) | -- |
| `contour_count` | integer | Perimeter contours (wall passes) per layer; slicer synonyms: wall line count / wall layers / perimeters / shells — distinct from `num_layers` | -- |
| `print_direction` | varchar | Primary print path direction | -- |

### Pumping System

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `pump_type` | varchar | Pump mechanism (piston, progressive cavity, peristaltic) | -- |
| `pump_pressure_bar` | real | Pump outlet pressure | bar |
| `pump_rotational_speed_rpm` | real | Pump motor speed | rpm |
| `pump_distance_m` | real | Hose length from pump to nozzle | m |
| `pipe_diameter_mm` | real | Delivery hose internal diameter | mm |
| `pumping_duration_s` | real | Total pumping time | seconds |

### Mixing Process

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `mixing_time_s` | real | Total mixing duration | seconds |
| `mixing_speed_rpm` | real | Mixer blade speed | rpm |
| `mixer_type` | varchar | Mixer type (pan, planetary, twin-shaft, continuous) | -- |
| `shear_rate_per_s` | real | Applied shear rate during mixing | 1/s |
| `admixture_addition_point` | varchar | When admixtures were added (dry, wet, delayed) | -- |
| `aggregate_prewetted` | boolean | Aggregate pre-wetted / pre-soaked before batching (common 3DCP practice; pairs with *Aggregate Conditioning*) | -- |

### Environmental Conditions

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `mix_temperature_c` | real | Concrete temperature at mixing | C |
| `ambient_temperature_c` | real | Ambient air temperature during printing | C |
| `ambient_humidity_pct` | real | Ambient relative humidity during printing | % |
| `wind_speed_m_s` | real | Wind speed during outdoor printing | m/s |

### Target Properties -- Fresh State

| Column | Type | Description | Unit | Test Method |
|--------|------|-------------|------|-------------|
| `slump_mm` | real | Slump height | mm | ASTM C143 |
| `spread_mm` | real | Spread / flow diameter | mm | ASTM C1611 (SCC slump flow) / C1437 (mortar flow table) |
| `yield_stress_pa` | real | Static yield stress | Pa | Rheometer |
| `plastic_viscosity_pa_s` | real | Plastic viscosity | Pa.s | Rheometer |
| `static_yield_stress_pa` | real | Static yield stress (at rest) | Pa | Rheometer |
| `dynamic_yield_stress_pa` | real | Dynamic yield stress (during flow) | Pa | Rheometer |
| `thixotropy_pa_per_s` | real | Structural buildup rate (Athix) | Pa/s | Rheometer |
| `structuration_rate_pa_per_s` | real | Structuration rate | Pa/s | Rheometer |
| `open_time_min` | real | Workable window before set | minutes | -- |
| `green_strength_kpa` | real | Strength of fresh concrete (buildability) | kPa | -- |
| `air_content_fresh_pct` | real | Fresh-state air content | % | ASTM C231 |
| `unit_weight_fresh_kg_m3` | real | Fresh unit weight | kg/m3 | ASTM C138 |
| `setting_time_initial_min` | real | Initial set | minutes | ASTM C191 (paste, Vicat) / C403 (mortar-concrete, penetration) |
| `setting_time_final_min` | real | Final set | minutes | ASTM C191 (paste, Vicat) / C403 (mortar-concrete, penetration) |
| `bleeding_pct` | real | Bleeding water (% of mix water) | % | ASTM C232 |
| `temperature_fresh_c` | real | Concrete temperature at discharge | C | -- |
| `j_ring_mm` | real | J-Ring passing ability | mm | ASTM C1621 |
| `v_funnel_s` | real | V-Funnel flow time | seconds | EN 12350-9 |
| `l_box_ratio` | real | L-Box passing ratio (H2/H1) | -- | EN 12350-10 |
| `segregation_resistance_pct` | real | Sieve segregation | % | EN 12350-11 |

### Target Properties -- Mechanical (Hardened)

| Column | Type | Description | Unit | Test Method |
|--------|------|-------------|------|-------------|
| `compressive_strength_mpa` | real | Compressive strength | MPa | ASTM C39 / EN 12390-3 |
| `tensile_strength_mpa` | real | Direct (uniaxial) tensile strength | MPa | — (no consensus ASTM method for concrete; RILEM dog-bone / pull-off ASTM C1583) |
| `splitting_tensile_mpa` | real | Splitting (Brazilian / indirect) tensile | MPa | ASTM C496 |
| `flexural_strength_mpa` | real | Flexural (modulus of rupture) | MPa | ASTM C78 |
| `elastic_modulus_gpa` | real | Static elastic modulus | GPa | ASTM C469 |
| `bond_strength_mpa` | real | Bond / pull-off strength | MPa | ASTM C1583 |
| `fracture_energy_n_m` | real | Fracture energy (GF) | N/m | RILEM TC 50-FMC (1985) |
| `toughness_index` | real | Toughness index (I5, I10, I20) | -- | ASTM C1018 (withdrawn 2006; current ASTM C1609/C1399) |
| `impact_resistance_j` | real | Impact energy | J | ACI 544.2R |
| `fatigue_life_cycles` | real | Fatigue life (cycles to failure) | -- | -- |
| `density_hardened_kg_m3` | real | Hardened density | kg/m3 | ASTM C642 |
| `poissons_ratio` | real | Poisson's ratio | -- | ASTM C469 |

### Target Properties -- 3DCP Interlayer

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `interlayer_bond_mpa` | real | Tensile bond between printed layers (pull-off) | MPa | ASTM C1583 |
| `interlayer_shear_mpa` | real | Shear strength at layer interface | MPa | — |
| `air_content_deposited_pct` | real | Air content in deposited filament | % |
| `void_area_fraction_pct` | real | Void fraction at interlayer zone | % |
| `surface_roughness_avg` | real | Surface roughness of printed layer | -- |
| `surface_moisture_state` | varchar | Surface condition at interface (dry, SSD, wet) | -- |
| `surface_treatment` | varchar | Interface treatment (none, scratch, bonding agent) | -- |

### Target Properties -- Durability

| Column | Type | Description | Unit | Test Method |
|--------|------|-------------|------|-------------|
| `chloride_rcpt_coulombs` | real | Rapid chloride permeability (total charge) | Coulombs | ASTM C1202 |
| `chloride_migration_coeff` | real | Non-steady-state chloride migration | m2/s | NT BUILD 492 |
| `chloride_diffusion_coeff` | real | Apparent chloride diffusion | m2/s | ASTM C1556 |
| `carbonation_depth_1yr_mm` | real | Carbonation front depth (accelerated; EN 12390-12 elevated-CO2 — use EN 12390-10 for natural 1-yr exposure) | mm | EN 12390-12 |
| `carbonation_rate_coeff` | real | Carbonation rate coefficient (KAC) | mm/sqrt(day) | EN 12390-12 |
| `drying_shrinkage_28d_ue` | real | 28-day drying shrinkage | microstrain | ASTM C157 |
| `autogenous_shrinkage_ue` | real | Autogenous shrinkage | microstrain | ASTM C1698 |
| `creep_coefficient` | real | Creep coefficient (phi) | -- | ASTM C512 |
| `freeze_thaw_cycles` | real | Cycles to 60% relative dynamic modulus | -- | ASTM C666 |
| `freeze_thaw_durability_factor` | real | Durability factor | -- | ASTM C666 |
| `freeze_thaw_mass_loss_pct` | real | Mass loss after freeze-thaw | % | -- |
| `sulfate_expansion_6mo_pct` | real | 6-month sulfate expansion | % | ASTM C1012 |
| `sulfate_expansion_12mo_pct` | real | 12-month sulfate expansion | % | ASTM C1012 |
| `asr_expansion_14d_pct` | real | 14-day ASR mortar bar expansion | % | ASTM C1260 |
| `asr_expansion_1yr_pct` | real | 1-year ASR concrete prism expansion | % | ASTM C1293 |
| `abrasion_depth_mm` | real | Abrasion depth | mm | ASTM C779 |
| `water_penetration_depth_mm` | real | Water penetration under pressure | mm | EN 12390-8 |
| `electrical_resistivity_kohm_cm` | real | Surface resistivity | kohm.cm | ASTM C1876 |
| `porosity_pct` | real | Permeable (open) voids by immersion/boiling — open porosity, not total (MIP/vacuum is a separate method) | % | ASTM C642 |
| `water_absorption_pct` | real | Water absorption by immersion | % | ASTM C642 |
| `sorptivity_mm_sqrt_s` | real | Sorptivity — initial rate (first 6 hours) | mm/sqrt(s) | ASTM C1585 |
| `sorptivity_secondary_mm_sqrt_s` | real | Sorptivity — secondary rate (day 1–7). Critical for 3DCP interlayer moisture transport. | mm/sqrt(s) | ASTM C1585 |
| `oxygen_permeability_m2` | real | Oxygen permeability coefficient | m2 | -- |
| `scaling_resistance_kg_m2` | real | De-icing salt scaling mass loss | kg/m2 | ASTM C672 |
| `corrosion_rate_ua_cm2` | real | Corrosion current density (Icorr) | uA/cm2 | ASTM C876 |
| `half_cell_potential_mv` | real | Half-cell corrosion potential | mV | ASTM C876 |
| `heat_of_hydration_kj_kg` | real | Heat of hydration | kJ/kg | ASTM C186 |

### Target Properties -- Thermal & Environmental

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `thermal_conductivity_w_mk` | real | Thermal conductivity | W/(m.K) |
| `specific_heat_j_kg_k` | real | Specific heat capacity | J/(kg.K) |
| `coeff_thermal_expansion_ue_c` | real | Coefficient of thermal expansion | microstrain/C |
| `fire_resistance_min` | real | Fire resistance duration (ASTM E119) | minutes | ASTM E119 |
| `embodied_carbon_kg_co2_m3` | real | Embodied CO2 (cradle-to-gate) | kg CO2/m3 |
| `embodied_energy_mj_m3` | real | Embodied energy | MJ/m3 |

### Target Properties -- Microstructure

| Column | Type | Description | Unit |
|--------|------|-------------|------|
| `degree_of_hydration` | real | Degree of hydration (0-1) | -- |
| `calcium_hydroxide_pct` | real | Ca(OH)2 content (TGA/XRD) | % |
| `pore_size_distribution_nm` | real | Critical pore diameter (MIP) | nm |

### Measurement Uncertainty (v1.7)

Mirrors the common `mean + standard_deviation + number_of_specimens` reporting convention. Each std-dev uses the same unit as its base column; `n_specimens` is recorded under Test Conditions.

| Column | Type | Description |
|--------|------|-------------|
| `compressive_strength_stddev_mpa` | real | Std-dev of compressive strength across specimens |
| `flexural_strength_stddev_mpa` | real | Std-dev of flexural strength |
| `tensile_strength_stddev_mpa` | real | Std-dev of tensile / splitting strength |
| `elastic_modulus_stddev_gpa` | real | Std-dev of elastic modulus |
| `interlayer_bond_stddev_mpa` | real | Std-dev of interlayer bond strength |

### Raw Data References (v1.7)

Links to curve/image/HDF5 files that the flat schema cannot hold inline. Payloads stay external (FAIR); the reference is preserved so the raw data remains discoverable.

| Column | Type | Description |
|--------|------|-------------|
| `raw_data_doi` | varchar | DOI of a deposited raw-data record |
| `stress_strain_file` | varchar | Load-displacement / stress-strain curve file |
| `rheology_curve_file` | varchar | Flow / structuration curve file |
| `microstructure_image` | varchar | SEM / CT / crack-pattern image file |
| `raw_data_file` | varchar | Generic table / HDF5 raw-data reference |

### Data Provenance

| Column | Type | Description |
|--------|------|-------------|
| `doi` | varchar | Digital Object Identifier of source publication |
| `source_citation` | varchar | Full citation string (for sources without DOI: theses, conference papers, internal reports) |
| `measurement_confidence` | varchar | Data reliability: `measured` (direct lab measurement), `calculated` (derived from other properties), `estimated` (approximated or inferred), `reported` (taken from literature without independent verification) |
| `lab_name` | varchar | Laboratory that performed the tests (enables inter-laboratory comparison) |
| `provenance_notes` | text | Free-text notes on data origin or quality concerns |

### Data Quality Flags

| Column | Type | Description |
|--------|------|-------------|
| `is_training_ready` | boolean | Record passes quality gates and is eligible for ML training |
| `is_synthetic` | boolean | True if generated by ML/optimization, not from real lab measurements |
| `outlier_flag` | boolean | Statistical outlier detected during quality audit |

### Exposure Classification (EN 206 / ACI 318)

| Column | Type | Description |
|--------|------|-------------|
| `exposure_class_freeze` | varchar | Freeze-thaw exposure (e.g., XF1-XF4) |
| `exposure_class_sulfate` | varchar | Sulfate exposure (e.g., S0-S3) |
| `exposure_class_chloride` | varchar | Chloride exposure (e.g., XD1-XD3, XS1-XS3) |
| `exposure_class_water` | varchar | Waterproofing requirement |
| `exposure_class_asr` | varchar | ASR risk classification |

---

## Units Convention

**As of v1.7 the record is dual-basis with kg/m³ first-class** (kg/m³ is the industry and literature standard: UCI/Yeh, RILEM/NU, RILEM TC 281-CCC, and fib all use it). The constituent columns store **mass-% of total wet mix** (cement + SCMs + aggregates + water + admixtures + fibers = ~100%), the self-normalizing projection; record `total_batched_mass_kg_m3` (the sum of as-batched constituent masses, not a measured density) and `total_binder_kg_m3` so the source's kg/m³ is preserved exactly and the two bases convert with no assumed density, and set `original_basis` to the basis the source reported.

Use `NULL` when a value is unknown, not reported, not applicable, or not measured. Use `0` only when the source explicitly reports that the material or property was absent or zero. This preserves the distinction between missing data and true zero dosage for statistical analysis and machine-learning pipelines.

The mass-% representation is retained because:
- It is directly comparable across datasets with different total binder contents
- It normalizes naturally to a fixed scale (0-100%), convenient for ML
- With `total_batched_mass_kg_m3` stored, it converts back to kg/m³ exactly (no density assumption)

---

## Companion Tables

| Table | Purpose |
|-------|---------|
| `strength_measurements` | Multi-age strength data (1-365 days) linked by formulation ID |
| `sources` | Publication metadata (DOI, journal, year, license) |
| `test_methods` | Controlled vocabulary of test standards |
| `curing_regimes` | Standard curing condition definitions |
| `standard_test_ages` | Reference test-age schedule |

---

## Related Data Models & Ontologies

Open3DCP is a flat, analysis-ready **reporting record**. Several broader frameworks model overlapping territory as relationship-first exchange or reasoning layers; Open3DCP is designed to **map into them** — candidate content for a 3DCP domain profile — not to compete with them:

| Framework | What it is | Relationship to Open3DCP |
|---|---|---|
| **AM-CDM** — Additive Manufacturing Common Data Model ([repo](https://github.com/AM-CDM/AM-CDM); [Kuan et al. 2024](https://doi.org/10.1007/s40192-024-00341-x)) | Open-source exchange model for AM (base / material / system / process / build / test–inspection–characterization (TIC) modules); its dictionary's process-agnostic core is standardized as ASTM F3490-21. Primarily intended to be *mapped to* rather than adopted as storage | Open3DCP records map onto its material, Build, ManufacturingProcessStep, and TIC module classes; the material module is currently metals-shaped and no construction profile exists |
| **GEMD** — Graphical Expression of Materials Data ([docs](https://citrineinformatics.github.io/gemd-docs/)) | Graph model with Material / Process / Ingredient / Measurement objects and a Spec-vs-Run split | A flat Open3DCP row lifts into spec/run objects; the row deliberately omits the full provenance tree (see white paper §5.1) |
| **CPTO** — Concrete Production and Testing Ontology ([w3id.org/cpto](https://w3id.org/cpto); [Meng et al. 2023](https://doi.org/10.1002/cepa.2955)), built on the PMDco 2.0 core ontology | EN 206 cast-concrete production chain: constituents, mix quantities, fresh/hardened testing, conformity | Conventional constituents (EN 197-1 cements, SCMs, aggregates, water, admixtures) map near-1:1; alkali-activator, fiber-geometry, and aggregate-moisture columns have no CPTO home, and CPTO contains no printing, extrusion, printability-rheology, or interlayer concepts |
| **BCOM** — Building Concrete Monitoring Ontology ([w3id.org/bcom](https://w3id.org/bcom)) | Cast-in-place QA chain (delivery, placement, curing, specimens, conformity) for BIM-linked asset management | Overlaps the testing/curing slice only |

Machine-readable, field-level mappings for the first three live in [`crosswalk/`](crosswalk/) (`open3dcp_to_amcdm.csv`, `open3dcp_to_gemd.csv`, `open3dcp_to_cpto.csv`), generated from `sql/create_tables.sql` by [`scripts/build_precedent_crosswalks.py`](https://github.com/sunnyday-technologies/Open3DCP/blob/main/scripts/build_precedent_crosswalks.py) with pinned target versions. Across all of these frameworks, the extrusion-3DCP vocabulary — printing-process parameters, printing-state rheology, interlayer properties — has **no controlled, named vocabulary in any of them** (GEMD can carry the fields, but only as project-defined attribute templates; CPTO lacks them entirely); those blocks are Open3DCP's additive contribution, offered as a candidate domain profile rather than a competing standard.

---

## Disclaimers

### Standards References

This document references published standards from ASTM International, the European Committee for Standardization (CEN/EN), the American Concrete Institute (ACI), RILEM, and other standards organizations. These references are provided for identification and context only.

**Open3DCP is not a substitute for any referenced standard.** Column names and descriptions reference standard designations (e.g., ASTM C39, EN 12390-3) to indicate the test method or material classification a column is intended to represent. This does not imply endorsement, certification, or affiliation with any standards organization.

Users are responsible for obtaining and complying with the full text of any applicable standard. Standards are copyrighted documents published by their respective organizations and must be purchased or accessed through authorized channels.

### Trademarks

ASTM and ASTM International are trademarks of ASTM International. ACI is a trademark of the American Concrete Institute. RILEM is a trademark of the International Union of Laboratories and Experts in Construction Materials, Systems and Structures. ICC and the International Code Council are trademarks of the International Code Council, Inc. ISO is a trademark of the International Organization for Standardization; EN standards are published by CEN (the European Committee for Standardization). All other trademarks are the property of their respective owners. Use of these names in Open3DCP is for identification purposes only and does not imply endorsement.

### Data Accuracy

Open3DCP defines a data format, not a dataset. Sunnyday Technologies makes no representations or warranties regarding the accuracy, completeness, or fitness for purpose of any data stored in this schema format. Users are solely responsible for validating data quality and suitability for their intended application.

**This schema is not intended for use as a basis for structural design, construction specifications, or regulatory compliance.** Mix designs derived from data stored in this format must be independently validated through laboratory testing by qualified professionals before use in any construction application.

### No Professional Advice

Nothing in this document constitutes engineering advice, materials science consulting, or professional recommendations. Concrete mix design for construction applications requires the involvement of licensed professional engineers and compliance with applicable building codes (IBC, Eurocode, local codes of jurisdiction).

---

## License

**Apache License, Version 2.0** ([Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)).

You are free to use, adapt, and redistribute this schema for any purpose, including commercial use, provided you give appropriate credit to Sunnyday Technologies. The Apache 2.0 license includes an express grant of patent rights from contributors to users.

---

## Citation

If you use Open3DCP in your research, please cite:

> Sunnyday Technologies (2026). Open3DCP: Open Data Standard for 3D Concrete Printing. https://github.com/sunnyday-technologies/Open3DCP

---

*Open3DCP v1.7 -- Last updated: 2026-07-30*
*Maintained by [Sunnyday Technologies](https://sunn3d.com), Wisconsin, USA*
