# ANN: GXBeam.jl

**URL:** <https://discourse.julialang.org/t/ann-gxbeam-jl/46591>\
**Category:** Package Announcements\
**Tags:** package, announcement, finite-element\
**Created:** [September 14, 2020, 3:55pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591 "2020-09-14T15:55:09Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![taylormcd](https://avatars.discourse-cdn.com/v4/letter/t/dbc845/32.png) [@taylormcd](https://discourse.julialang.org/u/taylormcd)\
**Post date:** [September 14, 2020, 3:55pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/1 "2020-09-14T15:55:09Z")

</div>

Announcing [GXBeam.jl](https://github.com/byuflowlab/GXBeam.jl)

This package provides an thoroughly verified and validated implementation of geometrically exact beam theory written in pure Julia. It’s also extremely fast, rivaling Fortran implementations of geometrically exact beam theory in speed. For more details about this package’s many capabilities see the README and/or  
the [documentation](https://flow.byu.edu/GXBeam.jl/dev/).

As a side note, this package is also a good example of the effectiveness of [StaticArrays](https://github.com/JuliaArrays/StaticArrays.jl) at eliminating allocations in inner loops.

---

<div class="post-metadata">

**Author:** ![fgerick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fgerick/32/13228_2.png) [@fgerick](https://discourse.julialang.org/u/fgerick)\
**Post date:** [September 14, 2020, 4:20pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/2 "2020-09-14T16:20:49Z")

</div>

Is there a reason for not using [ArnoldiMethod.jl](https://github.com/haampie/ArnoldiMethod.jl.git)? That way you could remove the “almost”.

---

<div class="post-metadata">

**Author:** ![taylormcd](https://avatars.discourse-cdn.com/v4/letter/t/dbc845/32.png) [@taylormcd](https://discourse.julialang.org/u/taylormcd)\
**Post date:** [September 14, 2020, 5:48pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/3 "2020-09-14T17:48:23Z")

</div>

There isn’t any particular reason. I’ll look into it. It would be great to remove the “almost”.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 5:53pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/4 "2020-09-14T17:53:06Z")

</div>

IMO there should be a really good reason for any attempt to knock out  
some non-Julia dependency. Purity by itself is not a good reason, I believe.

---

<div class="post-metadata">

**Author:** ![taylormcd](https://avatars.discourse-cdn.com/v4/letter/t/dbc845/32.png) [@taylormcd](https://discourse.julialang.org/u/taylormcd)\
**Post date:** [September 14, 2020, 6:52pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/5 "2020-09-14T18:52:08Z")

</div>

For me the primary motivation for moving toward pure Julia code would be in order to use automatic differentiation tools.

---

<div class="post-metadata">

**Author:** ![jlapeyre](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jlapeyre/32/4514_2.png) [@jlapeyre](https://discourse.julialang.org/u/jlapeyre)\
**Post date:** [September 14, 2020, 7:26pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/6 "2020-09-14T19:26:50Z")

</div>

> [@PetrKryslUCSD](#):
>
> IMO there should be a really good reason for any attempt to knock out  
> some non-Julia dependency. Purity by itself is not a good reason, I believe.

FWIW, from the GXBeam.jl docs:

> The “almost” here refers to the fact that the Fortran library ARPACK is used for eigenvalue computations. Otherwise the code is written with pure Julia and should work with custom types and automatic differentiation packages such as ForwardDiff.

---

<div class="post-metadata">

**Author:** ![fgerick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fgerick/32/13228_2.png) [@fgerick](https://discourse.julialang.org/u/fgerick)\
**Post date:** [September 14, 2020, 9:00pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/7 "2020-09-14T21:00:24Z")

</div>

I disagree, if there is not a single observable disadvantage and it is almost as easy as just importing another package to change. I think many advantages might also appear after some time, e.g. automatic differentiation, thread safety (ARPACK isn’t), arbitrary number types, …

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 9:04pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/8 "2020-09-14T21:04:09Z")

</div>

That is really what I’m saying. In this case you have identified benefits to be realized sometime down the road. There is always a disadvantage though: replacing a dependency will involve work, testing, maintenance.

---

<div class="post-metadata">

**Author:** ![fgerick](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fgerick/32/13228_2.png) [@fgerick](https://discourse.julialang.org/u/fgerick)\
**Post date:** [September 14, 2020, 9:10pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/9 "2020-09-14T21:10:18Z")

</div>

Probably I agree in many examples, but what we are discussing here is changing from

```julia
using Arpack
eigs(sprandn(10,10,0.1))

```

to

```julia
using ArnoldiMethod
eigs(args...;kwargs...) = partialeigen(partialschur(args...;kwargs...)[1])
eigs(sprandn(10,10,0.1))

```

And that doesn’t seem like all that complicated. Also, at some point I assume that the second line will not be necessary anymore.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 9:23pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/10 "2020-09-14T21:23:18Z")

</div>

Oh, I was talking about the dependency itself. Not about the client.

---

<div class="post-metadata">

**Author:** ![anon92994695](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@anon92994695](https://discourse.julialang.org/u/anon92994695)\
**Post date:** [September 14, 2020, 9:28pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/11 "2020-09-14T21:28:53Z")

</div>

Super neat!

Being someone who doesn’t understand much of anything about beam theory, could you use this to model radial/circular elastic materials? If so I may have a fun project involving this.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 9:36pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/12 "2020-09-14T21:36:29Z")

</div>

Speaking from curiosity: what are radial materials?

---

<div class="post-metadata">

**Author:** ![anon92994695](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@anon92994695](https://discourse.julialang.org/u/anon92994695)\
**Post date:** [September 14, 2020, 9:39pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/13 "2020-09-14T21:39:28Z")

</div>

Wrong word… I just meant shapes that have no start or end but have finite perimeters. Words are a bit elusive right now… So things like a circles, ellipses. Sorry its been a real long day.

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 9:56pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/14 "2020-09-14T21:56:19Z")

</div>

Like [this](https://camo.githubusercontent.com/a6f7aa9ec24eaf19ce0a7d080fa651deb01376c5/687474703a2f2f686f6777617274732e756373642e6564752f7e706b7279736c2f736974652e696d616765732f636972636c652d74776973742d616e696d2e676966)?

---

<div class="post-metadata">

**Author:** ![anon92994695](https://avatars.discourse-cdn.com/v4/letter/a/ce7236/32.png) [@anon92994695](https://discourse.julialang.org/u/anon92994695)\
**Post date:** [September 14, 2020, 10:01pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/15 "2020-09-14T22:01:19Z")

</div>

Yes like a rubber band!

---

<div class="post-metadata">

**Author:** ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)\
**Post date:** [September 14, 2020, 10:03pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/16 "2020-09-14T22:03:12Z")

</div>

Let’s talk.

---

<div class="post-metadata">

**Author:** ![taylormcd](https://avatars.discourse-cdn.com/v4/letter/t/dbc845/32.png) [@taylormcd](https://discourse.julialang.org/u/taylormcd)\
**Post date:** [September 15, 2020, 9:39pm UTC](https://discourse.julialang.org/t/ann-gxbeam-jl/46591/17 "2020-09-15T21:39:10Z")

</div>

I don’t know anything about circular elastic materials, but I don’t see why you wouldn’t be able to model them with this package. The only potential issue I can think of is if the small strain assumption is violated (which is used to construct the constitutive equations). I wouldn’t classify myself as an expert in beam theory, however.
