Note
Go to the end to download the full example code.
VedEf Operating Window Problem Setup.
This module provides the canonical Problem instance for the VedEf operating window example. All analysis and optimization scripts should import and use setup_vedef_problem() to ensure consistency.
import importlib.util
from pathlib import Path
import openmdao.api as om
def setup_vedef_problem(target_power=25000.0, max_energy_density=1e9, as_subsystem=True):
"""Set up VedEf OpenMDAO problem with default parameter values.
Parameters
----------
target_power : float, optional
Target total power in W. Default: 25000.0 (25 kW)
max_energy_density : float, optional
Maximum arc energy density in J/m^3. Default: 1e9 (1 GJ/m^3)
as_subsystem : bool, optional
If True, adds VedEfDesignGroup as a subsystem (hierarchical).
If False, uses VedEfDesignGroup directly as the model. Default: True
Returns
-------
openmdao.api.Problem
Configured problem ready for optimization/analysis with:
- VedEfDesignGroup configured with specified parameters
- Default parameter values set
- Problem setup() called
Examples
--------
>>> prob = setup_vedef_problem()
>>> prob.run_model()
>>> print(prob.get_val("T_0"))
"""
# Import VedEfDesignGroup from the model definition file
spec = importlib.util.spec_from_file_location(
"vedef_module", Path(__file__).parent / "1_model_vedef_design_group.py"
)
vedef_module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(vedef_module)
VedEfDesignGroup = vedef_module.VedEfDesignGroup
prob = om.Problem()
vedef_group = VedEfDesignGroup(target_power=target_power, max_energy_density=max_energy_density)
if as_subsystem:
prob.model.add_subsystem("vedef", vedef_group, promotes=["*"])
else:
prob.model = vedef_group
# Setup the problem
prob.setup()
# Set default values (using ARC002 parameter tags)
prob.set_val("G_UMAX_OUT", 20000.0, units="V") # Generator voltage
prob.set_val("G_e", 0.01, units="m") # Interelectrode gap
prob.set_val("TP_D_OUT", 0.02, units="m") # Torch outlet diameter
prob.set_val("G_F", 50000.0, units="Hz") # PRF - Pulse Frequency
prob.set_val("G_Ep", 0.01, units="J") # Energy per pulse
return prob