Source code for openaerostruct.structures.disp

import numpy as np

import openmdao.api as om


[docs] class Disp(om.ExplicitComponent): """ Reshape the flattened displacements from the linear system solution into a 2D array so we can more easily use the results. The solution to the linear system has meaingless entires due to the constraints on the FEM model. The displacements from this portion of the linear system are not needed, so we select only the relevant portion of the displacements for further calculations. Parameters ---------- disp_aug[6*(ny+1)] : numpy array Augmented displacement array. Obtained by solving the system K * disp_aug = forces, where forces is a flattened version of loads. Returns ------- disp[6*ny] : numpy array Actual displacement array formed by truncating disp_aug. """ def initialize(self): self.options.declare("surface", types=dict) def setup(self): surface = self.options["surface"] self.ny = surface["mesh"].shape[1] self.add_input("disp_aug", val=np.zeros(((self.ny + 1) * 6)), units="m") self.add_output("disp", val=np.zeros((self.ny, 6)), units="m") n = self.ny * 6 arange = np.arange((n)) self.declare_partials("disp", "disp_aug", val=1.0, rows=arange, cols=arange) def compute(self, inputs, outputs): # Obtain the relevant portions of disp_aug and store the reshaped # displacements in disp outputs["disp"] = inputs["disp_aug"][:-6].reshape((-1, 6))