Panels with a T-stiffener modeled as multi-domain assemblies#
A flat or curved panel with one T-stiffener is modeled with 2D domains for the
skin, the base and the flange of the stiffener, following Castro and Donadon
(2017) [castro2017Multidomain]. A debonding defect of length defect_a is
included at the middle of the panel, where the base is not connected to the
skin.
The connections are imposed exactly with the default
conn_method='null-space', see Exact connections with the null-space method, or with penalty
stiffnesses with conn_method='penalty'.
Linear buckling, with constant stress resultants or with the pre-buckling
stress state from a static analysis, using
tstiff2d_1stiff_compression():
def test_tstiff2d_1stiff_compression():
print('Testing assembly function: tstiff2d_1stiff_compression')
b = 1.
bb = b/5.
bf = bb/2.
ys = b/2.
assy, eigvals, eigvecs = tstiff2d_1stiff_compression(
b=b,
bb=bb,
bf=bf,
a=3.,
ys=ys,
defect_a=0.6,
rho=1.3e3,
plyt=0.125e-3,
laminaprop=(142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9),
stack_skin=[0, 45, -45, 90, -45, 45, 0],
stack_base=[0, 90, 0]*4,
stack_flange=[0, 90, 0]*8,
m=8, n=7,
mb=7, nb=6,
mf=8, nf=6,
run_static_case=False,
Nxx_skin=-1.,
Nxx_base=-1.,
Nxx_flange=-1.,
num_eigvalues=10, conn_method='penalty'
)
assert np.isclose(eigvals[0], 142.68, rtol=0.001)
assy, c, eigvals, eigvecs = tstiff2d_1stiff_compression(
b=b,
bb=bb,
bf=bf,
a=3.,
ys=ys,
defect_a=0.6,
rho=1.3e3,
plyt=0.125e-3,
laminaprop=(142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9),
stack_skin=[0, 45, -45, 90, -45, 45, 0],
stack_base=[0, 90, 0]*4,
stack_flange=[0, 90, 0]*8,
m=8, n=7,
mb=7, nb=6,
mf=8, nf=6,
run_static_case=True,
Nxx_skin=-1.,
Nxx_base=-1.,
Nxx_flange=-1.,
num_eigvalues=10, conn_method='penalty'
)
assert np.isclose(eigvals[0], 114.86, rtol=0.001)
Frequency analysis, using tstiff2d_1stiff_freq():
def test_tstiff2d_1stiff_freq():
print('Testing assembly function: tstiff2d_1stiff_freq')
b = 1.
bb = b/5.
bf = bb/2.
ys = b/2.
assy, eigvals, eigvecs = tstiff2d_1stiff_freq(
b=b,
bb=bb,
bf=bf,
a=3.,
ys=ys,
defect_a=0.1,
rho=1.3e3,
plyt=0.125e-3,
laminaprop=(142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9),
stack_skin=[0, 45, -45, 90, -45, 45, 0],
stack_base=[0, 90, 0]*4,
stack_flange=[0, 90, 0]*8,
m=6, n=7,
mb=5, nb=6,
mf=6, nf=7,
num_eigvalues=10, conn_method='penalty'
)
omegan = (-eigvals[0])**0.5
#NOTE the reference values of this module were changed in 2025 to match
# the skin-base connection 'SB' with a hard-coded penalty
# kt = 2e5, which is a N/mm**3 value and about 6e-7 of the
# penalty given by calc_kt_kr() in these SI units, so the base was
# practically disconnected from the skin. Once the default penalty
# was restored, the values of 2024 came back
assert np.isclose(omegan, 48.2733, atol=0.001, rtol=0.001)
Flutter analysis with the piston theory, using
tstiff2d_1stiff_flutter():
def test_tstiff2d_1stiff_flutter():
print('Testing assembly function: tstiff2d_1stiff_flutter')
b = 1.
bb = b/5.
bf = bb/2.
ys = b/2.
assy, eigvals, eigvecs = tstiff2d_1stiff_flutter(
b=b,
bb=bb,
bf=bf,
a=3.,
ys=ys,
defect_a=0.1,
rho=1.3e3,
plyt=0.125e-3,
laminaprop=(142.5e9, 8.7e9, 0.28, 5.1e9, 5.1e9, 5.1e9),
stack_skin=[0, 45, -45, 90, -45, 45, 0],
stack_base=[0, 90, 0]*4,
stack_flange=[0, 90, 0]*8,
m=6, n=7,
mb=5, nb=6,
mf=6, nf=7,
air_speed=2*343.,
rho_air=1.2,
Mach=2,
speed_sound=343.,
run_static_case=False,
num_eigvalues=10, conn_method='penalty'
)
omegan = (-eigvals[0])**0.5
print(eigvals)
assert np.isclose(omegan, 446.12+0.j, rtol=0.001)