Code Monkey home page Code Monkey logo

argyrispack's Introduction

ArgyrisPack

Overview

ArgyrisPack is a library for doing things with the Argyris-5 finite element, a C1 finite element with 21 degrees of freedom. The Argyris-5 element spans the space of 5th degree polynomials on each element and has O(h^4) convergence in the H2 norm. The main goals of ArgyrisPack are numerical correctness, performance, and portability. ArgyrisPack is mostly written in C and can be called from C, Matlab, or Julia. Additional interfaces (particularly Cython/Python) will come in future releases.

ArgyrisPack is available under the BSD-3 License. See the file License.txt for more details.

Design & Usage Philosophy

ArgyrisPack assumes that it is faster to work with precomputed values of reference basis functions. Therefore it is up to the user to set up appropriate tables of reference data (function values, derivative values, presumably second derivative values) and to use these when setting up the typical per-element matricies.

Since performance and portability are both goals, the C code does not offer much abstraction; one passes in pointers to arrays and the functions fill the arrays appropriately. The non-C interfaces take care of wrapping output values and checking bounds instead.

Compilation Details

ArgyrisPack is written in C99 and may be compiled to use either row-major or column-major storage. Macros (contained in order_logic.h) ensure that the C code does 'the right things' (correct BLAS calls, correct order traversal, etc) in both cases. This is done by passing either -DUSE_ROW_MAJOR or -DUSE_COL_MAJOR to the compiler. In particular, with the makefile, compile the library with

make STORAGE_ORDER=USE_ROW_MAJOR

to pass one symbol or another. To compile the mex-files, run

make

at the MATLAB prompt. MATLAB (to the best of my knowledge) assumes MEX files on *nix platforms will use the gcc, but you may need to tweak your local MEX settings to compile the binaries correctly. Julia just needs a .so file in the current path to work.

ArgyrisPack currently targets GNU/Linux and OS X. GCC 4.2 and later should work; please let us know if this is not the case. In principle, there is nothing preventing a port to other operating systems, but all the provided makefiles assume a *nix environment.

What can ArgyrisPack do?

ArgyrisPack consists of four levels of C and Python functions/classes:

  • Level 1: evaluation of the Argyris basis functions (and derivatives) at arbitrary points on the reference triangle. These are the functions beginning with local_.
  • Level 2: evaluation of the required coordinate transformations (Dominguez and Sayas' C, B, b, and Theta (Th) matricies) and evaluation of Argyris basis functions on arbitrary triangles. These are the functions beginning with global_.
  • Level 3: evaluation of a few common bilinear forms (the classic stiffness and mass matricies as well as the 'biharmonic' matrix resulting from discretization of the biharmonic operator). These functions begin with matrix_.
  • Level 4: mesh generation. Argyris elements have 21 nodes (5 on each corner and one at the midpoint of each triangle edge). ArgyrisPack contains a simple Python class (MeshParser.ParseMESHFormat) that can parse .mesh files generated by GMSH and convert quadratic meshes in to Argyris meshes.

There are a few additional files; we wrote a 'multiply by a diagonal matrix' routine, wrappers to make dgemm work with row or column order, as well as a symbolic (symbolic.sage and symbolic.m) version of the Argyris element to verify the numerical computations.

Authors

  • Erich Foster, Virginia Tech
  • Traian Iliescu, Virginia Tech
  • David Wells, Virginia Tech

Relevant Papers

ArgyrisPack is a new implementation of older ideas. We are greatly indebted to those who have done the necessary mathematical research for making this library possible.

  • Dominguez and Sayas: A simple Matlab implementation of the Argyris element, 2006
  • Argyris, Fried and Scharpf: The TUBA Family of Plate Elements for the Matrix Displacement Method, 1968.

argyrispack's People

Contributors

electricaltape avatar drwells avatar

Watchers

 avatar

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.