Source code for watts.plugin_moose
# SPDX-FileCopyrightText: 2022-2023 UChicago Argonne, LLC
# SPDX-License-Identifier: MIT
from typing import List, Optional
import numpy as np
import pandas as pd
from .fileutils import PathLike
from .parameters import Parameters
from .plugin import PluginGeneric, _find_executable
from .results import Results, ExecInfo
[docs]
class ResultsMOOSE(Results):
"""MOOSE simulation results
Parameters
----------
params
Parameters used to generate inputs
exec_info
Execution information (job ID, plugin name, time, etc.)
inputs
List of input files
outputs
List of output files
Attributes
----------
stdout
Standard output from MOOSE run
csv_data
Dictionary with data from .csv files
"""
def __init__(self, params: Parameters, exec_info: ExecInfo,
inputs: List[PathLike], outputs: List[PathLike]):
super().__init__(params, exec_info, inputs, outputs)
self.csv_data = self._save_MOOSE_csv()
def _save_MOOSE_csv(self) -> dict:
"""Read all MOOSE '.csv' files and return results in a dictionary
Returns
-------
Results from MOOSE .csv files
"""
input_file = self.inputs[0]
csv_file = input_file.with_name(f"{input_file.stem}_csv.csv")
# Save MOOSE's main output '.csv' files
csv_data = {}
if csv_file.exists():
csv_file_df = pd.read_csv(csv_file)
for column_name in csv_file_df.columns:
csv_data[column_name] = np.array(csv_file_df[column_name])
# Read MOOSE's vector postprocesssor '.csv' files and save the
# parameters as individual array
for output in self.outputs:
if (output.name.startswith(f"{input_file.stem}_csv_") and
not output.name.endswith("_0000.csv")):
vector_csv_df = pd.read_csv(output)
csv_param = list(set(vector_csv_df.columns) - {"id", "x", "y", "z"})
csv_data[output.stem] = np.array(vector_csv_df[csv_param[0]], dtype=float)
for name in ("id", "x", "y", "z"):
new_name = output.name[:-8] + name
if new_name not in csv_data:
csv_data[new_name] = np.array(vector_csv_df[name], dtype=float)
return csv_data
[docs]
class PluginMOOSE(PluginGeneric):
"""Plugin for running MOOSE
Parameters
----------
template_file
Templated MOOSE input
executable
Path to MOOSE executable
extra_inputs
List of extra (non-templated) input files that are needed
extra_template_inputs
Extra templated input files
show_stdout
Whether to display output from stdout when MOOSE is run
show_stderr
Whether to display output from stderr when MOOSE is run
Attributes
----------
executable
Path to MOOSE executable
execute_command
List of command-line arguments used to call the executable
"""
def __init__(
self,
template_file: str,
executable: PathLike = 'moose-opt',
extra_inputs: Optional[List[str]] = None,
extra_template_inputs: Optional[List[PathLike]] = None,
show_stdout: bool = False,
show_stderr: bool = False
):
executable = _find_executable(executable, 'MOOSE_DIR')
execute_command = ['{self.executable}', '-i', '{self.input_name}']
super().__init__(
executable, execute_command, template_file, extra_inputs,
extra_template_inputs, "MOOSE", show_stdout, show_stderr)
self.input_name = "MOOSE.i"