Elastic Analysis
1. Overview
Elastic Analysis (EA) enables calculation of elastic properties and mechanical constants of materials through Second-Order Elastic Constants (SOEC) calculations with customizable strain patterns and stress algorithms. This module creates parent explorations that generate multiple child strain calculations for comprehensive elastic property determination.
The workflow creates individual strain calculations for each strain point, allowing efficient parallel processing of elastic property calculations with consistent computational parameters.
2. Creating EA Explorations
EA explorations require strain patterns and computational settings to generate individual strain calculations:
from atomict.simulation.ea import create_ea_exploration
# Create basic EA exploration
result = create_ea_exploration(
project_id="project_id",
name="Basic Elastic Analysis",
structure_id="structure_id",
structure_type="userupload",
action="DRAFT"
)
exploration_id = result['id']
print(f"Created EA exploration: {exploration_id}")
print(f"Default strains: {result['strains_list']}")
2.1 Parameter Details
EA explorations require strain configurations and computational parameters for SOEC calculations.
Strain Configuration
The strain values that get turned into individual strain calculations. Each strain creates a separate child calculation:
strains_list=[-0.06, -0.03, 0.03, 0.06]- Default 4-point strain patternstrains_list=[-0.10, -0.05, 0.025, 0.05, 0.10]- Extended 5-point pattern for higher precision
Computational Parameters
stress_algorithm=2- ASESS stress calculation method (default)calculator=0- FHI-AIMS computational engine (default)stress_method=1- Dynamic stress calculation (default)
Available Calculators
| Calculator | Value | Status | Developer |
|---|---|---|---|
| FHI-AIMS | 0 | Active | DFT calculations (default) |
| ORB V3 Conservative | 3 | Active | Orbital Materials |
| eSEN 30M OAM | 4 | Active | Meta FAIR |
3. Advanced Configuration
Create EA explorations with custom strain patterns and computational settings:
from atomict.simulation.ea import (
create_ea_exploration,
STRESS_ALGORITHMS,
CALCULATORS
)
# Advanced EA exploration with custom parameters
result = create_ea_exploration(
project_id="project_id",
name="High-Precision Elastic Analysis",
structure_id="structure_id",
structure_type="mlrelax",
action="DRAFT",
# Custom strain configuration
strains_list=[-0.08, -0.04, -0.02, 0.02, 0.04, 0.08], # 6-point pattern
# Computational settings
stress_algorithm=STRESS_ALGORITHMS["OHESS"], # High-precision method
calculator=CALCULATORS["ORB_V3_CONSERVATIVE"],
# Analysis parameters
num_last_samples=500,
make_conventional_cell=True,
add_vacuum=10, # Add 10 Å vacuum for surface calculations
description="High-precision elastic analysis with extended strain range"
)
exploration_id = result['id']
3.1 Configuration Constants
from atomict.simulation.ea import STRESS_ALGORITHMS, CALCULATORS
# Available stress algorithms
STRESS_ALGORITHMS = {
"ULICS": 0, # ULICS method
"OHESS": 1, # OHESS method (high-precision)
"ASESS": 2 # ASESS method (default)
}
# Available calculators
CALCULATORS = {
"FHI-AIMS": 0, # DFT calculations (default)
"ORB_V3_CONSERVATIVE": 3, # ORB V3 Conservative
"ESEN_30M_OAM": 4 # eSEN 30M OAM
}
4. Working with EA Samples
EA explorations create individual strain calculation samples that can be monitored and managed. These samples represent the actual strain calculations performed for each strain point.
4.1 Getting Samples
After creating an EA exploration, you can retrieve all individual strain calculation samples to monitor progress and access results.
from atomict.simulation.ea import get_ea_exploration_samples
# Get all samples for an exploration
samples = get_ea_exploration_samples(exploration_id)
print(f"Found {len(samples['results'])} strain calculations")
for sample in samples['results']:
print(f"Sample {sample['id']}: strain={sample['strain']}")
print(f"Matrix: {sample['matrix']}")
print(f"Status: {sample['status']}")
4.2 Getting Sample Details
Individual strain calculations have detailed information including computed stress tensors and convergence data.
from atomict.simulation.ea import get_ea_exploration_sample
# Get detailed sample information
if samples['results']:
sample_id = samples['results'][0]['id']
sample_detail = get_ea_exploration_sample(sample_id)
print(f"Sample ID: {sample_detail['id']}")
print(f"Strain value: {sample_detail['strain']}")
print(f"Stress tensor: {sample_detail.get('stress_tensor', 'Not computed')}")
5. Analysis Pipeline
Create and manage analyses to extract elastic properties from completed explorations:
5.1 Creating Analysis
from atomict.simulation.ea import create_ea_exploration_analysis
# Create analysis for completed exploration
analysis = create_ea_exploration_analysis(
exploration_id="exploration_id",
compute_directional_properties=True, # Include directional properties
action="DRAFT"
)
analysis_id = analysis['id']
print(f"Created analysis: {analysis_id}")
5.2 Launching Analysis
# Launch analysis for processing
analysis = create_ea_exploration_analysis(
exploration_id="exploration_id",
compute_directional_properties=True,
action="LAUNCH" # Process immediately
)
print(f"Analysis launched: {analysis['id']}")
5.3 Retrieving Analysis Results
from atomict.simulation.ea import get_ea_exploration_analysis
# Get analysis results
result = get_ea_exploration_analysis(analysis_id)
print(f"Analysis Status: {result['status']}")
# Check for calculated properties
if result.get('bulk_modulus'):
print(f"Bulk modulus: {result['bulk_modulus']} GPa")
if result.get('shear_modulus'):
print(f"Shear modulus: {result['shear_modulus']} GPa")
if result.get('youngs_modulus'):
print(f"Young's modulus: {result['youngs_modulus']} GPa")
6. Managing EA Explorations
6.1 Listing Explorations
from atomict.simulation.ea import list_ea_explorations
# List all EA explorations
all_explorations = list_ea_explorations()
print(f"Total explorations: {all_explorations['count']}")
# Filter by project
project_explorations = list_ea_explorations(
project_id="project_id"
)
# Pagination support
paginated = list_ea_explorations(limit=10, offset=0)
6.2 Getting Exploration Details
from atomict.simulation.ea import get_ea_exploration
# Get basic exploration details
exploration = get_ea_exploration(exploration_id)
print(f"Name: {exploration['name']}")
print(f"Status: {exploration['status']}")
print(f"Strain points: {len(exploration['strains_list'])}")
print(f"Calculator: {exploration['calculator']}")
6.3 Updating Explorations
from atomict.simulation.ea import update_ea_exploration
# Update parameters before launching
updated = update_ea_exploration(
exploration_id,
strains_list=[-0.05, -0.025, 0.025, 0.05], # Updated strain pattern
stress_algorithm=1, # Switch to OHESS
description="Updated with optimized strain pattern"
)
7. File Management
Associate external files with analyses for additional data or custom processing:
from atomict.simulation.ea import create_ea_exploration_analysis_file
# Associate user upload file with analysis
file_association = create_ea_exploration_analysis_file(
analysis_id="analysis_id",
user_upload_id="file_id"
)
print(f"Created file association: {file_association['id']}")
7.1 Retrieving File Associations
from atomict.simulation.ea import get_ea_exploration_analysis_file
# Get file details
file_info = get_ea_exploration_analysis_file("file_association_id")
print(f"File association: {file_info['id']}")
print(f"Analysis: {file_info['analysis']}")