Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs.

MITAuto-check passed

Install Mat Elasticity

skills CLI
$ npx skills add learningmatter-mit/AtomisticSkills --skill mat-elasticity -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install learningmatter-mit/AtomisticSkills mat-elasticity --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/learningmatter-mit/AtomisticSkills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mat-elasticity .claude/skills/mat-elasticity && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mat-elasticity
GitHub stars
175
Token cost
~2.6k tokens
SKILL.md length
1,262 words
Files
5 (incl. scripts)
Skills in repo
129
Repo updated
First seen
Licence
MIT

At a glance

Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs.

  • Works in 6 steps: Prerequisites → Choosing a Foundation Potential → Calculation Workflow → …
  • SKILL.md covers Goal, 1. Prerequisites, 2. Choosing a Foundation… and 3. Calculation Workflow, plus 6 more sections
  • Runs Python scripts from its folder

What it does

Mat Elasticity is an agent skill from learningmatter-mit/AtomisticSkills. Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts (for example `examples/Cu/README.md`, `examples/Cu/elasticity_results.json` and `scripts/calculate_elasticity.py`).

The repository describes itself as: Integrating AtomisticSkills into Agentic IDEs (Cursor, Claude Code, Codex, Google Antigravity, Hermes Agent, etc). The licence is MIT.

Example prompts

  • “s modulus, Poisson”
  • “/mat-elasticity”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Prerequisites
  2. Choosing a Foundation Potential
  3. Calculation Workflow
  4. Output Files
  5. Examples
  6. Constraints

What it can do on your machine

Read from SKILL.md and the folder at commit 7f2d86d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Mat Elasticity loads about 2.6k tokens when it runs. Until then it costs about 38 tokens; SKILL.md has 1,262 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~38
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from learningmatter-mit/AtomisticSkills at commit 7f2d86d, republished under its MIT licence (© learningmatter-mit). 1,262 words, ~2,582 tokens.

Download SKILL.mdSave it as .claude/skills/mat-elasticity/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
mat-elasticity
description
Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs.
metadata.category
materials
metadata.venv
mlip

Elastic Tensor Skill

This skill calculates the full elastic tensor ($C_{ij}$) and derived mechanical properties of crystalline materials using Machine Learning Interatomic Potentials (MLIPs). It applies a set of normal and shear strains, computes the resulting stresses, and fits the elastic constants via least-squares regression using MatCalc's ElasticityCalc.

Goal

Calculate the elastic tensor ($C_{ij}$) of a material by applying systematic deformations (normal and shear strains), computing the stress response with an MLIP, and extracting the full Voigt elastic tensor along with:

  • Bulk modulus $B$ (Voigt-Reuss-Hill average)
  • Shear modulus $G$ (Voigt-Reuss-Hill average)
  • Young's modulus $E$
  • Poisson's ratio $\nu$

1. Prerequisites

  • The appropriate MLIP wrapper must be available (MACEWrapper, MatGLWrapper, or FAIRCHEMWrapper).
  • matcalc is included in the mlip and fairchem environments.
  • A structure file (CIF, POSCAR, or other ASE-readable format). The structure will be relaxed before deformation by default.

2. Choosing a Foundation Potential

Elastic tensor calculations require accurate stress predictions across multiple deformed structures.

[!IMPORTANT]

  • Use OMAT or MatPES trained models: These models (e.g., MACE-OMAT-0-small, CHGNet-MatPES-PBE, TensorNet-MatPES-r2SCAN) are trained with stress labels and provide reliable stress predictions.
  • Stress accuracy is critical: Unlike EOS (which only uses energies), elasticity calculations directly depend on stress tensors. Models trained without stress labels may give poor results.

Refer to the foundation-potentials skill for more details.

3. Calculation Workflow

To calculate the elastic tensor, use the calculate_elasticity.py script:

bash
${CLAUDE_SKILL_DIR}/../../venv/run mlip python ${CLAUDE_SKILL_DIR}/scripts/calculate_elasticity.py \
    --structure path/to/structure.cif \
    --model_type mace \
    --model_name MACE-OMAT-0-small \
    --norm_strains -0.01 -0.005 0.005 0.01 \
    --shear_strains -0.06 -0.03 0.03 0.06 \
    --relax_structure \
    --output_dir research/my_folder/elasticity

Key Parameters:

  • --norm_strains: Normal strain magnitudes applied (default: ±0.5%, ±1.0%)
  • --shear_strains: Shear strain magnitudes applied (default: ±3%, ±6%)
  • --relax_structure: Relax the structure before applying strains (recommended)
  • --relax_deformed / --no-relax_deformed (default on): re-minimise the ions inside each deformed cell, with the cell held fixed. See Relaxed-ion versus clamped-ion below — this flag selects which of two physically distinct quantities you get, and the difference is not small.
  • --fmax: Force convergence tolerance for relaxation (default: 0.1 eV/Å)

[!TIP]

  • For metals, the default strain magnitudes work well.
  • For soft materials (polymers, molecular crystals), reduce strains to stay in the linear regime.
  • For very hard materials (diamond, SiC), the default strains are fine since deformations remain small.

4. Output Files

  • elasticity_results.json: Full results including:
    • elastic_tensor_GPa: 6×6 Voigt elastic tensor in GPa
    • bulk_modulus_vrh_GPa: Bulk modulus (VRH) in GPa
    • shear_modulus_vrh_GPa: Shear modulus (VRH) in GPa
    • youngs_modulus_GPa: Young's modulus in GPa
    • poissons_ratio: Poisson's ratio (dimensionless)
    • residuals_sum: Residual from the least-squares fit (lower is better)

5. Examples

See examples/Cu/ for a copper elastic tensor calculation using MACE-OMAT-0-small.

bash
${CLAUDE_SKILL_DIR}/../../venv/run mlip python ${CLAUDE_SKILL_DIR}/scripts/calculate_elasticity.py \
    --structure ${CLAUDE_SKILL_DIR}/examples/Cu/Cu.cif \
    --model_type mace \
    --model_name MACE-OMAT-0-small \
    --output_dir research/elasticity/Cu

6. Constraints

  • Environment: Scripts require an environment with MLIP packages installed (venv/run <venv> ...):
    • mlip for MACE and MatGL/CHGNet models
    • fairchem for FairChem/UMA models
  • Structure Relaxation: two distinct stages, controlled by two different flags. --relax_structure (default on) relaxes the input cell before the strain scan, so the scan is centred on a stress-free reference — elastic constants are defined about zero stress, so this matters. --relax_deformed (default on) controls the per-deformation ion relaxation, which selects between two different physical quantities; see below.
  • Linear Regime: Strains must be small enough to remain in the linear elastic regime. The default values are appropriate for most inorganic crystalline materials.
  • Unit Conversion: MatCalc returns moduli in eV/ų (bulk, shear) and Pa (Young's). The script converts all to GPa.
  • Symmetry: By default, symmetry reduction is disabled (--symmetry flag enables it). This means all 21 independent components are fitted independently.

Relaxed-ion versus clamped-ion

Applying a strain to a crystal leaves internal degrees of freedom that the strain does not itself fix — the fractional coordinates of atoms on general Wyckoff positions. What you do with them decides which elastic constant you compute:

--relax_deformed (default)--no-relax_deformed
ions in the deformed cellre-minimised at fixed cellcarried rigidly by the affine strain
quantityrelaxed-ion, a.k.a. equilibriumclamped-ion, a.k.a. frozen-ion
physical meaningsecond derivative of the energy minimised over the internal coordinates — what a real crystal exhibitssecond derivative at frozen internal coordinates
costone ionic relaxation per deformationone energy/stress evaluation per deformation

Relaxed-ion is the default here because it is the macroscopic elastic constant: it is what experiment measures and what the Materials Project and atomate2 elastic workflows compute (ionic relaxation at fixed cell for every deformation). Note that matcalc's own ElasticityCalc defaults relax_deformed_structures=False, so inheriting that default silently gives the clamped-ion answer instead.

Clamped-ion is systematically stiffer, because freezing the ions suppresses the non-affine internal displacement that would otherwise relieve part of the strain. It is a reasonable fast screening choice, and it is exact only where symmetry leaves no internal degrees of freedom to relax (every atom on a special position, as in B1 or B2 binaries). Otherwise the gap is real: for Pnma CaMgSi it is 1.4% on the bulk modulus but 7.5% on the shear modulus, 7.3% on the Poisson ratio and 37% on the anisotropy index. Report which one you used.

Show full SKILL.md (487 more words)Show less

Derived properties

Beyond the tensor and the VRH averages, the script reports the standard post-processing of an elastic tensor. Two of these are easy to get wrong by hand:

  • Universal anisotropy index A^U = 5 G_V/G_R + B_V/B_R - 6 (Ranganathan & Ostoja-Starzewski, PRL 101, 055504 (2008)), zero only for an isotropic crystal. It needs the Voigt and Reuss bounds kept separate, so it cannot be recovered from the VRH averages; the Voigt and Reuss bulk and shear moduli are reported alongside it.
  • Directional Young's moduli from E(n) = 1 / (S_ijkl n_i n_j n_k n_l): along [100], [010], [001], plus the global minimum and maximum over all directions with the directions they occur in. Two traps here. Expanding the Voigt compliance to S_ijkl requires a factor of 1/4 on shear-shear entries (S_1212 = S_66/4, not S_66) and 1/2 on normal-shear — the stiffness expands with no factors, so the two cannot share a helper. And the extrema of an anisotropic crystal need not lie on a crystal axis: for CaMgSi the stiffest direction sits ~40° off a in the a–c plane and is 13% stiffer than the stiffest axis, so scanning only the axes is wrong.
  • Acoustic and Debye properties: density, longitudinal and transverse sound velocities, the Debye mean velocity and the Debye temperature via the Anderson relation Theta_D = (hbar/k_B)(6 pi^2 N/V)^(1/3) v_m. The mean is the harmonic-cube mean over one longitudinal and two transverse branches, not the arithmetic mean of the two branches (which runs ~20% high).
  • Shear-modulus extrema over all shear systems, from G(n,m) = 1/(4 S_ijkl n_i m_j n_k m_l) with m in the plane normal to n. This is a genuinely two-dimensional search — over the sphere and over the angle within each plane — where Young's modulus needs only the sphere. min(C44, C55, C66) is not a substitute: on an orthorhombic intermetallic it sits ~26% high.
  • Acoustic branch velocities along --acoustic_direction, from the eigenvalues of the Christoffel matrix Gamma_ik(n) = C_ijkl n_j n_l. One quasi-longitudinal and two quasi-transverse branches, and in an anisotropic crystal the transverse pair is not degenerate — the slow branch can run >10% below the isotropic transverse velocity, so the isotropic moduli cannot reproduce these.
  • Born stability from the eigenvalues of the tensor, and the Pugh ratio G/B.

Moduli under load

--pressure <GPa> relaxes cell and ions against a hydrostatic load first, so the whole analysis is reported about a pressure-loaded reference. Two things to know:

  • ASE's FrechetCellFilter takes scalar_pressure in eV/ų; the flag is in GPa and converts internally. Passing GPa straight into ASE applies ~160× the intended load.
  • What comes back are the stress-strain coefficients about the loaded reference, not the Birch coefficients that carry explicit pressure corrections. Those are a different quantity, and the one you want for elastic stability under load.

matcalc's own pre-relaxation is at zero pressure, so --pressure performs the loaded relaxation itself and then disables relax_structure — otherwise the scan would be re-centred back on the zero-pressure cell.

Author: Bowen Deng Contact: GitHub @learningmatter-mit

© learningmatter-mit, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts) in skills/mat-elasticity of learningmatter-mit/AtomisticSkills.

  • SKILL.md
  • examples/Cu/Cu.cif
  • examples/Cu/README.md
  • examples/Cu/elasticity_results.json
  • scripts/calculate_elasticity.py

Open the folder on GitHubat commit 7f2d86d

Compare with similar skills

Mat Elasticity next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Mat Elasticity compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mat Elasticity this skilllearningmatter-mit/AtomisticSkills175—~2.6kAutomated safety check: PassMIT
Price Elasticity Calculatorrevfactory/harness-1001.3k—~1.3kAutomated safety check: PassApache-2.0
CSS At Propertythedaviddias/Front-End-Checklist74k—~602Automated safety check: PassMIT
Logical Propertiesthedaviddias/Front-End-Checklist74k—~526Automated safety check: PassMIT
Price Elasticity Calculatorrevfactory/harness-1001.3k—~816Automated safety check: PassApache-2.0
CSS Custom Propertiesthedaviddias/Front-End-Checklist74k—~492Automated safety check: PassMIT

Similar skills

  • Price Elasticity Calculator

    revfactory/harness-100

    A methodology for calculating price elasticity and deriving optimal pricing.

    1.3k GitHub stars~1.3k tokensUpdated 6 mo ago
    Research & ScienceAuto-check passed
  • CSS At Property

    thedaviddias/Front-End-Checklist

    A skill your agent uses when implementing animated gradients, complex CSS transitions that involve custom property values, or building a typed design token system where custom property misuse should…

    74k GitHub stars~602 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Logical Properties

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use CSS logical properties for i18n and RTL support.

    74k GitHub stars~526 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Price Elasticity Calculator

    revfactory/harness-100

    가격 탄력성을 계산하고 최적 가격을 도출하는 방법론. An agent skill from revfactory/harness-100.

    1.3k GitHub stars~816 tokensUpdated 6 mo ago
    Auto-check passed
  • CSS Custom Properties

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use CSS custom properties for design tokens.

    74k GitHub stars~492 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Eol Resistor Calculator

    sickn33/agentic-awesome-skills

    Calculates and validates end-of-line (EOL, SEOL, DEOL, TEOL) resistor loops for intrusion alarm panels (Honeywell, DSC, Paradox, Bosch) with wire gauge drop and state tables.

    47k GitHub starsUsed in 1 repo~3.5k tokens
    Auto-check passed

More from learningmatter-mit/AtomisticSkills

All 129 skills in this repo
  • Drug Binding Site Definition

    learningmatter-mit/AtomisticSkills

    Define a docking search box (center coordinates + box dimensions in Angstroms) from a co-crystal ligand, binding-site residues, or a saved JSON specification.

    175 GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed
  • Drug Complex System Builder

    learningmatter-mit/AtomisticSkills

    Build a solvated, charge-neutralized protein-ligand complex for OpenMM molecular dynamics simulation.

    175 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Drug Pocket Detection

    learningmatter-mit/AtomisticSkills

    Identify and rank ligandable pockets on a protein structure or model using geometry (fpocket) or an ML predictor (P2Rank).

    175 GitHub stars~4k tokensUpdated yesterday
    Auto-check passed
  • Chem Bond Dissociation

    learningmatter-mit/AtomisticSkills

    Calculate homolytic and heterolytic bond dissociation energies (BDEs) for all single bonds in a molecule using MLIPs with RDKit fragmentation.

    175 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Chem Conformer Search

    learningmatter-mit/AtomisticSkills

    Generate molecular conformers with RDKit ETKDG, relax with MLIPs, and rank by energy with Boltzmann weighting.

    175 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Chem DB Mof

    learningmatter-mit/AtomisticSkills

    Query multiple MOF databases (QMOF via MPContribs; ARC-MOF DB7/Majumdar et al.

    175 GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed

Questions about Mat Elasticity

What does Mat Elasticity do?

Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs. Mat Elasticity is an agent skill from learningmatter-mit/AtomisticSkills. Calculate the full elastic tensor and mechanical properties (bulk modulus, shear modulus, Young's modulus, Poisson's ratio) using MLIPs.

How do I install Mat Elasticity in Claude Code?

Run `npx skills add learningmatter-mit/AtomisticSkills --skill mat-elasticity -a claude-code`. Or copy the skill folder (skills/mat-elasticity in learningmatter-mit/AtomisticSkills) into .claude/skills/mat-elasticity in your project. Claude Code loads it when a task matches its description.

How do I install Mat Elasticity in Codex?

Run `npx skills add learningmatter-mit/AtomisticSkills --skill mat-elasticity -a codex`. Or copy the skill folder (skills/mat-elasticity in learningmatter-mit/AtomisticSkills) into .agents/skills/mat-elasticity in your project. Codex loads it when a task matches its description.

Can I use Mat Elasticity in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add learningmatter-mit/AtomisticSkills --skill mat-elasticity -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mat-elasticity, .gemini/skills/mat-elasticity, .github/skills/mat-elasticity and .opencode/skills/mat-elasticity in your project.

What does Mat Elasticity need to run?

Going by SKILL.md and its folder, Mat Elasticity needs Python for the scripts in its folder. Our summary lists: Python 3.

Does Mat Elasticity access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Mat Elasticity safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Mat Elasticity use?

Mat Elasticity is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Mat Elasticity use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Mat Elasticity?

Skills that share tags, products or a category with Mat Elasticity: Price Elasticity Calculator (revfactory/harness-100, 1.3k stars), CSS At Property (thedaviddias/Front-End-Checklist, 74k stars), Logical Properties (thedaviddias/Front-End-Checklist, 74k stars) and Price Elasticity Calculator (revfactory/harness-100, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Mat Elasticity?

learningmatter-mit (a GitHub organization) maintains it in learningmatter-mit/AtomisticSkills, which has 175 GitHub stars. The repository holds 129 skills in this directory. The repository was last updated on October 6, 2026.

Source: learningmatter-mit/AtomisticSkills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.