Skip to content

Commit

Permalink
Squashed commit of the following:
Browse files Browse the repository at this point in the history
commit bdd0e62
Author: Alasdair Gray <[email protected]>
Date:   Thu Jun 1 18:07:13 2023 -0400

    Squashed commit of the following:

    commit 6692030
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 17:25:13 2023 -0400

        Update beam constitutive model test tolerances

    commit 05b6065
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 17:14:50 2023 -0400

        Turn off printing for composite shell test

    commit 782eca6
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 16:49:44 2023 -0400

        Make `TacsAssertAllClose` more readable

    commit a558e6e
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 16:49:25 2023 -0400

        Tighten tolerances even more

    commit a769c19
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 16:49:07 2023 -0400

        Fix incorrect ordering of tolerances in composite shell test

    commit eedd376
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 15:55:49 2023 -0400

        `black .`

    commit 95c48b6
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 15:53:42 2023 -0400

        Tighten tolerances more

    commit c8db3e5
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 15:19:02 2023 -0400

        Remove comments about not using `atol`

    commit 5ec5c50
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 14:30:37 2023 -0400

        Tighten tolerances for constitutive tests

    commit a83d610
    Author: Alasdair Gray <[email protected]>
    Date:   Wed May 31 21:40:17 2023 -0400

        Switch to `TacsAssertAllClose` for all constitutive tests

    commit eaf712c
    Author: Alasdair Gray <[email protected]>
    Date:   Wed May 31 21:34:18 2023 -0400

        Add abs error printout to `TacsPrintErrorComponents`

    commit 90b1a72
    Author: Alasdair Gray <[email protected]>
    Date:   Wed May 31 21:34:01 2023 -0400

        Fix `TacsAssertAllClose`

    commit e6f3650
    Author: Alasdair Gray <[email protected]>
    Date:   Wed May 31 21:33:36 2023 -0400

        Switch to `TacsAssertAllClose` for failure criteria sens tests

    commit 44b10ae
    Author: Alasdair Gray <[email protected]>
    Date:   Wed May 31 20:00:05 2023 -0400

        Add implementation of `assert_allclose`

    commit 7da4b86
    Merge: cc3d9f3 12ef9e0
    Author: Alasdair Gray <[email protected]>
    Date:   Thu Jun 1 15:04:59 2023 -0400

        Merge branch 'master' of https://github.com/smdogroup/tacs

    commit 12ef9e0
    Author: Tim Brooks <[email protected]>
    Date:   Tue May 30 13:57:48 2023 -0400

        Fixing issue with mpi4py build requirement on Python 3.11 (smdogroup#215)

commit 4294b25
Author: Alasdair Gray <[email protected]>
Date:   Thu Jun 1 14:30:37 2023 -0400

    Tighten tolerances for constitutive tests

commit 98cc6e4
Author: Alasdair Gray <[email protected]>
Date:   Thu Jun 1 14:29:45 2023 -0400

    Fix some more initialization bugs

commit 8825cf0
Author: Alasdair Gray <[email protected]>
Date:   Thu Jun 1 12:06:37 2023 -0400

    Fix some array initialization bugs

commit 348bce1
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 21:40:17 2023 -0400

    Switch to `TacsAssertAllClose` for all constitutive tests

commit 1096769
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 21:34:18 2023 -0400

    Add abs error printout to `TacsPrintErrorComponents`

commit 4d9df68
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 21:34:01 2023 -0400

    Fix `TacsAssertAllClose`

commit 8c095e2
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 21:33:36 2023 -0400

    Switch to `TacsAssertAllClose` for failure criteria sens tests

commit ba60333
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 20:00:05 2023 -0400

    Add implementation of `assert_allclose`

commit 8bd9ce1
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 19:58:56 2023 -0400

    Fix bug in rectangular beam Von Mises sens

commit 18f9a98
Author: Alasdair Gray <[email protected]>
Date:   Wed May 31 14:29:11 2023 -0400

    Make FD step smaller to fix failure sens failures

commit d7cbe8f
Author: Alasdair Gray <[email protected]>
Date:   Mon May 22 10:56:05 2023 -0400

    Add numba to conda dependencies

commit ba5bbc3
Author: Alasdair Gray <[email protected]>
Date:   Mon May 22 10:54:46 2023 -0400

    Correct docstring for `createPanelLengthConstraint`

commit fa7c3f6
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 15:56:46 2023 -0400

    `black .`

commit e23577c
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 15:39:12 2023 -0400

    Add numba dependency

commit 82557fa
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 14:51:31 2023 -0400

    Remove defunct bladeFSDT code

commit 62721ba
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 14:50:30 2023 -0400

    Improve the blade stiffened shell docstring

commit b5a0ad8
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 14:22:23 2023 -0400

    Minor fix

commit 67cb519
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 14:10:25 2023 -0400

    Add `createPanelLengthConstraint` to pytacs

commit 69dbcbb
Merge: 9c20101 1760b99
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 14:04:26 2023 -0400

    Merge remote-tracking branch 'origin/TsaiWuMod' into bladeStiffenedShell

commit 9c20101
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 13:59:52 2023 -0400

    Add panel length constraint class

commit 227a45c
Merge: a49fbf4 a74d677
Author: A-Gray-94 <[email protected]>
Date:   Fri May 19 13:57:54 2023 -0400

    Merge remote-tracking branch 'origin/master' into bladeStiffenedShell

commit a49fbf4
Author: Alasdair Gray <[email protected]>
Date:   Wed Apr 26 13:30:33 2023 -0400

    Increase number of extra output quantities available for shell elements so we can write out all the BladeStiffenedShell DVs

commit a74d677
Author: Tim Brooks <[email protected]>
Date:   Wed May 17 12:05:30 2023 -0400

    pyTACS docstring cleanup (smdogroup#210)

    * Cleaning up pytacs docstrings

    * Adding scipy cross reference to docs

    * Minor batter doc edit

commit 1760b99
Author: Alasdair Gray <[email protected]>
Date:   Mon May 15 18:11:32 2023 -0400

    Add back old Tsai-Wu failure index, add method to switch between the two forms

commit d536ca5
Author: Brian Burke <[email protected]>
Date:   Mon May 15 11:48:06 2023 -0400

    Add method to get output parameters from ESP/CAPS through tacsAIM (smdogroup#209)

    * Add method to get output parameters

    Adds a method to the tacsAIM that enables the retrieval of output parameters from a csm script through caps2tacs.

    * Update tacs_aim.py

    * Update tacs_aim.py

commit 5fa6dc4
Author: Tim Brooks <[email protected]>
Date:   Mon May 8 18:01:21 2023 -0400

    Bump to 3.3.0 (smdogroup#206)

commit 09a9c8f
Author: Tim Brooks <[email protected]>
Date:   Mon May 8 18:00:45 2023 -0400

    Minor docstring update (smdogroup#208)

    * Minor docstring update

    * More docstring updates

    * More docstring updates, round 2

    * More docstring updates, round 3

commit 7285ad3
Author: Tim Brooks <[email protected]>
Date:   Tue May 2 20:25:26 2023 -0400

    Adding constraint classes to pyTACS (smdogroup#202)

    * First cut at adjacency constraint class

    * Minor comment updates

    * Abstracting constraint class

    * Adding constraint classes to integration test

    * Adding constraint section to docs

    * Updating docstrings

    * Adding DVConstraint class

    * Adding DVConstraint to docs

    * Minor warning update

    * Minor docstring update

    * Minor docstring update

    * Minor bugfix in DVConstraint

    * Docstring update

    * Docstring update

    * Docstring update

    * Minor bugfix in Adjacency constraint

    * Minor docstring update

    * Adding constraints module to conda build test

    * Adding `getConstraintSizes` method

    * Adding constraints to mphys wrapper

    * Adding adjacency constraints to mphys tests

    * Adding allreduce to mphys constraints forward sens

    * Moving tacs constraints to mphys post_solve group

    * Minor speedup for AdjacencyConstraint

    * Adding EnclosedVolume function to TACS

    * Adding VolumeConstraint to pyTACS

    * Adding VolumeConstraint to integration tests

    * Adding VolumeConstraint to documentation

    * Adding shell VolumeConstraint integration test

    * Adding distribute call before sens return for VolumeConstraint

    * Adding volume closure check to VolumeConstraint class

    * Docstring update

    * Minor refactor

    * Adding volume constraint options to docs

    * Docstring update

    * Adding writeVisualization method to VolumeConstraint and AdjacencyConstraint

    * Switching visualization files to .dat format

    * Switching visualization files to .dat format

    * Removing accidental commit

    * docstring typo

    * Making volume xpt sens a column vector

commit 08e573e
Author: Tim Brooks <[email protected]>
Date:   Tue May 2 20:23:43 2023 -0400

    Fixing issue with `writeBDF` in parallel (smdogroup#204)

    * Fixing issue with `writeBDF` in parallel

    * switching to `getValues` method in `writeBDF`

    * Adding distribute call before sens return for 'writeBDF'

    * re-adding distribute call before sens return for 'writeBDF'

commit 188db1c
Author: Alasdair Gray <[email protected]>
Date:   Mon Apr 24 11:32:44 2023 -0400

    Remove commented out code and add comments explaining new Tsai-Wu calculation

commit 571981b
Author: Alasdair Gray <[email protected]>
Date:   Mon Apr 24 11:24:00 2023 -0400

    black .

commit 3406b95
Author: Alasdair Gray <[email protected]>
Date:   Mon Apr 24 11:05:31 2023 -0400

    Update integration tests with new failure values

commit cf0eb01
Author: Alasdair Gray <[email protected]>
Date:   Sat Apr 22 15:56:10 2023 -0400

    Modify Tsai-Wu failure to work with safety factors

commit cc3d9f3
Merge: 5905c37 a0ca8ac
Author: Alasdair Gray <[email protected]>
Date:   Sat Apr 22 15:58:16 2023 -0400

    Merge branch 'master' of https://github.com/smdogroup/tacs
  • Loading branch information
A-CGray committed Jun 1, 2023
1 parent 980a3d4 commit e9887a8
Show file tree
Hide file tree
Showing 66 changed files with 27,908 additions and 28,683 deletions.
1 change: 1 addition & 0 deletions conda/meta.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ requirements:
- metis >=5.1
- mpi4py
- pynastran
- numba

test:
requires:
Expand Down
1 change: 1 addition & 0 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@
intersphinx_mapping = {
"https://docs.python.org/": None,
"numpy [stable]": ("https://numpy.org/doc/stable/", None),
"scipy [stable]": ("https://docs.scipy.org/doc/scipy/", None),
"pynastran [latest]": ("https://pynastran-git.readthedocs.io/en/latest/", None),
"mpi4py [stable]": ("https://mpi4py.readthedocs.io/en/stable/", None),
"paropt": ("https://smdogroup.github.io/paropt/", None),
Expand Down
4 changes: 2 additions & 2 deletions docs/source/examples/Example-Transient_Battery.rst
Original file line number Diff line number Diff line change
Expand Up @@ -189,13 +189,13 @@ index indicates the time-step of the analysis (000 through 050). These files can

.. code-block:: console
$ f5tovtk Transient_000_0xx.f5
$ f5tovtk Transient_000_*.f5
or

.. code-block:: console
$ f5totec Transient_000_0xx.f5
$ f5totec Transient_000_*.f5
The animation below shows what the transient heat transfer temperature solution looks like when visualized in Paraview.

Expand Down
12 changes: 11 additions & 1 deletion docs/source/pytacs/adjacency.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@ AdjacencyConstraint
-------------------
.. automodule:: tacs.constraints.adjacency

Options
^^^^^^^
Options can be set for :class:`~tacs.constraints.AdjacencyConstraint` at time of creation for the class in the
:meth:`pyTACS.createAdjacencyConstraint <tacs.pytacs.pyTACS.createAdjacencyConstraint>` method or using the
:meth:`AdjacencyConstraint.setOption <tacs.constraints.AdjacencyConstraint.setOption>` method. Current option values for a class
instance can be printed out using the :meth:`AdjacencyConstraint.printOption <tacs.constraints.AdjacencyConstraint.printOptions>` method.
The following options, their default values and descriptions are listed below:

.. program-output:: python -c "from tacs.constraints import AdjacencyConstraint; AdjacencyConstraint.printDefaultOptions()"

API Reference
^^^^^^^^^^^^^
.. autoclass:: tacs.constraints.AdjacencyConstraint
:members:
:inherited-members:
:inherited-members:
3 changes: 2 additions & 1 deletion docs/source/pytacs/constraints.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ Constraint classes
:maxdepth: 1

adjacency
dvcon
dvcon
volume
19 changes: 19 additions & 0 deletions docs/source/pytacs/volume.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
VolumeConstraint
----------------
.. automodule:: tacs.constraints.volume

Options
^^^^^^^
Options can be set for :class:`~tacs.constraints.VolumeConstraint` at time of creation for the class in the
:meth:`pyTACS.createVolumeConstraint <tacs.pytacs.pyTACS.createVolumeConstraint>` method or using the
:meth:`VolumeConstraint.setOption <tacs.constraints.VolumeConstraint.setOption>` method. Current option values for a class
instance can be printed out using the :meth:`VolumeConstraint.printOption <tacs.constraints.VolumeConstraint.printOptions>` method.
The following options, their default values and descriptions are listed below:

.. program-output:: python -c "from tacs.constraints import VolumeConstraint; VolumeConstraint.printDefaultOptions()"

API Reference
^^^^^^^^^^^^^
.. autoclass:: tacs.constraints.VolumeConstraint
:members:
:inherited-members:
50,592 changes: 25,296 additions & 25,296 deletions examples/crm/CRM_box_2nd.bdf

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#pyproject.toml
[build-system]
# Minimum requirements for the build system to execute.
requires = ['setuptools>=45.0', 'wheel', 'cython>=0.29', 'oldest-supported-numpy', 'mpi4py==3.1.1']
requires = ['setuptools>=45.0', 'wheel', 'cython>=0.29', 'oldest-supported-numpy',
# Build against an old version (3.1.1) of mpi4py for forward compatibility
"mpi4py==3.1.1; python_version<'3.11'",
# Python 3.11 requires 3.1.4+
"mpi4py==3.1.4; python_version>='3.11'"]
10 changes: 8 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,19 @@ def get_mpi_flags():

setup(
name="tacs",
version="3.2.1",
version="3.3.0",
description="Parallel finite-element analysis package",
long_description=long_description,
long_description_content_type="text/markdown",
author="Graeme J. Kennedy",
author_email="[email protected]",
install_requires=["numpy", "mpi4py>=3.1.1", "scipy>=1.2.1", "pynastran>=1.3.3"],
install_requires=[
"numpy",
"mpi4py>=3.1.1",
"scipy>=1.2.1",
"pynastran>=1.3.3",
"numba",
],
extras_require=optional_dependencies,
packages=find_packages(include=["tacs*"]),
ext_modules=cythonize(exts, include_path=inc_dirs),
Expand Down
46 changes: 28 additions & 18 deletions src/constitutive/TACSBladeStiffenedShellConstitutive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -881,6 +881,8 @@ TacsScalar TACSBladeStiffenedShellConstitutive::computeFailureValues(
TacsScalar TACSBladeStiffenedShellConstitutive::evalFailureStrainSens(
int elemIndex, const double pt[], const TacsScalar X[],
const TacsScalar e[], TacsScalar sens[]) {
memset(sens, 0, this->NUM_STRESSES * sizeof(TacsScalar));

TacsScalar fails[this->NUM_FAILURES], dKSdf[this->NUM_FAILURES];
// First compute the sensitivity of the panel failure value
TacsScalar panelFailSens[this->NUM_STRESSES];
Expand Down Expand Up @@ -1323,11 +1325,15 @@ void TACSBladeStiffenedShellConstitutive::transformStrainSens(
this->computeStiffenerCentroidHeight() - 0.5 * this->panelThick;

panelStrainSens[0] = stiffenerStrainSens[0];
panelStrainSens[1] = 0.0;
panelStrainSens[2] = 0.5 * stiffenerStrainSens[5];
panelStrainSens[3] = stiffenerStrainSens[2] + z * stiffenerStrainSens[0];
panelStrainSens[4] = 0.0;
panelStrainSens[5] =
0.5 * (z * stiffenerStrainSens[5] - stiffenerStrainSens[1]);
panelStrainSens[6] = 0.0;
panelStrainSens[7] = stiffenerStrainSens[4];
panelStrainSens[8] = 0.0;
}

// Add the contribution of the stiffener stress to the panel stress
Expand Down Expand Up @@ -1613,12 +1619,14 @@ TacsScalar TACSBladeStiffenedShellConstitutive::evalPanelFailureStrainSens(
const TacsScalar strain[], TacsScalar sens[]) {
TACSOrthotropicPly* ply = this->panelPly;
const int numPlies = this->numPanelPlies;
const int numStrain = TACSBeamConstitutive::NUM_STRESSES;
const int numStrain = TACSShellConstitutive::NUM_STRESSES;
TacsScalar** dFaildStrain = this->panelPlyFailStrainSens;
TacsScalar* fails = this->panelPlyFailValues;
const TacsScalar* angles = this->panelPlyAngles;
const TacsScalar t = this->panelThick;

memset(sens, 0, numStrain * sizeof(TacsScalar));

// Compute the strain state at the top of the panel
TacsScalar plyStrain[3];
plyStrain[0] = strain[0] + 0.5 * t * strain[3];
Expand Down Expand Up @@ -1903,6 +1911,8 @@ TacsScalar TACSBladeStiffenedShellConstitutive::evalStiffenerFailureStrainSens(
TacsScalar* fails = this->stiffenerPlyFailValues;
const TacsScalar* angles = this->stiffenerPlyAngles;

memset(sens, 0, numStrain * sizeof(TacsScalar));

// Compute the strain state at the tip of the stiffener
TacsScalar zTipOffset = -(this->stiffenerHeight + this->stiffenerThick) -
this->computeStiffenerCentroidHeight();
Expand Down Expand Up @@ -2207,17 +2217,17 @@ void TACSBladeStiffenedShellConstitutive::

// D1 = (E1p * (Ip + Ap * zn * zn) + E1s * (Is + As * (zn - zs) * (zn - zs)))
// / ps;
TacsScalar E1pSens, IpSens, ApSens, ZnSens, E1sSens, AsSens, JsSens, IsSens,
ZsSens;
E1pSens = dfdD1 * ((Ap * zn2 + Ip) / ps);
IpSens = dfdD1 * (E1p / ps);
ApSens = dfdD1 * (E1p * zn2 / ps);
ZnSens = dfdD1 * (2.0 * (Ap * E1p * zn + As * E1s * (zn - zs)) / ps);
E1sSens = dfdD1 * ((As * zns2 + Is) / ps);
IsSens = dfdD1 * (E1s / ps);
AsSens = dfdD1 * (E1s * zns2 / ps);
ZsSens = dfdD1 * (2.0 * As * E1s * (-zn + zs) / ps);
*psSens =

TacsScalar E1pSens = dfdD1 * ((Ap * zn2 + Ip) / ps);
TacsScalar IpSens = dfdD1 * (E1p / ps);
TacsScalar ApSens = dfdD1 * (E1p * zn2 / ps);
TacsScalar ZnSens =
dfdD1 * (2.0 * (Ap * E1p * zn + As * E1s * (zn - zs)) / ps);
TacsScalar E1sSens = dfdD1 * ((As * zns2 + Is) / ps);
TacsScalar IsSens = dfdD1 * (E1s / ps);
TacsScalar AsSens = dfdD1 * (E1s * zns2 / ps);
TacsScalar ZsSens = dfdD1 * (2.0 * As * E1s * (-zn + zs) / ps);
*psSens +=
dfdD1 * ((-E1p * (Ap * zn2 + Ip) - E1s * (As * zns2 + Is)) * pInv * pInv);

// --- 2-direction bending stiffness ---
Expand All @@ -2234,13 +2244,13 @@ void TACSBladeStiffenedShellConstitutive::
TacsScalar zg2 = zg * zg;
TacsScalar zgs2 = (zg - zs) * (zg - zs);

TacsScalar GpSens, JpSens, zgSens, GsSens;
GpSens = dfdD3 * ((Ap * zg2 + Jp) / ps);
JpSens = dfdD3 * (Gp / ps);
TacsScalar GpSens = dfdD3 * ((Ap * zg2 + Jp) / ps);
TacsScalar JpSens = dfdD3 * (Gp / ps);
TacsScalar zgSens =
dfdD3 * ((2.0 * Ap * Gp * zg + 0.5 * As * Gs * (zg - zs)) / ps);
TacsScalar GsSens = dfdD3 * (0.25 * (As * zgs2 + Js) / ps);
TacsScalar JsSens = dfdD3 * (0.25 * Gs / ps);
ApSens += dfdD3 * (Gp * zg2 / ps);
zgSens = dfdD3 * ((2.0 * Ap * Gp * zg + 0.5 * As * Gs * (zg - zs)) / ps);
GsSens = dfdD3 * (0.25 * (As * zgs2 + Js) / ps);
JsSens += dfdD3 * (0.25 * Gs / ps);
AsSens += dfdD3 * (0.25 * Gs * zgs2 / ps);
ZsSens += dfdD3 * (0.5 * As * Gs * (-zg + zs) / ps);
*psSens += dfdD3 * ((-Gp * (Ap * zg2 + Jp) - 0.25 * Gs * (As * zgs2 + Js)) *
Expand Down
99 changes: 74 additions & 25 deletions src/constitutive/TACSBladeStiffenedShellConstitutive.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,31 +29,80 @@ void printStiffnessMatrix(const TacsScalar* const C);
// Class Declaration
// =============================================================================

/*
This constitutive class models a shell stiffened with T-shaped stiffeners.
The stiffeners are not explicitly modelled. Instead, their stiffness is
"smeared" across the shell.
| | ^
| | |
| | |
| | height
| <--------------pitch-------------> | |
Stiffener | | |
thickness ---> ----------------- ----------------- v
---------------------------------------------------------------------- <---
Panel thickness
The panel and stiffener are modelled as laminates, both of which are
parameterised by an arbitrary number of ply angles and fractions. The laminate
properties are then computed using a smeared stiffness approach, which assumes
that the various ply angles are distributed evenly throughout the thicknes of
the panel. This is a valid assumption for thick laminates.
WARNING: If you use ply fractions as design variables, it is currently up to you
to add constraints to ensure that the sum of the fractions is equal to 1.0. This
is not done automatically (yet).
*/
/**
* @brief Constitutive model for a blade-stiffened shell
*
* This constitutive class models a shell stiffened with T-shaped stiffeners.
* The stiffeners are not explicitly modelled. Instead, their stiffness is
* "smeared" across the shell.
*
* | | ^
* | | |
* | | |
* | | height
* | <-------pitch------> | |
* Stiffener | | v
* thickness ---> ----------------- -----------------
* --------------------------------------------------- <--- Panel thickness
*
* ----------> 2-direction
* |
* |
* |
* |
* v
* 3-direction (shell normal)
*
* The stiffener is modelled as a T-shaped beam as shown above, and is modelled
* as pointing in the opposite of the shell normal. The thickness of the
* stiffener web and flange are the same. The ratio of the stiffener flange
* width to the stiffener height is controlled by the flangeFraction parameter,
* which defaults to 1.0 (i.e. the flange width is equal to the stiffener
* height). This value can be set when creating the constitutive object and is
* then fixed.
*
* The panel and stiffener are modelled as laminates, both of which are
* parameterised by an arbitrary number of ply angles and fractions. The
* laminate properties are then computed using a smeared stiffness approach,
* which assumes that the various ply angles are distributed evenly throughout
* the thickness of the panel. This is a valid assumption for thick laminates.
*
* The design variables (in order) for this constitutive model are:
* - Panel length
* - Stiffener pitch
* - Panel thickness
* - Panel ply fractions
* - Stiffener height
* - Stiffener thickness
* - Stiffener ply fractions
*
* The failure criterion returned by this model combines numerous possible
* failure modes into a single value. A material failure criterion (which one
* depends on the Orthotropic ply objects you pass to this class) is computed at
* the upper and lower surface of the panel and at the tip of the stiffener,
* this calculation is performed for every ply angle present in the panel and
* stiffener laminate. Additionally buckling criteria are computed for combined
* shear and axial buckling for both a global buckling mode (i.e the entire
* panel buckles) and a local buckling mode (i.e. the panel buckles between a
* pair of stiffeners). These buckling failure values are aggregated along with
* the material failure values into a single failure value using KS aggregation.
* The smoothness and conservatism of this aggregation can be controlled using
* the `setKSWeight` method.
*
* The panel length design variables do not directly affect the stiffness or
* stresses computed by the model, their only role is to allow the computation
* of the critical buckling loads used in the buckling failure criteria. When
* using this constitutive model, you must also add a set of
* PanelLengthConstraints to force the panel length design variables to be equal
* to the true physical panel length. Despite seeming needlessly complex, this
* approach is necessary because this constitutive model has no information
* about the geometry of your finite element model and so cannot compute the
* panel length itself.
*
* WARNING: If you use ply fractions as design variables, it is currently up to
* you to add DVConstraints to ensure that the sum of the fractions is equal
* to 1.0. This is not done automatically (yet).
*/
class TACSBladeStiffenedShellConstitutive : public TACSShellConstitutive {
public:
/**
Expand Down
Loading

0 comments on commit e9887a8

Please sign in to comment.