3,266 research outputs found
Automating embedded analysis capabilities and managing software complexity in multiphysics simulation part I: template-based generic programming
An approach for incorporating embedded simulation and analysis capabilities
in complex simulation codes through template-based generic programming is
presented. This approach relies on templating and operator overloading within
the C++ language to transform a given calculation into one that can compute a
variety of additional quantities that are necessary for many state-of-the-art
simulation and analysis algorithms. An approach for incorporating these ideas
into complex simulation codes through general graph-based assembly is also
presented. These ideas have been implemented within a set of packages in the
Trilinos framework and are demonstrated on a simple problem from chemical
engineering
DOLFIN: Automated Finite Element Computing
We describe here a library aimed at automating the solution of partial differential equations using the finite element method. By employing novel techniques for automated code generation, the library combines a high level of expressiveness with efficient computation. Finite element variational forms may be expressed in near mathematical notation, from which low-level code is automatically generated, compiled and seamlessly integrated with efficient implementations of
computational meshes and high-performance linear algebra. Easy-to-use object-oriented interfaces to the library are provided in the form of a C++ library and a Python module. This paper discusses the mathematical abstractions and methods used in the design of the library and its implementation. A number of examples are presented to demonstrate the use of the library in application code
Odeint - Solving ordinary differential equations in C++
Many physical, biological or chemical systems are modeled by ordinary
differential equations (ODEs) and finding their solution is an every-day-task
for many scientists. Here, we introduce a new C++ library dedicated to find
numerical solutions of initial value problems of ODEs: odeint (www.odeint.com).
odeint is implemented in a highly generic way and provides extensive
interoperability at top performance. For example, due to it's modular design it
can be easily parallized with OpenMP and even runs on CUDA GPUs. Despite that,
it provides a convenient interface that allows for a simple and easy usage.Comment: 4 pages, 1 figur
An object-oriented programming of an explicit dynamics code: application to impact simulation
During the last fifty years, the development of better numerical methods and more powerful computers has been a major enterprise for the scientific community. Recent advances in computational softwares have lead to the possibility of solving more physical and complex problems (coupled problems, nonlinearities, high strain and high strain rate problems, etc.). The development of object-oriented programming leads to better structured codes for the finite element method and facilitates the development, the maintainability and the expandability of such codes.
This paper presents an implementation in C++ of an explicit finite element program dedicated to the simulation of impacts. We first present a brief overview of the kinematics, the conservative and constitutive laws related to large deformation inelasticity. Then we present the design and the numerical implementation of some aspects developed with an emphasis on the object-oriented programming adopted. Finally, the efficiency and accuracy of the program are investigated through some benchmark tests
The Chronus Quantum (ChronusQ) Software Package
The Chronus Quantum (ChronusQ) software package is an open source (under the
GNU General Public License v2) software infrastructure which targets the
solution of challenging problems that arise in ab initio electronic structure
theory. Special emphasis is placed on the consistent treatment of time
dependence and spin in the electronic wave function, as well as the inclusion
of relativistic effects in said treatments. In addition, ChronusQ provides
support for the inclusion of uniform finite magnetic fields as external
perturbations through the use of gauge-including atomic orbitals (GIAO).
ChronusQ is a parallel electronic structure code written in modern C++ which
utilizes both message passing (MPI) and shared memory (OpenMP) parallelism. In
addition to the examination of the current state of code base itself, a
discussion regarding ongoing developments and developer contributions will also
be provided.Comment: 43 pages, 2 figure
An Eigen-based C++ Linesearch Filter Barrier Interior-Point Algorithm
Denne masteroppgaven handler om implementasjon av en interior-point optimaliseringsalgoritme basert på den originale implementasjonen av Interior Point OPTimizer. Hensikten med implementasjone er å untnytte ressurser, abstraksjoner og bibliotek utviklet under C++17 standarden, og å trekke inn egenskaper fra det funksjonelle programmeringsparadigme for å forbedre både ytelse, fleksibilitet og lesbarhet.
En linesearch filter-barrier metode er implementert, hvor lineær-algebraiske beregninger er utført med template C++ bibliotek Eigen. Implementasjonen er configurert opp mot Constrained and Unconstrained Testing Environment (CUTEst), som gir tilgang til sett med ulineære problemer. Med beregningsoperasjoner på vanlige matriser klarer implementasjonen å løse problemer med lavere beregnings tid enn IPOPT (med BLAS og MUMPS), men krever flere iterasjoner for å konvergere til en optimal løsning.
For et subset av problemene i CUTEst klarer implementasjonen å konvergere for flertallet av problemene som er begrenset med lineære likhetsligninger, uavhengig av ulineariteten i objektivfunksjonen. Algoritmen har fortsatt problemer med ulineære begrensninger.
Det funksjonelle designet i implementasjonen er begrenset av det kompilerte programmeringsspråket som er brukt, men klarer å erstatte mange av IPOPT's objektorienterte komponenter uten å gjøre algoritmen ineffektiv. Noen forbedringer på det funksjonelle designet vil kreve rekompilering under kjøretid, som kan bli implementert i fremtidige design.
Totalt sett er implementasjonen ikke robst nok til å kvalifisere for generell bruk på ulineære optimaliseringsproblem, og den har potensiale for forbedring på mange av de ulike feltene som har blitt presentert i oppgaven. Fortsatt så kan ytelsen, konvergeringsresultatene og designet anses som tilfredstillende med hensyn til omfanget av oppgaven.This thesis will present an interior-point optimization library based on the original implementation of the Interior Point OPTimizer. The intention with the implementation is to utilize resources, abstractions and libraries found under the modern C++17 standard, and features from the functional programming paradigm to improve both performance, flexibility and readability.
A linesearch filter-barrier method is implemented, with linear algebraic operations computed using the templated C++ library Eigen. The implementation is interfaced with the Constrained and Unconstrained Testing Environment (CUTEst) to access sets of nonlinear optimization problems. Using dense operations, the implementation is able to outperform IPOPT (with BLAS and MUMPS) in computation time, but requires more iterations than IPOPT in order to converge to a solution.
For a given set of optimization problems the dense solver is able to converge for a majority of problems with linear constraints, regardless of nonlinearity in the objective. The solver still fails to converge for nonlinear constraints.
The functional design in the implementation is constrained by the compiled language, but is successfully able to replace many of IPOPT's object oriented design patterns without impairing performance. Some improvements to the functional design will require runtime compilation, which can be pursued in future designs.
Overall, the implemented solver is not robust enough to qualify for general use, and has the potential for improvements on many of the topics presented in the thesis. Still, performance, convergence and design is considered satisfactory with respect to the scope of this thesis
Object-Oriented Paradigms for Modelling Vascular\ud Tumour Growth: a Case Study
Motivated by a family of related hybrid multiscale models, we have built an object-oriented framework for developing and implementing multiscale models of vascular tumour growth. The models are implemented in our framework as a case study to highlight how object-oriented programming techniques and good object-oriented design may be used effectively to develop hybrid multiscale models of vascular tumour growth. The intention is that this paper will serve as a useful reference for researchers modelling complex biological systems and that these researchers will employ some of the techniques presented herein in their own projects
Programming Languages for Scientific Computing
Scientific computation is a discipline that combines numerical analysis,
physical understanding, algorithm development, and structured programming.
Several yottacycles per year on the world's largest computers are spent
simulating problems as diverse as weather prediction, the properties of
material composites, the behavior of biomolecules in solution, and the quantum
nature of chemical compounds. This article is intended to review specfic
languages features and their use in computational science. We will review the
strengths and weaknesses of different programming styles, with examples taken
from widely used scientific codes.Comment: 21 page
- …