graintrace.simulation_postprocessing#

Load and query MOOSE/PUMA CPFE simulation output CSVs (SimulationResults).

class graintrace.simulation_postprocessing.FieldFileNaming(prefix, index_width=None, sep='_', suffix='.csv')[source]#

Bases: object

Naming convention for per-time-step field CSVs (e.g. prefix_0000.csv).

Parameters:
  • prefix (str)

  • index_width (Optional[int])

  • sep (str)

  • suffix (str)

class graintrace.simulation_postprocessing.SimulationResults(block_csv, field_dir, field_naming)[source]#

Bases: object

Access per-block and per-time-step field data from a CPFE run.

Parameters:
check_input()[source]#

Validate that the block CSV and field directory exist.

Return type:

None

load_block_data()[source]#

Read and cache the per-block properties CSV.

Return type:

DataFrame

load_field_data(block_row_idx)[source]#

Read the field CSV for the given block/time-step row index.

Parameters:

block_row_idx (int)

Return type:

DataFrame

get_tensor_block(tensor_prefix, order, sample, grain_id=None, block_id=None, return_comp_names=False)[source]#

Block (per-grain) extraction.

sample=’time’ -> requires grain_id, returns (n_times, 1|3|9) sample=’id’ -> requires block_id, returns (n_grains, 1|3|9)

Parameters:
  • tensor_prefix (str)

  • order (int)

  • sample (str)

  • grain_id (int | None)

  • block_id (int | None)

  • return_comp_names (bool)

Return type:

ndarray | Tuple[ndarray, List[str]]

get_tensor_element(tensor_prefix, order, sample, element_id=None, block_id=None, return_comp_names=False)[source]#

Element (per-point/per-element) extraction.

sample=’id’ -> requires block_id, returns (n_elements, 1|3|9) from that field CSV sample=’time’ -> requires element_id, returns (n_available_times, 1|3|9) by scanning field CSVs

Parameters:
  • tensor_prefix (str)

  • order (int)

  • sample (str)

  • element_id (int | None)

  • block_id (int | None)

  • return_comp_names (bool)

Return type:

ndarray | Tuple[ndarray, List[str]]