How To: Units and Geometry

The scenario json format shares a lot of structure between the different physics. The common components are detailed here. All scenario json files start with a top-level object, which contains a few common attributes.

{
  "boundary_conditions": [ ],
  "geometry": { },
  "materials": { },
  "metadata": { },
  "scenario_name": "Name_for_output_files",
  "type": "<physics type>"
}

Units

The default Unit System is MKS or MeterKilogramSecond. We allow the following customizations:

  • Specify custom unit for geometry through the metadata object (default MKS)

  • Specify custom unit for loads in individual boundary conditions (default MKS)

  • Material properties are always specified in MKS units

Unit System Keywords

Mass

Force

Stress

Length

Temperature

Energy

MeterKilogramSecond

kg

N

Pa

m

K

J

CentimeterGramSecond

g

dyne

dyne/cm²

cm

K

dyne·cm

MillimeterMegagramSecond

Mg

N

MPa

mm

K

mJ

FootPoundSecond

slug

lbf

lbf/ft²

ft

Ra

lbf·ft

InchPoundSecond

lbf s²/in (slinch)

lbf

psi

in

Ra

lbf·in

The possible unit values in JSON format are:

"MeterKilogramSecond"
"CentimeterGramSecond"
"MillimeterMegagramSecond"
"FootPoundSecond"
"InchPoundSecond"

Geometry

Specifying geometry in scenario JSON requires two pieces: components and an assembly.

Components and Assembly Structure

  1. Components: A collection of geometry objects, each with:

    • A geometry type (Mesh or VDB)

    • A file to load

    • A material ID (must match a material defined in the materials object)

    • A unique integer component ID

  2. Assembly: Links components together by referencing their IDs. Components in an assembly are bonded together.

Here’s how these are organized in the JSON structure:

{
  "geometry": {
    "assembly": [
      {
        "component": 0,
        "instance_id": "part_1",
        "type": "Component"
      },
      {
        "component": 1,
        "instance_id": "part_2",
        "type": "Component"
      }
    ],
    "components": [
      {
        "file": "part.stl",
        "geometry_type": "Mesh",
        "id": 0,
        "material": "Steel AISI 1020"
      },
      { "file": "part.vdb", 
        "geometry_type": "VDB", 
        "id": 1, 
        "material": "Acrylic, Cast" }
    ]
  }
}

Geometry::Mesh

The most common geometry type uses a triangle mesh to specify the surface of a volume. These triangle meshes can be loaded from both PLY and STL files.

{
  "file": "block.ply",
  "geometry_type": "Mesh",
  "id": 1,
  "material": "Steel AISI 1020"
}

Geometry::VDB

Geometry can be specified with an OpenVDB double grid file.

{
  "file": "demo.vdb",
  "geometry_type": "VDB",
  "id": 2,
  "material": "Acrylic, Cast"
}

Materials

Materials are specified in the materials object. All materials are specified in MKS units unless otherwise noted.

Structural Materials

Isotropic

Isotropic materials have uniform properties in all directions. Material properties are specified in MKS unit system.

  • type: Must be "Isotropic"

  • density: Material density (kg/m³)

  • youngs_modulus: Elastic modulus (Pa)

  • poisson_ratio: Poisson’s ratio

  • failure_criterion: Type of failure criterion (required for danger level calculations)

    • Options: "VonMises", "MaximumShearStress", "Rankine", "CoulombMohr", "ModifiedMohr", "Unspecified"

  • yield_strength: Yield strength (Pa)

  • tensile_strength: Tensile strength (Pa)

  • compressive_strength: Compressive strength (Pa)

{
  "materials": {
    "Steel AISI 1020": {
      "id": 71,
      "failure_criterion": "VonMises",
      "density": 7900.0,
      "youngs_modulus": 200000000000.0,
      "poisson_ratio": 0.29,
      "yield_strength": 330000000.0,
      "tensile_strength": 0.0,
      "compressive_strength": 0.0,
      "specific_heat": 420.0,
      "thermal_conductivity": 47.0,
      "category": "Ferrous Metals",
      "type": "Isotropic"
    }
  }
}

Orthotropic

Orthotropic materials have material properties that vary depending on the orientation. Often used to represent composites and wood, where the material properties along one axis are significantly different from the properties along the other axes.

  • type: Must be "Orthotropic"

  • density: Material density (kg/m³)

  • Ex, Ey, Ez: Elastic modulus in the x, y, and z directions (Pa)

  • Gxy, Gxz, Gyz: Shear modulus in the xy, xz, and yz planes (Pa)

  • vxy, vxz, vyz: Poisson’s ratio in the xy, xz, and yz planes

  • transform: Optional 3x3 matrix to rotate the material axes (9 floating point numbers, row-major order)

{
  "materials": {
    "composite": {
      "type": "Orthotropic",
      "density": 1350,
      "Ex": 85000000000.0,
      "Ey": 5600000000.0,
      "Ez": 5600000000.0,
      "Gxy": 2100000000.0,
      "Gxz": 2100000000.0,
      "Gyz": 2280000000.0,
      "vxy": 0.34,
      "vxz": 0.23,
      "vyz": 0.34,
      "transform": [
        -0.7071067811865476,
        -0.7071067811865476,
        0.0,
        -0.7071067811865476,
        0.7071067811865476,
        0.0,
        0.0,
        0.0,
        -1.0
      ]
    }
  }
}

This example shows a 45 degree rotation about the +Z axis.

Thermal Materials

Thermal materials must specify conductivity and specific heat. A coefficient of thermal expansion can be optionally specified.

  • type: Must be "Thermal"

  • density: Material density (kg/m³)

  • thermal_conductivity: Thermal conductivity (W/(m·K))

  • specific_heat: Specific heat (J/(kg·K))

  • expansion_coefficient: Optional coefficient of thermal expansion (1/K)

{
  "materials": {
    "thermal_steel": {
      "type": "Thermal",
      "density": 1200.0,
      "thermal_conductivity": 0.17,
      "specific_heat": 1100.0
    }
  }
}