Preprint in preparation. Please do not cite or redistribute without permission.

Periodic Graph Metamaterials Atlas

Mechanical and dynamical screening of textile metamaterials

Data access

The catalog is distributed as a single static file. To use it programmatically:

import json, urllib.request
url = 'atlas.json'  # or full URL once hosted publicly
with urllib.request.urlopen(url) as f:
    atlas = json.load(f)

print(f"{atlas['metadata']['n_grounds']} grounds in version "
      f"{atlas['metadata'].get('version', 'unknown')}")

# Each ground is a dict with mechanical + dynamical + humidity fields
for g in atlas['grounds']:
    nu_min = g['beam']['nu_min'][1]   # AR=10 default
    eta_pore = g['humidity']['eta_pore']
    if nu_min < -2 and eta_pore < -0.3:
        print(g['family'], g['name'], nu_min, eta_pore)

For users who prefer a flat tabular form, a companion atlas_features.csv with one row per ground is provided alongside the JSON.

See the data dictionary below for field meanings and units.

Data dictionary

Every field in atlas.json. All quantities are dimensionless except where noted.

Metadata (atlas['metadata'])

FieldTypeMeaning
n_groundsintNumber of grounds in the catalog
build_datestrISO date the atlas was built
versionstrCatalog version (semantic versioning)
spring_k_ang_gridlist[float]Angular-stiffness sweep values for spring model
spring_default_idxintIndex into spring_k_ang_grid for the default value (0.01)
beam_AR_gridlist[float]Strut aspect-ratio sweep values for beam model
beam_default_idxintIndex into beam_AR_grid for the default (AR=10)
theta_grid_deglist[float]Angles (degrees) used for the directional ν(θ) sweep
attributionstrSource-catalog citation string

Per-ground top-level fields (atlas['grounds'][i])

FieldTypeMeaning
familystrHole-shape profile (e.g. 3_6, 4, cloth)
namestrPer-family identifier (e.g. 2x4_86)
n_rows, n_colsintPeriod parallelogram dimensions
n_vertices, n_edgesintVertex / edge count in the unit cell
cell_areafloatUnit-cell area in lattice units
verticeslist[[col,row]]Vertex coordinates in lattice units
edgeslist[dict]Edge list: {src, dst, wrap: [dx,dy]}
latticelist[[x,y]]2×2 cartesian lattice basis vectors
thumbnailsdictPaths to lace, thread, deformed, dispersion PNG previews
graph_canonicalstrSHA-256 hex hash of the wrap-labeled quotient graph's nauty certificate. Two grounds with the same value share an abstract topology (same combinatorial graph, possibly different geometric embedding).
lace_canonicalstrSHA-256 hex hash combining graph topology and embedding geometry. Two grounds with the same value are physically identical lattices. Every ground in the current catalog has a unique value.

Manufacturability (g['manufacturability'])

Per-ground boolean predicates classifying the lattice's physical realizability. Each property is one of: true, false, or null (= "not yet checked").

FieldTypeMeaning
is_2in2outboolAdmits a directed orientation where every vertex has exactly 2 incoming and 2 outgoing edges. Required for bobbin-lace thread-circuit interpretation.
is_planarbool | nullEmbedded planar (no rod crossings) at the canonical vertex positions. null if not yet checked.
is_printablebool | null3D-printable: planar, connected, no degenerate vertices, no overlapping rods. null if not yet checked.
is_lace_workablebool | nullAdmits a valid bobbin-lace thread circuit decomposition with all circuits having wrap (1, 0). null if not yet checked.

For grounds in Irvine's TesseLace catalog, all four properties are known to be true by construction. Grounds added by the enumerator have these properties computed individually.

Provenance (g['provenance'])

Where the ground came from.

FieldTypeMeaning
sourcestrOrigin: "irvine" for grounds from Irvine's TesseLace catalog; "enumerated_NxM" for grounds discovered by the enumerator at cell size N×M; or other strings for future sources.
irvine_labelstr | nullOriginal family/name in Irvine's catalog (e.g. "3_6/2x4_86") for cross-reference. null for non-Irvine grounds.
enumerator_runstr | nullIdentifier of the enumerator run that produced this ground. null for non-enumerated grounds.

Mechanics: spring model (g['spring'])

The spring model (also referred to as the pin-jointed truss model, or central-force lattice model) treats each strut as an axial Hookean spring with stiffness k = 1 per unit length and frictionless pin joints at every vertex. To this base model we add a small angular regularization term kang at each vertex that penalizes changes in the angle between rods meeting there:

Uangular = (kang / 2) Σ (θij − θij(0))2

The angular term lifts mechanism-mode eigenvalues away from zero so the stiffness matrix is invertible. Mechanism modes are kinematic deformations that change vertex positions without stretching any rod — they are central to auxetic behavior in this catalog. We sweep kang over spring_k_ang_grid (with axial stiffness fixed at 1) to characterize the sensitivity of the elastic response to this regularization. The default reported value is kang = 0.01, where angular stiffness is 1% of axial: mechanism modes remain soft but the calculation is well-conditioned.

The spring model is distinct from the beam model below: spring uses pin joints with adjustable angular regularization, beam uses rigid Euler-Bernoulli joints with bending stiffness set by the strut aspect ratio. Each field below is a list, one entry per value in spring_k_ang_grid.

FieldTypeMeaning
k_anglist[float]Angular regularization values (matches spring_k_ang_grid)
C_voigtlist[3×3]Effective elastic stiffness in Voigt form
nu_profilelist[list[float]]ν(θ) sampled on theta_grid_deg
nu_min, nu_maxlist[float]Minimum / maximum Poisson ratio over loading direction
classificationlist[str]One of: homogeneously_auxetic, directionally_auxetic, non_auxetic

Mechanics: beam model (g['beam'])

Same shape as the spring model but indexed by strut aspect ratio.

FieldTypeMeaning
ARlist[float]Aspect ratios (matches beam_AR_grid)
C_voigt, nu_profile, nu_min, nu_max, classification(as above)Per-AR analogues of the spring fields

Phonon dispersion (g['phonon'])

Spring-model phonon dispersion (kang = 0.01) sampled on a Brillouin-zone path. 22 scalar descriptors summarize the dispersion.

FieldTypeMeaning
acoustic_minfloatLowest non-zero acoustic-branch frequency
acoustic_maxfloatHighest acoustic-branch frequency
v_long, v_transfloatLong-wavelength longitudinal / transverse sound speed
v_anisotropyfloatSound-speed anisotropy: max(v)/min(v) over BZ directions
flat_acoustic_scorefloat0–1 measure of how flat the acoustic branch is (1 = mechanism)
soft_mode_countintNumber of branches with frequency below threshold
(15 more)variousAdditional moments and gap descriptors. See src/auxetic_lace/phonons.py

Humidity / swelling response (g['humidity'])

Macroscopic strain ε per unit perpendicular swelling δ on each strut (fiber-grain model: water swells perpendicular to strut axis, not along it).

FieldTypeMeaning
eta_xx, eta_yy, eta_xyfloatStrain components under isotropic perpendicular swelling, in the cell frame
eta_xx_x, eta_yy_x, eta_xy_xfloatSame, but only x-aligned struts swell (probes anisotropic chemistry)
eta_anisofloatηxx − ηyy (cell-frame directional response)
eta_max, eta_minfloatPrincipal strains (frame-invariant)
eta_anisotropy_ratiofloatmaxmin|, frame-invariant directionality
eta_porefloatFractional pore-area change per unit δ. Negative = pores close when wet.