Skip to content

Commit 9c123a3

Browse files
authored
Make geometry spline interpolation mesh independent (#435)
* Make geometry spline interpolation mesh independent * Fix remaining interpolated values * Fix tests * flake8 fixes
1 parent 97be635 commit 9c123a3

26 files changed

Lines changed: 147 additions & 76 deletions

openaerostruct/geometry/geometry_group.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import openmdao.api as om
44
from openaerostruct.utils.check_surface_dict import check_surface_dict_keys
5+
from openaerostruct.utils.interpolation import get_normalized_span_coords
56

67

78
class Geometry(om.Group):
@@ -29,7 +30,6 @@ def setup(self):
2930

3031
# Get the surface name and create a group to contain components
3132
# only for this surface
32-
ny = surface["mesh"].shape[1]
3333

3434
if self.options["DVGeo"]:
3535
from openaerostruct.geometry.ffd_component import GeometryMesh
@@ -39,7 +39,7 @@ def setup(self):
3939
if "t_over_c_cp" in surface.keys():
4040
n_cp = len(surface["t_over_c_cp"])
4141
# Add bspline components for active bspline geometric variables.
42-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
42+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
4343
comp = self.add_subsystem(
4444
"t_over_c_bsp",
4545
om.SplineComp(
@@ -67,7 +67,7 @@ def setup(self):
6767
if "twist_cp" in surface.keys():
6868
n_cp = len(surface["twist_cp"])
6969
# Add bspline components for active bspline geometric variables.
70-
x_interp = np.linspace(0.0, 1.0, int(ny))
70+
x_interp = get_normalized_span_coords(surface)
7171
comp = self.add_subsystem(
7272
"twist_bsp",
7373
om.SplineComp(
@@ -86,7 +86,7 @@ def setup(self):
8686
if "chord_cp" in surface.keys():
8787
n_cp = len(surface["chord_cp"])
8888
# Add bspline components for active bspline geometric variables.
89-
x_interp = np.linspace(0.0, 1.0, int(ny))
89+
x_interp = get_normalized_span_coords(surface)
9090
comp = self.add_subsystem(
9191
"chord_bsp",
9292
om.SplineComp(
@@ -103,7 +103,7 @@ def setup(self):
103103
if "t_over_c_cp" in surface.keys():
104104
n_cp = len(surface["t_over_c_cp"])
105105
# Add bspline components for active bspline geometric variables.
106-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
106+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
107107
comp = self.add_subsystem(
108108
"t_over_c_bsp",
109109
om.SplineComp(
@@ -119,7 +119,7 @@ def setup(self):
119119
if "xshear_cp" in surface.keys():
120120
n_cp = len(surface["xshear_cp"])
121121
# Add bspline components for active bspline geometric variables.
122-
x_interp = np.linspace(0.0, 1.0, int(ny))
122+
x_interp = get_normalized_span_coords(surface)
123123
comp = self.add_subsystem(
124124
"xshear_bsp",
125125
om.SplineComp(
@@ -136,7 +136,7 @@ def setup(self):
136136
if "yshear_cp" in surface.keys():
137137
n_cp = len(surface["yshear_cp"])
138138
# Add bspline components for active bspline geometric variables.
139-
x_interp = np.linspace(0.0, 1.0, int(ny))
139+
x_interp = get_normalized_span_coords(surface)
140140
comp = self.add_subsystem(
141141
"yshear_bsp",
142142
om.SplineComp(
@@ -153,7 +153,7 @@ def setup(self):
153153
if "zshear_cp" in surface.keys():
154154
n_cp = len(surface["zshear_cp"])
155155
# Add bspline components for active bspline geometric variables.
156-
x_interp = np.linspace(0.0, 1.0, int(ny))
156+
x_interp = get_normalized_span_coords(surface)
157157
comp = self.add_subsystem(
158158
"zshear_bsp",
159159
om.SplineComp(

openaerostruct/structures/tube_group.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import numpy as np
21
import openmdao.api as om
32
from openaerostruct.structures.section_properties_tube import SectionPropertiesTube
43
from openaerostruct.geometry.radius_comp import RadiusComp
4+
from openaerostruct.utils.interpolation import get_normalized_span_coords
55

66

77
class TubeGroup(om.Group):
@@ -14,13 +14,11 @@ def initialize(self):
1414

1515
def setup(self):
1616
surface = self.options["surface"]
17-
mesh = surface["mesh"]
18-
ny = mesh.shape[1]
1917

2018
if "thickness_cp" in surface.keys():
2119
n_cp = len(surface["thickness_cp"])
2220
# Add bspline components for active bspline geometric variables.
23-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
21+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
2422
comp = self.add_subsystem(
2523
"thickness_bsp",
2624
om.SplineComp(
@@ -35,7 +33,7 @@ def setup(self):
3533
if "radius_cp" in surface.keys():
3634
n_cp = len(surface["radius_cp"])
3735
# Add bspline components for active bspline geometric variables.
38-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
36+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
3937
comp = self.add_subsystem(
4038
"radius_bsp",
4139
om.SplineComp(

openaerostruct/structures/wingbox_group.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import numpy as np
21
import openmdao.api as om
32
from openaerostruct.structures.section_properties_wingbox import SectionPropertiesWingbox
43
from openaerostruct.structures.wingbox_geometry import WingboxGeometry
4+
from openaerostruct.utils.interpolation import get_normalized_span_coords
55

66

77
class WingboxGroup(om.Group):
@@ -12,12 +12,11 @@ def initialize(self):
1212

1313
def setup(self):
1414
surface = self.options["surface"]
15-
ny = surface["mesh"].shape[1]
1615

1716
if "spar_thickness_cp" in surface.keys():
1817
n_cp = len(surface["spar_thickness_cp"])
1918
# Add bspline components for active bspline geometric variables.
20-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
19+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
2120
comp = self.add_subsystem(
2221
"spar_thickness_bsp",
2322
om.SplineComp(
@@ -32,7 +31,7 @@ def setup(self):
3231
if "skin_thickness_cp" in surface.keys():
3332
n_cp = len(surface["skin_thickness_cp"])
3433
# Add bspline components for active bspline geometric variables.
35-
x_interp = np.linspace(0.0, 1.0, int(ny - 1))
34+
x_interp = get_normalized_span_coords(surface, mid_panel=True)
3635
comp = self.add_subsystem(
3736
"skin_thickness_bsp",
3837
om.SplineComp(

openaerostruct/tests/test_aero_analysis_no_symmetry_wavedrag.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ def test(self):
100100

101101
prob.run_driver()
102102

103-
assert_near_equal(prob["aero_point_0.wing_perf.CL"][0], 0.464191542231, 1e-6)
104-
assert_near_equal(prob["aero_point_0.wing_perf.CD"][0], 0.020417875291205534, 1e-6)
105-
assert_near_equal(prob["aero_point_0.CM"][1], -1.859570880469676, 1e-6)
103+
assert_near_equal(prob["aero_point_0.CL"][0], 0.46419154063077483, 1e-6)
104+
assert_near_equal(prob["aero_point_0.CD"][0], 0.020863555824806052, 1e-6)
105+
assert_near_equal(prob["aero_point_0.CM"][1], -1.8595708973535592, 1e-6)
106106

107107

108108
if __name__ == "__main__":

openaerostruct/tests/test_aero_opt_wavedrag.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from openaerostruct.geometry.utils import generate_mesh
66
from openaerostruct.geometry.geometry_group import Geometry
77
from openaerostruct.aerodynamics.aero_groups import AeroPoint
8+
from openaerostruct.utils.testing import assert_opt_successful
89

910
import openmdao.api as om
1011

@@ -106,11 +107,13 @@ def test(self):
106107
# Set up the problem
107108
prob.setup()
108109

109-
prob.run_driver()
110+
optResult = prob.run_driver()
110111

111-
assert_near_equal(prob["aero_point_0.wing_perf.CL"][0], 0.5, 1e-6)
112-
assert_near_equal(prob["aero_point_0.wing_perf.CD"][0], 0.020838936785019083, 1e-6)
113-
assert_near_equal(prob["aero_point_0.CM"][1], -2.081989092575424, 1e-6)
112+
assert_opt_successful(self, optResult)
113+
114+
assert_near_equal(prob["aero_point_0.CL"][0], 0.5, 1e-6)
115+
assert_near_equal(prob["aero_point_0.CD"][0], 0.021353004050991248, 1e-6)
116+
assert_near_equal(prob["aero_point_0.CM"][1], -2.0819892547514067, 1e-6)
114117

115118

116119
if __name__ == "__main__":

openaerostruct/tests/test_aerostruct.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from openmdao.utils.assert_utils import assert_near_equal
22
import unittest
3+
from openaerostruct.utils.testing import assert_opt_successful
34

45

56
class Test(unittest.TestCase):
@@ -144,9 +145,10 @@ def test(self):
144145
# group.
145146
assert_near_equal(prob["AS_point_0.beta"], 0.0)
146147

147-
prob.run_driver()
148+
optResult = prob.run_driver()
149+
assert_opt_successful(self, optResult)
148150

149-
assert_near_equal(prob["AS_point_0.fuelburn"][0], 92369.79279575823, 1e-8)
151+
assert_near_equal(prob["AS_point_0.fuelburn"][0], 92523.945549167, 1e-8)
150152

151153

152154
if __name__ == "__main__":

openaerostruct/tests/test_aerostruct_analysis.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ def test(self):
137137

138138
prob.run_model()
139139

140-
assert_near_equal(prob["AS_point_0.fuelburn"][0], 251362.24734663023, 1e-4)
141-
assert_near_equal(prob["AS_point_0.CM"][1], -0.7033677364356814, 1e-5)
140+
assert_near_equal(prob["AS_point_0.fuelburn"][0], 263398.25938918366, 1e-4)
141+
assert_near_equal(prob["AS_point_0.CM"][1], -0.6462808405237332, 1e-5)
142142

143143

144144
if __name__ == "__main__":

openaerostruct/tests/test_aerostruct_analysis_Sref.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ def test(self):
139139

140140
prob.run_model()
141141

142-
assert_near_equal(prob["AS_point_0.CL"][0], 1.6217443031469607, 1e-6)
143-
assert_near_equal(prob["AS_point_0.CM"][1], -1.9988780195141023, 1e-5)
142+
assert_near_equal(prob["AS_point_0.CL"][0], 1.6210175228727655, 1e-6)
143+
assert_near_equal(prob["AS_point_0.CM"][1], -1.8365760768848112, 1e-5)
144144

145145

146146
if __name__ == "__main__":

openaerostruct/tests/test_aerostruct_analysis_compressible.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ def test(self):
139139

140140
prob.run_model()
141141

142-
assert_near_equal(prob["AS_point_0.fuelburn"][0], 213840.78859689648, 1e-4)
143-
assert_near_equal(prob["AS_point_0.CM"][1], -0.9866929184880228, 1e-5)
142+
assert_near_equal(prob["AS_point_0.fuelburn"][0], 224121.12881258246, 1e-4)
143+
assert_near_equal(prob["AS_point_0.CM"][1], -0.9083682371351329, 1e-5)
144144

145145

146146
if __name__ == "__main__":

openaerostruct/tests/test_aerostruct_engine_thrusts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ def test(self):
156156
print(prob["AS_point_0.fuelburn"][0])
157157
print(prob["AS_point_0.CM"][1])
158158

159-
assert_near_equal(prob["AS_point_0.fuelburn"][0], 251929.9085951508, 1e-4)
160-
assert_near_equal(prob["AS_point_0.CM"][1], -0.7008367976235399, 1e-5)
159+
assert_near_equal(prob["AS_point_0.fuelburn"][0], 263992.6780138112, 1e-4)
160+
assert_near_equal(prob["AS_point_0.CM"][1], -0.6438933659444002, 1e-5)
161161

162162

163163
if __name__ == "__main__":

0 commit comments

Comments
 (0)