GithubHelp home page GithubHelp logo

easybeam's People

Contributors

e-dub avatar ewehrle avatar veiguf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

easybeam's Issues

Todos

  • Define boundary conditions and loads via node number and global degree of freedom, i.e. x, y, rot
  • Fix code so warnings no longer received or suppress these
  • Mass matrix, consistant and lumped?
  • Add eigenfrequency solver
  • The scale value should not be used in calculateStress() and should be only a property of plotting
  • Remove nEl from plots so that mesh plots can be done before initialize()
  • rename nSteps, e.g. nColorDivisions, nColorDiv, nColorSegments, nColorSeg
  • Separate solve() into subfunctions, e.g. assemble(), elemstiff(), elemmass(), etc
  • Consistent name for component to plot? Currently "component" and "stress"
  • Plot with boundary condition and loads
  • Plot boundary condition and loads with symbols instead of description
  • Plot with dof?
  • Documentation with roadmap
  • Calculate area moment of inertia via geometrical shape
  • Ability to have different cross-sectional geometries and materials via element groups.
  • Remove initialize()
  • Revamp logo, i.e. B
  • Sparse solving
  • Plotting of matrix structure, see matplotlib.pyplot.imshow
  • Plot shape functions
  • Plot internal shear force and bending moment
  • Calculate load from selfweight
  • Calculate shear area for Timoshenko matrices (or enter by hand)
  • Eigensolver for unconstrainted structures and Timoshenko beams, i.e. eig solve, sort, etc.
  • Validation of results with e.g. Kratos Multiphysics, NASTRAN, or ANSYS
  • Added mass points, i.e. give node to which mass will be added. (also mass moment of inertia?)
  • Add legend to show geometric scale? I.e. |----| 1 mm for geometry and |----| 1 m for displacement
  • Design sensitivities
  • Generalize sensitivity computations
  • Sensitivity plots
  • Anisotropic beam

Further ideas - Long term

  • Timoshenko element descriptions
  • Material library
  • Element library?
  • VTK plots
  • 3D
  • ground structure optimization

Consider moving StrainDispMat

Currently nEl strain--displacement matrices are constructed in the initialization of the model. For large models, this requires relatively large amounts of computational effort.

for j in range(self.nSeg+1):
ξ = j/(self.nSeg)
for ii in range(self.nSec):
self.B[i, j, ii] = self.StrainDispMat(ξ, self.ell[i], self.Sec[i, ii, 0], self.Sec[i, ii, 1], self.Sec[i, ii, 2])

This could be moved to a postprocessing step and loaded into the memory only at the time of the strain calculation (or directly to stress calculation). This would have the added benefit of not being used at all in modal analysis where it is not used.

Analogously, one could consider similar speed up measures for TransMat and ShapeMat

Overwriting of self.El

Overwriting of self.El causing issues for the implementation of SA sensitivity analysis. This is kind of dirty. Can this be avoided?

    def Initialize(self):
        self.N = np.array(self.N, dtype=float)
        El = np.array(self.El)
        self.PropID = El[:, 2]
        self.El = np.array(El[:, 0:2], dtype=int)

Speedup of matrix assembly

In the current code, the largest time expenditure is the assembling of the system matrices: BeamAnalysis.py 180-184.

    def Assemble(self, MatElem):
        Matrix = np.zeros([self.nNDoF*self.nN, self.nNDoF*self.nN])
        for i in range(self.nEl):
            Matrix += self.L[i][email protected][i].T@MatElem(i)@self.T[i]@self.L[i]
        return Matrix

The global matrix is assemble by the rotating and extending the element matrix to the global coordinate system.

It will be faster to rotate but not expand the element matrices and assigning it via an index, i.e.

Matrix[dof[i], dof[i]] += self.T[i].T@MatElem(i)@self.T[i]

where dof[i] is a vector of global dofs for the ith element.

This avoids two multiplication operations and the memory needed for the larger elements.

Errors in eigenfrequeny analysis

Just found that the difference, especially in the mode shape, between Euler-Bernoulli and Timoshenko is very large.

There are also differences in

  • numpy.linalg.eig
  • scipy.linalg.eig
  • numpy.linalg.eigh
  • scipy.linalg.eigh

We should look into this and then validate a couple examples analytically or with FEA.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.