Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ref axis #413

Merged
merged 6 commits into from
Jul 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/oas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ jobs:
# we need OpenVSP to run vsp tests.
- name: Install OpenVSP
run: |
sudo apt-get update
export PYTHON_INCLUDE_DIR=$(python -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")
export PYTHON_LIBRARY=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('LIBDIR'))")
export INST_PREFIX=$(python -c "import distutils.sysconfig as sysconfig; print(sysconfig.get_config_var('prefix'))")
Expand Down
2 changes: 1 addition & 1 deletion openaerostruct/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "2.6.2"
__version__ = "2.7.0"
4 changes: 2 additions & 2 deletions openaerostruct/docs/user_reference/mesh_surface_dict.rst
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,10 @@ The surface dict will be provided to Groups, including ``Geometry``, ``AeroPoint
- np.array([0.1, 5])
- m
- B-spline control points for chord distribution. Array convention is the same than ``twist_cp``.
* - chord_scaling_pos
* - ref_axis_pos
- 0.25
-
- Chord position at which the chord scaling factor is applied. 1 is the trailing edge, 0 is the leading edge.
- Position of reference axis along the chord about which to apply twist, chord, taper, and span geometry transformations. 1 is the trailing edge, 0 is the leading edge.

.. list-table:: Aerodynamics definitions
:widths: 20 20 5 55
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def setup(self):
"S_ref_type": "wetted", # how we compute the wing area,
# can be 'wetted' or 'projected'
"twist_cp": np.zeros(3), # Define twist using 3 B-spline cp's
"ref_axis_pos": 0.25, # Define the reference axis position. 0 is the leading edge, 1 is the trailing edge.
# Aerodynamic performance of the lifting surface at
# an angle of attack of 0 (alpha=0).
# These CL0 and CD0 values are added to the CL and CD
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def setup(self):
"S_ref_type": "wetted", # how we compute the wing area,
# can be 'wetted' or 'projected'
"twist_cp": np.zeros(3), # Define twist using 3 B-spline cp's
"ref_axis_pos": 0.25, # Define the reference axis position. 0 is the leading edge, 1 is the trailing edge.
# Aerodynamic performance of the lifting surface at
# an angle of attack of 0 (alpha=0).
# These CL0 and CD0 values are added to the CL and CD
Expand Down
2 changes: 1 addition & 1 deletion openaerostruct/examples/rectangular_wing/opt_chord.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"S_ref_type": "projected", # how we compute the wing area,
# can be 'wetted' or 'projected'
"chord_cp": np.ones(3), # Define chord using 3 B-spline cp's
"chord_scaling_pos": 0.25, # Define the chord scaling position. 0 is the leading edge, 1 is the trailing edge.
"ref_axis_pos": 0.25, # Define the reference axis position. 0 is the leading edge, 1 is the trailing edge.
# distributed along span
"mesh": mesh,
# Aerodynamic performance of the lifting surface at
Expand Down
1 change: 1 addition & 0 deletions openaerostruct/examples/rectangular_wing/opt_twist.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
"S_ref_type": "projected", # how we compute the wing area,
# can be 'wetted' or 'projected'
"twist_cp": np.zeros(3), # Define twist using 3 B-spline cp's
"ref_axis_pos": 0.25, # Define the reference axis position. 0 is the leading edge, 1 is the trailing edge.
# distributed along span
"mesh": mesh,
# Aerodynamic performance of the lifting surface at
Expand Down
29 changes: 15 additions & 14 deletions openaerostruct/geometry/geometry_mesh.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
ShearZ,
Rotate,
)
import warnings


class GeometryMesh(om.Group):
Expand Down Expand Up @@ -55,6 +54,11 @@ def initialize(self):
def setup(self):
surface = self.options["surface"]

if "ref_axis_pos" in surface:
ref_axis_pos = surface["ref_axis_pos"]
else:
ref_axis_pos = 0.25 # if no reference axis line is specified : it is the quarter-chord

mesh = surface["mesh"]
ny = mesh.shape[1]
mesh_shape = mesh.shape
Expand All @@ -73,26 +77,21 @@ def setup(self):
val = 1.0
promotes = []

self.add_subsystem("taper", Taper(val=val, mesh=mesh, symmetry=symmetry), promotes_inputs=promotes)
self.add_subsystem(
"taper", Taper(val=val, mesh=mesh, symmetry=symmetry, ref_axis_pos=ref_axis_pos), promotes_inputs=promotes
)

# 2. Scale X

val = np.ones(ny)
chord_scaling_pos = 0.25 # if no scaling position is specified : chord scaling w.r.t quarter of chord
if "chord_cp" in surface:
promotes = ["chord"]
if "chord_scaling_pos" in surface:
chord_scaling_pos = surface["chord_scaling_pos"]
else:
if "chord_scaling_pos" in surface:
warnings.warn(
"Chord_scaling_pos has been specified but no chord design variable available", stacklevel=2
)
promotes = []

self.add_subsystem(
"scale_x",
ScaleX(val=val, mesh_shape=mesh_shape, chord_scaling_pos=chord_scaling_pos),
ScaleX(val=val, mesh_shape=mesh_shape, ref_axis_pos=ref_axis_pos),
promotes_inputs=promotes,
)

Expand Down Expand Up @@ -124,15 +123,17 @@ def setup(self):
val = surface["span"]
else:
# Compute span. We need .real to make span to avoid OpenMDAO warnings.
quarter_chord = 0.25 * mesh[-1, :, :] + 0.75 * mesh[0, :, :]
span = max(quarter_chord[:, 1]).real - min(quarter_chord[:, 1]).real
ref_axis = ref_axis_pos * mesh[-1, :, :] + (1 - ref_axis_pos) * mesh[0, :, :]
span = max(ref_axis[:, 1]).real - min(ref_axis[:, 1]).real
if symmetry:
span *= 2.0
val = span
promotes = []

self.add_subsystem(
"stretch", Stretch(val=val, mesh_shape=mesh_shape, symmetry=symmetry), promotes_inputs=promotes
"stretch",
Stretch(val=val, mesh_shape=mesh_shape, symmetry=symmetry, ref_axis_pos=ref_axis_pos),
promotes_inputs=promotes,
)

# 6. Shear Y
Expand Down Expand Up @@ -179,7 +180,7 @@ def setup(self):

self.add_subsystem(
"rotate",
Rotate(val=val, mesh_shape=mesh_shape, symmetry=symmetry),
Rotate(val=val, mesh_shape=mesh_shape, symmetry=symmetry, ref_axis_pos=ref_axis_pos),
promotes_inputs=promotes,
promotes_outputs=["mesh"],
)
Expand Down
Loading