Converting Between Energy Density and Temperature

This guide explains how to perform bilateral conversions between energy density and temperature in MaterForge using the current architecture.

Why Energy-Temperature Conversion Matters

In many material simulations, particularly those involving heat transfer and phase changes, you need to convert between:

  • Temperature: The conventional measure of thermal state

  • Energy Density: The amount of thermal energy per unit volume

This conversion is essential because:

  • Energy is conserved in physical processes

  • Phase transitions involve latent heat where temperature remains constant

  • Many numerical methods work better with energy as the primary variable

Current Implementation Status

Important Note: The energy-temperature conversion functionality is currently under development in MaterForge v0.3.0. The following features are planned but not yet implemented:

  • InterpolationArrayContainer class

  • Automatic C++ code generation for interpolation

  • Binary search and double lookup methods

Basic Temperature-Energy Conversion (Current)

1. Create Material with Energy Density

import sympy as sp
from materforge.parsing.api import create_material

# Create symbolic temperature variable
T = sp.Symbol('T')

# Load material with energy density property
material = create_material("1.4301.yaml", T)

# Check if energy density is available
if hasattr(material, 'energy_density'):
    print("Energy density property is available")
else:
    print("Energy density property not defined")

2. Temperature to Energy Conversion

# Temperature to energy conversion using symbolic evaluation

temperature = 1500.0 # Kelvin
if hasattr(material, 'energy_density'):
    energy = material.energy_density.evalf(T, temperature)
    print(f"Energy density at {temperature}K: {energy} J/m³")

3. Energy to Temperature Conversion

The inverse conversion (energy to temperature) will be available through:

from materforge.algorithms.piecewise_inverter import PiecewiseInverter

# Create inverse function (when implemented)
if hasattr(material, 'energy_density'):
    E = sp.Symbol('E')
    inverse_func = PiecewiseInverter.create_energy_density_inverse(material, 'E')

Use inverse function

energy_value = 1.5e9  # J/m³
temperature = float(inverse_func.subs(E, energy_value))