An OpenMDAO process model that integrates CFD & FEM based on a common geometry model into an optimization problem
(Constructor)
The constructor instantiates the geometry manipulator as an OpenMDAO component. Several specific things have to be done after this component is instantiated but before it can be used in a process model:
(Setting Parameters and Suppression States)
Needed for requirements: Tools/Geometry/Interaction/01 and Tools/Geometry/Interaction/02
Parameters are set the same way as any other OpenMDAO input variable. For example, consider a cylinder with two parameters: radius and height. If we have a geometry manipulator called geo_manipulator, the geometry parameters can be directly set:
geo_manipulator.radius = 5
geo_manipulator.height = 15
More often, the geometry’s parameters will be set as part of an optimization problem, so they can be declared as design variables when an optimizer is added to a model.
# CONMIN Design Variables
self.driver.add_parameters([('geo_manipulator.radius', 3.0, 12.),
('geo_manipulator.height', 6.5, 25.)])
Here, self is the top level assembly that contains an optimizer, the geometry manipulator, and some kind of process model such as the one pictured above.
The suppression of features (suppression states) can also be treated the same way at the component level. Here, the Boolean variable fillet1 is set to False to suppress the feature fillet1.
geo_manipulator.fillet1 = False
Regenerates model if any parameter or suppression state changes. Raises an exception if this process breaks associativity or causes incomplete regeneration of the model.
Note that if no parameters or suppression states change, there is no reason to regenerate the geometry or to invalidate any reference to this geometry object, which would trigger the execution of any components that depend on it (meshers, etc.)
Note also that if the geometry is capable of providing analytical sensitivities to the parameters, then these would be calculated here.
tag_volume(volume_label, tag_name, tag_description)
tag_face(face_label, tag_name, tag_description)
tag_edge(edge_label, tag_name, tag_description)
tag_node(node_label, tag_name, tag_description)
Needed for the requirement: Tools/Geometry/Interaction/07
Associates a geometric entity with some metadata. This is useful for marking an entity for later use by an analysis tool (e.g., marking loads and boundary conditions.) The most straightforward way to implement the tags’ storage would be to create each tag as an OpenMDAO variable, accessed via its tag_name.
At a lower level, the geometry manipulation component needs a set of functions to interact with the geometry object, making the above interface possible at the OpenMDAO level. These functions are used in the geometry manipulator and will not commonly be seen or used by users who build or run models.
OpenMDAO provides query access to the geometry object at the Python component level.
Needed for requirement: Tools/Geometry/Interaction/07
Geometry access for query includes entity query and evaluation, traversal of topology, and tag query.
The following functions comprise traversal of the Boundary Representation topology.
Needed for requirement: Tools/Geometry/Grid Generation/01
Needed for all requirements in: Tools/Geometry/Interaction/08
Needed for requirements in: Tools/Geometry/Interaction/10
While not spelled out directly in the requirements, it is often useful to have the capability to generate a watertight descretized representation of the geometry for performing sanity checks.
[Needs Functions]
An OpenMDAO process model that shows how multiple geometry manipulators are used to provide derived geometries based on the original geometry