Overview
In this manual, all paths are provided relative to the root directory MembraneAleFem.jl/
. The source code is provided in src/
, which contains the following files and folders:
$ tree src/
src/
├── analysis
│ ├── FiniteElement.jl
│ ├── GeoDynStress.jl
│ └── PullForce.jl
├── Analysis.jl
├── input
│ ├── Bc.jl
│ ├── Dof.jl
│ ├── Enums.jl
│ ├── GaussPoint.jl
│ ├── GpBasisFn.jl
│ ├── Mesh.jl
│ ├── Params.jl
│ └── Spline.jl
├── Input.jl
├── MembraneAleFem.jl
└── Output.jl
The function solve
in the main program file src/MembraneAleFem.jl
carries out all calculations, which are divided into three parts:
We briefly overview the three modules before presenting further details below.
src/Input.jl
and corresponding files in src/input/
deal with the problem set-up, mesh generation, and degree-of-freedom initialization. Since the parametrization $\zeta^\alpha$ of the parametric domain $\Omega \subset \mathbb{R}^2$ does not change, all basis functions are determined once $\Omega$ is initially discretized. We employ B-spline basis functions, as they are well-characterized and satisfy $C^1$-continuity across finite elements. The local-to-global mapping between elements and degrees of freedom is also determined here.
All finite element analysis is carried out in src/Analysis.jl
and the files in the src/analysis/
folder. In particular, src/analysis/GeoDynStress.jl
takes as arguments the elemental degrees of freedom, and calculates all relevant geometric and dynamic quantities—including the stresses and couple-stresses of the membrane and mesh. The file src/analysis/FiniteElement.jl
carries out all finite element analysis, including the calculation of the residual vector and tangent diffusion matrix. src/analysis/PullForce.jl
calculates the pull force on a tether, and is thus specific to one of the available scenarios.
Currently, src/Output.jl
includes a minimal set of functions that process the results of our simulations.
MembraneAleFem.jl
The main file src/MembraneAleFem.jl
contains a single function, solve()
, which then calls relevant functions in the aforementioned files.
MembraneAleFem.solve
— Functionsolve(p::Params; args...)
Main function, which solves any Scenario
for the given Parameters
.
The Mesh
struct (mesh
), initial positions (xms
), and initial control points (cps
) are first generated by calling prepare_input
. With these initial data, run_analysis!
is called to solve for the membrane unknowns and positions at a series of discrete times—for which xms
and cps
are repeatedly updated. Appropriate data is written to output at each time step, and the final mesh
, xms
and cps
are returned.
See also Scenario
, Parameters
, Mesh
, prepare_input
, run_analysis!