diff --git a/TestScenarioAeroStructural.html b/TestScenarioAeroStructural.html index c5395190..917852c8 100644 --- a/TestScenarioAeroStructural.html +++ b/TestScenarioAeroStructural.html @@ -2955,7 +2955,7 @@
-
-[docs]class Builder:
+ Source code for mphys.core.builder
+
+[docs]
+class Builder:
"""
MPHYS builder base class. Template for developers to create their builders.
"""
@@ -48,7 +50,9 @@ Source code for mphys.builder
"""
pass
-[docs] def initialize(self, comm):
+
+[docs]
+ def initialize(self, comm):
"""
Initialize the solver, transfer scheme, etc.
This method will be called when the MPI comm is available
@@ -61,7 +65,10 @@ Source code for mphys.builder
"""
pass
-[docs] def get_mesh_coordinate_subsystem(self, scenario_name=None):
+
+
+[docs]
+ def get_mesh_coordinate_subsystem(self, scenario_name=None):
"""
The subsystem that contains the subsystem that will return the mesh
coordinates
@@ -78,7 +85,10 @@ Source code for mphys.builder
"""
return None
-[docs] def get_coupling_group_subsystem(self, scenario_name=None):
+
+
+[docs]
+ def get_coupling_group_subsystem(self, scenario_name=None):
"""
The subsystem that this builder will add to the CouplingGroup
@@ -95,7 +105,10 @@ Source code for mphys.builder
"""
return None
-[docs] def get_pre_coupling_subsystem(self, scenario_name=None):
+
+
+[docs]
+ def get_pre_coupling_subsystem(self, scenario_name=None):
"""
Method that returns the openmdao subsystem to be added to each scenario before the coupling group
@@ -110,7 +123,10 @@ Source code for mphys.builder
"""
return None
-[docs] def get_post_coupling_subsystem(self, scenario_name=None):
+
+
+[docs]
+ def get_post_coupling_subsystem(self, scenario_name=None):
"""
Method that returns the openmdao subsystem to be added to each scenario after the coupling group
@@ -125,7 +141,10 @@ Source code for mphys.builder
"""
return None
-[docs] def get_number_of_nodes(self):
+
+
+[docs]
+ def get_number_of_nodes(self):
"""
Method that returns the number of nodes defining the interface
(input) mesh
@@ -138,7 +157,10 @@ Source code for mphys.builder
"""
raise NotImplementedError('Function get_number_of_nodes has not been implemented in the builder.')
-[docs] def get_ndof(self):
+
+
+[docs]
+ def get_ndof(self):
"""
The number of degrees of freedom used at each output location.
@@ -149,7 +171,10 @@ Source code for mphys.builder
"""
raise NotImplementedError('Function get_ndof has not been implemented in the builder.')
-[docs] def get_tagged_indices(self, tags):
+
+
+[docs]
+ def get_tagged_indices(self, tags):
"""
Method that returns grid IDs for a list of body/boundary tags.
@@ -162,73 +187,76 @@ Source code for mphys.builder
grid_ids : list
list of grid IDs that correspond to given body/boundary tags
"""
- raise NotImplementedError('Function get_tagged_indices has not been implemented in the builder.')
+ raise NotImplementedError('Function get_tagged_indices has not been implemented in the builder.')
+
+
-
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.builder
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.builder
\ No newline at end of file
diff --git a/_modules/mphys/core/coupling_group.html b/_modules/mphys/core/coupling_group.html
new file mode 100644
index 00000000..8fd855a0
--- /dev/null
+++ b/_modules/mphys/core/coupling_group.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+ mphys.core.coupling_group — MPhys documentation
+
+
+
+
+
+
+
+
+
+ Navigation
+
+ -
+ index
+ -
+ modules |
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.coupling_group
+
+
+
+
+
+
+
+
+ Source code for mphys.core.coupling_group
+from .mphys_group import MPhysGroup
+
+
+
+
+
+
+
+
+
+
+
+Table of Contents
+
+
+- Model Hierarchy
+- Tagged Promotion
+- Builders
+- Assembling an MPhys Model
+- Variable Naming Conventions
+- Remote Components
+
+
+
+
+
+
+
+
+
+
+ Quick search
+
+
+
+
+
+
+
+
+
+
+ Navigation
+
+ -
+ index
+ -
+ modules |
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.coupling_group
+
+
+
+ © Copyright 2022, NASA.
+ Created using Sphinx 7.4.7.
+
+
+
\ No newline at end of file
diff --git a/_modules/mphys/mphys_group.html b/_modules/mphys/core/mphys_group.html
similarity index 71%
rename from _modules/mphys/mphys_group.html
rename to _modules/mphys/core/mphys_group.html
index c1e5b623..36fd8f78 100644
--- a/_modules/mphys/mphys_group.html
+++ b/_modules/mphys/core/mphys_group.html
@@ -1,30 +1,30 @@
-
+
- mphys.mphys_group — MPhys documentation
-
-
-
-
-
-
-
+ mphys.core.mphys_group — MPhys documentation
+
+
+
+
+
+
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.mphys_group
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.mphys_group
@@ -33,11 +33,13 @@ Navigation
- Source code for mphys.mphys_group
+ Source code for mphys.core.mphys_group
from openmdao.api import Group
-[docs]class MphysGroup(Group):
+
+[docs]
+class MPhysGroup(Group):
"""
A OpenMDAO class for automated promotion of MPhys variables
"""
@@ -46,7 +48,9 @@ Source code for mphys.mphys_group
self.mphys_subsystems = []
-[docs] def mphys_add_subsystem(self, name, subsystem):
+
+[docs]
+ def mphys_add_subsystem(self, name, subsystem):
"""
Adding an mphys subsystem will add the subsystem and then set the group
to automatically promote the mphys tagged variables
@@ -55,9 +59,12 @@ Source code for mphys.mphys_group
self.mphys_subsystems.append(subsystem)
return subsystem
-[docs] def configure(self):
+
+
+[docs]
+ def configure(self):
"""
- Promote the mphys-tagged variables of subsystems added by :func:`~MphysGroup.mphys_add_subsystem`
+ Promote the mphys-tagged variables of subsystems added by :func:`~MPhysGroup.mphys_add_subsystem`
"""
self._mphys_promote_coupling_variables()
self._mphys_promote_inputs()
@@ -65,6 +72,7 @@ Source code for mphys.mphys_group
self._mphys_promote_results()
self._mphys_promote_time_derivatives()
+
def _mphys_promote_by_tag(self, iotype, tag):
for subsystem in self.mphys_subsystems:
promoted = []
@@ -91,72 +99,74 @@ Source code for mphys.mphys_group
def _mphys_promote_results(self):
self._mphys_promote_by_tag('output', 'mphys_result')
+
-
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.mphys_group
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.mphys_group
\ No newline at end of file
diff --git a/_modules/mphys/multipoint.html b/_modules/mphys/core/multipoint.html
similarity index 57%
rename from _modules/mphys/multipoint.html
rename to _modules/mphys/core/multipoint.html
index f92b54b0..52b28825 100644
--- a/_modules/mphys/multipoint.html
+++ b/_modules/mphys/core/multipoint.html
@@ -1,30 +1,30 @@
-
+
- mphys.multipoint — MPhys documentation
-
-
-
-
-
-
-
+ mphys.core.multipoint — MPhys documentation
+
+
+
+
+
+
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.multipoint
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.multipoint
@@ -33,10 +33,9 @@ Navigation
- Source code for mphys.multipoint
+ Source code for mphys.core.multipoint
import openmdao.api as om
-
def set_coupling_algorithms_in_scenarios(multipoint_group):
"""
Set the stored linear and nonlinear solver into the coupling group if the
@@ -52,7 +51,9 @@ Source code for mphys.multipoint
scenario.coupling.linear_solver = solvers[1]
-[docs]class Multipoint(om.Group):
+
+[docs]
+class Multipoint(om.Group):
"""
An extension of the standard OpenMDAO group that adds the :func:`~mphys_add_scenario` method.
For sequential evaluations of the MPhys scenarios.
@@ -62,7 +63,9 @@ Source code for mphys.multipoint
self.mphys_coupling_solvers = []
super().__init__(**kwargs)
-[docs] def mphys_add_scenario(self, name, scenario, coupling_nonlinear_solver=None,
+
+[docs]
+ def mphys_add_scenario(self, name, scenario, coupling_nonlinear_solver=None,
coupling_linear_solver=None):
"""
Add an MPhys scenario
@@ -71,7 +74,7 @@ Source code for mphys.multipoint
----------
name : str
The name of the scenario
- Scenario: :class:`~mphys.scenario.Scenario`
+ Scenario: :class:`~mphys.Scenario`
The scenario object
coupling_nonlinear_solver: openmdao.solvers.solver.NonlinearSolver
The nonlinear solver to assign to the coupling group primal problem
@@ -82,37 +85,15 @@ Source code for mphys.multipoint
self.mphys_coupling_solvers.append((scenario, solver_tuple))
return self.add_subsystem(name, scenario)
-[docs] def mphys_connect_scenario_coordinate_source(self, source, scenarios, disciplines):
- """
- A helper method to aid in connecting mesh coordinate sources to the scenarios
- in this multipoint group.
- The source and target variable names are assumed to be `'x_{discipline}0'`
-
- Parameters
- ----------
- source: openmdao.api.Group or openmdao.api.Component
- The source subsystem for the mesh coordinate variables
- scenarios : str or list[str]
- The names of the scenarios to be the target of the connections
- disciplines : str or list[str]
- The names of the disciplines for the mesh coordinates.
-
- """
- scenarios_list = scenarios if type(scenarios) == list else [scenarios]
- disciplines_list = disciplines if type(disciplines) == list else [disciplines]
-
- for scenario in scenarios_list:
- for discipline in disciplines_list:
- src = f'{source}.x_{discipline}0'
- target = f'{scenario}.x_{discipline}0'
- self.connect(src, target)
-
def configure(self):
return set_coupling_algorithms_in_scenarios(self)
-[docs]class MultipointParallel(om.ParallelGroup):
+
+
+[docs]
+class MultipointParallel(om.ParallelGroup):
"""
An OpenMDAO parallel group that adds the :func:`~mphys_add_scenario` method.
For simultaneous evaluations of the MPhys scenarios.
@@ -122,7 +103,9 @@ Source code for mphys.multipoint
self.mphys_coupling_solvers = []
super().__init__(**kwargs)
-[docs] def mphys_add_scenario(self, name, scenario, coupling_nonlinear_solver=None,
+
+[docs]
+ def mphys_add_scenario(self, name, scenario, coupling_nonlinear_solver=None,
coupling_linear_solver=None):
"""
Add an MPhys scenario
@@ -131,7 +114,7 @@ Source code for mphys.multipoint
----------
name : str
The name of the scenario
- Scenario: :class:`~mphys.scenario.Scenario`
+ Scenario: :class:`~mphys.Scenario`
The scenario object
coupling_nonlinear_solver: openmdao.solvers.solver.NonlinearSolver
The nonlinear solver to assign to the coupling group primal problem
@@ -142,74 +125,77 @@ Source code for mphys.multipoint
self.mphys_coupling_solvers.append((scenario, solver_tuple))
return self.add_subsystem(name, scenario)
+
def configure(self):
return set_coupling_algorithms_in_scenarios(self)
+
-
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.multipoint
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.multipoint
\ No newline at end of file
diff --git a/_modules/mphys/scenario.html b/_modules/mphys/core/scenario.html
similarity index 79%
rename from _modules/mphys/scenario.html
rename to _modules/mphys/core/scenario.html
index 87ecccae..7151d46d 100644
--- a/_modules/mphys/scenario.html
+++ b/_modules/mphys/core/scenario.html
@@ -1,30 +1,30 @@
-
+
- mphys.scenario — MPhys documentation
-
-
-
-
-
-
-
+ mphys.core.scenario — MPhys documentation
+
+
+
+
+
+
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.scenario
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.scenario
@@ -33,14 +33,16 @@ Navigation
- Source code for mphys.scenario
+ Source code for mphys.core.scenario
from functools import wraps
-from .mphys_group import MphysGroup
-from .utils.directory_utils import cd
+from .mphys_group import MPhysGroup
+from mphys.utils.directory_utils import cd
-# Define decorator functions for methods where run directory must be switched before calling
def switch_run_directory(method):
+ """
+ Decorator function for methods where run directory must be switched before calling
+ """
@wraps(method)
def wrapped_method(self, *args, **kwargs):
with cd(self.options['run_directory']):
@@ -48,7 +50,9 @@ Source code for mphys.scenario
return wrapped_method
-[docs]class Scenario(MphysGroup):
+
+[docs]
+class Scenario(MPhysGroup):
"""
A group to represent a specific analysis condition or point of the MPhys
multipoint groups.
@@ -61,13 +65,16 @@ Source code for mphys.scenario
self._post_subsystems = []
-[docs] def initialize(self):
+
+[docs]
+ def initialize(self):
self.options.declare('run_directory',
default='',
types=str,
desc='Path in which to execute subsystems in this scenario group.' +
' The default of empty string will not change the directory.')
+
def _mphys_scenario_setup(self):
"""
This function is where specific scenarios populate pre-coupling, coupling,
@@ -75,7 +82,10 @@ Source code for mphys.scenario
"""
pass
-[docs] def setup(self):
+
+[docs]
+ @switch_run_directory
+ def setup(self):
"""
The main setup call for all multiphysics scenarios.
Multiphysics scenarios should implement setup-type operations in _mphys_scenario_setup().
@@ -84,7 +94,10 @@ Source code for mphys.scenario
self._mphys_scenario_setup()
self._add_post_subsystems()
-[docs] def mphys_add_post_subsystem(self, name, subsystem,
+
+
+[docs]
+ def mphys_add_post_subsystem(self, name, subsystem,
promotes_inputs=None,
promotes_outputs=None,
promotes=None):
@@ -107,6 +120,7 @@ Source code for mphys.scenario
# setup() to add the builder subsystems before adding these
self._post_subsystems.append((name, subsystem, promotes_inputs, promotes_outputs, promotes))
+
@switch_run_directory
def _solve_nonlinear(self, *args, **kwargs):
return super()._solve_nonlinear(*args, **kwargs)
@@ -132,7 +146,7 @@ Source code for mphys.scenario
----------
name: str
Name of the discipline
- builder: :class:`~mphys.builder.Builder`
+ builder: :class:`~mphys.Builder`
The discipline's builder object
scenario_name: str or None
Name of the scenario being setup (optional)
@@ -150,7 +164,7 @@ Source code for mphys.scenario
----------
name: str
Name of the discipline
- builder: :class:`~mphys.builder.Builder`
+ builder: :class:`~mphys.Builder`
The discipline's builder object
scenario_name: str or None
Name of the scenario being setup (optional)
@@ -173,72 +187,74 @@ Source code for mphys.scenario
return (promotes_inputs is None and
promotes_outputs is None and
promotes is None)
+
-
+
-
+
Navigation
-
- index
-
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.scenario
+ - MPhys documentation »
+ - Module code »
+ - mphys.core.scenario
\ No newline at end of file
diff --git a/_modules/mphys/coupling_group.html b/_modules/mphys/coupling_group.html
deleted file mode 100644
index 5effd6cf..00000000
--- a/_modules/mphys/coupling_group.html
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
- mphys.coupling_group — MPhys documentation
-
-
-
-
-
-
-
-
-
- Navigation
-
- -
- index
- -
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.coupling_group
-
-
-
-
-
-
-
-
- Source code for mphys.coupling_group
-from .mphys_group import MphysGroup
-
-
-
-
-
-
-
-
-
-
-Table of Contents
-
-
-
-
-
-
-
-
-
-
-
- Quick search
-
-
-
-
-
-
-
-
-
-
- Navigation
-
- -
- index
- -
- modules |
- - MPhys documentation »
- - Module code »
- - mphys.coupling_group
-
-
-
- © Copyright 2022, NASA.
- Created using Sphinx 7.1.2.
-
-
-
\ No newline at end of file
diff --git a/_modules/mphys/network/remote_component.html b/_modules/mphys/network/remote_component.html
index 5d0c59e2..2a89630e 100644
--- a/_modules/mphys/network/remote_component.html
+++ b/_modules/mphys/network/remote_component.html
@@ -1,19 +1,19 @@
-
+
mphys.network.remote_component — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -38,7 +38,9 @@
Source code for mphys.network.remote_component
import json, time, os
import numpy as np
-
[docs]class RemoteComp(om.ExplicitComponent):
+
+[docs]
+class RemoteComp(om.ExplicitComponent):
"""
A component used for network communication between top-level OpenMDAO
problem and remote problem evaluated on an HPC job. Serves as the
@@ -51,7 +53,9 @@ Source code for mphys.network.remote_component
# shortcut for stopping server from top level
self.server_manager.stop_server()
-
[docs] def initialize(self):
+
+[docs]
+ def initialize(self):
self.options.declare('run_server_filename', default="mphys_server.py", desc="python file that will launch the Server class")
self.options.declare('time_estimate_multiplier', default=2.0, desc="when determining whether to reboot the server, estimate model run time as this times max prior run time")
self.options.declare('time_estimate_buffer', default=0.0, types=float, desc="constant time in seconds to add to model evaluation esimate. "
@@ -66,7 +70,10 @@ Source code for mphys.network.remote_component
self.options.declare('additional_remote_outputs', default=[], types=list, desc="additional outputs not defined as objective/constraints in the remote component")
self.options.declare('use_derivative_coloring', default=False, types=bool, desc="assign derivative coloring to objective/constraints. Only for cases with parallel servers")
-[docs] def setup(self):
+
+
+[docs]
+ def setup(self):
if self.comm.size>1:
raise SystemError('Using Remote Component on more than 1 rank is not supported')
self.time_estimate_multiplier = self.options['time_estimate_multiplier']
@@ -104,7 +111,10 @@ Source code for mphys.network.remote_component
self.declare_partials('*', '*')
-[docs] def compute(self,inputs,outputs):
+
+
+[docs]
+ def compute(self,inputs,outputs):
input_dict = self._create_input_dict_for_server(inputs)
remote_dict = self.evaluate_model(remote_input_dict=input_dict, command='evaluate')
@@ -112,7 +122,10 @@ Source code for mphys.network.remote_component
self._assign_constraints_from_remote_output(remote_dict, outputs)
self._assign_additional_outputs_from_remote_output(remote_dict, outputs)
-[docs] def compute_partials(self, inputs, partials):
+
+
+[docs]
+ def compute_partials(self, inputs, partials):
# NOTE: this will not use of and wrt inputs, if given in outer script's compute_totals/check_totals
input_dict = self._create_input_dict_for_server(inputs)
@@ -122,6 +135,7 @@ Source code for mphys.network.remote_component
self._assign_constraint_partials_from_remote_output(remote_dict, partials)
self._assign_additional_partials_from_remote_output(remote_dict, partials)
+
def evaluate_model(self, remote_input_dict=None, command='initialize'):
if self._need_to_restart_server(command):
self.server_manager.stop_server()
@@ -317,13 +331,14 @@ Source code for mphys.network.remote_component
def _setup_server_manager(self):
raise NotImplementedError
+
-
+
Table of Contents
@@ -331,6 +346,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -345,14 +361,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -382,7 +398,7 @@
Navigation
\ No newline at end of file
diff --git a/_modules/mphys/network/server.html b/_modules/mphys/network/server.html
index 2dd6811d..2c17456a 100644
--- a/_modules/mphys/network/server.html
+++ b/_modules/mphys/network/server.html
@@ -1,19 +1,19 @@
-
+
mphys.network.server — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -37,7 +37,9 @@
Source code for mphys.network.server
import openmdao.api as om
import warnings
-[docs]class Server:
+
+[docs]
+class Server:
"""
A class that serves as an OpenMDAO model analysis server. Launched
by a server run file by the ServerManager and runs on an HPC job,
@@ -325,7 +327,9 @@ Source code for mphys.network.server
if hasattr(self.additional_inputs,'keys'):
self.additional_inputs = list(self.additional_inputs.keys())
-[docs] def run(self):
+
+[docs]
+ def run(self):
"""
Run the server.
"""
@@ -386,14 +390,16 @@ Source code for mphys.network.server
self._send_outputs_to_client(output_dict)
# write current n2 with values
- om.n2(self.prob, show_browser=False, outfile=f"n2_inner_analysis_{input_dict['component_name']}.html")
+ om.n2(self.prob, show_browser=False, outfile=f"n2_inner_analysis_{input_dict['component_name']}.html")
+
+
-
+
Table of Contents
@@ -401,6 +407,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -415,14 +422,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -452,7 +459,7 @@
Navigation
\ No newline at end of file
diff --git a/_modules/mphys/network/server_manager.html b/_modules/mphys/network/server_manager.html
index 1b413a88..43939eac 100644
--- a/_modules/mphys/network/server_manager.html
+++ b/_modules/mphys/network/server_manager.html
@@ -1,19 +1,19 @@
-
+
mphys.network.server_manager — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -34,7 +34,9 @@
Navigation
Source code for mphys.network.server_manager
-[docs]class ServerManager:
+
+[docs]
+class ServerManager:
"""
A class used by the client-side RemoteComp to facilitate communication
with the remote, server-side OpenMDAO problem.
@@ -42,19 +44,27 @@ Source code for mphys.network.server_manager
To make a particular derived class, implement the start_server,
stop_server, and enough_time_is_remaining functions.
"""
-[docs] def start_server(self):
+
-[docs] def stop_server(self):
+
+
-[docs] def enough_time_is_remaining(self, estimated_model_time):
+
+
+[docs]
+ def enough_time_is_remaining(self, estimated_model_time):
"""
Check if the current HPC job has enough time remaining
to run the next analysis.
@@ -64,14 +74,16 @@ Source code for mphys.network.server_manager
estimated_model_time : float
How much time the new analysis is estimated to take
"""
- return True
+ return True
+
+
-
+
Table of Contents
@@ -79,6 +91,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -93,14 +106,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -130,7 +143,7 @@
Navigation
\ No newline at end of file
diff --git a/_modules/mphys/network/zmq_pbs.html b/_modules/mphys/network/zmq_pbs.html
index ec4230d5..a28ea9a0 100644
--- a/_modules/mphys/network/zmq_pbs.html
+++ b/_modules/mphys/network/zmq_pbs.html
@@ -1,19 +1,19 @@
-
+
mphys.network.zmq_pbs — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -45,12 +45,16 @@
Source code for mphys.network.zmq_pbs
from pbs4py.job import PBSJob
from mphys.network import RemoteComp, Server, ServerManager
-[docs]class RemoteZeroMQComp(RemoteComp):
+
+[docs]
+class RemoteZeroMQComp(RemoteComp):
"""
A derived RemoteComp class that uses pbs4py for HPC job management
and ZeroMQ for network communication.
"""
-[docs] def initialize(self):
+
+[docs]
+ def initialize(self):
self.options.declare('pbs', "pbs4py Launcher object")
self.options.declare('port', default=5081, desc="port number for server/client communication")
self.options.declare('acceptable_port_range', default=[5081,6000], desc="port range to look through if 'port' is currently busy")
@@ -58,6 +62,7 @@ Source code for mphys.network.zmq_pbs
super().initialize()
self.server_manager = None # for avoiding reinitialization due to multiple setup calls
+
def _send_inputs_to_server(self, remote_input_dict, command: str):
if self._doing_derivative_evaluation(command):
print(f'CLIENT (subsystem {self.name}): Requesting derivative call from server', flush=True)
@@ -78,7 +83,10 @@ Source code for mphys.network.zmq_pbs
acceptable_port_range=self.options['acceptable_port_range'],
additional_server_args=self.options['additional_server_args'])
-[docs]class MPhysZeroMQServerManager(ServerManager):
+
+
+[docs]
+class MPhysZeroMQServerManager(ServerManager):
"""
A derived ServerManager class that uses pbs4py for HPC job management
and ZeroMQ for network communication.
@@ -116,24 +124,33 @@ Source code for mphys.network.zmq_pbs
self.server_counter = 0 # for saving output of each server to different files
self.start_server()
-[docs] def start_server(self):
+
+[docs]
+ def start_server(self):
self._initialize_connection()
self.server_counter += 1
self._launch_job()
-[docs] def stop_server(self):
+
+
+[docs]
+ def stop_server(self):
print(f'CLIENT (subsystem {self.component_name}): Stopping the remote analysis server', flush=True)
self.socket.send('shutdown|null'.encode())
self._shutdown_server()
self.socket.close()
-[docs] def enough_time_is_remaining(self, estimated_model_time):
+
+
+[docs]
+ def enough_time_is_remaining(self, estimated_model_time):
self.job.update_job_state()
if self.job.walltime_remaining is None:
return False
else:
return estimated_model_time < self.job.walltime_remaining
+
def _port_is_in_use(self, port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port))==0
@@ -197,7 +214,10 @@ Source code for mphys.network.zmq_pbs
def _stop_placeholder_ssh(self):
self.ssh_proc.kill()
-[docs]class MPhysZeroMQServer(Server):
+
+
+[docs]
+class MPhysZeroMQServer(Server):
"""
A derived Server class that uses ZeroMQ for network communication.
"""
@@ -231,6 +251,7 @@ Source code for mphys.network.zmq_pbs
if self.rank==0:
self.socket.send(str(json.dumps(output_dict)).encode())
+
def get_default_zmq_pbs_argparser():
parser = argparse.ArgumentParser('Python script for launching mphys analysis server',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
@@ -242,7 +263,7 @@ Source code for mphys.network.zmq_pbs
-
+
Table of Contents
@@ -250,6 +271,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -264,14 +286,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -301,7 +323,7 @@
Navigation
\ No newline at end of file
diff --git a/_sources/basics/builders.rst.txt b/_sources/basics/builders.rst.txt
index f546c563..6dee74db 100644
--- a/_sources/basics/builders.rst.txt
+++ b/_sources/basics/builders.rst.txt
@@ -1,10 +1,10 @@
.. _builders:
-########
+========
Builders
-########
+========
-In large multiphysics problems, creation and connection of the OpenMDAO can be complicated and time-consuming.
+In large multiphysics problems, creation and connection of the OpenMDAO model can be complicated and time-consuming.
The design of MPhys is based on builder classes in order to reduce the burden on the user.
Most of the assembly of the OpenMDAO model with MPhys is handled by a set of builder helper objects.
@@ -13,7 +13,8 @@ Not all builders need to implement all the methods.
For example, a transfer scheme builder may not need a precoupling post coupling subsystem in the scenario.
-.. automodule:: mphys.builder
+.. automodule:: mphys
+ :noindex:
.. autoclass:: Builder
:members:
diff --git a/_sources/basics/model_assembly.rst.txt b/_sources/basics/model_assembly.rst.txt
new file mode 100644
index 00000000..7fb0154a
--- /dev/null
+++ b/_sources/basics/model_assembly.rst.txt
@@ -0,0 +1,79 @@
+.. _model_assembly:
+
+=========================
+Assembling an MPhys Model
+=========================
+
+
+MPhys seeks to automate most of its model assembly process using the builder software design pattern.
+If using a :class:`MultipointParallel ` group,
+skip steps 3-4 as these are handled within the Scenario since each Scenario will have its own MPI communicator.
+
+
+
+.. code-block:: python
+
+ import openmdao.api as om
+ from mphys import Multipoint, MPhysVariables
+ from mphys.scenarios import ScenarioAerodynamic
+
+ from my_aero_code import AeroBuilder
+
+ # Step 1
+ class MyMPhysModel(Multipoint):
+ def setup(self):
+
+ dvs = self.add_subsystem('dvs', om.IndepVarComp())
+ dvs.add_output('aoa', val=0.0, units='deg')
+
+ # Step 2
+ aero_builder = AeroBuilder(mesh="naca0012.ugrid")
+
+ # Step 3
+ aero_builder.initialize(self.comm)
+
+ # Step 4
+ self.add_subsystem("aero_mesh", aero_builder.get_mesh_coordinate_subsystem())
+
+ # Step 5
+ scenario = ScenarioAerodynamic(aero_builder=aero_builder)
+
+ # Step 6
+ self.mphys_add_scenario("cruise", scenario)
+
+ # Step 7
+ self.connect("dvs.aoa", "cruise.aoa")
+ self.connect(MPhysVariables.Aerodynamics.Mesh.COORDINATES,
+ MPhysVariables.Aerodynamics.Surface.COORDINATES)
+
+1. Define an :class:`Multipoint ` group.
+2. In the ``setup()`` method of the Multipoint group, instantiate
+ the :ref:`Builder ` associated with the disciplinary solvers you intend to use.
+3. Initialize the disciplinary Builders with the MPI communicator of the Multipoint group.
+ This should be done in the ``setup()`` method of the Multipoint group after the builder is instantiated.
+ For example, ``aero_builder.initialize(self.comm)``
+4. If applicable to the discipline, add a subsystem for the initial mesh coordinates from the builder's :func:`get_mesh_coordinate_subsystem ` function.
+ This subsystem allows the disciplinary solver to dictate the parallel decomposition of its mesh.
+ Any geometry manipulation subsystems, data transfer scheme subsystems, etc. will then be connected to the mesh subsystem's mesh coordinate output.
+5. Create an MPhys scenario from the :ref:`scenario_library`.
+6. Use :func:`mphys_add_scenario ` to add the scenario to the Multipoint group.
+ Add customized coupled nonlinear and linear solvers to the scenario in this function call.
+7. Connect inputs to the scenarios. Since MPhys uses :ref:`tagged_promotion`,
+ these inputs will have been promoted to ``{scenario_name}.{variable_name}``.
+ Typically the inputs that need to be connected are the design variables of the disciplinary solvers
+ and mesh coordinates (if applicable to the discipline).
+ These mesh coordinates may come from the initial mesh, or be altered by a geometry tool.
+8. Repeat steps 5-7 until your Multipoint group is fully defined.
+
+.. figure:: mphys_model_assembly.png
+ :scale: 50 %
+ :alt: Flow chart of MPhys model assembly
+
+
+--------
+Examples
+--------
+
+
+- The `supersonic panel example `_ provides an example of this model assembly and usage in a self-contained problem (no external disciplinary solvers).
+- The `oas_tacs_wing example `_ is another relatively simple example case that uses open-source disciplinary solvers.
diff --git a/_sources/basics/model_hierarchy.rst.txt b/_sources/basics/model_hierarchy.rst.txt
index 590f85db..4bd500d8 100644
--- a/_sources/basics/model_hierarchy.rst.txt
+++ b/_sources/basics/model_hierarchy.rst.txt
@@ -1,70 +1,83 @@
-***************
+===============
Model Hierarchy
-***************
+===============
-MPhys uses a pattern to build multiphysics optimization problems.
-Each level of the pattern is a different type of group that MPhys provides.
+MPhys uses a hierarchical set of OpenMDAO groups to build multiphysics models.
+Each level of the hierarchy is a different OpenMDAO group that MPhys provides.
The highest level of the model is the multipoint group.
-The multipoint group consist of scenarios which represent different conditions and/or types of multiphysics analyses to performed.
+The multipoint group consists of scenarios which represent different conditions and/or types of multiphysics analyses to be performed.
Within the scenario is the coupling group which represents the primary multiphysics problem for the scenario.
+See :ref:`model_assembly` for guidance on how to create this model hierarchy for a particular problem.
:ref:`builders` are used to help populate these levels of the model hierarchy with subsystems from the solvers.
:ref:`tagged_promotion` is used to promote specific variables to the level of scenario.
.. _coupling_groups:
-===============
+---------------
Coupling Groups
-===============
+---------------
The CouplingGroup is the primary physics coupling being solved.
-That is it contains physics modules, such as an aerodynamic or structural solver,
-and potentially modules that transfer or interpolate between the physics modules, such as a load or displacement transfer schemes.
+That is, it contains physics modules, such as an aerodynamic or structural solver,
+and potentially modules that transfer or interpolate between the physics modules, such as a load or displacement transfer scheme.
Each type of scenario typically has an associated coupling group that it will add automatically given the proper builders.
Within the Scenario group, the coupling group will have the name 'coupling'.
The scenario-specific coupling group will have a default nonlinear and linear solvers,
-but these can be overwritten with the optional arguments to :func:`~mphys.multipoint.Multipoint.mphys_add_scenario`.
+but these can be overwritten with the optional arguments to :func:`~mphys.Multipoint.mphys_add_scenario`.
.. _scenario_groups:
-===============
+---------------
Scenario Groups
-===============
+---------------
The scenario level is an OpenMDAO group that represents a specific condition in a multipoint optimization.
For example, a scenario could be a cruise flight condition that requires a coupling group to determine the lift and drag.
The scenario group contains a coupling group and any scenario-specific computation that needs to occur before or after the associated coupled problem is solved.
-For example, a sonic boom propagator requires the flow solution as an input but this one-way coupling does not require it to be in the coupling group; therefore, it should be put in the scenario group to be solved after the coupling group converges.
+The subsystems before the coupled problem are referred to as 'pre_coupling' subsystems.
+The subsystems after the coupled problem are referred to as 'post_coupling' subsystems.
+An example post_coupling subsystem would be a sonic boom propagation analysis after an aeropropulsive coupling analysis.
+
+
+.. figure:: scenario_example.png
+ :scale: 50 %
+ :alt: Example Scenario
MPhys provides a library of these Scenario groups designed for specific type problems.
See :ref:`scenario_library` for details about specific standardized scenarios.
-If a particular multiphysics problem is not covered by the MPhys library, new scenarios and coupling groups can be created by subclassing the :class:`~mphys.mphys_group.MphysGroup`.
+If a particular multiphysics problem is not covered by the MPhys library, new scenarios and coupling groups can be created by subclassing the :class:`~mphys.MPhysGroup`.
-=================
+-----------------
Multipoint Groups
-=================
+-----------------
There are two versions of the multipoint group:
1. ``Multipoint`` is derived from the standard OpenMDAO ``Group``
2. ``MultipointParallel`` is derived for the OpenMDAO ``ParallelGroup``.
-For both versions have a function, :func:`~mphys.multipoint.Multipoint.mphys_add_scenario`, is used to populate
+For both versions, a function :func:`~mphys.Multipoint.mphys_add_scenario` is used to populate
the lower levels of the model hierarchy.
-----------
+.. figure:: multipoint_example.png
+ :scale: 50 %
+ :alt: Example Multipoint Group
+
+
+^^^^^^^^^^
Multipoint
-----------
+^^^^^^^^^^
The ``Multipoint`` group will sequentially evaluate the scenario groups.
The ``Multipoint`` group can be the top group of the OpenMDAO model or a subsystem.
In the ``setup`` method of the Multipoint group, the following steps must be done:
1. Instantiate the builders
-2. Call :func:`~mphys.builder.Builder.initialize` for each builder with the Multipoint's comm (``self.comm``)
+2. Call :func:`~mphys.core.builder.Builder.initialize` for each builder with the Multipoint's comm (``self.comm``)
3. Add the mesh components and/or other mesh coordinate source like geometry.
4. Add the scenarios
5. Connect the mesh coordinates to the scenarios
@@ -72,15 +85,15 @@ In the ``setup`` method of the Multipoint group, the following steps must be don
Additionally, the Multipoint group can hold the design variables or other inputs and subsystems to be evaluated after the scenarios.
These extra subsystem can then be connected to the scenarios by the user.
-.. automodule:: mphys.multipoint
+.. automodule:: mphys
.. autoclass:: Multipoint
:members:
:exclude-members: configure
-------------------
+^^^^^^^^^^^^^^^^^^
MultipointParallel
-------------------
+^^^^^^^^^^^^^^^^^^
If given a number of MPI ranks greater than or equal to the number of scenarios, the ``MultipointParallel`` group will simultaneously evaluate the scenario groups.
Unlike the sequential Multipoint group, the MPI communicators are different for each scenario in MultipointParallel, so the scenarios will call the builder's initialize method.
diff --git a/_sources/basics/naming_conventions.rst.txt b/_sources/basics/naming_conventions.rst.txt
index c3e5cb1e..4b375695 100644
--- a/_sources/basics/naming_conventions.rst.txt
+++ b/_sources/basics/naming_conventions.rst.txt
@@ -1,48 +1,90 @@
-***************************
+===========================
Variable Naming Conventions
-***************************
+===========================
While it is possible to set up the same OpenMDAO multiphysics problem with different sets of variable names, it is preferable for codes solving the same physics to use the same variable names to be more easily interchangeable.
This table provides the required names for coupling variables associated with a particular physics in MPhys.
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| Variable | Associated Solver | MPhys tag | Variable description |
-+======================+===================+===================+===============================================================================+
-| :code:`x_aero0` | Aerodynamic | mphys_coordinates | Aerodynamic surface coordinates (jig shape) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`x_aero` | Aerodynamic | mphys_coupling | Aerodynamic surface coordinates (deformed) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`u_aero` | Aerodynamic | mphys_coupling | Aerodynamic surface displacements |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`f_aero` | Aerodynamic | mphys_coupling | Aerodynamic surface forces |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`T_convect` | Aerodynamic | mphys_coupling | Temperature for convective solver at interface |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`q_convect` | Aerodynamic | mphys_coupling | Convective heat flow at interface |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`x_struct0` | Structural | mphys_coordinates | Structural coordinates (jig shape) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`u_struct` | Structural | mphys_coupling | Structural state vector (displacements) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`f_struct` | Structural | mphys_coupling | Structural forces |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`T_conduct` | Thermal | mphys_coupling | Temperature at interface (structural side) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
-| :code:`q_conduct` | Thermal | mphys_coupling | Conductive heat flow at interface (structural side) |
-+----------------------+-------------------+-------------------+-------------------------------------------------------------------------------+
+The variable naming convention is defined as a Nested Classes with static variables.
+The names are access from the ``MPhysVariables`` class.
+If defining an component that uses the MPhys variable names repeatedly, it is often uses to define a local copy due to the long names that the nested variable classes.
+
+.. code-block:: python
+
+ import openmdao.api as om
+ from mphys import MPhysVariables
+
+ X_AERO0 = MPhysVariables.Aerodynamics.Surface.COORDINATES_INITIAL
+ U_AERO = MPhysVariables.Aerodynamics.Surface.DISPLACEMENTS
+ F_AERO = MPhysVariables.Aerodynamics.Surface.LOADS
+
+ class AeroSolver(om.ImplicitComponent):
+ def setup(self):
+ self.add_input(X_AERO0, shape=5, distributed=True, tags=['mphys_coordinates'])
+ self.add_input(U_AERO0, shape=5, distributed=True, tags=['mphys_coupling'])
+ self.add_output(F_AERO0, shape=3, distributed=True, tags=['mphys_coupling'])
+
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| Code Access | Associated Solver | MPhys tag | Variable description |
++=================================================================+===================+===================+==================================================================+
+| MPhysVariables.Aerodynamics.Surface.Mesh.COORDINATES | Aerodynamic | mphys_coordinates | Aerodynamic surface coordinates from initial mesh file |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.Geometry.COORDINATES_INPUT | Aerodynamic | mphys_coordinates | Aerodynamic surface coordinates (initial coordinates) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.Geometry.COORDINATES_OUTPUT | Aerodynamic | mphys_coordinates | Aerodynamic surface coordinates (geometry-deform jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.COORDINATES_INITIAL | Aerodynamic | mphys_coordinates | Aerodynamic surface coordinates (jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.COORDINATES_DEFORMED | Aerodynamic | mphys_coupling | Aerodynamic surface coordinates (deformed) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.DISPLACEMENTS | Aerodynamic | mphys_coupling | Aerodynamic surface displacements |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.LOADS | Aerodynamic | mphys_coupling | Aerodynamic surface forces |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.TEMPERATURE | Aerodynamic | mphys_coupling | Temperature for convective solver at interface |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.Surface.HEAT_FLOW | Aerodynamic | mphys_coupling | Convective heat flow at interface |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.Mesh.COORDINATES | Structural | mphys_coordinates | Structural coordinates from initial mesh file |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.Geometry.COORDINATES_INPUT | Structural | mphys_coordinates | Structural coordinates (initial coordinates) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.Geometry.COORDINATES_OUTPUT | Structural | mphys_coordinates | Structural coordinates (geometry-deformed jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.COORDINATES | Structural | mphys_coordinates | Structural coordinates (jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.DISPLACEMENTS | Structural | mphys_coupling | Structural state vector (displacements) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Structures.LOADS.AERODYNAMIC | Structural | mphys_coupling | Structural forces due to aerodynamics |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.Mesh.COORDINATES | Thermal | mphys_coupling | Thermal coordinates from initial mesh file |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.Geometry.COORDINATES_INPUT | Thermal | mphys_coupling | Thermal coordinates (initial coordinates) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.Geometry.COORDINATES_OUTPUT | Thermal | mphys_coupling | Thermal coordinates (geometry-deformed jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.COORDINATES | Thermal | mphys_coupling | Thermal coordinates (jig shape) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.TEMPERATURE | Thermal | mphys_coupling | Temperature at interface (thermal solver side) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+| MPhysVariables.Thermal.HeatFlow.AERODYNAMIC | Thermal | mphys_coupling | heat flow at interface due to aerodynamics (thermal solver side) |
++-----------------------------------------------------------------+-------------------+-------------------+------------------------------------------------------------------+
+
To make swapping solvers easier, it is also helpful to share noncoupling variable names if possible:
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
-| Variable | Associated Solver | MPhys tag | Variable description |
-+======================+===================+===================+=================================================================================+
-| :code:`aoa` | Aerodynamic | mphys_input | Angle of attack (please include units='deg' or 'rad' when declared) |
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
-| :code:`yaw` | Aerodynamic | mphys_input | Yaw angle (please include units='deg' or 'rad' when declared) |
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
-| :code:`mach` | Aerodynamic | mphys_input | Reference Mach number |
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
-| :code:`reynolds` | Aerodynamic | mphys_input | Reference Reynolds number |
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
-| :code:`q_inf` | Aerodynamic | mphys_input | Dynamic pressure |
-+----------------------+-------------------+-------------------+---------------------------------------------------------------------------------+
+
+
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
+| Variable | Associated Solver | MPhys tag | Variable description |
++=============================================================+===================+=============+=====================================================================+
+| MPhysVariables.Aerodynamics.FlowConditions.ANGLE_OF_ATTACK | Aerodynamic | mphys_input | Angle of attack (please include units='deg' or 'rad' when declared) |
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.FlowConditions.YAW_ANGLE | Aerodynamic | mphys_input | Yaw angle (please include units='deg' or 'rad' when declared) |
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.FlowConditions.MACH_NUMBER | Aerodynamic | mphys_input | Reference Mach number |
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.FlowConditions.REYNOLDS_NUMBER | Aerodynamic | mphys_input | Reference Reynolds number |
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
+| MPhysVariables.Aerodynamics.FlowConditions.DYNAMIC_PRESSURE | Aerodynamic | mphys_input | Dynamic pressure |
++-------------------------------------------------------------+-------------------+-------------+---------------------------------------------------------------------+
diff --git a/_sources/basics/remote_components.rst.txt b/_sources/basics/remote_components.rst.txt
index 1b2ba290..401baf1d 100644
--- a/_sources/basics/remote_components.rst.txt
+++ b/_sources/basics/remote_components.rst.txt
@@ -1,8 +1,8 @@
.. _remote_components:
-*****************
+=================
Remote Components
-*****************
+=================
The purpose of remote components is to provide a means of adding a remote physics analysis to a local OpenMDAO problem.
One situation in which this may be desirable is when the time to carry out a full optimization exceeds an HPC job time limit.
@@ -27,15 +27,17 @@ Currently, there is one derived class for each, which use pbs4py for HPC job con
* :class:`~mphys.network.zmq_pbs.MPhysZeroMQServerManager`: Uses ZeroMQ socket and ssh port forwarding from login to compute node to communicate with server, and pbs4py to start, stop, and check status of HPC jobs.
* :class:`~mphys.network.zmq_pbs.MPhysZeroMQServer`: Uses ZeroMQ socket to send and receive encoded JSON dictionaries.
+------------------------
RemoteZeroMQComp Options
-========================
+------------------------
.. embed-options::
mphys.network.zmq_pbs
RemoteZeroMQComp
options
+-----
Usage
-=====
+-----
When adding a :code:`RemoteZeroMQComp` component, the two required options are :code:`run_server_filename`, which is the server to be launched on an HPC job, and :code:`pbs`, which is the pbs4py Launcher object.
The server file should accept port number as an argument to facilitate communication with the client.
Within this file, the :code:`MPhysZeroMQServer` class's :code:`get_om_group_function_pointer` option is the pointer to the OpenMDAO Group or Multipoint class to be evaluated.
@@ -48,8 +50,9 @@ Searching for the keyword "SERVER" will display what the server is currently doi
The HPC job for the component's server is named :code:`MPhys`; the pbs4py-generated job submission script is the same followed by ".pbs".
Note that running the remote component in parallel is not supported, and a SystemError will be triggered otherwise.
+-------
Example
-=======
+-------
Two examples are provided for the `supersonic panel aerostructural case `_: :code:`as_opt_remote_serial.py` and :code:`as_opt_remote_parallel.py`.
Both run the optimization problem defined in :code:`as_opt_parallel.py`, which contains a :code:`MultipointParallel` class and thus evaluates two aerostructural scenarios in parallel.
The serial remote example runs this group on one server.
@@ -60,8 +63,9 @@ In this particular case, scenario name(s) are sent as :code:`additional_server_a
Using the scenario :code:`run_directory` option, the scenarios can then be evaluated in different directories.
In both examples, the remote component(s) use a :code:`K4` pbs4py Launcher object, which will launch, monitor, and stop jobs using the K4 queue of the NASA K-cluster.
+---------------
Troubleshooting
-===============
+---------------
The :code:`dump_json` option for :code:`RemoteZeroMQComp` will make the component write input and output JSON files, which contain all data sent to and received from the server.
An exception is the :code:`wall_time` entry (given in seconds) in the output JSON file, which is added on the client-side after the server has completed the design evaluation.
Another entry that is only provided for informational purposes is :code:`design_counter`, which keeps track of how many different designs have been evaluated on the current server.
diff --git a/_sources/basics/tagged_promotion.rst.txt b/_sources/basics/tagged_promotion.rst.txt
index 65ec589d..e2af70a6 100644
--- a/_sources/basics/tagged_promotion.rst.txt
+++ b/_sources/basics/tagged_promotion.rst.txt
@@ -1,8 +1,8 @@
.. _tagged_promotion:
-****************
+================
Tagged Promotion
-****************
+================
MPhys uses tags to selectively promote variables to the level of scenario.
There are four types of tags in MPhys that represent different types of data.
diff --git a/_sources/developers/mphys_group.rst.txt b/_sources/developers/mphys_group.rst.txt
index 54d7dd75..5dc1c9a9 100644
--- a/_sources/developers/mphys_group.rst.txt
+++ b/_sources/developers/mphys_group.rst.txt
@@ -1,29 +1,30 @@
-**************
-The MphysGroup
-**************
+==============
+The MPhysGroup
+==============
-The purpose of the MphysGroup is to implement the mechananics of promoting the MPhys variables by tags.
-Subsystems with tagged variables that will be promoted are added with the :func:`~mphys.mphys_group.MphysGroup.mphys_add_subsystem` method.
+The purpose of the MPhysGroup is to implement the mechanics of promoting the MPhys variables by tags.
+Subsystems with tagged variables that will be promoted are added with the :func:`~mphys.MPhysGroup.mphys_add_subsystem` method.
Subsystems that have variables that should not be promoted can still be added with ``add_subsystem``
The automated promotion of tagged variables is done during the configure phase of OpenMDAO setup.
If you need to use ``configure`` in your CouplingGroup or Scenario group, be sure to call the parent's configure with
``super().configure()``.
-The :class:`~mphys.mphys_group.MphysGroup` is the base class of the :ref:`dev_coupling_group` and :ref:`dev_scenario_group`.
-While it is important to understand the MphysGroup's :func:`~mphys.mphys_group.MphysGroup.configure` and :func:`~mphys.mphys_group.MphysGroup.mphys_add_subsystem` interactions,
-any new scenario or coupling group should inherit from :class:`~mphys.scenario.Scenario` and :class:`~mphys.coupling_group.CouplingGroup`.
-rather than subclassing MphysGroup directly.
+The :class:`~mphys.MPhysGroup` is the base class of the :ref:`dev_coupling_group` and :ref:`dev_scenario_group`.
+While it is important to understand the MPhysGroup's :func:`~mphys.MPhysGroup.configure` and :func:`~mphys.MPhysGroup.mphys_add_subsystem` interactions,
+any new scenario or coupling group should inherit from :class:`~mphys.Scenario` and :class:`~mphys.CouplingGroup`.
+rather than subclassing MPhysGroup directly.
-.. automodule:: mphys.mphys_group
+.. automodule:: mphys
+ :noindex:
-.. autoclass:: MphysGroup
+.. autoclass:: MPhysGroup
:members:
-==============================
+------------------------------
Manual Connection of Variables
-==============================
+------------------------------
In some instances, the use of automated promotion is not appropriate.
-Because the MphysGroup inherits from the standard OpenMDAO group,
+Because the MPhysGroup inherits from the standard OpenMDAO group,
subsystems can be added with the standard ``add_subsystem`` method and connected manually.
diff --git a/_sources/developers/new_multiphysics_problems.rst.txt b/_sources/developers/new_multiphysics_problems.rst.txt
index e02f4eff..6f7d6078 100644
--- a/_sources/developers/new_multiphysics_problems.rst.txt
+++ b/_sources/developers/new_multiphysics_problems.rst.txt
@@ -1,56 +1,58 @@
-******************************
+==============================
Extending the Scenario Library
-******************************
+==============================
.. _dev_coupling_group:
-===============
+---------------
Coupling Groups
-===============
+---------------
In ``initialize``, the coupling group needs to have the required builders declared as options.
-In the setup phase, :func:`~mphys.builder.Builder.get_coupling_group_subsystem` is used to get subsystems from the builders,
+In the setup phase, :func:`~mphys.Builder.get_coupling_group_subsystem` is used to get subsystems from the builders,
and ``self.mphys_add_subsystem`` is used to add them.
Other components like balance components can be added directly.
Setting a default linear and nonlinear solver suitable for this type of problem is also helpful in ``setup``.
In most cases using a configure phase is not necessary for the scenario, but if you do implement a ``configure``
method, you must call ``super().configure()`` to do the tagged promotion of variables from the scenario's subsystems.
-.. automodule:: mphys.coupling_group
+.. automodule:: mphys
+ :noindex:
.. autoclass:: CouplingGroup
:members:
.. _dev_scenario_group:
-=========
+---------
Scenarios
-=========
+---------
Your custom Scenario should at least implement the ``initialize`` and ``setup`` methods.
As with the ``CouplingGroup``, you must call the ``configure`` method of the parent class if you implement a
``configure`` method in the Scenario.
-----------
+^^^^^^^^^^
Initialize
-----------
+^^^^^^^^^^
The Scenario's ``initialize`` method should declare the necessary builders as options.
An ``in_MultipointParallel`` option should also be included if that mode of operation will be implemented.
Otherwise the developer is free to add options specific to the scenario type.
------
+^^^^^
Setup
------
+^^^^^
The basic pattern for the scenario group's setup method is:
0. If ``in_MultipointParallel``, initialize all the builders
-1. Call :func:`~mphys.scenario.Scenario.mphys_add_pre_coupling_subsystem` for each builder.
+1. Call :func:`~mphys.Scenario.mphys_add_pre_coupling_subsystem` for each builder.
2. Instantiate the associated :class:`~mphys.coupling_group.CouplingGroup`.
-3. Call :func:`~mphys.scenario.Scenario.mphys_add_post_coupling_subsystem` for each builder.
+3. Call :func:`~mphys.Scenario.mphys_add_post_coupling_subsystem` for each builder.
-.. automodule:: mphys.scenario
+.. automodule:: mphys
+ :noindex:
.. autoclass:: Scenario
:members:
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
index 64570468..a84f899f 100644
--- a/_sources/index.rst.txt
+++ b/_sources/index.rst.txt
@@ -1,3 +1,6 @@
+.. image:: logo/mphys_logo_no_background.png
+ :scale: 15 %
+
%%%%%%%%%%%%%%%%%%%%%%%
Documentation for MPhys
%%%%%%%%%%%%%%%%%%%%%%%
@@ -10,6 +13,7 @@ However, by following the MPhys conventions, the usage of OpenMDAO for multiphys
This eases technology transfer and collaboration in this area of research.
The standardization strives for modularity of multiphysics problems with large parallel physics codes.
+************
MPhys Basics
************
@@ -22,6 +26,7 @@ These are descriptions of how MPhys works and how it interfaces with solvers and
basics/model_hierarchy.rst
basics/tagged_promotion.rst
basics/builders.rst
+ basics/model_assembly.rst
basics/naming_conventions.rst
basics/remote_components.rst
diff --git a/_sources/scenarios/aerodynamic.rst.txt b/_sources/scenarios/aerodynamic.rst.txt
index 1c5d2005..b20f827f 100644
--- a/_sources/scenarios/aerodynamic.rst.txt
+++ b/_sources/scenarios/aerodynamic.rst.txt
@@ -1,36 +1,41 @@
-%%%%%%%%%%%%%%%%%%%%
+====================
Aerodynamic Scenario
-%%%%%%%%%%%%%%%%%%%%
-The :class:`ScenarioAerodynamic` is for scenarios that only need the aerodynamic solver.
+====================
+The :class:`ScenarioAerodynamic` is for scenarios that only need the aerodynamic solver.
+---------------
Default Solvers
-===============
+---------------
The default solvers are NonlinearRunOnce and LinearRunOnce that execute the pre coupling, coupling, and post coupling subsystems in order.
+-------
Options
-=======
+-------
.. embed-options::
- mphys.scenario_aerodynamic
+ mphys.scenarios.aerodynamic
ScenarioAerodynamic
options
+--------
N2:Basic
-========
+--------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAerodynamic.html
+-------------------------
N2: in_MultipointParallel
-=========================
+-------------------------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAerodynamicParallel.html
+-----------------------------------------------
N2: in_MultipointParallel with geometry_builder
-===============================================
+-----------------------------------------------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAerodynamicParallelWithGeometry.html
diff --git a/_sources/scenarios/aerostructural.rst.txt b/_sources/scenarios/aerostructural.rst.txt
index fa58268d..581fda2a 100644
--- a/_sources/scenarios/aerostructural.rst.txt
+++ b/_sources/scenarios/aerostructural.rst.txt
@@ -1,54 +1,64 @@
-%%%%%%%%%%%%%%%%%%%%%%%
+=======================
Aerostructural Scenario
-%%%%%%%%%%%%%%%%%%%%%%%
+=======================
-The :class:`ScenarioAeroStructural` is for static fluid structure interaction problems.
+The :class:`ScenarioAeroStructural` is for static fluid structure interaction problems.
The primary physics modules required for this problem are:
+
1. The aerodynamics which computes forces given the displaced aerodynamic surface coordinates.
2. The structures which computes structural displacements given the loads at structural nodes.
3. The displacement transfer which projects the structural displacements to the aerodynamic surface mesh
4. The load transfer which computes the loads on the structure from the aerodynamic output.
-MPhys will add a :class:`~mphy.geo_disp.GeoDisp` subsystem to compute the displaced aerodynamic coordinates given the undeformed surface coordinates and the displacements.
+MPhys will add a :class:`~mphys.scenarios.geo_disp.GeoDisp` subsystem to compute the displaced aerodynamic coordinates given the undeformed surface coordinates and the displacements.
+
+--------------------
Builder Requirements
-====================
+--------------------
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Load and Displacement Transfer Builder
---------------------------------------
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Because the load and displacement transfers are typically tied together by the principle of virtual work, but are not adjacent in the coupling loop,
-the load and displacement Builder's :meth:`~Builder.get_coupling_group_subsystem` must return both the displacement transfer and load tranfer subsystems as a tuple.
+the load and displacement Builder's :func:`get_coupling_group_subsystem() ` function must return both the displacement transfer and load transfer subsystems as a tuple.
+^^^^^^^^^^^^^^^^^^^^^^^^^
Structural Solver Builder
--------------------------
+^^^^^^^^^^^^^^^^^^^^^^^^^
The structural solver builder must implement the ``get_ndof`` method in order for the displacement transfer to know if it needs to slice the displacements from the full structural state vector.
For example, the structural state vector for linear shell elements includes linearized rotation degrees of freedom at each node in addition to the translational displacements.
+^^^^^^^^^^^^^^^
Default Solvers
-===============
+^^^^^^^^^^^^^^^
The default solvers are NonlinearBlockGS and LinearBlockGS with ``use_aitken=True``.
+^^^^^^^
Options
-=======
+^^^^^^^
.. embed-options::
- mphys.scenario_aerostructural
+ mphys.scenarios.aerostructural
ScenarioAeroStructural
options
+^^^^^^^^^
N2: Basic
-=========
+^^^^^^^^^
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAeroStructural.html
+^^^^^^^^^^^^^^^^^^^^^^^^^
N2: in_MultipointParallel
-=========================
+^^^^^^^^^^^^^^^^^^^^^^^^^
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAeroStructuralParallel.html
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
N2: in_MultipointParallel with geometry_builder
-===============================================
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioAeroStructuralParallelWithGeometry.html
diff --git a/_sources/scenarios/structural.rst.txt b/_sources/scenarios/structural.rst.txt
index 99b7d288..6eafb929 100644
--- a/_sources/scenarios/structural.rst.txt
+++ b/_sources/scenarios/structural.rst.txt
@@ -1,38 +1,43 @@
-%%%%%%%%%%%%%%%%%%%
+===================
Structural Scenario
-%%%%%%%%%%%%%%%%%%%
+===================
-The :class:`ScenarioStructural` is for scenarios that only need the structural solver.
+The :class:`ScenarioStructural` is for scenarios that only need the structural solver.
An examples use case for this scenario would be a stress constraint from a static load generated by the structural solver subsystem(s).
+---------------
Default Solvers
-===============
+---------------
The default solvers are NonlinearRunOnce and LinearRunOnce that execute the pre coupling, coupling, and post coupling subsystems in order.
+-------
Options
-=======
+-------
.. embed-options::
- mphys.scenario_structural
+ mphys.scenarios.structural
ScenarioStructural
options
+--------
N2:Basic
-========
+--------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioStructural.html
+-------------------------
N2: in_MultipointParallel
-=========================
+-------------------------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioStructuralParallel.html
+-----------------------------------------------
N2: in_MultipointParallel with geometry_builder
-===============================================
+-----------------------------------------------
.. embed-pregen-n2::
../tests/unit_tests/n2/TestScenarioStructuralParallelWithGeometry.html
diff --git a/_static/basic.css b/_static/basic.css
index cfc60b86..f316efcb 100644
--- a/_static/basic.css
+++ b/_static/basic.css
@@ -4,7 +4,7 @@
*
* Sphinx stylesheet -- basic theme.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -237,6 +237,10 @@ a.headerlink {
visibility: hidden;
}
+a:visited {
+ color: #551A8B;
+}
+
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
diff --git a/_static/doctools.js b/_static/doctools.js
index d06a71d7..4d67807d 100644
--- a/_static/doctools.js
+++ b/_static/doctools.js
@@ -4,7 +4,7 @@
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
diff --git a/_static/documentation_options.js b/_static/documentation_options.js
index b57ae3b8..7e4c114f 100644
--- a/_static/documentation_options.js
+++ b/_static/documentation_options.js
@@ -1,5 +1,4 @@
-var DOCUMENTATION_OPTIONS = {
- URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+const DOCUMENTATION_OPTIONS = {
VERSION: '',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
diff --git a/_static/language_data.js b/_static/language_data.js
index 250f5665..367b8ed8 100644
--- a/_static/language_data.js
+++ b/_static/language_data.js
@@ -5,7 +5,7 @@
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -13,7 +13,7 @@
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
-/* Non-minified version is copied as a separate JS file, is available */
+/* Non-minified version is copied as a separate JS file, if available */
/**
* Porter Stemmer
diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js
index aae669d7..8a96c69a 100644
--- a/_static/sphinx_highlight.js
+++ b/_static/sphinx_highlight.js
@@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => {
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+ const rest = document.createTextNode(val.substr(pos + text.length));
parent.insertBefore(
span,
parent.insertBefore(
- document.createTextNode(val.substr(pos + text.length)),
+ rest,
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
+ /* There may be more occurrences of search term in this node. So call this
+ * function recursively on the remaining fragment.
+ */
+ _highlight(rest, addItems, text, className);
if (isInSVG) {
const rect = document.createElementNS(
@@ -140,5 +145,10 @@ const SphinxHighlight = {
},
};
-_ready(SphinxHighlight.highlightSearchWords);
-_ready(SphinxHighlight.initEscapeListener);
+_ready(() => {
+ /* Do not call highlightSearchWords() when we are on the search page.
+ * It will highlight words from the *previous* search query.
+ */
+ if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
+ SphinxHighlight.initEscapeListener();
+});
diff --git a/_static/sphinxdoc.css b/_static/sphinxdoc.css
index 3dadf44f..b03830b4 100644
--- a/_static/sphinxdoc.css
+++ b/_static/sphinxdoc.css
@@ -5,7 +5,7 @@
* Sphinx stylesheet -- sphinxdoc theme. Originally created by
* Armin Ronacher for Werkzeug.
*
- * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@@ -151,6 +151,10 @@ a:hover {
color: #2491CF;
}
+a:visited {
+ color: #551A8B;
+}
+
div.body a {
text-decoration: underline;
}
diff --git a/basics/builders.html b/basics/builders.html
index 3d33e6c6..28d27866 100644
--- a/basics/builders.html
+++ b/basics/builders.html
@@ -1,22 +1,22 @@
-
+
-
+
Builders — MPhys documentation
-
-
-
+
+
+
-
+
-
+
Navigation
-
@@ -26,7 +26,7 @@
Navigation
modules |
-
- next |
-
Navigation
-Builders¶
-In large multiphysics problems, creation and connection of the OpenMDAO can be complicated and time-consuming.
+
Builders¶
+In large multiphysics problems, creation and connection of the OpenMDAO model can be complicated and time-consuming.
The design of MPhys is based on builder classes in order to reduce the burden on the user.
Most of the assembly of the OpenMDAO model with MPhys is handled by a set of builder helper objects.
Developers wishing to integrate their code to MPhys should subclass the builder and implement the methods relevant to their code.
Not all builders need to implement all the methods.
For example, a transfer scheme builder may not need a precoupling post coupling subsystem in the scenario.
-
--
-class mphys.builder.Builder[source]¶
+
+-
+class mphys.Builder[source]¶
MPHYS builder base class. Template for developers to create their builders.
Because the MPI communicator that will be used inside the OpenMDAO
problem is not known when the builder is instantiated. The actual
solver, transfer scheme, etc. should not be instantiated in the
constructor.
--
-initialize(comm)[source]¶
+-
+initialize(comm)[source]¶
Initialize the solver, transfer scheme, etc.
This method will be called when the MPI comm is available
@@ -73,8 +73,8 @@ Navigation
--
-get_mesh_coordinate_subsystem(scenario_name=None)[source]¶
+-
+get_mesh_coordinate_subsystem(scenario_name=None)[source]¶
The subsystem that contains the subsystem that will return the mesh
coordinates
@@ -94,8 +94,8 @@ Navigation
--
-get_coupling_group_subsystem(scenario_name=None)[source]¶
+-
+get_coupling_group_subsystem(scenario_name=None)[source]¶
The subsystem that this builder will add to the CouplingGroup
- Parameters:
@@ -115,8 +115,8 @@ Navigation
--
-get_pre_coupling_subsystem(scenario_name=None)[source]¶
+-
+get_pre_coupling_subsystem(scenario_name=None)[source]¶
Method that returns the openmdao subsystem to be added to each scenario before the coupling group
- Parameters:
@@ -134,8 +134,8 @@ Navigation
--
-get_post_coupling_subsystem(scenario_name=None)[source]¶
+-
+get_post_coupling_subsystem(scenario_name=None)[source]¶
Method that returns the openmdao subsystem to be added to each scenario after the coupling group
- Parameters:
@@ -153,8 +153,8 @@ Navigation
--
-get_number_of_nodes()[source]¶
+-
+get_number_of_nodes()[source]¶
Method that returns the number of nodes defining the interface
(input) mesh
@@ -168,8 +168,8 @@ Navigation
-
+
Table of Contents
- Builders
-Builder
-Builder.initialize()
-Builder.get_mesh_coordinate_subsystem()
-Builder.get_coupling_group_subsystem()
-Builder.get_pre_coupling_subsystem()
-Builder.get_post_coupling_subsystem()
-Builder.get_number_of_nodes()
-Builder.get_ndof()
-Builder.get_tagged_indices()
+Builder
@@ -237,6 +237,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -251,14 +252,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -282,7 +283,7 @@
Navigation
modules |
-
- next |
-
Navigation
\ No newline at end of file
diff --git a/basics/model_assembly.html b/basics/model_assembly.html
new file mode 100644
index 00000000..50c2fdfe
--- /dev/null
+++ b/basics/model_assembly.html
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+ Assembling an MPhys Model — MPhys documentation
+
+
+
+
+
+
+
+
+
+
+
+ Navigation
+
+ -
+ index
+ -
+ modules |
+ -
+ next |
+ -
+ previous |
+ - MPhys documentation »
+ - Assembling an MPhys Model
+
+
+
+
+
+
+
+
+
+Assembling an MPhys Model¶
+MPhys seeks to automate most of its model assembly process using the builder software design pattern.
+If using a MultipointParallel
group,
+skip steps 3-4 as these are handled within the Scenario since each Scenario will have its own MPI communicator.
+import openmdao.api as om
+from mphys import Multipoint, MPhysVariables
+from mphys.scenarios import ScenarioAerodynamic
+
+from my_aero_code import AeroBuilder
+
+# Step 1
+class MyMPhysModel(Multipoint):
+ def setup(self):
+
+ dvs = self.add_subsystem('dvs', om.IndepVarComp())
+ dvs.add_output('aoa', val=0.0, units='deg')
+
+ # Step 2
+ aero_builder = AeroBuilder(mesh="naca0012.ugrid")
+
+ # Step 3
+ aero_builder.initialize(self.comm)
+
+ # Step 4
+ self.add_subsystem("aero_mesh", aero_builder.get_mesh_coordinate_subsystem())
+
+ # Step 5
+ scenario = ScenarioAerodynamic(aero_builder=aero_builder)
+
+ # Step 6
+ self.mphys_add_scenario("cruise", scenario)
+
+ # Step 7
+ self.connect("dvs.aoa", "cruise.aoa")
+ self.connect(MPhysVariables.Aerodynamics.Mesh.COORDINATES,
+ MPhysVariables.Aerodynamics.Surface.COORDINATES)
+
+
+
+Define an Multipoint
group.
+In the setup()
method of the Multipoint group, instantiate
+the Builder associated with the disciplinary solvers you intend to use.
+Initialize the disciplinary Builders with the MPI communicator of the Multipoint group.
+This should be done in the setup()
method of the Multipoint group after the builder is instantiated.
+For example, aero_builder.initialize(self.comm)
+If applicable to the discipline, add a subsystem for the initial mesh coordinates from the builder’s get_mesh_coordinate_subsystem
function.
+This subsystem allows the disciplinary solver to dictate the parallel decomposition of its mesh.
+Any geometry manipulation subsystems, data transfer scheme subsystems, etc. will then be connected to the mesh subsystem’s mesh coordinate output.
+Create an MPhys scenario from the MPhys Scenario Library.
+Use mphys_add_scenario
to add the scenario to the Multipoint group.
+Add customized coupled nonlinear and linear solvers to the scenario in this function call.
+Connect inputs to the scenarios. Since MPhys uses Tagged Promotion,
+these inputs will have been promoted to {scenario_name}.{variable_name}
.
+Typically the inputs that need to be connected are the design variables of the disciplinary solvers
+and mesh coordinates (if applicable to the discipline).
+These mesh coordinates may come from the initial mesh, or be altered by a geometry tool.
+Repeat steps 5-7 until your Multipoint group is fully defined.
+
+
+
+Examples¶
+
+The supersonic panel example provides an example of this model assembly and usage in a self-contained problem (no external disciplinary solvers).
+The oas_tacs_wing example is another relatively simple example case that uses open-source disciplinary solvers.
+
+
+
+
+
+
+
+
+
+
+
+
+ Table of Contents
+
+- Assembling an MPhys Model
+- Examples
+
+
+
+
+
+Table of Contents
+
+
+- Model Hierarchy
+- Tagged Promotion
+- Builders
+- Assembling an MPhys Model
+- Variable Naming Conventions
+- Remote Components
+
+
+
+
+
+
+
+
+
+
+ Quick search
+
+
+
+
+
+
+
+
+
+
+ Navigation
+
+ -
+ index
+ -
+ modules |
+ -
+ next |
+ -
+ previous |
+ - MPhys documentation »
+ - Assembling an MPhys Model
+
+
+
+ © Copyright 2022, NASA.
+ Created using Sphinx 7.4.7.
+
+
+
\ No newline at end of file
diff --git a/basics/model_hierarchy.html b/basics/model_hierarchy.html
index 03374767..56b84892 100644
--- a/basics/model_hierarchy.html
+++ b/basics/model_hierarchy.html
@@ -1,22 +1,22 @@
-
+
-
+
Model Hierarchy — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -42,73 +42,84 @@
Navigation
-Model Hierarchy¶
-MPhys uses a pattern to build multiphysics optimization problems.
-Each level of the pattern is a different type of group that MPhys provides.
+Model Hierarchy¶
+MPhys uses a hierarchical set of OpenMDAO groups to build multiphysics models.
+Each level of the hierarchy is a different OpenMDAO group that MPhys provides.
The highest level of the model is the multipoint group.
-The multipoint group consist of scenarios which represent different conditions and/or types of multiphysics analyses to performed.
+The multipoint group consists of scenarios which represent different conditions and/or types of multiphysics analyses to be performed.
Within the scenario is the coupling group which represents the primary multiphysics problem for the scenario.
+See Assembling an MPhys Model for guidance on how to create this model hierarchy for a particular problem.
Builders are used to help populate these levels of the model hierarchy with subsystems from the solvers.
Tagged Promotion is used to promote specific variables to the level of scenario.
-Coupling Groups¶
+Coupling Groups¶
The CouplingGroup is the primary physics coupling being solved.
-That is it contains physics modules, such as an aerodynamic or structural solver,
-and potentially modules that transfer or interpolate between the physics modules, such as a load or displacement transfer schemes.
+That is, it contains physics modules, such as an aerodynamic or structural solver,
+and potentially modules that transfer or interpolate between the physics modules, such as a load or displacement transfer scheme.
Each type of scenario typically has an associated coupling group that it will add automatically given the proper builders.
Within the Scenario group, the coupling group will have the name ‘coupling’.
The scenario-specific coupling group will have a default nonlinear and linear solvers,
-but these can be overwritten with the optional arguments to mphys_add_scenario()
.
+but these can be overwritten with the optional arguments to mphys_add_scenario()
.
-Scenario Groups¶
+Scenario Groups¶
The scenario level is an OpenMDAO group that represents a specific condition in a multipoint optimization.
For example, a scenario could be a cruise flight condition that requires a coupling group to determine the lift and drag.
The scenario group contains a coupling group and any scenario-specific computation that needs to occur before or after the associated coupled problem is solved.
-For example, a sonic boom propagator requires the flow solution as an input but this one-way coupling does not require it to be in the coupling group; therefore, it should be put in the scenario group to be solved after the coupling group converges.
+The subsystems before the coupled problem are referred to as ‘pre_coupling’ subsystems.
+The subsystems after the coupled problem are referred to as ‘post_coupling’ subsystems.
+An example post_coupling subsystem would be a sonic boom propagation analysis after an aeropropulsive coupling analysis.
+
MPhys provides a library of these Scenario groups designed for specific type problems.
See MPhys Scenario Library for details about specific standardized scenarios.
-If a particular multiphysics problem is not covered by the MPhys library, new scenarios and coupling groups can be created by subclassing the MphysGroup
.
+If a particular multiphysics problem is not covered by the MPhys library, new scenarios and coupling groups can be created by subclassing the MPhysGroup
.
-Multipoint Groups¶
+Multipoint Groups¶
There are two versions of the multipoint group:
Multipoint
is derived from the standard OpenMDAO Group
MultipointParallel
is derived for the OpenMDAO ParallelGroup
.
-For both versions have a function, mphys_add_scenario()
, is used to populate
+
For both versions, a function mphys_add_scenario()
is used to populate
the lower levels of the model hierarchy.
+
-Multipoint¶
+Multipoint¶
The Multipoint
group will sequentially evaluate the scenario groups.
The Multipoint
group can be the top group of the OpenMDAO model or a subsystem.
In the setup
method of the Multipoint group, the following steps must be done:
Instantiate the builders
-Call initialize()
for each builder with the Multipoint’s comm (self.comm
)
+Call initialize()
for each builder with the Multipoint’s comm (self.comm
)
Add the mesh components and/or other mesh coordinate source like geometry.
Add the scenarios
Connect the mesh coordinates to the scenarios
Additionally, the Multipoint group can hold the design variables or other inputs and subsystems to be evaluated after the scenarios.
These extra subsystem can then be connected to the scenarios by the user.
-
--
-class mphys.multipoint.Multipoint(**kwargs)[source]¶
-An extension of the standard OpenMDAO group that adds the mphys_add_scenario()
method.
+
+-
+class mphys.Multipoint(**kwargs)[source]¶
+An extension of the standard OpenMDAO group that adds the mphys_add_scenario()
method.
For sequential evaluations of the MPhys scenarios.
Set the solvers to nonlinear and linear block Gauss–Seidel by default.
--
-mphys_add_scenario(name, scenario, coupling_nonlinear_solver=None, coupling_linear_solver=None)[source]¶
+-
+mphys_add_scenario(name, scenario, coupling_nonlinear_solver=None, coupling_linear_solver=None)[source]¶
Add an MPhys scenario
- Parameters:
- namestr
The name of the scenario
-- Scenario: :class:`~mphys.scenario.Scenario`
The scenario object
+- Scenario: :class:`~mphys.Scenario`
The scenario object
- coupling_nonlinear_solver: openmdao.solvers.solver.NonlinearSolver
The nonlinear solver to assign to the coupling group primal problem
@@ -119,31 +130,11 @@ Multipoint
--
-mphys_connect_scenario_coordinate_source(source, scenarios, disciplines)[source]¶
-A helper method to aid in connecting mesh coordinate sources to the scenarios
-in this multipoint group.
-The source and target variable names are assumed to be ‘x_{discipline}0’
-
-- Parameters:
-
-- source: openmdao.api.Group or openmdao.api.Component
The source subsystem for the mesh coordinate variables
-
-- scenariosstr or list[str]
The names of the scenarios to be the target of the connections
-
-- disciplinesstr or list[str]
The names of the disciplines for the mesh coordinates.
-
-
-
-
-
-
-MultipointParallel¶
+MultipointParallel¶
If given a number of MPI ranks greater than or equal to the number of scenarios, the MultipointParallel
group will simultaneously evaluate the scenario groups.
Unlike the sequential Multipoint group, the MPI communicators are different for each scenario in MultipointParallel, so the scenarios will call the builder’s initialize method.
In the setup
method of the MultipointParallel
group, the following steps must be done:
@@ -154,21 +145,21 @@ MultipointParallel
--
-class mphys.multipoint.MultipointParallel(**kwargs)[source]¶
-An OpenMDAO parallel group that adds the mphys_add_scenario()
method.
+
-
+class mphys.MultipointParallel(**kwargs)[source]¶
+An OpenMDAO parallel group that adds the mphys_add_scenario()
method.
For simultaneous evaluations of the MPhys scenarios.
Set the mpi_proc_allocator option to ‘parallel’.
--
-mphys_add_scenario(name, scenario, coupling_nonlinear_solver=None, coupling_linear_solver=None)[source]¶
+-
+mphys_add_scenario(name, scenario, coupling_nonlinear_solver=None, coupling_linear_solver=None)[source]¶
Add an MPhys scenario
- Parameters:
- namestr
The name of the scenario
-- Scenario: :class:`~mphys.scenario.Scenario`
The scenario object
+- Scenario: :class:`~mphys.Scenario`
The scenario object
- coupling_nonlinear_solver: openmdao.solvers.solver.NonlinearSolver
The nonlinear solver to assign to the coupling group primal problem
@@ -190,7 +181,7 @@ MultipointParallel
+
Table of Contents
@@ -200,16 +191,15 @@ Table of Contents
- Scenario Groups
- Multipoint Groups
- Multipoint
-Multipoint
- MultipointParallel
-MultipointParallel
@@ -227,6 +217,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -241,14 +232,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -283,7 +274,7 @@
Navigation
\ No newline at end of file
diff --git a/basics/naming_conventions.html b/basics/naming_conventions.html
index d4640d21..4e849501 100644
--- a/basics/naming_conventions.html
+++ b/basics/naming_conventions.html
@@ -1,22 +1,22 @@
-
+
-
+
Variable Naming Conventions — MPhys documentation
-
-
-
+
+
+
-
+
-
+
Navigation
-
@@ -29,7 +29,7 @@
Navigation
next |
-
- previous |
- MPhys documentation »
- Variable Naming Conventions
@@ -42,72 +42,139 @@ Navigation
-Variable Naming Conventions¶
+Variable Naming Conventions¶
While it is possible to set up the same OpenMDAO multiphysics problem with different sets of variable names, it is preferable for codes solving the same physics to use the same variable names to be more easily interchangeable.
This table provides the required names for coupling variables associated with a particular physics in MPhys.
+The variable naming convention is defined as a Nested Classes with static variables.
+The names are access from the MPhysVariables
class.
+If defining an component that uses the MPhys variable names repeatedly, it is often uses to define a local copy due to the long names that the nested variable classes.
+import openmdao.api as om
+from mphys import MPhysVariables
+
+X_AERO0 = MPhysVariables.Aerodynamics.Surface.COORDINATES_INITIAL
+U_AERO = MPhysVariables.Aerodynamics.Surface.DISPLACEMENTS
+F_AERO = MPhysVariables.Aerodynamics.Surface.LOADS
+
+class AeroSolver(om.ImplicitComponent):
+ def setup(self):
+ self.add_input(X_AERO0, shape=5, distributed=True, tags=['mphys_coordinates'])
+ self.add_input(U_AERO0, shape=5, distributed=True, tags=['mphys_coupling'])
+ self.add_output(F_AERO0, shape=3, distributed=True, tags=['mphys_coupling'])
+
+
-Variable
+Code Access
Associated Solver
MPhys tag
Variable description
-x_aero0
+MPhysVariables.Aerodynamics.Surface.Mesh.COORDINATES
+Aerodynamic
+mphys_coordinates
+Aerodynamic surface coordinates from initial mesh file
+
+MPhysVariables.Aerodynamics.Surface.Geometry.COORDINATES_INPUT
+Aerodynamic
+mphys_coordinates
+Aerodynamic surface coordinates (initial coordinates)
+
+MPhysVariables.Aerodynamics.Surface.Geometry.COORDINATES_OUTPUT
+Aerodynamic
+mphys_coordinates
+Aerodynamic surface coordinates (geometry-deform jig shape)
+
+MPhysVariables.Aerodynamics.Surface.COORDINATES_INITIAL
Aerodynamic
mphys_coordinates
Aerodynamic surface coordinates (jig shape)
-x_aero
+MPhysVariables.Aerodynamics.Surface.COORDINATES_DEFORMED
Aerodynamic
mphys_coupling
Aerodynamic surface coordinates (deformed)
-u_aero
+MPhysVariables.Aerodynamics.Surface.DISPLACEMENTS
Aerodynamic
mphys_coupling
Aerodynamic surface displacements
-f_aero
+MPhysVariables.Aerodynamics.Surface.LOADS
Aerodynamic
mphys_coupling
Aerodynamic surface forces
-T_convect
+MPhysVariables.Aerodynamics.Surface.TEMPERATURE
Aerodynamic
mphys_coupling
Temperature for convective solver at interface
-q_convect
+MPhysVariables.Aerodynamics.Surface.HEAT_FLOW
Aerodynamic
mphys_coupling
Convective heat flow at interface
-x_struct0
+MPhysVariables.Structures.Mesh.COORDINATES
+Structural
+mphys_coordinates
+Structural coordinates from initial mesh file
+
+MPhysVariables.Structures.Geometry.COORDINATES_INPUT
+Structural
+mphys_coordinates
+Structural coordinates (initial coordinates)
+
+MPhysVariables.Structures.Geometry.COORDINATES_OUTPUT
+Structural
+mphys_coordinates
+Structural coordinates (geometry-deformed jig shape)
+
+MPhysVariables.Structures.COORDINATES
Structural
mphys_coordinates
Structural coordinates (jig shape)
-u_struct
+MPhysVariables.Structures.DISPLACEMENTS
Structural
mphys_coupling
Structural state vector (displacements)
-f_struct
+MPhysVariables.Structures.LOADS.AERODYNAMIC
Structural
mphys_coupling
-Structural forces
+Structural forces due to aerodynamics
-T_conduct
+MPhysVariables.Thermal.Mesh.COORDINATES
Thermal
mphys_coupling
-Temperature at interface (structural side)
+Thermal coordinates from initial mesh file
-q_conduct
+MPhysVariables.Thermal.Geometry.COORDINATES_INPUT
Thermal
mphys_coupling
-Conductive heat flow at interface (structural side)
+Thermal coordinates (initial coordinates)
+
+MPhysVariables.Thermal.Geometry.COORDINATES_OUTPUT
+Thermal
+mphys_coupling
+Thermal coordinates (geometry-deformed jig shape)
+
+MPhysVariables.Thermal.COORDINATES
+Thermal
+mphys_coupling
+Thermal coordinates (jig shape)
+
+MPhysVariables.Thermal.TEMPERATURE
+Thermal
+mphys_coupling
+Temperature at interface (thermal solver side)
+
+MPhysVariables.Thermal.HeatFlow.AERODYNAMIC
+Thermal
+mphys_coupling
+heat flow at interface due to aerodynamics (thermal solver side)
@@ -121,27 +188,27 @@ Variable Naming Conventionsaoa
+MPhysVariables.Aerodynamics.FlowConditions.ANGLE_OF_ATTACK
Aerodynamic
mphys_input
Angle of attack (please include units=’deg’ or ‘rad’ when declared)
-yaw
+MPhysVariables.Aerodynamics.FlowConditions.YAW_ANGLE
Aerodynamic
mphys_input
-Yaw angle (please include units=’deg’ or ‘rad’ when declared)
+Yaw angle (please include units=’deg’ or ‘rad’ when declared)
-mach
+MPhysVariables.Aerodynamics.FlowConditions.MACH_NUMBER
Aerodynamic
mphys_input
Reference Mach number
-reynolds
+MPhysVariables.Aerodynamics.FlowConditions.REYNOLDS_NUMBER
Aerodynamic
mphys_input
Reference Reynolds number
-q_inf
+MPhysVariables.Aerodynamics.FlowConditions.DYNAMIC_PRESSURE
Aerodynamic
mphys_input
Dynamic pressure
@@ -155,7 +222,7 @@ Variable Naming Conventions
+
Table of Contents
@@ -163,6 +230,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -177,14 +245,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -211,7 +279,7 @@
Navigation
next |
-
- previous |
- MPhys documentation »
- Variable Naming Conventions
@@ -219,7 +287,7 @@ Navigation
\ No newline at end of file
diff --git a/basics/remote_components.html b/basics/remote_components.html
index d071ede3..b2fe7a68 100644
--- a/basics/remote_components.html
+++ b/basics/remote_components.html
@@ -1,22 +1,22 @@
-
+
-
+
Remote Components — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -42,7 +42,7 @@
Navigation
-Remote Components¶
+Remote Components¶
The purpose of remote components is to provide a means of adding a remote physics analysis to a local OpenMDAO problem.
One situation in which this may be desirable is when the time to carry out a full optimization exceeds an HPC job time limit.
Such a situation, without remote components, may normally require manual restarts of the optimization, and would thus limit one to optimizers with this capability.
@@ -65,7 +65,7 @@
Navigation
MPhysZeroMQServer
: Uses ZeroMQ socket to send and receive encoded JSON dictionaries.
-RemoteZeroMQComp Options¶
+RemoteZeroMQComp Options¶
E
G
- - get_coupling_group_subsystem() (mphys.builder.Builder method)
+
- get_coupling_group_subsystem() (mphys.Builder method)
- - get_mesh_coordinate_subsystem() (mphys.builder.Builder method)
+
- get_mesh_coordinate_subsystem() (mphys.Builder method)
- - get_ndof() (mphys.builder.Builder method)
+
- get_ndof() (mphys.Builder method)
- - get_number_of_nodes() (mphys.builder.Builder method)
+
- get_number_of_nodes() (mphys.Builder method)
- - get_post_coupling_subsystem() (mphys.builder.Builder method)
+
- get_post_coupling_subsystem() (mphys.Builder method)
- - get_pre_coupling_subsystem() (mphys.builder.Builder method)
+
- get_pre_coupling_subsystem() (mphys.Builder method)
- - get_tagged_indices() (mphys.builder.Builder method)
+
- get_tagged_indices() (mphys.Builder method)
@@ -107,14 +107,14 @@ G
I
@@ -127,75 +127,37 @@ M
module
- - mphys.builder
-
- - mphys.coupling_group
-
- - mphys.mphys_group
-
- - mphys.multipoint
-
- - mphys.scenario
+
- mphys
-
- mphys.builder
+ mphys
- -
- mphys.coupling_group
-
-
- -
- mphys.mphys_group
-
-
- - module
-
-
- -
- mphys.multipoint
+
- mphys_add_scenario() (mphys.Multipoint method)
- -
- mphys.scenario
-
-
- - mphys_add_post_subsystem() (mphys.scenario.Scenario method)
-
- - mphys_add_scenario() (mphys.multipoint.Multipoint method)
-
-
- - mphys_add_subsystem() (mphys.mphys_group.MphysGroup method)
-
- - mphys_connect_scenario_coordinate_source() (mphys.multipoint.Multipoint method)
-
- - MphysGroup (class in mphys.mphys_group)
+
- MPhysGroup (class in mphys)
- MPhysZeroMQServer (class in mphys.network.zmq_pbs)
- MPhysZeroMQServerManager (class in mphys.network.zmq_pbs)
- - Multipoint (class in mphys.multipoint)
+
- Multipoint (class in mphys)
- - MultipointParallel (class in mphys.multipoint)
+
- MultipointParallel (class in mphys)
@@ -217,7 +179,7 @@ R
S
@@ -252,7 +214,7 @@ S
-
+
Table of Contents
@@ -260,6 +222,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -274,14 +237,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -310,7 +273,7 @@
Navigation
\ No newline at end of file
diff --git a/index.html b/index.html
index f585e0cc..95c5e917 100644
--- a/index.html
+++ b/index.html
@@ -1,21 +1,21 @@
-
+
-
+
Documentation for MPhys — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -37,8 +37,10 @@
Navigation
-
-Documentation for MPhys¶
+
+
+
+Documentation for MPhys¶
MPhys is a package that standardizes high-fidelity multiphysics problems in OpenMDAO.
MPhys eases the problem set up, provides straightforward extension to new disciplines, and has a library of OpenMDAO groups for multidisciplinary problems addressed by its standard.
While MPhys does provide these conventions, it is not absolutely necessary to follow these guidelines in order to solve these types of problems with OpenMDAO given its very general coupling capability.
@@ -46,7 +48,7 @@
Documentation for MPhys
-MPhys Basics¶
+MPhys Basics¶
These are descriptions of how MPhys works and how it interfaces with solvers and OpenMDAO.
+
@@ -54,12 +56,14 @@
-MPhys Scenario Library¶
+MPhys Scenario Library¶
These are descriptions of the groups in the MPhys library of multiphysics problems.
They describe physics problem being solved, the standards set by MPhys, requirements of the Builders, and the options available for each group.
@@ -77,17 +81,17 @@ MPhys Basics
-MPhys Developers Guide¶
+MPhys Developers Guide¶
These pages provide more details of how MPhys works and how to add to the MPhys scenario library.
-References¶
+References¶
- Papers Using MPhys
@@ -95,7 +99,7 @@ References
-Indices and tables¶
+Indices and tables¶
@@ -103,7 +107,6 @@ Indices and tables
+
Table of Contents
- Documentation for MPhys
-- MPhys Basics
+- MPhys Basics
- MPhys Scenario Library
@@ -128,8 +131,6 @@ Table of Contents
-
-
@@ -139,6 +140,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -153,14 +155,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -192,7 +194,7 @@
Navigation
\ No newline at end of file
diff --git a/objects.inv b/objects.inv
index 251a228d..4a11e282 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/py-modindex.html b/py-modindex.html
index d1860c2d..d52477cd 100644
--- a/py-modindex.html
+++ b/py-modindex.html
@@ -1,22 +1,26 @@
-
+
Python Module Index — MPhys documentation
-
-
-
+
+
+
+
+
-
+
Navigation
-
@@ -47,35 +51,9 @@
Python Module Index
m
-
-
- mphys
-
-
-
-
- mphys.builder
-
-
-
-
- mphys.coupling_group
-
-
-
-
- mphys.mphys_group
-
-
-
- mphys.multipoint
-
-
-
-
- mphys.scenario
+
+ mphys
@@ -84,7 +62,7 @@ Python Module Index
-
+
Table of Contents
@@ -92,6 +70,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -106,14 +85,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -142,7 +121,7 @@
Navigation
\ No newline at end of file
diff --git a/references/papers_using_mphys.html b/references/papers_using_mphys.html
index 12bcbe58..1092a874 100644
--- a/references/papers_using_mphys.html
+++ b/references/papers_using_mphys.html
@@ -1,21 +1,21 @@
-
+
-
+
Papers Using MPhys — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -38,8 +38,9 @@
Navigation
-Papers Using MPhys¶
+Papers Using MPhys¶
+
[1]
M. A. Saja Abdul-Kaiyoom, Anil Yildirim, and and Joaquim R. R. A. Martins. Coupled aeropropulsive design optimization of an over-wing nacelle configuration. In AIAA SciTech Forum. January 2023. doi:10.2514/6.2023-0327.
@@ -157,7 +158,7 @@ Papers Using MPhys
+
Table of Contents
@@ -165,6 +166,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -179,14 +181,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -218,7 +220,7 @@
Navigation
\ No newline at end of file
diff --git a/scenarios/aerodynamic.html b/scenarios/aerodynamic.html
index eaebcc31..f8a6b80f 100644
--- a/scenarios/aerodynamic.html
+++ b/scenarios/aerodynamic.html
@@ -1,22 +1,22 @@
-
+
-
+
Aerodynamic Scenario — MPhys documentation
-
-
-
+
+
+
-
+
-
+
Navigation
-
@@ -26,7 +26,7 @@
Navigation
modules |
-
- next |
-
Navigation
-Aerodynamic Scenario¶
+Aerodynamic Scenario¶
The ScenarioAerodynamic
is for scenarios that only need the aerodynamic solver.
-Default Solvers¶
+Default Solvers¶
The default solvers are NonlinearRunOnce and LinearRunOnce that execute the pre coupling, coupling, and post coupling subsystems in order.
-Options¶
+Options¶
Option
@@ -78,19 +78,25 @@ Optionsgeometry_builder
+derivs_method
+N/A
+[‘jax’, ‘cs’, ‘fd’, None]
+N/A
+The method to use for computing derivatives
+
+geometry_builder
N/A
N/A
N/A
The optional MPhys builder for the geometry
-in_MultipointParallel
+in_MultipointParallel
False
[True, False]
[‘bool’]
Set to True if adding this scenario inside a MultipointParallel Group.
-run_directory
+run_directory
N/A
[‘str’]
@@ -100,13 +106,13 @@ Options
-N2:Basic¶
+N2:Basic¶
-N2: in_MultipointParallel¶
+N2: in_MultipointParallel¶
-N2: in_MultipointParallel with geometry_builder¶
+N2: in_MultipointParallel with geometry_builder¶
@@ -115,7 +121,7 @@ N2: in_MultipointParallel with geometry_builder
+
Table of Contents
@@ -137,6 +143,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -151,14 +158,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -182,7 +189,7 @@
Navigation
modules |
-
- next |
-
Navigation
\ No newline at end of file
diff --git a/scenarios/aerostructural.html b/scenarios/aerostructural.html
index 3273d73d..05dda2bb 100644
--- a/scenarios/aerostructural.html
+++ b/scenarios/aerostructural.html
@@ -1,22 +1,22 @@
-
+
-
+
Aerostructural Scenario — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -42,33 +42,34 @@
Navigation
-Aerostructural Scenario¶
+Aerostructural Scenario¶
The ScenarioAeroStructural
is for static fluid structure interaction problems.
-The primary physics modules required for this problem are:
-1. The aerodynamics which computes forces given the displaced aerodynamic surface coordinates.
-2. The structures which computes structural displacements given the loads at structural nodes.
-3. The displacement transfer which projects the structural displacements to the aerodynamic surface mesh
-4. The load transfer which computes the loads on the structure from the aerodynamic output.
+The primary physics modules required for this problem are:
+
+The aerodynamics which computes forces given the displaced aerodynamic surface coordinates.
+The structures which computes structural displacements given the loads at structural nodes.
+The displacement transfer which projects the structural displacements to the aerodynamic surface mesh
+The load transfer which computes the loads on the structure from the aerodynamic output.
+
MPhys will add a GeoDisp
subsystem to compute the displaced aerodynamic coordinates given the undeformed surface coordinates and the displacements.
-Builder Requirements¶
+Builder Requirements¶
-Load and Displacement Transfer Builder¶
+Load and Displacement Transfer Builder¶
Because the load and displacement transfers are typically tied together by the principle of virtual work, but are not adjacent in the coupling loop,
-the load and displacement Builder’s get_coupling_group_subsystem()
must return both the displacement transfer and load tranfer subsystems as a tuple.
+the load and displacement Builder’s get_coupling_group_subsystem()
function must return both the displacement transfer and load transfer subsystems as a tuple.
-Structural Solver Builder¶
+Structural Solver Builder¶
The structural solver builder must implement the get_ndof
method in order for the displacement transfer to know if it needs to slice the displacements from the full structural state vector.
For example, the structural state vector for linear shell elements includes linearized rotation degrees of freedom at each node in addition to the translational displacements.
-
-Default Solvers¶
+Default Solvers¶
The default solvers are NonlinearBlockGS and LinearBlockGS with use_aitken=True
.
-Options¶
+Options¶
Option
@@ -103,43 +104,49 @@ Optionsgeometry_builder
+derivs_method
+N/A
+[‘jax’, ‘cs’, ‘fd’, None]
+N/A
+The method to use for computing derivatives
+
+geometry_builder
N/A
N/A
N/A
The optional MPhys builder for the geometry
-in_MultipointParallel
+in_MultipointParallel
False
N/A
N/A
Set to True if adding this scenario inside a MultipointParallel Group.
-ldxfer_builder
+ldxfer_builder
Required
N/A
N/A
The MPhys builder for the load and displacement transfer
-post_coupling_order
+post_coupling_order
[‘ldxfer’, ‘aero’, ‘struct’]
N/A
N/A
The order of the post coupling subsystems
-pre_coupling_order
+pre_coupling_order
[‘aero’, ‘struct’, ‘ldxfer’]
N/A
N/A
The order of the pre coupling subsystems
-run_directory
+run_directory
N/A
[‘str’]
Path in which to execute subsystems in this scenario group. The default of empty string will not change the directory.
-struct_builder
+struct_builder
Required
N/A
N/A
@@ -149,14 +156,15 @@ Options
-N2: Basic¶
+N2: Basic¶
-N2: in_MultipointParallel¶
+N2: in_MultipointParallel¶
-N2: in_MultipointParallel with geometry_builder¶
+N2: in_MultipointParallel with geometry_builder¶
+
@@ -164,7 +172,7 @@ N2: in_MultipointParallel with geometry_builder
+
Table of Contents
@@ -173,8 +181,6 @@ Table of Contents
- Builder Requirements
-
- Default Solvers
- Options
- N2: Basic
@@ -182,6 +188,8 @@ Table of Contents
- N2: in_MultipointParallel with geometry_builder
+
+
@@ -191,6 +199,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -205,14 +214,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -247,7 +256,7 @@
Navigation
\ No newline at end of file
diff --git a/scenarios/structural.html b/scenarios/structural.html
index f0ba5c66..4c3a9ac5 100644
--- a/scenarios/structural.html
+++ b/scenarios/structural.html
@@ -1,22 +1,22 @@
-
+
-
+
Structural Scenario — MPhys documentation
-
-
-
+
+
+
-
+
Navigation
-
@@ -42,15 +42,15 @@
Navigation
-Structural Scenario¶
+Structural Scenario¶
The ScenarioStructural
is for scenarios that only need the structural solver.
An examples use case for this scenario would be a stress constraint from a static load generated by the structural solver subsystem(s).
-Default Solvers¶
+Default Solvers¶
The default solvers are NonlinearRunOnce and LinearRunOnce that execute the pre coupling, coupling, and post coupling subsystems in order.
-Options¶
+Options¶
Option
@@ -73,25 +73,31 @@ Optionsgeometry_builder
+derivs_method
+N/A
+[‘jax’, ‘cs’, ‘fd’, None]
+N/A
+The method to use for computing derivatives
+
+geometry_builder
N/A
N/A
N/A
The optional MPhys builder for the geometry
-in_MultipointParallel
+in_MultipointParallel
False
[True, False]
[‘bool’]
Set to True if adding this scenario inside a MultipointParallel Group.
-run_directory
+run_directory
N/A
[‘str’]
Path in which to execute subsystems in this scenario group. The default of empty string will not change the directory.
-struct_builder
+struct_builder
Required
N/A
N/A
@@ -101,13 +107,13 @@ Options
-N2:Basic¶
+N2:Basic¶
-N2: in_MultipointParallel¶
+N2: in_MultipointParallel¶
-N2: in_MultipointParallel with geometry_builder¶
+N2: in_MultipointParallel with geometry_builder¶
@@ -116,7 +122,7 @@ N2: in_MultipointParallel with geometry_builder
+
Table of Contents
@@ -138,6 +144,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -152,14 +159,14 @@ Table of Contents
-
+
Quick search
-
+
-
+
Navigation
-
@@ -194,7 +201,7 @@
Navigation
\ No newline at end of file
diff --git a/search.html b/search.html
index 645aaf85..8284f6ba 100644
--- a/search.html
+++ b/search.html
@@ -1,6 +1,6 @@
-
+
@@ -8,18 +8,19 @@
-
-
-
+
+
+
-
-
+
+
+
-
+
Navigation
-
@@ -63,17 +64,14 @@
Search
-
-
-
-
+
-
+
Table of Contents
@@ -81,6 +79,7 @@ Table of Contents
- Model Hierarchy
- Tagged Promotion
- Builders
+- Assembling an MPhys Model
- Variable Naming Conventions
- Remote Components
@@ -95,7 +94,7 @@ Table of Contents
@@ -106,7 +105,7 @@ Table of Contents
-
+
Navigation
-
@@ -121,7 +120,7 @@
Navigation
\ No newline at end of file
diff --git a/searchindex.js b/searchindex.js
index e3a4ef30..743fa151 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"docnames": ["basics/builders", "basics/model_hierarchy", "basics/naming_conventions", "basics/remote_components", "basics/tagged_promotion", "developers/mphys_group", "developers/new_multiphysics_problems", "index", "references/papers_using_mphys", "scenarios/aerodynamic", "scenarios/aerostructural", "scenarios/structural"], "filenames": ["basics/builders.rst", "basics/model_hierarchy.rst", "basics/naming_conventions.rst", "basics/remote_components.rst", "basics/tagged_promotion.rst", "developers/mphys_group.rst", "developers/new_multiphysics_problems.rst", "index.rst", "references/papers_using_mphys.rst", "scenarios/aerodynamic.rst", "scenarios/aerostructural.rst", "scenarios/structural.rst"], "titles": ["Builders", "Model Hierarchy", "Variable Naming Conventions", "Remote Components", "Tagged Promotion", "The MphysGroup", "Extending the Scenario Library", "Documentation for MPhys", "Papers Using MPhys", "Aerodynamic Scenario", "Aerostructural Scenario", "Structural Scenario"], "terms": {"In": [0, 1, 3, 5, 6, 8], "larg": [0, 7], "multiphys": [0, 1, 2, 6], "problem": [0, 1, 2, 3, 6, 7, 10], "creation": 0, "connect": [0, 1, 4], "openmdao": [0, 1, 2, 3, 5, 7], "can": [0, 1, 3, 4, 5, 6, 10], "complic": 0, "time": [0, 3, 6], "consum": 0, "The": [0, 1, 3, 4, 6, 7, 9, 10, 11], "design": [0, 1, 3, 4, 8], "mphy": [0, 1, 2, 3, 4, 5, 6, 9, 10, 11], "i": [0, 1, 2, 3, 5, 6, 7, 9, 10, 11], "base": [0, 3, 5, 8, 9, 10, 11], "class": [0, 1, 3, 5, 6], "order": [0, 7, 9, 10, 11], "reduc": 0, "burden": 0, "user": [0, 1, 4, 6], "most": [0, 6], "assembli": 0, "model": [0, 3, 7, 8], "handl": [0, 8], "set": [0, 1, 2, 3, 5, 6, 7, 9, 10, 11], "helper": [0, 1], "object": [0, 1, 3, 4], "develop": [0, 6], "wish": [0, 4], "integr": 0, "code": [0, 2, 7], "should": [0, 1, 3, 5, 6], "subclass": [0, 1, 5, 6], "implement": [0, 3, 5, 6, 10], "method": [0, 1, 3, 4, 5, 6, 8, 10], "relev": [0, 3], "Not": 0, "all": [0, 3, 6], "need": [0, 1, 4, 5, 6, 9, 10, 11], "For": [0, 1, 10], "exampl": [0, 1, 10, 11], "transfer": [0, 1, 7, 8], "scheme": [0, 1], "mai": [0, 3], "precoupl": 0, "post": [0, 6, 9, 10, 11], "coupl": [0, 2, 4, 5, 7, 8, 9, 10, 11], "subsystem": [0, 1, 3, 4, 5, 6, 9, 10, 11], "scenario": [0, 3, 4, 5], "sourc": [0, 1, 3, 4, 5, 6], "templat": 0, "creat": [0, 1], "becaus": [0, 1, 5, 10], "mpi": [0, 1], "commun": [0, 1, 3], "us": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11], "insid": [0, 3, 9, 10, 11], "known": 0, "when": [0, 2, 3], "instanti": [0, 1, 3, 6], "actual": 0, "solver": [0, 1, 2, 5, 6, 7, 8], "etc": 0, "constructor": 0, "initi": [0, 1, 3], "comm": [0, 1, 3], "thi": [0, 1, 2, 3, 4, 6, 7, 9, 10, 11], "call": [0, 1, 3, 5, 6], "avail": [0, 3, 7], "paramet": [0, 1, 3, 6], "xfer": 0, "instanc": [0, 3, 5], "get_mesh_coordinate_subsystem": 0, "scenario_nam": [0, 4], "none": [0, 1, 3, 6, 10], "contain": [0, 1, 3], "return": [0, 10], "mesh": [0, 1, 4, 10], "coordin": [0, 1, 2, 4, 10], "str": [0, 1, 3, 6, 9, 10, 11], "name": [0, 1, 3, 5, 6, 7], "compon": [0, 1, 4, 6, 7, 8, 9, 10, 11], "group": [0, 3, 5, 7, 9, 10, 11], "ha": [0, 1, 3, 7], "an": [0, 1, 3, 4, 5, 6, 8, 9, 10, 11], "output": [0, 3, 4, 10], "get_coupling_group_subsystem": [0, 6, 10], "add": [0, 1, 3, 5, 6, 7, 10], "couplinggroup": [0, 1, 4, 5, 6], "comput": [0, 1, 3, 4, 8, 10], "multipl": [0, 3], "get_pre_coupling_subsystem": 0, "ad": [0, 1, 3, 5, 6, 9, 10, 11], "each": [0, 1, 3, 6, 7, 10], "befor": [0, 1, 3], "get_post_coupling_subsystem": 0, "after": [0, 1, 3], "get_number_of_nod": 0, "number": [0, 1, 2, 3], "node": [0, 3, 10], "defin": [0, 3, 6], "interfac": [0, 2, 7], "input": [0, 1, 3, 4, 6], "number_of_nod": 0, "int": [0, 3], "domain": [0, 8], "get_ndof": [0, 10], "degre": [0, 10], "freedom": [0, 10], "locat": 0, "ndof": 0, "get_tagged_indic": 0, "tag": [0, 1, 2, 5, 6, 7], "grid": 0, "id": 0, "list": [0, 1, 3], "bodi": 0, "boundari": [0, 8], "integ": 0, "string": [0, 9, 10, 11], "grid_id": 0, "correspond": 0, "given": [0, 1, 3, 7, 10], "pattern": [1, 6], "build": 1, "optim": [1, 3, 8], "level": [1, 3, 4], "differ": [1, 2, 3, 4], "type": [1, 3, 4, 6, 7, 9, 10, 11], "provid": [1, 2, 3, 7], "highest": 1, "consist": 1, "which": [1, 3, 9, 10, 11], "repres": [1, 4, 6], "condit": [1, 6], "analys": [1, 3], "perform": [1, 3, 6], "within": [1, 3], "primari": [1, 10], "builder": [1, 6, 7, 9, 11], "ar": [1, 3, 4, 5, 7, 9, 10, 11], "help": [1, 2, 6], "popul": 1, "from": [1, 3, 4, 5, 6, 10, 11], "promot": [1, 5, 6, 7], "specif": [1, 6], "variabl": [1, 3, 4, 6, 7, 8], "physic": [1, 2, 3, 7, 10], "being": [1, 3, 7], "solv": [1, 2, 7], "That": 1, "modul": [1, 7, 10], "aerodynam": [1, 2, 7, 8, 10], "structur": [1, 2, 7, 8], "potenti": [1, 8], "interpol": 1, "between": [1, 3], "load": [1, 3, 11], "displac": [1, 2], "typic": [1, 10], "associ": [1, 2, 3, 6], "automat": [1, 5, 9, 10, 11], "proper": 1, "have": [1, 3, 5, 6], "default": [1, 3, 5, 6], "nonlinear": [1, 3, 5, 6, 8], "linear": [1, 3, 5, 6, 8, 9, 10, 11], "overwritten": 1, "option": [1, 6, 7], "argument": [1, 3, 6], "mphys_add_scenario": 1, "could": 1, "cruis": 1, "flight": 1, "requir": [1, 2, 3, 6, 7, 9, 11], "determin": [1, 3, 9, 10, 11], "lift": [1, 8], "drag": 1, "ani": [1, 3, 4, 5, 6], "occur": 1, "sonic": 1, "boom": 1, "propag": 1, "flow": [1, 2], "solut": [1, 3], "one": [1, 3, 6], "wai": 1, "doe": [1, 7], "therefor": 1, "put": 1, "converg": 1, "librari": 1, "see": 1, "detail": [1, 7], "about": [1, 10], "standard": [1, 5, 7], "If": [1, 3, 5, 6, 9, 10, 11], "particular": [1, 2, 3, 4, 6], "cover": 1, "new": [1, 3, 5, 7], "mphysgroup": [1, 7], "There": [1, 4], "two": [1, 3], "version": 1, "deriv": [1, 3], "parallelgroup": 1, "both": [1, 3, 4, 10], "function": [1, 3], "lower": 1, "sequenti": 1, "evalu": [1, 3], "top": [1, 3], "setup": [1, 3, 5], "follow": [1, 3, 7], "step": 1, "must": [1, 3, 6, 10], "done": [1, 3, 5], "": [1, 3, 5, 6, 8, 9, 10, 11], "self": [1, 6], "other": [1, 3, 4, 6], "like": [1, 4, 6], "geometri": [1, 9, 10, 11], "addition": 1, "hold": 1, "These": [1, 4, 7], "extra": 1, "kwarg": [1, 3, 5, 6], "extens": [1, 7], "block": [1, 5, 6], "gauss": [1, 5, 6], "seidel": [1, 5, 6], "coupling_nonlinear_solv": 1, "coupling_linear_solv": 1, "nonlinearsolv": 1, "assign": [1, 3], "primal": 1, "linearsolv": 1, "sensit": 1, "mphys_connect_scenario_coordinate_sourc": 1, "disciplin": [1, 4], "A": [1, 3, 5, 6, 8, 9, 10, 11], "aid": 1, "target": 1, "assum": [1, 3], "x_": 1, "0": [1, 3], "api": 1, "rank": [1, 3], "greater": 1, "than": [1, 3, 5], "equal": 1, "simultan": 1, "unlik": 1, "so": [1, 3], "in_multipointparallel": [1, 6], "true": [1, 3, 9, 10, 11], "outsid": [1, 4], "cannot": 1, "directli": [1, 5, 6], "higher": 1, "parallel": [1, 3, 7], "mpi_proc_alloc": 1, "while": [2, 3, 5, 7], "possibl": 2, "up": [2, 7], "same": [2, 3], "prefer": 2, "more": [2, 3, 7], "easili": 2, "interchang": 2, "tabl": 2, "descript": [2, 3, 7, 9, 10, 11], "x_aero0": 2, "mphys_coordin": [2, 4], "surfac": [2, 8, 10], "jig": [2, 8, 10], "shape": [2, 8, 10], "x_aero": 2, "mphys_coupl": [2, 4], "deform": 2, "u_aero": 2, "f_aero": 2, "forc": [2, 3, 10], "t_convect": 2, "temperatur": 2, "convect": 2, "q_convect": 2, "heat": [2, 8], "x_struct0": 2, "u_struct": 2, "state": [2, 3, 4, 10], "vector": [2, 3, 10], "f_struct": 2, "t_conduct": 2, "thermal": 2, "side": [2, 3], "q_conduct": 2, "conduct": 2, "To": [2, 3, 6], "make": [2, 3, 6], "swap": 2, "easier": [2, 3], "also": [2, 6], "share": [2, 4], "noncoupl": 2, "aoa": 2, "mphys_input": [2, 4], "angl": 2, "attack": 2, "pleas": 2, "includ": [2, 3, 6, 8, 10], "unit": 2, "deg": 2, "rad": 2, "declar": [2, 3, 6], "yaw": 2, "mach": 2, "refer": 2, "reynold": 2, "q_inf": 2, "dynam": [2, 8], "pressur": 2, "purpos": [3, 5], "mean": 3, "analysi": [3, 6, 7, 8], "local": 3, "One": 3, "situat": 3, "desir": 3, "carri": 3, "out": 3, "full": [3, 8, 10], "exce": 3, "hpc": 3, "job": 3, "Such": 3, "without": 3, "normal": 3, "manual": [3, 4], "restart": 3, "would": [3, 11], "thu": 3, "capabl": [3, 7], "keep": 3, "serial": 3, "run": [3, 6], "continu": 3, "login": 3, "e": [3, 8], "g": 3, "nohup": 3, "screen": 3, "linux": 3, "command": 3, "across": [3, 7], "sever": 3, "anoth": 3, "where": [3, 10], "advantag": 3, "streamlin": 3, "massiv": 3, "environ": 3, "gener": [3, 7, 11], "nest": 3, "server": 3, "client": 3, "arrang": 3, "outer": 3, "serv": 3, "overarch": 3, "inner": 3, "isol": 3, "high": [3, 7, 8], "fidel": [3, 7, 8], "remain": 3, "open": 3, "gradient": [3, 8], "wall": 3, "save": 3, "maximum": 3, "previou": 3, "multipli": 3, "scale": 3, "factor": 3, "relaunch": 3, "three": 3, "achiev": 3, "remotecomp": 3, "explicit": 3, "wrap": 3, "replic": 3, "request": 3, "estim": 3, "servermanag": 3, "control": 3, "pbs4py": 3, "zeromq": 3, "network": 3, "through": 3, "mphyszeromqservermanag": 3, "encod": 3, "json": 3, "dictionari": 3, "send": 3, "receiv": 3, "necessari": [3, 6, 7], "inform": 3, "socket": 3, "ssh": 3, "port": 3, "forward": 3, "start": 3, "stop": 3, "check": 3, "statu": 3, "mphyszeromqserv": 3, "accept": [3, 9, 10, 11], "valu": [3, 9, 10, 11], "acceptable_port_rang": 3, "5081": 3, "6000": 3, "n": [3, 9, 10, 11], "rang": 3, "look": 3, "busi": 3, "additional_remote_input": 3, "addit": [3, 10], "var": 3, "additional_remote_output": 3, "constraint": [3, 4, 8, 11], "additional_server_arg": 3, "give": 3, "always_opt": 3, "fals": [3, 9, 10, 11], "bool": [3, 9, 10, 11], "oper": [3, 6], "loop": [3, 10], "even": 3, "respons": 3, "distribut": [3, 8], "process": 3, "dump_json": 3, "dump": 3, "file": 3, "dump_separate_json": 3, "separ": 3, "pb": 3, "launcher": 3, "reboot_only_on_function_cal": 3, "onli": [3, 4, 9, 11], "allow": 3, "reboot": 3, "avoid": 3, "rerun": 3, "next": 3, "shorten": 3, "run_root_onli": 3, "compute_parti": 3, "apply_linear": 3, "apply_nonlinear": 3, "compute_jacvec_product": 3, "broadcast": 3, "result": [3, 4], "run_server_filenam": 3, "mphys_serv": 3, "py": 3, "python": 3, "launch": 3, "time_estimate_buff": 3, "float": 3, "constant": 3, "second": 3, "esim": 3, "veri": [3, 7], "slowest": 3, "faster": 3, "expir": 3, "slower": 3, "time_estimate_multipli": 3, "2": [3, 8, 10], "whether": 3, "max": 3, "prior": 3, "use_derivative_color": 3, "color": 3, "case": [3, 6, 11], "var_naming_dot_replac": 3, "what": 3, "replac": 3, "dv": 3, "tree": 3, "facilit": 3, "get_om_group_function_point": 3, "pointer": 3, "multipoint": [3, 6, 8], "By": 3, "On": 3, "charact": 3, "nth": 3, "sent": 3, "mphys_": [3, 6], "_servern": 3, "search": [3, 7], "keyword": 3, "displai": 3, "do": [3, 6], "submiss": 3, "script": 3, "note": 3, "support": 3, "systemerror": 3, "trigger": 3, "otherwis": [3, 6], "superson": 3, "panel": 3, "aerostructur": [3, 7, 8], "as_opt_remote_seri": 3, "as_opt_remote_parallel": 3, "as_opt_parallel": 3, "multipointparallel": [3, 9, 10, 11], "hand": 3, "point": [3, 6], "either": 3, "filenam": 3, "As": [3, 6], "demonstr": 3, "configur": [3, 4, 5, 6, 8], "functor": 3, "getmodel": 3, "combin": [3, 8], "run_directori": [3, 9, 10, 11], "directori": [3, 9, 10, 11], "k4": 3, "monitor": 3, "queue": 3, "nasa": [3, 8], "k": [3, 8], "cluster": 3, "write": 3, "data": [3, 4], "except": 3, "wall_tim": 3, "entri": 3, "complet": 3, "design_count": 3, "track": 3, "how": [3, 7], "mani": 3, "been": 3, "written": 3, "n2": 3, "titl": 3, "n2_inner_analysis_": 3, "html": 3, "your": [3, 5, 6], "stop_serv": 3, "manag": 3, "background": 3, "unexpectedli": 3, "difficult": 3, "involv": 3, "find": 3, "wa": 3, "somewhat": 3, "howev": [3, 7], "well": 3, "wrt": 3, "check_tot": 3, "compute_tot": 3, "depend": [3, 9, 10, 11], "costli": 3, "remote_compon": 3, "_setup_server_manag": 3, "_send_inputs_to_serv": 3, "_receive_outputs_from_serv": 3, "store": 3, "some": [3, 5], "bound": 3, "we": 3, "detect": 3, "runtim": 3, "overrid": 3, "attribut": 3, "pathnam": 3, "unscal": 3, "dimension": [3, 8], "read": 3, "via": 3, "kei": 3, "discrete_input": 3, "dict": 3, "discret": 3, "discrete_output": 3, "partial": 3, "sub": 3, "jacobian": [3, 9, 10, 11], "part": 3, "jac": 3, "output_nam": 3, "input_nam": [3, 4], "server_manag": 3, "start_serv": 3, "enough_time_is_remain": 3, "estimated_model_tim": 3, "enough": 3, "much": 3, "take": 3, "ignore_setup_warn": 3, "ignore_runtime_warn": 3, "rerun_initial_design": 3, "await": 3, "back": 3, "_parse_incoming_messag": 3, "_send_outputs_to_cli": 3, "ignor": 3, "warn": 3, "baselin": 3, "upon": 3, "starup": 3, "zmq_pb": 3, "component_nam": 3, "captur": 3, "_server": 3, "server_numb": 3, "altern": 3, "specifi": 3, "alreadi": 3, "select": 4, "four": 4, "among": 4, "come": 4, "mphys_result": 4, "you": [4, 5, 6], "result_nam": 4, "access": 4, "thei": [4, 7], "further": 4, "behind": 4, "curtain": 4, "autom": [4, 5], "mechanan": 5, "mphys_add_subsystem": [5, 6], "still": 5, "add_subsystem": 5, "dure": 5, "phase": [5, 6], "sure": 5, "parent": [5, 6], "super": [5, 6], "import": 5, "understand": [5, 8], "interact": [5, 10], "inherit": 5, "rather": 5, "mphys_group": 5, "appropri": 5, "get": 6, "them": 6, "balanc": 6, "suitabl": 6, "coupling_group": 6, "custom": 6, "least": 6, "mode": 6, "free": 6, "basic": 6, "mphys_add_pre_coupling_subsystem": 6, "mphys_add_post_coupling_subsystem": 6, "main": 6, "_mphys_scenario_setup": 6, "mphys_add_post_subsystem": 6, "promotes_input": 6, "promotes_output": 6, "end": 6, "system": [6, 8], "iter": 6, "tupl": [6, 10], "els": 6, "packag": [7, 8], "eas": 7, "straightforward": 7, "multidisciplinari": [7, 8], "address": 7, "its": 7, "convent": 7, "absolut": 7, "guidelin": 7, "usag": 7, "modular": 7, "technologi": 7, "collabor": 7, "area": 7, "research": [7, 8], "strive": 7, "work": [7, 10], "hierarchi": 7, "remot": 7, "describ": 7, "page": 7, "extend": 7, "paper": 7, "index": 7, "1": [8, 10], "m": 8, "saja": 8, "abdul": 8, "kaiyoom": 8, "anil": 8, "yildirim": 8, "joaquim": 8, "r": 8, "martin": 8, "aeropropuls": 8, "over": 8, "wing": 8, "nacel": 8, "aiaa": 8, "scitech": 8, "forum": 8, "januari": 8, "2023": 8, "doi": 8, "10": 8, "2514": 8, "6": 8, "0327": 8, "ran": 8, "aviat": 8, "san": 8, "diego": 8, "ca": 8, "june": 8, "3588": 8, "3": [8, 10], "josh": 8, "l": 8, "anib": 8, "charl": 8, "mader": 8, "aerotherm": 8, "x": 8, "57": 8, "motor": 8, "orlando": 8, "fl": 8, "2020": 8, "2115": 8, "4": [8, 10], "cfd": 8, "plate": 8, "fin": 8, "exchang": 8, "2022": 8, "3930": 8, "5": 8, "joshua": 8, "phd": 8, "thesi": 8, "univers": 8, "michigan": 8, "ann": 8, "arbor": 8, "http": 8, "deepblu": 8, "lib": 8, "umich": 8, "edu": 8, "2027": 8, "42": 8, "171375": 8, "electr": 8, "aircraft": 8, "conjug": 8, "intern": 8, "journal": 8, "mass": 8, "189": 8, "122689": 8, "1016": 8, "j": 8, "ijheatmasstransf": 8, "7": 8, "garo": 8, "bedonian": 8, "jason": 8, "hicken": 8, "adapt": 8, "sampl": 8, "enhanc": 8, "surrog": 8, "american": 8, "institut": 8, "aeronaut": 8, "astronaut": 8, "3998": 8, "8": 8, "adrien": 8, "crovato": 8, "romain": 8, "boman": 8, "vincent": 8, "terrapon": 8, "grigorio": 8, "dimitriadi": 8, "alex": 8, "p": 8, "prado": 8, "pedro": 8, "h": 8, "cabral": 8, "fast": 8, "calcul": 8, "preliminari": 8, "aeroelast": 8, "9": 8, "alasdair": 8, "c": 8, "grai": 8, "graem": 8, "kennedi": 8, "geometr": 8, "3316": 8, "hannah": 8, "hajdik": 8, "bernardo": 8, "pacini": 8, "benjamin": 8, "brelj": 8, "3589": 8, "11": 8, "ping": 8, "he": 8, "heyecan": 8, "koyuncuoglu": 8, "helen": 8, "hu": 8, "anvesh": 8, "dhulipalla": 8, "haiyang": 8, "hui": 8, "uav": 8, "propel": 8, "adjoint": 8, "0531": 8, "12": 8, "kevin": 8, "jacobson": 8, "bret": 8, "stanford": 8, "flutter": [8, 10], "constrain": 8, "frequenc": 8, "approach": 8, "2242": 8, "13": 8, "multi": 8, "1844": 8, "14": 8, "andrew": 8, "lamkin": 8, "nathan": 8, "wuki": 8, "advanc": 8, "bypass": 8, "turbofan": 8, "engin": 8, "3591": 8, "15": 8, "33rd": 8, "congress": 8, "council": 8, "scienc": 8, "septemb": 8, "16": 8, "christoph": 8, "lupp": 8, "inclus": 8, "effect": 8, "163259": 8, "17": 8, "malhar": 8, "prajapati": 8, "karthik": 8, "duraisami": 8, "urban": 8, "air": 8, "mobil": 8, "vehicl": 8, "0326": 8, "18": 8, "toward": 8, "mix": 8, "aero": [8, 10], "acoust": 8, "3905": 8, "19": 8, "propuls": 8, "tiltw": 8, "concept": 8, "0143": 8, "20": 8, "pawel": 8, "chwalowski": 8, "ongo": 8, "predict": 8, "valid": 8, "activ": 8, "langlei": 8, "center": 8, "1557": 8, "21": 8, "anni": 8, "sauer": 8, "jame": 8, "warner": 8, "reliabl": 8, "transon": 8, "0632": 8, "22": 8, "thelen": 8, "d": 8, "bryson": 8, "b": 8, "beran": 8, "studi": 8, "23": 8, "dean": 8, "philip": 8, "algorithm": 8, "april": 8, "3390": 8, "a15040131": 8, "24": 8, "justin": 8, "pod": 8, "propulsor": 8, "august": 8, "2021": 8, "3032": 8, "25": 8, "layer": 8, "ingest": 8, "benefit": 8, "starc": 8, "abl": 8, "59": 8, "896": 8, "911": 8, "juli": 8, "c036103": 8, "26": 8, "chur": 8, "complement": 8, "eleventh": 8, "confer": 8, "fluid": [8, 10], "iccfd11": 8, "0702": 8, "url": 8, "www": 8, "iccfd": 8, "org": 8, "asset": 8, "pdf": 8, "iccfd11_pap": 8, "27": 8, "yildirm": 8, "robust": 8, "176459": 8, "scenarioaerodynam": 9, "nonlinearrunonc": [9, 11], "linearrunonc": [9, 11], "execut": [9, 10, 11], "pre": [9, 10, 11], "aero_build": [9, 10], "assembled_jac_typ": [9, 10, 11], "csc": [9, 10, 11], "dens": [9, 10, 11], "implicit": [9, 10, 11], "assembl": [9, 10, 11], "auto_ord": [9, 10, 11], "graph": [9, 10, 11], "It": [9, 10, 11], "break": [9, 10, 11], "reorder": [9, 10, 11], "cycl": [9, 10, 11], "path": [9, 10, 11], "empti": [9, 10, 11], "chang": [9, 10, 11], "scenarioaerostructur": 10, "static": [10, 11], "project": 10, "geodisp": 10, "undeform": 10, "ti": 10, "togeth": 10, "principl": 10, "virtual": 10, "adjac": 10, "tranfer": 10, "know": 10, "slice": 10, "shell": 10, "element": 10, "rotat": 10, "translat": 10, "nonlinearblockg": 10, "linearblockg": 10, "use_aitken": 10, "coupling_group_typ": 10, "full_coupl": 10, "limit": 10, "flexibl": 10, "accomod": 10, "dlm": 10, "skip": 10, "aerodynamics_onli": 10, "ldxfer_build": 10, "post_coupling_ord": 10, "ldxfer": 10, "struct": 10, "pre_coupling_ord": 10, "struct_build": [10, 11], "scenariostructur": 11, "stress": 11}, "objects": {"mphys": [[0, 0, 0, "-", "builder"], [6, 0, 0, "-", "coupling_group"], [5, 0, 0, "-", "mphys_group"], [1, 0, 0, "-", "multipoint"], [6, 0, 0, "-", "scenario"]], "mphys.builder": [[0, 1, 1, "", "Builder"]], "mphys.builder.Builder": [[0, 2, 1, "", "get_coupling_group_subsystem"], [0, 2, 1, "", "get_mesh_coordinate_subsystem"], [0, 2, 1, "", "get_ndof"], [0, 2, 1, "", "get_number_of_nodes"], [0, 2, 1, "", "get_post_coupling_subsystem"], [0, 2, 1, "", "get_pre_coupling_subsystem"], [0, 2, 1, "", "get_tagged_indices"], [0, 2, 1, "", "initialize"]], "mphys.coupling_group": [[6, 1, 1, "", "CouplingGroup"]], "mphys.mphys_group": [[5, 1, 1, "", "MphysGroup"]], "mphys.mphys_group.MphysGroup": [[5, 2, 1, "", "configure"], [5, 2, 1, "", "mphys_add_subsystem"]], "mphys.multipoint": [[1, 1, 1, "", "Multipoint"], [1, 1, 1, "", "MultipointParallel"]], "mphys.multipoint.Multipoint": [[1, 2, 1, "", "mphys_add_scenario"], [1, 2, 1, "", "mphys_connect_scenario_coordinate_source"]], "mphys.multipoint.MultipointParallel": [[1, 2, 1, "", "mphys_add_scenario"]], "mphys.network.remote_component": [[3, 1, 1, "", "RemoteComp"]], "mphys.network.remote_component.RemoteComp": [[3, 2, 1, "", "compute"], [3, 2, 1, "", "compute_partials"], [3, 2, 1, "", "initialize"], [3, 2, 1, "", "setup"]], "mphys.network.server": [[3, 1, 1, "", "Server"]], "mphys.network.server.Server": [[3, 2, 1, "", "run"]], "mphys.network.server_manager": [[3, 1, 1, "", "ServerManager"]], "mphys.network.server_manager.ServerManager": [[3, 2, 1, "", "enough_time_is_remaining"], [3, 2, 1, "", "start_server"], [3, 2, 1, "", "stop_server"]], "mphys.network.zmq_pbs": [[3, 1, 1, "", "MPhysZeroMQServer"], [3, 1, 1, "", "MPhysZeroMQServerManager"], [3, 1, 1, "", "RemoteZeroMQComp"]], "mphys.network.zmq_pbs.MPhysZeroMQServerManager": [[3, 2, 1, "", "enough_time_is_remaining"], [3, 2, 1, "", "start_server"], [3, 2, 1, "", "stop_server"]], "mphys.network.zmq_pbs.RemoteZeroMQComp": [[3, 2, 1, "", "initialize"]], "mphys.scenario": [[6, 1, 1, "", "Scenario"]], "mphys.scenario.Scenario": [[6, 2, 1, "", "initialize"], [6, 2, 1, "", "mphys_add_post_subsystem"], [6, 2, 1, "", "setup"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"]}, "titleterms": {"builder": [0, 10], "model": 1, "hierarchi": 1, "coupl": [1, 6], "group": [1, 6], "scenario": [1, 6, 7, 9, 10, 11], "multipoint": 1, "multipointparallel": 1, "variabl": [2, 5], "name": 2, "convent": 2, "remot": 3, "compon": 3, "remotezeromqcomp": 3, "option": [3, 9, 10, 11], "usag": 3, "exampl": 3, "troubleshoot": 3, "current": 3, "limit": 3, "tag": 4, "promot": 4, "The": 5, "mphysgroup": 5, "manual": 5, "connect": 5, "extend": 6, "librari": [6, 7], "initi": 6, "setup": 6, "document": 7, "mphy": [7, 8], "basic": [7, 9, 10, 11], "multiphys": 7, "singl": 7, "disciplin": 7, "develop": 7, "guid": 7, "refer": 7, "indic": 7, "tabl": 7, "paper": 8, "us": 8, "aerodynam": 9, "default": [9, 10, 11], "solver": [9, 10, 11], "n2": [9, 10, 11], "in_multipointparallel": [9, 10, 11], "geometry_build": [9, 10, 11], "aerostructur": 10, "requir": 10, "load": 10, "displac": 10, "transfer": 10, "structur": [10, 11]}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 58}, "alltitles": {"Builders": [[0, "builders"]], "Model Hierarchy": [[1, "model-hierarchy"]], "Coupling Groups": [[1, "coupling-groups"], [6, "coupling-groups"]], "Scenario Groups": [[1, "scenario-groups"]], "Multipoint Groups": [[1, "multipoint-groups"]], "Multipoint": [[1, "multipoint"]], "MultipointParallel": [[1, "multipointparallel"]], "Variable Naming Conventions": [[2, "variable-naming-conventions"]], "Remote Components": [[3, "remote-components"]], "RemoteZeroMQComp Options": [[3, "remotezeromqcomp-options"]], "Usage": [[3, "usage"]], "Example": [[3, "example"]], "Troubleshooting": [[3, "troubleshooting"]], "Current Limitations": [[3, "current-limitations"]], "Tagged Promotion": [[4, "tagged-promotion"]], "The MphysGroup": [[5, "the-mphysgroup"]], "Manual Connection of Variables": [[5, "manual-connection-of-variables"]], "Extending the Scenario Library": [[6, "extending-the-scenario-library"]], "Scenarios": [[6, "scenarios"]], "Initialize": [[6, "initialize"]], "Setup": [[6, "setup"]], "Documentation for MPhys": [[7, "documentation-for-mphys"]], "MPhys Basics": [[7, "mphys-basics"], [7, null]], "MPhys Scenario Library": [[7, "mphys-scenario-library"]], "Multiphysics Scenarios": [[7, null]], "Single Discipline Scenarios": [[7, null]], "MPhys Developers Guide": [[7, "mphys-developers-guide"]], "Developers Guide": [[7, null]], "References": [[7, "references"]], "Indices and tables": [[7, "indices-and-tables"]], "Papers Using MPhys": [[8, "papers-using-mphys"]], "Aerodynamic Scenario": [[9, "aerodynamic-scenario"]], "Default Solvers": [[9, "default-solvers"], [10, "default-solvers"], [11, "default-solvers"]], "Options": [[9, "options"], [10, "options"], [11, "options"]], "N2:Basic": [[9, "n2-basic"], [11, "n2-basic"]], "N2: in_MultipointParallel": [[9, "n2-in-multipointparallel"], [10, "n2-in-multipointparallel"], [11, "n2-in-multipointparallel"]], "N2: in_MultipointParallel with geometry_builder": [[9, "n2-in-multipointparallel-with-geometry-builder"], [10, "n2-in-multipointparallel-with-geometry-builder"], [11, "n2-in-multipointparallel-with-geometry-builder"]], "Aerostructural Scenario": [[10, "aerostructural-scenario"]], "Builder Requirements": [[10, "builder-requirements"]], "Load and Displacement Transfer Builder": [[10, "load-and-displacement-transfer-builder"]], "Structural Solver Builder": [[10, "structural-solver-builder"]], "N2: Basic": [[10, "n2-basic"]], "Structural Scenario": [[11, "structural-scenario"]]}, "indexentries": {"builder (class in mphys.builder)": [[0, "mphys.builder.Builder"]], "get_coupling_group_subsystem() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_coupling_group_subsystem"]], "get_mesh_coordinate_subsystem() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_mesh_coordinate_subsystem"]], "get_ndof() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_ndof"]], "get_number_of_nodes() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_number_of_nodes"]], "get_post_coupling_subsystem() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_post_coupling_subsystem"]], "get_pre_coupling_subsystem() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_pre_coupling_subsystem"]], "get_tagged_indices() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.get_tagged_indices"]], "initialize() (mphys.builder.builder method)": [[0, "mphys.builder.Builder.initialize"]], "module": [[0, "module-mphys.builder"], [1, "module-mphys.multipoint"], [5, "module-mphys.mphys_group"], [6, "module-mphys.coupling_group"], [6, "module-mphys.scenario"]], "mphys.builder": [[0, "module-mphys.builder"]], "multipoint (class in mphys.multipoint)": [[1, "mphys.multipoint.Multipoint"]], "multipointparallel (class in mphys.multipoint)": [[1, "mphys.multipoint.MultipointParallel"]], "mphys.multipoint": [[1, "module-mphys.multipoint"]], "mphys_add_scenario() (mphys.multipoint.multipoint method)": [[1, "mphys.multipoint.Multipoint.mphys_add_scenario"]], "mphys_add_scenario() (mphys.multipoint.multipointparallel method)": [[1, "mphys.multipoint.MultipointParallel.mphys_add_scenario"]], "mphys_connect_scenario_coordinate_source() (mphys.multipoint.multipoint method)": [[1, "mphys.multipoint.Multipoint.mphys_connect_scenario_coordinate_source"]], "mphyszeromqserver (class in mphys.network.zmq_pbs)": [[3, "mphys.network.zmq_pbs.MPhysZeroMQServer"]], "mphyszeromqservermanager (class in mphys.network.zmq_pbs)": [[3, "mphys.network.zmq_pbs.MPhysZeroMQServerManager"]], "remotecomp (class in mphys.network.remote_component)": [[3, "mphys.network.remote_component.RemoteComp"]], "remotezeromqcomp (class in mphys.network.zmq_pbs)": [[3, "mphys.network.zmq_pbs.RemoteZeroMQComp"]], "server (class in mphys.network.server)": [[3, "mphys.network.server.Server"]], "servermanager (class in mphys.network.server_manager)": [[3, "mphys.network.server_manager.ServerManager"]], "compute() (mphys.network.remote_component.remotecomp method)": [[3, "mphys.network.remote_component.RemoteComp.compute"]], "compute_partials() (mphys.network.remote_component.remotecomp method)": [[3, "mphys.network.remote_component.RemoteComp.compute_partials"]], "enough_time_is_remaining() (mphys.network.server_manager.servermanager method)": [[3, "mphys.network.server_manager.ServerManager.enough_time_is_remaining"]], "enough_time_is_remaining() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[3, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.enough_time_is_remaining"]], "initialize() (mphys.network.remote_component.remotecomp method)": [[3, "mphys.network.remote_component.RemoteComp.initialize"]], "initialize() (mphys.network.zmq_pbs.remotezeromqcomp method)": [[3, "mphys.network.zmq_pbs.RemoteZeroMQComp.initialize"]], "run() (mphys.network.server.server method)": [[3, "mphys.network.server.Server.run"]], "setup() (mphys.network.remote_component.remotecomp method)": [[3, "mphys.network.remote_component.RemoteComp.setup"]], "start_server() (mphys.network.server_manager.servermanager method)": [[3, "mphys.network.server_manager.ServerManager.start_server"]], "start_server() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[3, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.start_server"]], "stop_server() (mphys.network.server_manager.servermanager method)": [[3, "mphys.network.server_manager.ServerManager.stop_server"]], "stop_server() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[3, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.stop_server"]], "mphysgroup (class in mphys.mphys_group)": [[5, "mphys.mphys_group.MphysGroup"]], "configure() (mphys.mphys_group.mphysgroup method)": [[5, "mphys.mphys_group.MphysGroup.configure"]], "mphys.mphys_group": [[5, "module-mphys.mphys_group"]], "mphys_add_subsystem() (mphys.mphys_group.mphysgroup method)": [[5, "mphys.mphys_group.MphysGroup.mphys_add_subsystem"]], "couplinggroup (class in mphys.coupling_group)": [[6, "mphys.coupling_group.CouplingGroup"]], "scenario (class in mphys.scenario)": [[6, "mphys.scenario.Scenario"]], "initialize() (mphys.scenario.scenario method)": [[6, "mphys.scenario.Scenario.initialize"]], "mphys.coupling_group": [[6, "module-mphys.coupling_group"]], "mphys.scenario": [[6, "module-mphys.scenario"]], "mphys_add_post_subsystem() (mphys.scenario.scenario method)": [[6, "mphys.scenario.Scenario.mphys_add_post_subsystem"]], "setup() (mphys.scenario.scenario method)": [[6, "mphys.scenario.Scenario.setup"]]}})
\ No newline at end of file
+Search.setIndex({"alltitles": {"Aerodynamic Scenario": [[10, null]], "Aerostructural Scenario": [[11, null]], "Assembling an MPhys Model": [[1, null]], "Builder Requirements": [[11, "builder-requirements"]], "Builders": [[0, null]], "Coupling Groups": [[2, "coupling-groups"], [7, "coupling-groups"]], "Current Limitations": [[4, "current-limitations"]], "Default Solvers": [[10, "default-solvers"], [11, "default-solvers"], [12, "default-solvers"]], "Developers Guide": [[8, null]], "Documentation for MPhys": [[8, null]], "Example": [[4, "example"]], "Examples": [[1, "examples"]], "Extending the Scenario Library": [[7, null]], "Indices and tables": [[8, "indices-and-tables"]], "Initialize": [[7, "initialize"]], "Load and Displacement Transfer Builder": [[11, "load-and-displacement-transfer-builder"]], "MPhys Basics": [[8, "mphys-basics"], [8, null]], "MPhys Developers Guide": [[8, "mphys-developers-guide"]], "MPhys Scenario Library": [[8, "mphys-scenario-library"]], "Manual Connection of Variables": [[6, "manual-connection-of-variables"]], "Model Hierarchy": [[2, null]], "Multiphysics Scenarios": [[8, null]], "Multipoint": [[2, "multipoint"]], "Multipoint Groups": [[2, "multipoint-groups"]], "MultipointParallel": [[2, "multipointparallel"]], "N2: Basic": [[11, "n2-basic"]], "N2: in_MultipointParallel": [[10, "n2-in-multipointparallel"], [11, "n2-in-multipointparallel"], [12, "n2-in-multipointparallel"]], "N2: in_MultipointParallel with geometry_builder": [[10, "n2-in-multipointparallel-with-geometry-builder"], [11, "n2-in-multipointparallel-with-geometry-builder"], [12, "n2-in-multipointparallel-with-geometry-builder"]], "N2:Basic": [[10, "n2-basic"], [12, "n2-basic"]], "Options": [[10, "options"], [11, "options"], [12, "options"]], "Papers Using MPhys": [[9, null]], "References": [[8, "references"]], "Remote Components": [[4, null]], "RemoteZeroMQComp Options": [[4, "remotezeromqcomp-options"]], "Scenario Groups": [[2, "scenario-groups"]], "Scenarios": [[7, "scenarios"]], "Setup": [[7, "setup"]], "Single Discipline Scenarios": [[8, null]], "Structural Scenario": [[12, null]], "Structural Solver Builder": [[11, "structural-solver-builder"]], "Tagged Promotion": [[5, null]], "The MPhysGroup": [[6, null]], "Troubleshooting": [[4, "troubleshooting"]], "Usage": [[4, "usage"]], "Variable Naming Conventions": [[3, null]]}, "docnames": ["basics/builders", "basics/model_assembly", "basics/model_hierarchy", "basics/naming_conventions", "basics/remote_components", "basics/tagged_promotion", "developers/mphys_group", "developers/new_multiphysics_problems", "index", "references/papers_using_mphys", "scenarios/aerodynamic", "scenarios/aerostructural", "scenarios/structural"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["basics/builders.rst", "basics/model_assembly.rst", "basics/model_hierarchy.rst", "basics/naming_conventions.rst", "basics/remote_components.rst", "basics/tagged_promotion.rst", "developers/mphys_group.rst", "developers/new_multiphysics_problems.rst", "index.rst", "references/papers_using_mphys.rst", "scenarios/aerodynamic.rst", "scenarios/aerostructural.rst", "scenarios/structural.rst"], "indexentries": {"builder (class in mphys)": [[0, "mphys.Builder", false]], "compute() (mphys.network.remote_component.remotecomp method)": [[4, "mphys.network.remote_component.RemoteComp.compute", false]], "compute_partials() (mphys.network.remote_component.remotecomp method)": [[4, "mphys.network.remote_component.RemoteComp.compute_partials", false]], "configure() (mphys.mphysgroup method)": [[6, "mphys.MPhysGroup.configure", false]], "couplinggroup (class in mphys)": [[7, "mphys.CouplingGroup", false]], "enough_time_is_remaining() (mphys.network.server_manager.servermanager method)": [[4, "mphys.network.server_manager.ServerManager.enough_time_is_remaining", false]], "enough_time_is_remaining() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[4, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.enough_time_is_remaining", false]], "get_coupling_group_subsystem() (mphys.builder method)": [[0, "mphys.Builder.get_coupling_group_subsystem", false]], "get_mesh_coordinate_subsystem() (mphys.builder method)": [[0, "mphys.Builder.get_mesh_coordinate_subsystem", false]], "get_ndof() (mphys.builder method)": [[0, "mphys.Builder.get_ndof", false]], "get_number_of_nodes() (mphys.builder method)": [[0, "mphys.Builder.get_number_of_nodes", false]], "get_post_coupling_subsystem() (mphys.builder method)": [[0, "mphys.Builder.get_post_coupling_subsystem", false]], "get_pre_coupling_subsystem() (mphys.builder method)": [[0, "mphys.Builder.get_pre_coupling_subsystem", false]], "get_tagged_indices() (mphys.builder method)": [[0, "mphys.Builder.get_tagged_indices", false]], "initialize() (mphys.builder method)": [[0, "mphys.Builder.initialize", false]], "initialize() (mphys.network.remote_component.remotecomp method)": [[4, "mphys.network.remote_component.RemoteComp.initialize", false]], "initialize() (mphys.network.zmq_pbs.remotezeromqcomp method)": [[4, "mphys.network.zmq_pbs.RemoteZeroMQComp.initialize", false]], "initialize() (mphys.scenario method)": [[7, "mphys.Scenario.initialize", false]], "module": [[2, "module-mphys", false]], "mphys": [[2, "module-mphys", false]], "mphys_add_post_subsystem() (mphys.scenario method)": [[7, "mphys.Scenario.mphys_add_post_subsystem", false]], "mphys_add_scenario() (mphys.multipoint method)": [[2, "mphys.Multipoint.mphys_add_scenario", false]], "mphys_add_scenario() (mphys.multipointparallel method)": [[2, "mphys.MultipointParallel.mphys_add_scenario", false]], "mphys_add_subsystem() (mphys.mphysgroup method)": [[6, "mphys.MPhysGroup.mphys_add_subsystem", false]], "mphysgroup (class in mphys)": [[6, "mphys.MPhysGroup", false]], "mphyszeromqserver (class in mphys.network.zmq_pbs)": [[4, "mphys.network.zmq_pbs.MPhysZeroMQServer", false]], "mphyszeromqservermanager (class in mphys.network.zmq_pbs)": [[4, "mphys.network.zmq_pbs.MPhysZeroMQServerManager", false]], "multipoint (class in mphys)": [[2, "mphys.Multipoint", false]], "multipointparallel (class in mphys)": [[2, "mphys.MultipointParallel", false]], "remotecomp (class in mphys.network.remote_component)": [[4, "mphys.network.remote_component.RemoteComp", false]], "remotezeromqcomp (class in mphys.network.zmq_pbs)": [[4, "mphys.network.zmq_pbs.RemoteZeroMQComp", false]], "run() (mphys.network.server.server method)": [[4, "mphys.network.server.Server.run", false]], "scenario (class in mphys)": [[7, "mphys.Scenario", false]], "server (class in mphys.network.server)": [[4, "mphys.network.server.Server", false]], "servermanager (class in mphys.network.server_manager)": [[4, "mphys.network.server_manager.ServerManager", false]], "setup() (mphys.network.remote_component.remotecomp method)": [[4, "mphys.network.remote_component.RemoteComp.setup", false]], "setup() (mphys.scenario method)": [[7, "mphys.Scenario.setup", false]], "start_server() (mphys.network.server_manager.servermanager method)": [[4, "mphys.network.server_manager.ServerManager.start_server", false]], "start_server() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[4, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.start_server", false]], "stop_server() (mphys.network.server_manager.servermanager method)": [[4, "mphys.network.server_manager.ServerManager.stop_server", false]], "stop_server() (mphys.network.zmq_pbs.mphyszeromqservermanager method)": [[4, "mphys.network.zmq_pbs.MPhysZeroMQServerManager.stop_server", false]]}, "objects": {"": [[2, 0, 0, "-", "mphys"]], "mphys": [[0, 1, 1, "", "Builder"], [7, 1, 1, "", "CouplingGroup"], [6, 1, 1, "", "MPhysGroup"], [2, 1, 1, "", "Multipoint"], [2, 1, 1, "", "MultipointParallel"], [7, 1, 1, "", "Scenario"]], "mphys.Builder": [[0, 2, 1, "", "get_coupling_group_subsystem"], [0, 2, 1, "", "get_mesh_coordinate_subsystem"], [0, 2, 1, "", "get_ndof"], [0, 2, 1, "", "get_number_of_nodes"], [0, 2, 1, "", "get_post_coupling_subsystem"], [0, 2, 1, "", "get_pre_coupling_subsystem"], [0, 2, 1, "", "get_tagged_indices"], [0, 2, 1, "", "initialize"]], "mphys.MPhysGroup": [[6, 2, 1, "", "configure"], [6, 2, 1, "", "mphys_add_subsystem"]], "mphys.Multipoint": [[2, 2, 1, "", "mphys_add_scenario"]], "mphys.MultipointParallel": [[2, 2, 1, "", "mphys_add_scenario"]], "mphys.Scenario": [[7, 2, 1, "", "initialize"], [7, 2, 1, "", "mphys_add_post_subsystem"], [7, 2, 1, "", "setup"]], "mphys.network.remote_component": [[4, 1, 1, "", "RemoteComp"]], "mphys.network.remote_component.RemoteComp": [[4, 2, 1, "", "compute"], [4, 2, 1, "", "compute_partials"], [4, 2, 1, "", "initialize"], [4, 2, 1, "", "setup"]], "mphys.network.server": [[4, 1, 1, "", "Server"]], "mphys.network.server.Server": [[4, 2, 1, "", "run"]], "mphys.network.server_manager": [[4, 1, 1, "", "ServerManager"]], "mphys.network.server_manager.ServerManager": [[4, 2, 1, "", "enough_time_is_remaining"], [4, 2, 1, "", "start_server"], [4, 2, 1, "", "stop_server"]], "mphys.network.zmq_pbs": [[4, 1, 1, "", "MPhysZeroMQServer"], [4, 1, 1, "", "MPhysZeroMQServerManager"], [4, 1, 1, "", "RemoteZeroMQComp"]], "mphys.network.zmq_pbs.MPhysZeroMQServerManager": [[4, 2, 1, "", "enough_time_is_remaining"], [4, 2, 1, "", "start_server"], [4, 2, 1, "", "stop_server"]], "mphys.network.zmq_pbs.RemoteZeroMQComp": [[4, 2, 1, "", "initialize"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method"}, "terms": {"": [1, 2, 4, 6, 7, 9, 10, 11, 12], "0": [1, 4], "0143": 9, "0326": 9, "0327": 9, "0531": 9, "0632": 9, "0702": 9, "1": [1, 9], "10": 9, "1016": 9, "11": 9, "12": 9, "122689": 9, "13": 9, "14": 9, "15": 9, "1557": 9, "16": 9, "163259": 9, "17": 9, "171375": 9, "176459": 9, "18": 9, "1844": 9, "189": 9, "19": 9, "2": [1, 4, 9], "20": 9, "2020": 9, "2021": 9, "2022": 9, "2023": 9, "2027": 9, "21": 9, "2115": 9, "22": 9, "2242": 9, "23": 9, "24": 9, "25": 9, "2514": 9, "26": 9, "27": 9, "3": [1, 3, 9], "3032": 9, "3316": 9, "3390": 9, "33rd": 9, "3588": 9, "3589": 9, "3591": 9, "3905": 9, "3930": 9, "3998": 9, "4": [1, 9], "42": 9, "5": [1, 3, 9], "5081": 4, "57": 9, "59": 9, "6": [1, 9], "6000": 4, "7": [1, 9], "8": 9, "896": 9, "9": 9, "911": 9, "A": [4, 6, 7, 9, 10, 11, 12], "As": [4, 7], "By": 4, "For": [0, 1, 2, 11], "If": [1, 2, 3, 4, 6, 7, 10, 11, 12], "In": [0, 1, 2, 4, 6, 7, 9], "It": [10, 11, 12], "Not": 0, "On": 4, "One": 4, "Such": 4, "That": 2, "The": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12], "There": [2, 5], "These": [1, 2, 5, 8], "To": [3, 4, 7], "_mphys_scenario_setup": 7, "_parse_incoming_messag": 4, "_receive_outputs_from_serv": 4, "_send_inputs_to_serv": 4, "_send_outputs_to_cli": 4, "_server": 4, "_servern": 4, "_setup_server_manag": 4, "a15040131": 9, "abdul": 9, "abl": 9, "about": [2, 11], "absolut": 8, "accept": [4, 10, 11, 12], "acceptable_port_rang": 4, "access": [3, 5], "accomod": 11, "achiev": 4, "acoust": 9, "across": [4, 8], "activ": [4, 9], "actual": 0, "ad": [0, 2, 4, 6, 7, 10, 11, 12], "adapt": 9, "add": [0, 1, 2, 4, 6, 7, 8, 11], "add_input": 3, "add_output": [1, 3], "add_subsystem": [1, 6], "addit": [4, 11], "addition": 2, "additional_remote_input": 4, "additional_remote_output": 4, "additional_server_arg": 4, "address": 8, "adjac": 11, "adjoint": 9, "adrien": 9, "advanc": 9, "advantag": 4, "aero": [9, 11], "aero_build": [1, 10, 11], "aero_mesh": 1, "aerobuild": 1, "aerodynam": [1, 2, 3, 8, 9, 11], "aerodynamics_onli": 11, "aeroelast": 9, "aeronaut": 9, "aeropropuls": [2, 9], "aerosolv": 3, "aerostructur": [4, 8, 9], "aerotherm": 9, "after": [0, 1, 2, 4], "aiaa": 9, "air": 9, "aircraft": 9, "alasdair": 9, "alex": 9, "algorithm": 9, "all": [0, 4, 7], "allow": [1, 4], "alreadi": 4, "also": [3, 7], "alter": 1, "altern": 4, "always_opt": 4, "american": 9, "among": 5, "an": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "analys": [2, 4], "analysi": [2, 4, 7, 8, 9], "andrew": 9, "angl": 3, "angle_of_attack": 3, "ani": [1, 2, 4, 5, 6, 7], "anib": 9, "anil": 9, "ann": 9, "anni": 9, "anoth": [1, 4], "anvesh": 9, "aoa": 1, "api": [1, 3], "applic": 1, "apply_linear": 4, "apply_nonlinear": 4, "approach": 9, "appropri": 6, "april": 9, "ar": [1, 2, 3, 4, 5, 6, 8, 10, 11, 12], "arbor": 9, "area": 8, "argument": [2, 4, 7], "arrang": 4, "as_opt_parallel": 4, "as_opt_remote_parallel": 4, "as_opt_remote_seri": 4, "assembl": [2, 8, 10, 11, 12], "assembled_jac_typ": [10, 11, 12], "assembli": [0, 1], "asset": 9, "assign": [2, 4], "associ": [1, 2, 3, 4, 7], "assum": 4, "astronaut": 9, "attack": 3, "attempt": 4, "attribut": 4, "august": 9, "auto_ord": [10, 11, 12], "autom": [1, 5, 6], "automat": [2, 6, 10, 11, 12], "avail": [0, 4, 8], "aviat": 9, "avoid": 4, "await": 4, "b": 9, "back": 4, "background": 4, "balanc": 7, "base": [0, 4, 6, 9, 10, 11, 12], "baselin": 4, "basic": 7, "becaus": [0, 2, 6, 11], "bedonian": 9, "been": [1, 4], "befor": [0, 2, 4], "behind": 5, "being": [2, 4, 8], "benefit": 9, "benjamin": 9, "beran": 9, "bernardo": 9, "between": [2, 4], "block": [2, 6, 7], "bodi": 0, "boman": 9, "bool": [4, 10, 11, 12], "boom": 2, "both": [2, 4, 5, 11], "bound": 4, "boundari": [0, 9], "break": [10, 11, 12], "brelj": 9, "bret": 9, "broadcast": 4, "bryson": 9, "build": 2, "builder": [1, 2, 7, 8, 10, 12], "burden": 0, "busi": 4, "bypass": 9, "c": [4, 9, 10, 11, 12], "c036103": 9, "ca": 9, "cabral": 9, "calcul": 9, "call": [0, 1, 2, 4, 6, 7], "can": [0, 2, 4, 5, 6, 7, 11], "cannot": 2, "capabl": [4, 8], "captur": 4, "carri": 4, "case": [1, 4, 7, 12], "center": 9, "cfd": 9, "chang": [10, 11, 12], "charact": 4, "charl": 9, "check": 4, "check_tot": 4, "choos": 4, "christoph": 9, "chur": 9, "chwalowski": 9, "class": [0, 1, 2, 3, 4, 6, 7], "client": 4, "cluster": 4, "code": [0, 3, 8], "collabor": 8, "color": 4, "combin": [4, 9], "come": [1, 5], "comm": [0, 1, 2, 4], "command": 4, "commun": [0, 1, 2, 4], "complement": 9, "complet": 4, "complic": 0, "compon": [0, 2, 3, 5, 7, 8, 9, 10, 11, 12], "component_nam": 4, "comput": [0, 2, 4, 5, 9, 10, 11, 12], "compute_jacvec_product": 4, "compute_parti": 4, "compute_prim": 4, "compute_tot": 4, "concept": 9, "condit": [2, 7], "confer": 9, "configur": [4, 5, 6, 7, 9], "congress": 9, "conjug": 9, "connect": [0, 1, 2, 5], "consist": 2, "constant": 4, "constrain": 9, "constraint": [4, 5, 9, 12], "constructor": 0, "consum": 0, "contain": [0, 1, 2, 4], "continu": 4, "control": 4, "convect": 3, "convent": 8, "coordin": [0, 1, 2, 3, 5, 11], "coordinates_deform": 3, "coordinates_initi": 3, "coordinates_input": 3, "coordinates_output": 3, "copi": 3, "correspond": 0, "costli": 4, "could": 2, "council": 9, "coupl": [0, 1, 3, 5, 6, 8, 9, 10, 11, 12], "coupling_group_typ": 11, "coupling_linear_solv": 2, "coupling_nonlinear_solv": 2, "couplinggroup": [0, 2, 5, 6, 7], "cover": 2, "creat": [0, 1, 2], "creation": 0, "crovato": 9, "cruis": [1, 2], "csc": [10, 11, 12], "curtain": 5, "custom": [1, 7], "cycl": [10, 11, 12], "d": 9, "data": [1, 4, 5], "dean": 9, "declar": [3, 4, 7], "decomposit": 1, "deepblu": 9, "def": [1, 3], "default": [2, 4, 6, 7], "defin": [0, 1, 3, 4, 7], "deform": 3, "deg": [1, 3], "degre": [0, 11], "demonstr": 4, "dens": [10, 11, 12], "depend": [4, 10, 11, 12], "deriv": [2, 4, 10, 11, 12], "derivs_method": [4, 10, 11, 12], "describ": 8, "descript": [3, 4, 8, 10, 11, 12], "design": [0, 1, 2, 4, 5, 9], "design_count": 4, "desir": 4, "detail": [2, 8], "detect": 4, "determin": [2, 4, 10, 11, 12], "develop": [0, 7], "dhulipalla": 9, "dict": 4, "dictat": 1, "dictionari": 4, "diego": 9, "differ": [2, 3, 4, 5], "difficult": 4, "dimension": [4, 9], "dimitriadi": 9, "directli": [2, 6, 7], "directori": [4, 10, 11, 12], "disciplin": [1, 5], "disciplinari": 1, "discret": 4, "discrete_input": 4, "discrete_output": 4, "displac": [2, 3], "displai": 4, "distribut": [3, 4, 9], "dlm": 11, "do": [4, 7], "doe": 8, "doi": 9, "domain": [0, 9], "done": [1, 2, 4, 6], "drag": 2, "due": 3, "dump": 4, "dump_json": 4, "dump_separate_json": 4, "duraisami": 9, "dure": 6, "dv": [1, 4], "dynam": [3, 9], "dynamic_pressur": 3, "e": [4, 9], "each": [0, 1, 2, 4, 7, 8, 11], "eas": 8, "easier": [3, 4], "easili": 3, "edu": 9, "effect": 9, "either": 4, "electr": 9, "element": 11, "eleventh": 9, "els": 7, "empti": [10, 11, 12], "encod": 4, "end": 7, "engin": 9, "enhanc": 9, "enough": 4, "enough_time_is_remain": 4, "entri": 4, "environ": 4, "equal": 2, "esim": 4, "estim": 4, "estimated_model_tim": 4, "etc": [0, 1], "evalu": [2, 4], "even": 4, "exampl": [0, 2, 11, 12], "exce": 4, "except": 4, "exchang": 9, "execut": [10, 11, 12], "expir": 4, "explicit": 4, "extend": 8, "extens": [2, 8], "extern": 1, "extra": 2, "f_aero": 3, "f_aero0": 3, "facilit": 4, "factor": 4, "fals": [4, 10, 11, 12], "fast": 9, "faster": 4, "fd": [4, 10, 11, 12], "fidel": [4, 8, 9], "file": [3, 4], "filenam": 4, "fin": 9, "find": 4, "fl": 9, "flexibl": 11, "flight": 2, "float": 4, "flow": 3, "flowcondit": 3, "fluid": [9, 11], "flutter": [9, 11], "follow": [2, 4, 8], "forc": [3, 4, 11], "forum": 9, "forward": 4, "four": 5, "free": 7, "freedom": [0, 11], "frequenc": 9, "from": [1, 2, 3, 4, 5, 6, 7, 11, 12], "full": [4, 9, 11], "full_coupl": 11, "fulli": 1, "function": [1, 2, 4, 11], "functor": 4, "further": 5, "g": 4, "garo": 9, "gauss": [2, 6, 7], "gener": [4, 8, 12], "geodisp": 11, "geometr": 9, "geometri": [1, 2, 3, 10, 11, 12], "get": 7, "get_coupling_group_subsystem": [0, 7, 11], "get_mesh_coordinate_subsystem": [0, 1], "get_ndof": [0, 11], "get_number_of_nod": 0, "get_om_group_function_point": 4, "get_post_coupling_subsystem": 0, "get_pre_coupling_subsystem": 0, "get_tagged_indic": 0, "getmodel": 4, "give": 4, "given": [0, 2, 4, 8, 11], "gradient": [4, 9], "graem": 9, "grai": 9, "graph": [10, 11, 12], "greater": 2, "grid": 0, "grid_id": 0, "grigorio": 9, "group": [0, 1, 4, 6, 8, 10, 11, 12], "guidanc": 2, "guidelin": 8, "h": 9, "ha": [0, 2, 4, 8], "haiyang": 9, "hajdik": 9, "hand": 4, "handl": [0, 1, 9], "hannah": 9, "have": [1, 2, 4, 6, 7], "he": 9, "heat": [3, 9], "heat_flow": 3, "heatflow": 3, "helen": 9, "help": [2, 3, 7], "helper": 0, "heyecan": 9, "hicken": 9, "hierarch": 2, "hierarchi": 8, "high": [4, 8, 9], "higher": 2, "highest": 2, "hold": 2, "how": [2, 4, 8], "howev": [4, 8], "hpc": 4, "html": 4, "http": 9, "hu": 9, "hui": 9, "i": [0, 1, 2, 3, 4, 6, 7, 8, 10, 11, 12], "iccfd": 9, "iccfd11": 9, "iccfd11_pap": 9, "id": 0, "ignor": 4, "ignore_runtime_warn": 4, "ignore_setup_warn": 4, "ijheatmasstransf": 9, "implement": [0, 4, 6, 7, 11], "implicit": [10, 11, 12], "implicitcompon": 3, "import": [1, 3, 6], "in_multipointparallel": [2, 7], "includ": [3, 4, 7, 9, 11], "inclus": 9, "indepvarcomp": 1, "index": 8, "inform": 4, "ingest": 9, "inherit": [4, 6], "initi": [0, 1, 2, 3, 4], "inner": 4, "input": [0, 1, 2, 4, 5, 7], "input_nam": [4, 5], "insid": [0, 4, 10, 11, 12], "instanc": [0, 4, 6], "instanti": [0, 1, 2, 4, 7], "institut": 9, "int": [0, 4], "integ": 0, "integr": 0, "intend": 1, "interact": [6, 11], "interchang": 3, "interfac": [0, 3, 8], "intern": 9, "interpol": 2, "involv": 4, "isol": 4, "iter": 7, "its": [1, 8], "j": 9, "jac": 4, "jacobian": [4, 10, 11, 12], "jacobson": 9, "jame": 9, "januari": 9, "jason": 9, "jax": [4, 10, 11, 12], "jig": [3, 9, 11], "jit": 4, "joaquim": 9, "job": 4, "josh": 9, "joshua": 9, "journal": 9, "json": 4, "juli": 9, "june": 9, "justin": 9, "k": [4, 9], "k4": 4, "kaiyoom": 9, "karthik": 9, "keep": 4, "kei": 4, "kennedi": 9, "kevin": 9, "keyword": 4, "know": 11, "known": 0, "koyuncuoglu": 9, "kwarg": [2, 4, 6, 7], "l": 9, "lamkin": 9, "langlei": 9, "larg": [0, 8], "launch": 4, "launcher": 4, "layer": 9, "ldxfer": 11, "ldxfer_build": 11, "least": 7, "level": [2, 4, 5], "lib": 9, "librari": [1, 2], "lift": [2, 9], "like": [2, 4, 5, 7], "limit": 11, "linear": [1, 2, 4, 6, 7, 9, 10, 11, 12], "linearblockg": 11, "linearrunonc": [10, 12], "linearsolv": 2, "linux": 4, "list": [0, 4], "load": [2, 3, 4, 12], "local": [3, 4], "locat": 0, "login": 4, "long": 3, "look": 4, "loop": [4, 11], "lower": 2, "lupp": 9, "m": 9, "mach": 3, "mach_numb": 3, "mader": 9, "mai": [0, 1, 4], "main": 7, "make": [3, 4, 7], "malhar": 9, "manag": 4, "mani": 4, "manipul": 1, "manual": [4, 5], "martin": 9, "mass": 9, "massiv": 4, "max": 4, "maximum": 4, "mean": 4, "mechan": 6, "mesh": [0, 1, 2, 3, 5, 11], "method": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12], "michigan": 9, "mix": 9, "mobil": 9, "mode": 7, "model": [0, 4, 8, 9], "modul": [2, 8, 11], "modular": 8, "monitor": 4, "more": [3, 4, 8], "most": [0, 1, 7], "motor": 9, "mphy": [0, 2, 3, 4, 5, 6, 7, 10, 11, 12], "mphys_": [4, 7], "mphys_add_post_coupling_subsystem": 7, "mphys_add_post_subsystem": 7, "mphys_add_pre_coupling_subsystem": 7, "mphys_add_scenario": [1, 2], "mphys_add_subsystem": [6, 7], "mphys_coordin": [3, 5], "mphys_coupl": [3, 5], "mphys_input": [3, 5], "mphys_result": 5, "mphys_serv": 4, "mphysgroup": [2, 8], "mphysvari": [1, 3], "mphyszeromqserv": 4, "mphyszeromqservermanag": 4, "mpi": [0, 1, 2], "mpi_proc_alloc": 2, "much": 4, "multi": 9, "multidisciplinari": [8, 9], "multiphys": [0, 2, 3, 7], "multipl": [0, 4], "multipli": 4, "multipoint": [1, 4, 7, 9], "multipointparallel": [1, 4, 10, 11, 12], "must": [2, 4, 7, 11], "my_aero_cod": 1, "mymphysmodel": 1, "n": [4, 10, 11, 12], "n2": 4, "n2_inner_analysis_": 4, "naca0012": 1, "nacel": 9, "name": [0, 2, 4, 6, 7, 8], "nasa": [4, 9], "nathan": 9, "ndof": 0, "necessari": [4, 7, 8], "need": [0, 1, 2, 5, 6, 7, 10, 11, 12], "nest": [3, 4], "network": 4, "new": [2, 4, 6, 8], "next": 4, "node": [0, 4, 11], "nohup": 4, "noncoupl": 3, "none": [0, 2, 4, 7, 10, 11, 12], "nonlinear": [1, 2, 4, 6, 7, 9], "nonlinearblockg": 11, "nonlinearrunonc": [10, 12], "nonlinearsolv": 2, "normal": 4, "note": 4, "nth": 4, "number": [0, 2, 3, 4], "number_of_nod": 0, "oas_tacs_w": 1, "object": [0, 2, 4, 5], "occur": 2, "often": 3, "om": [1, 3], "one": [4, 7], "ongo": 9, "onli": [4, 5, 10, 12], "open": [1, 4], "openmdao": [0, 1, 2, 3, 4, 6, 8], "oper": [4, 7], "optim": [2, 4, 9], "option": [2, 7, 8], "order": [0, 8, 10, 11, 12], "org": 9, "orlando": 9, "other": [2, 4, 5, 7], "otherwis": [4, 7], "out": 4, "outer": 4, "output": [0, 1, 4, 5, 11], "output_nam": 4, "outsid": [2, 5], "over": 9, "overarch": 4, "overrid": 4, "overwritten": 2, "own": 1, "p": 9, "pacini": 9, "packag": [4, 8, 9], "page": 8, "panel": [1, 4], "paper": 8, "parallel": [1, 2, 4, 8], "parallelgroup": 2, "paramet": [0, 2, 4, 7], "parent": [6, 7], "part": 4, "partial": 4, "particular": [2, 3, 4, 5, 7], "path": [10, 11, 12], "pathnam": 4, "pattern": [1, 7], "pawel": 9, "pb": 4, "pbs4py": 4, "pdf": 9, "pedro": 9, "perform": [2, 4, 7], "phase": [6, 7], "phd": 9, "philip": 9, "physic": [2, 3, 4, 8, 11], "ping": 9, "plate": 9, "pleas": 3, "pod": 9, "point": [4, 7], "pointer": 4, "popul": 2, "port": 4, "possibl": 3, "post": [0, 7, 10, 11, 12], "post_coupl": 2, "post_coupling_ord": 11, "potenti": [2, 9], "prado": 9, "prajapati": 9, "pre": [10, 11, 12], "pre_coupl": 2, "pre_coupling_ord": 11, "precoupl": 0, "predict": 9, "prefer": 3, "preliminari": 9, "pressur": 3, "previou": 4, "primal": 2, "primari": [2, 11], "principl": 11, "prior": 4, "problem": [0, 1, 2, 3, 4, 7, 8, 11], "process": [1, 4], "project": 11, "promot": [1, 2, 6, 7, 8], "promotes_input": 7, "promotes_output": 7, "propag": 2, "propel": 9, "proper": 2, "propuls": 9, "propulsor": 9, "provid": [1, 2, 3, 4, 8], "purpos": [4, 6], "py": 4, "python": 4, "queue": 4, "r": 9, "rad": 3, "ran": 9, "rang": 4, "rank": [2, 4], "rather": 6, "read": 4, "reboot": 4, "reboot_only_on_function_cal": 4, "receiv": 4, "reduc": 0, "refer": [2, 3], "rel": 1, "relaunch": 4, "relev": [0, 4], "reliabl": 9, "remain": 4, "remot": 8, "remote_compon": 4, "remotecomp": 4, "reorder": [10, 11, 12], "repeat": 1, "repeatedli": 3, "replac": 4, "replic": 4, "repres": [2, 5, 7], "request": 4, "requir": [2, 3, 4, 7, 8, 10, 12], "rerun": 4, "rerun_initial_design": 4, "research": [8, 9], "respons": 4, "restart": 4, "result": [4, 5], "result_nam": 5, "return": [0, 11], "reynold": 3, "reynolds_numb": 3, "robust": 9, "romain": 9, "rotat": 11, "run": [4, 7], "run_directori": [4, 10, 11, 12], "run_root_onli": 4, "run_server_filenam": 4, "runtim": 4, "saja": 9, "same": [3, 4], "sampl": 9, "san": 9, "sauer": 9, "save": 4, "scale": 4, "scenario": [0, 1, 4, 5, 6], "scenario_nam": [0, 1, 5], "scenarioaerodynam": [1, 10], "scenarioaerostructur": 11, "scenariostructur": 12, "scheme": [0, 1, 2], "scienc": 9, "scitech": 9, "screen": 4, "script": 4, "search": [4, 8], "second": 4, "see": 2, "seek": 1, "seidel": [2, 6, 7], "select": 5, "self": [1, 2, 3, 7], "send": 4, "sensit": 2, "sent": 4, "separ": 4, "septemb": 9, "sequenti": 2, "serial": 4, "serv": 4, "server": 4, "server_manag": 4, "server_numb": 4, "servermanag": 4, "set": [0, 2, 3, 4, 6, 7, 8, 10, 11, 12], "setup": [1, 2, 3, 4, 6], "sever": 4, "shape": [3, 9, 11], "share": [3, 5], "shell": 11, "shorten": 4, "should": [0, 1, 2, 4, 6, 7], "side": [3, 4], "simpl": 1, "simultan": 2, "sinc": 1, "situat": 4, "skip": [1, 11], "slice": 11, "slower": 4, "slowest": 4, "so": [2, 4], "socket": 4, "softwar": 1, "solut": 4, "solv": [2, 3, 8], "solver": [0, 1, 2, 3, 6, 7, 8, 9], "some": [4, 6], "somewhat": 4, "sonic": 2, "sourc": [0, 1, 2, 4, 5, 6, 7], "specif": [2, 7], "specifi": 4, "ssh": 4, "standard": [2, 6, 8], "stanford": 9, "starc": 9, "start": 4, "start_serv": 4, "starup": 4, "state": [3, 4, 5, 11], "static": [3, 11, 12], "statu": 4, "step": [1, 2], "still": 6, "stop": 4, "stop_serv": 4, "store": 4, "str": [0, 2, 4, 7, 10, 11, 12], "straightforward": 8, "streamlin": 4, "stress": 12, "string": [0, 10, 11, 12], "strive": 8, "struct": 11, "struct_build": [11, 12], "structur": [2, 3, 8, 9], "studi": 9, "sub": 4, "subclass": [0, 2, 6, 7], "submiss": 4, "subsystem": [0, 1, 2, 4, 5, 6, 7, 10, 11, 12], "suitabl": 7, "super": [6, 7], "superson": [1, 4], "support": 4, "sure": 6, "surfac": [1, 3, 9, 11], "surrog": 9, "swap": 3, "system": [7, 9], "systemerror": 4, "tabl": 3, "tag": [0, 1, 2, 3, 6, 7, 8], "take": 4, "technologi": 8, "temperatur": 3, "templat": 0, "terrapon": 9, "than": [2, 4, 6], "thei": [5, 8], "thelen": 9, "them": 7, "thermal": 3, "thesi": 9, "thi": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12], "three": 4, "through": 4, "thu": 4, "ti": 11, "tiltw": 9, "time": [0, 4, 7], "time_estimate_buff": 4, "time_estimate_multipli": 4, "titl": 4, "togeth": 11, "tool": 1, "top": [2, 4], "toward": 9, "track": 4, "transfer": [0, 1, 2, 8, 9], "translat": 11, "transon": 9, "tree": 4, "trigger": 4, "true": [2, 3, 4, 10, 11, 12], "tupl": [7, 11], "turbofan": 9, "two": [2, 4], "type": [2, 4, 5, 7, 8, 10, 11, 12], "typic": [1, 2, 11], "u_aero": 3, "u_aero0": 3, "uav": 9, "ugrid": 1, "umich": 9, "undeform": 11, "understand": [6, 9], "unexpectedli": 4, "unit": [1, 3], "univers": 9, "unlik": 2, "unscal": 4, "until": 1, "up": [3, 8], "upon": 4, "urban": 9, "url": 9, "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12], "usag": [1, 8], "use_aitken": 11, "use_derivative_color": 4, "use_jit": 4, "user": [0, 2, 5, 7], "val": 1, "valid": 9, "valu": [4, 10, 11, 12], "var": 4, "var_naming_dot_replac": 4, "variabl": [1, 2, 4, 5, 7, 8, 9], "variable_nam": 1, "vector": [3, 4, 11], "vehicl": 9, "veri": [4, 8], "version": 2, "via": 4, "vincent": 9, "virtual": 11, "wa": 4, "wall": 4, "wall_tim": 4, "warn": 4, "warner": 9, "we": 4, "well": 4, "what": 4, "when": [0, 3, 4], "where": [4, 11], "whether": 4, "which": [2, 4, 10, 11, 12], "while": [3, 4, 6, 8], "wing": 9, "wish": [0, 5], "within": [1, 2, 4], "without": 4, "work": [8, 11], "would": [2, 4, 12], "wrap": 4, "write": 4, "written": 4, "wrt": 4, "wuki": 9, "www": 9, "x": 9, "x_aero0": 3, "xfer": 0, "yaw": 3, "yaw_angl": 3, "yildirim": 9, "yildirm": 9, "you": [1, 5, 6, 7], "your": [1, 4, 6, 7], "zeromq": 4, "zmq_pb": 4}, "titles": ["Builders", "Assembling an MPhys Model", "Model Hierarchy", "Variable Naming Conventions", "Remote Components", "Tagged Promotion", "The MPhysGroup", "Extending the Scenario Library", "Documentation for MPhys", "Papers Using MPhys", "Aerodynamic Scenario", "Aerostructural Scenario", "Structural Scenario"], "titleterms": {"The": 6, "aerodynam": 10, "aerostructur": 11, "an": 1, "assembl": 1, "basic": [8, 10, 11, 12], "builder": [0, 11], "compon": 4, "connect": 6, "convent": 3, "coupl": [2, 7], "current": 4, "default": [10, 11, 12], "develop": 8, "disciplin": 8, "displac": 11, "document": 8, "exampl": [1, 4], "extend": 7, "geometry_build": [10, 11, 12], "group": [2, 7], "guid": 8, "hierarchi": 2, "in_multipointparallel": [10, 11, 12], "indic": 8, "initi": 7, "librari": [7, 8], "limit": 4, "load": 11, "manual": 6, "model": [1, 2], "mphy": [1, 8, 9], "mphysgroup": 6, "multiphys": 8, "multipoint": 2, "multipointparallel": 2, "n2": [10, 11, 12], "name": 3, "option": [4, 10, 11, 12], "paper": 9, "promot": 5, "refer": 8, "remot": 4, "remotezeromqcomp": 4, "requir": 11, "scenario": [2, 7, 8, 10, 11, 12], "setup": 7, "singl": 8, "solver": [10, 11, 12], "structur": [11, 12], "tabl": 8, "tag": 5, "transfer": 11, "troubleshoot": 4, "us": 9, "usag": 4, "variabl": [3, 6]}})
\ No newline at end of file