From: Peter Munch Date: Sun, 19 Mar 2023 05:46:58 +0000 (+0100) Subject: Copy files -> 9.5 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ffa26929bf55e25f84191590af6778ef62a4b2b;p=release-papers.git Copy files -> 9.5 --- diff --git a/9.5/announce b/9.5/announce new file mode 100644 index 0000000..2af631c --- /dev/null +++ b/9.5/announce @@ -0,0 +1,37 @@ +Version 9.4.0 of deal.II, the object-oriented finite element library awarded the +J. H. Wilkinson Prize for Numerical Software, has been released. It is +available for free under an Open Source license from the deal.II homepage at + + https://www.dealii.org/ + +The major changes of this release are: + + - Advances in simplex- and mixed-mesh support + - Repartitioning of distributed meshes + - Advances in matrix-free infrastructure + - Advances in multigrid infrastructure + - CutFEM support + - Experimental integration of the Computational Geometry Algorithms Library (CGAL) + - Performance improvements in the particle infrastructure + - Improvements to unstructured communication + - Three new tutorial programs (steps 81, 82, and 85) and one new code gallery program + +For more information see: + - The preprint at https://www.dealii.org/deal94-preprint.pdf + - The list of changes at + https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_3_3_and_9_4_0.html + +The main features of deal.II are: + - Extensive documentation and 83 fully-functional example programs + - Support for dimension-independent programming + - Locally refined adaptive meshes + - Multigrid support + - A zoo of different finite elements + - Fast linear algebra + - Built-in support for shared memory and distributed parallel computing, + scaling from laptops to clusters with 100,000+ processor cores + - Interfaces to Trilinos, PETSc, METIS, UMFPACK and other external software + - Output for a wide variety of visualization platforms. + +Matthias, +on behalf of the deal.II developer team and many contributors. diff --git a/9.5/announce-short b/9.5/announce-short new file mode 100644 index 0000000..2093b39 --- /dev/null +++ b/9.5/announce-short @@ -0,0 +1,27 @@ +Version 9.4.0 of deal.II, the object-oriented finite element library awarded +the J. H. Wilkinson Prize for Numerical Software, has been released. It is +available for free under an Open Source license from the deal.II homepage at +https://www.dealii.org/ + +The major changes of this release are: + + - Advances in simplex- and mixed-mesh support + - Repartitioning of distributed meshes + - Advances in matrix-free infrastructure + - Advances in multigrid infrastructure + - CutFEM support + - Experimental integration of the Computational Geometry Algorithms Library (CGAL) + - Performance improvements in the particle infrastructure + - Improvements to unstructured communication + - Three new tutorial programs (steps 81, 82, and 85) and one new code gallery program + +The main features of deal.II are: + - Extensive documentation and 83 working example programs + - Support for dimension-independent programming + - Locally refined adaptive meshes and multigrid support + - A zoo of different finite elements + - Built-in support for shared memory and distributed parallel computing, + scaling from laptops to clusters with 100,000+ of processor cores + - Interfaces to Trilinos, PETSc, METIS, UMFPACK and other external software + +The deal.II developers diff --git a/9.5/ansarticle-preprint.cls b/9.5/ansarticle-preprint.cls new file mode 100644 index 0000000..da94dde --- /dev/null +++ b/9.5/ansarticle-preprint.cls @@ -0,0 +1,149 @@ +% $Id: ansarticle.cls 2730 2011-06-03 09:53:18Z logg $ + +% FIXME: (AL) Need to choose a license for this style, I suggest GFDL + +% Basic setup +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{ansarticle-preprint} +\LoadClass[twoside,a4paper]{article} + +% Load packages +\RequirePackage{a4wide} +\RequirePackage{anslistings} +\RequirePackage{algorithm,algorithmicx,algpseudocode} +\RequirePackage{amsmath,amssymb} +\RequirePackage[noblocks]{authblk} +\RequirePackage{booktabs} +\RequirePackage{fancyhdr} +\RequirePackage{graphicx} +\RequirePackage[hyperfootnotes=false,colorlinks,linkcolor=blue,urlcolor=blue,citecolor=blue]{hyperref} +\RequirePackage{natbib} + +\RequirePackage{lastpage} +\RequirePackage{listings} +\RequirePackage[colorinlistoftodos,textwidth=4cm,shadow]{todonotes} + + +% Font selection +\RequirePackage[T1]{fontenc} +\RequirePackage{ae,aecompl} +\RequirePackage{pxfonts} % Palatino for running text and math +\renewcommand{\sfdefault}{pag} % Avantgarde for sans serif (section headings) + +% Section headings +\renewcommand{\section}{% + \@startsection{section}{0}{0pt}{2ex}{1ex}{\large\bf\sffamily}} +\renewcommand{\subsection}{% + \@startsection{subsection}{1}{0pt}{\baselineskip}{.5ex}{\bf\sffamily}} +\renewcommand{\subsubsection}{% + \@startsection{subsubsection}{2}{0pt}{\baselineskip}{-1em}{\bf\sffamily}} +\renewcommand{\paragraph}{% + \@startsection{paragraph}{3}{0pt}{0ex}{-0.5em}{\bf\sffamily}} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{4}{0pt}{0ex}{-0.5em}{\bf\sffamily}} +\setcounter{secnumdepth}{10} + +% Paragraphs +\setlength{\parindent}{0pt} +\setlength{\parskip}{1ex plus 2ex} + +% Running title and author +\let\@runningtitle\@empty +\let\@runningauthor\@empty +\newcommand{\runningtitle}[1]{\gdef\@runningtitle{#1}} +\newcommand{\runningauthor}[1]{\gdef\@runningauthor{#1}} + +% Formatting volume and article number +\newread\datafile +\openin\datafile=ansinfo +\ifeof\datafile +\message{File datafile.tex with volume, number, and year is missing} +\def\ANSreceived{never} +\def\ANSrevised{never} +\def\ANSaccepted{never} +\def\ANSpublished{never} +\def\ANSvolume{VV} +\def\ANSnumber{NN} +\def\ANSyear{} +\else +\closein\datafile +\input{ansinfo} +\fi + +% Page headers and footers +\fancyhead[RO, LE]{\thepage} +\fancyhead[LO]{\@runningtitle} +\fancyhead[RE]{\@runningauthor} +\fancyfoot[RE,LO]{% + %\footnotesize \copyright{} by the authors, \ANSyear + } +\fancyfoot[RO,LE]{% + %\footnotesize Archive of Numerical Software \ANSvolume(\ANSnumber), \ANSyear + } +\fancyfoot[C]{} +\renewcommand{\headrulewidth}{0pt} +\pagestyle{fancy} + +% Front matter +\renewcommand*{\title}[2][]{\gdef\s@title{#1}\gdef\@title{#2}} +\renewcommand{\Authfont}{\large\sffamily} +\renewcommand{\Affilfont}{\normalsize\sffamily} +\renewcommand{\maketitle}{ + % Footnote stuff + \let\footnotesize\small + \def\footnoterule{\vspace*{-3pt}\rule{.4\columnwidth}{.4pt}\vspace*{2.6pt}} + \renewcommand\thefootnote{\sffamily\@fnsymbol\c@footnote} + \let\footnote\thanks + % Title +% \hfill\fboxrule2pt\fboxsep3mm\fbox{\parbox{5cm}{\centering +% Archive of Numerical Software\\ +% vol. \ANSvolume, no. \ANSnumber, pages 1--\pageref*{LastPage}\\ +% \copyright{} \ANSyear}} + \vskip 60\p@ + \begin{center} + {\LARGE \textsf{\textbf{\@title}} \par} + \vskip 8mm + {\large \lineskip .75em \textsf{\@author} } + \vskip 4mm + \end{center}\par + % Affiliation stuff + \@thanks + % Paper received + \vskip 3mm +% \textbf{\sffamily Received: }\ANSreceived; +% \textbf{\sffamily final revision:} \ANSrevised; +% \textbf{\sffamily published:} \ANSpublished. +% % Some more fixes + \vskip 3mm + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax + % No headers/footers on front page + \thispagestyle{empty} +} + +% Abstract heading +\renewenvironment{abstract}{\textsf{\textbf{Abstract: }}}{} + +% Useful macro +\newcommand{\fixme}[1]{\todo[inline, color=red!40]{#1}} + +% Some useful notation macros +\newcommand{\R}{\mathbb{R}} +\newcommand{\dx}{\,\mathrm{d}x} +\newcommand{\dX}{\,\mathrm{d}X} +\newcommand{\ds}{\,\mathrm{d}s} +\newcommand{\dS}{\,\mathrm{d}S} +\newcommand{\dt}{\,\mathrm{d}t} +\newcommand{\inner}[2]{\langle #1, #2 \rangle} +\newcommand{\nedelec}{N\'ed\'elec} +\newcommand{\babuska}{Babu\v{s}ka} +\newcommand{\emp}[1]{\texttt{#1}} diff --git a/9.5/anslistings.sty b/9.5/anslistings.sty new file mode 100644 index 0000000..f2e409d --- /dev/null +++ b/9.5/anslistings.sty @@ -0,0 +1,442 @@ +%% Listings environments for Archive of Numerical Software. +%% +%% The following listings environments are provided: +%% +%% c++ for C++ code +%% python for Python code +%% cython for Cython code +%% xml for XML code +%% bash for BASH code +%% swigcode for SWIG code +%% uflcode for UFL code +%% matlab for MATLAB code +%% anycode for generic code +%% progoutput for program output +%% gencode for generated code +%% latexcode for LaTeX code +%% fortran for FORTRAN code +%% +%% This style file is based on original work by Olivier Verdier +%% (pythonhighlight.sty), +%% with contributions from Johan Hake . +%% +%% Modified for ANS by Anders Logg , 2011. +%% +%% Modified by Hans Petter Langtangen , 2011, to +%% have pairs c++ (with C++ title) and c++:nt (no title), +%% python and python:nt, etc. (It is not always desirable to +%% have a title with the language.) Added Cython and Fortran style. +%% +%% First added: 2011-05-16 +%% Last modified: 2011-06-03 + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{anslistings}[2009/03/28 code highlighting; provided by Olivier Verdier ] + +% Load required packages +\RequirePackage{listings} +\RequirePackage{xcolor} + +% Basic setup +\renewcommand{\lstlistlistingname}{Code Listings} +\renewcommand{\lstlistingname}{Code Listing} +\newcommand{\codetitlestyle}[1]{\hspace{9cm}\small\textit{#1}\hspace{0.1cm}} +%\newcommand{\codetitlestyle}[1]{\small\textit{#1}\hspace{0.1cm}} +\newcommand{\belowtitleskip}{2pt} +\newcommand{\captionposition}{t} +\newcommand{\framemargin}{0.5ex} +\newcommand{\literatecolour}{\textcolor{literatecolour}} + +% Colors +\definecolor{gray}{gray}{0.5} +\colorlet{commentcolour}{green!50!black} +\colorlet{stringcolour}{red!60!black} +\colorlet{keywordcolour}{magenta!90!black} +\colorlet{exceptioncolour}{yellow!50!red} +\colorlet{commandcolour}{blue!60!black} +\colorlet{numpycolour}{blue!60!green} +\colorlet{literatecolour}{magenta!90!black} +\colorlet{promptcolour}{green!50!black} +\colorlet{specmethodcolour}{violet} +\colorlet{indendifiercolour}{green!70!white} + +% Define the common style to be shared by all languages +\lstdefinestyle{c@mmon}{% +showtabs=true, % show tabs in strings using underscore +tab=, +tabsize=2, % tab means 2 spaces +basicstyle=\ttfamily\footnotesize, % fonts used for the code +breaklines=true, % break lines +%breakatwhitespace=true, % let linebreaks happen at whitespace +showspaces=false, % true: show spaces with a particular underscore +aboveskip=1ex, +frame=trbl, % top+right+bottom+left (TB draws double lines at top + bottom) +%framerule=0.4pt % thickness of frame +rulecolor=\color{black}, % frame color +backgroundcolor=\color{yellow!10}, +xleftmargin=5pt, +xrightmargin=5pt, +%numbers=left, % put line numbers on the left +%stepnumber=2, % stepnumber=1 numbers each line, =n every n lines +} +\lstset{style=c@mmon} + +%--- Typesetting LaTeX --- +\lstnewenvironment{latexcode}{\lstset{language=[LaTeX]TeX,style=c@mmon}}{} +\newcommand{\inputlatex}[1]{\lstset{language=[LaTeX]TeX,style=c@mmon}% + \lstinputlisting{#1}} +\lstnewenvironment{latexcode:nt}{\lstset{language=[LaTeX]TeX,style=c@mmon}}{} + +%--- C++ --- + +\lstdefinestyle{cppstyle}{ +language=c++, +style=c@mmon, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +keywordstyle=\color{keywordcolour}\bfseries, +emph={auto,const,struct,% +break,continue,else,for,switch,void,% +case,default,enum,goto,register,sizeof,typedef,% +char,do,extern,if,return,static,union,while,% +asm,dynamic_cast,namespace,reinterpret_cast,try,% +bool,explicit,new,static_cast,typeid,volatile,% +catch,operator,template,typename,% +class,friend,private,this,using,% +const_cast,inline,public,throw,virtual,% +delete,mutable,protected,wchar_t,% +or,and,xor,not,assert}, +emphstyle=\color{blue}\bfseries, +emph={[2]true, false, NULL}, +emphstyle=[2]\color{keywordcolour}, +emph={[3]double,float,int,short,unsigned,long,signed}, +emphstyle=[3]\color{blue}, +emph={[4]1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, +emph={[4]cos,sin,tan,acos,asin,atan,atan2,cosh,sinh,tanh,% +exp,frexp,ldexp,log,log10,modf,pow,sqrt,ceil,fabs,floor,fmod}, +emphstyle=[4]\color{numpycolour}, +literate=*% +{:}{{\literatecolour:}}{1}% +{=}{{\literatecolour=}}{1}% +{-}{{\literatecolour-}}{1}% +{+}{{\literatecolour+}}{1}% +{*}{{\literatecolour*}}{1}% +{!}{{\literatecolour!}}{1}% +{[}{{\literatecolour[}}{1}% +{]}{{\literatecolour]}}{1}% +{<}{{\literatecolour<}}{1}% +{>}{{\literatecolour>}}{1}% +{>>>}{{\textcolor{promptcolour}{>>>}}}{1}% +,% +commentstyle=\color{commentcolour}\slshape, +morecomment=[l][commentstyle]{//}, +morecomment=[s][commentstyle]{/*}{*/}, +morestring=[b][stringstyle]", +morestring=[d][stringstyle]' +} + +\newcommand{\inputcpp}[1]{\lstinputlisting[style=cppstyle, title={\codetitlestyle{C++ code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{c++}[1][]{\lstset{style=cppstyle, title={\codetitlestyle{C++ code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{c++:nt}[1][]{\lstset{style=cppstyle}}{} +\newcommand{\cppinline}{\lstinline[style=cppstyle,basicstyle=\ttfamily]} + +%--- Python and Cython --- + + \lstdefinestyle{pythonstyle}{ + language=python, + showtabs=true, + tab=, + tabsize=2, + basicstyle=\ttfamily\footnotesize, + stringstyle=\color{stringcolour}, + showstringspaces=false, + alsoletter={1234567890}, + otherkeywords={\ , \}, \{, \%, \&, \|}, + keywordstyle=\color{keywordcolour}\bfseries, + emph={and,break,class,continue,def,yield,del,elif ,else,% + except,exec,finally,for,from,global,if,import,in,% + lambda,not,or,pass,print,raise,return,try,while,assert}, + emphstyle=\color{blue}\bfseries, + emph={[2]True, False, None}, + emphstyle=[2]\color{keywordcolour}, + emph={[3]object,type,isinstance,copy,deepcopy,zip,enumerate,reversed,list,len,dict,tuple,xrange,append,execfile,real,imag,reduce,str,repr}, + emphstyle=[3]\color{commandcolour}, + emph={Exception,NameError,IndexError,SyntaxError,TypeError,ValueError,OverflowError,ZeroDivisionError}, + emphstyle=\color{exceptioncolour}\bfseries, + commentstyle=\color{commentcolour}\slshape, + emph={[4]ode, fsolve, sqrt, exp, sin, cos, arccos, pi, array, norm, solve, dot, arange, , isscalar, max, sum, flatten, shape, reshape, find, any, all, abs, plot, linspace, legend, quad, polyval,polyfit, hstack, concatenate,vstack,column_stack,empty,zeros,ones,rand,vander,grid,pcolor,eig,eigs,eigvals,svd,qr,tan,det,logspace,roll,min,mean,cumsum,cumprod,diff,vectorize,lstsq,cla,eye,xlabel,ylabel,squeeze}, + emphstyle=[4]\color{numpycolour}, + emph={[5]__init__,__add__,__mul__,__div__,__sub__,__call__,__getitem__,__setitem__,__eq__,__ne__,__nonzero__,__rmul__,__radd__,__repr__,__str__,__get__,__truediv__,__pow__,__name__,__future__,__all__}, + emphstyle=[5]\color{specmethodcolour}, + emph={[6]assert,range,yield}, + emphstyle=[6]\color{keywordcolour}\bfseries, + literate=*% + {:}{{\literatecolour:}}{1}% + {=}{{\literatecolour=}}{1}% + {-}{{\literatecolour-}}{1}% + {+}{{\literatecolour+}}{1}% + {*}{{\literatecolour*}}{1}% + {/}{{\literatecolour/}}{1}% + {!}{{\literatecolour!}}{1}% + {[}{{\literatecolour[}}{1}% + {]}{{\literatecolour]}}{1}% + {<}{{\literatecolour<}}{1}% + {>}{{\literatecolour>}}{1}% + {>>>}{{\textcolor{promptcolour}{>>>}}}{1}% + ,% + breaklines=true, + breakatwhitespace= true, + aboveskip=1ex, + frame=trbl, + framesep=.3ex, + rulecolor=\color{black!40}, + backgroundcolor=\color{yellow!10} +} + + + \lstdefinestyle{cythonstyle}{ + language=cython, + showtabs=true, + tab=, + tabsize=2, + basicstyle=\ttfamily\footnotesize, + stringstyle=\color{stringcolour}, + showstringspaces=false, + alsoletter={1234567890}, + otherkeywords={\ , \}, \{, \%, \&, \|}, + keywordstyle=\color{keywordcolour}\bfseries, + emph={and,break,class,continue,def,cdef,cpdef,yield,del,elif ,else,% + except,exec,finally,for,from,global,if,import,in,% + lambda,not,or,pass,print,raise,return,try,while,assert,cdef,cpdef}, + emphstyle=\color{blue}\bfseries, + emph={[2]True, False, None}, + emphstyle=[2]\color{keywordcolour}, + emph={[3]object,type,isinstance,copy,deepcopy,zip,enumerate,reversed,list,len,dict,tuple,xrange,append,execfile,real,imag,reduce,str,repr,float,int,ndarray,complex,double}, + emphstyle=[3]\color{commandcolour}, + emph={Exception,NameError,IndexError,SyntaxError,TypeError,ValueError,OverflowError,ZeroDivisionError}, + emphstyle=\color{exceptioncolour}\bfseries, + commentstyle=\color{commentcolour}\slshape, + emph={[4]ode, fsolve, sqrt, exp, sin, cos, arccos, pi, array, norm, solve, dot, arange, , isscalar, max, sum, flatten, shape, reshape, find, any, all, abs, plot, linspace, legend, quad, polyval,polyfit, hstack, concatenate,vstack,column_stack,empty,zeros,ones,rand,vander,grid,pcolor,eig,eigs,eigvals,svd,qr,tan,det,logspace,roll,min,mean,cumsum,cumprod,diff,vectorize,lstsq,cla,eye,xlabel,ylabel,squeeze}, + emphstyle=[4]\color{numpycolour}, + emph={[5]__init__,__add__,__mul__,__div__,__sub__,__call__,__getitem__,__setitem__,__eq__,__ne__,__nonzero__,__rmul__,__radd__,__repr__,__str__,__get__,__truediv__,__pow__,__name__,__future__,__all__}, + emphstyle=[5]\color{specmethodcolour}, + emph={[6]assert,range,yield}, + emphstyle=[6]\color{keywordcolour}\bfseries, + literate=*% + {:}{{\literatecolour:}}{1}% + {=}{{\literatecolour=}}{1}% + {-}{{\literatecolour-}}{1}% + {+}{{\literatecolour+}}{1}% + {*}{{\literatecolour*}}{1}% + {/}{{\literatecolour/}}{1}% + {!}{{\literatecolour!}}{1}% + {[}{{\literatecolour[}}{1}% + {]}{{\literatecolour]}}{1}% + {<}{{\literatecolour<}}{1}% + {>}{{\literatecolour>}}{1}% + {>>>}{{\textcolor{promptcolour}{>>>}}}{1}% + ,% + breaklines=true, + breakatwhitespace= true, + aboveskip=1ex, + frame=trbl, + framesep=.3ex, + rulecolor=\color{black!40}, + backgroundcolor=\color{yellow!10} +} + +\newcommand{\inputpython}[1]{\lstinputlisting[style=pythonstyle,title={\codetitlestyle{Python code }},belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{python}[1][]{\lstset{style=pythonstyle,title={\codetitlestyle{Python code }},belowcaptionskip=\belowtitleskip}}{} +%\lstnewenvironment{python}[1][]{\lstset{style=pythonstyle,title={\codetitlestyle{Python code }},belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{python:nt}[1][]{\lstset{style=pythonstyle}}{} +\newcommand{\pythoninline}{\lstinline[style=pythonstyle,basicstyle=\ttfamily]} + + +\newcommand{\inputcython}[1]{\lstinputlisting[style=cythonstyle,title={\codetitlestyle{Cython code }},belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{cython}[1][]{\lstset{style=cythonstyle,title={\codetitlestyle{Cython code }},belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{cython:nt}[1][]{\lstset{style=cythonstyle}}{} +\newcommand{\cythoninline}{\lstinline[style=cythonstyle,basicstyle=\ttfamily]} + +%--- FORTRAN --- + +% Note: this is basically FORTRAN 77, not 90, 95, 2003/2008. +\lstdefinestyle{fortranstyle}{ +language=fortran, +style=c@mmon, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +keywordstyle=\color{keywordcolour}\bfseries, +emph={auto,do,while,if,else,end,endif,enddo,% +subroutine,function,format,program}, +emphstyle=\color{blue}\bfseries, +emphstyle=[2]\color{keywordcolour}, +emph={[3]double,real,precision,integer,logical}, +emphstyle=[3]\color{blue}, +emph={[4]1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, +emph={[4]cos,sin,tan,acos,asin,atan,atan2,cosh,sinh,tanh,% +exp,frexp,ldexp,log,log10,modf,pow,sqrt,ceil,fabs,floor,fmod}, +emphstyle=[4]\color{numpycolour}, +literate=*% +{:}{{\literatecolour:}}{1}% +{=}{{\literatecolour=}}{1}% +{-}{{\literatecolour-}}{1}% +{+}{{\literatecolour+}}{1}% +{*}{{\literatecolour*}}{1}% +{!}{{\literatecolour!}}{1}% +{[}{{\literatecolour[}}{1}% +{]}{{\literatecolour]}}{1}% +{<}{{\literatecolour<}}{1}% +{>}{{\literatecolour>}}{1}% +,% +commentstyle=\color{commentcolour}\slshape, +morecomment=[l][commentstyle]{C}, % need ! as well for F90 +morestring=[b][stringstyle]", +morestring=[d][stringstyle]' +} + +\newcommand{\inputfortran}[1]{\lstinputlisting[style=fortranstyle, title={\codetitlestyle{FORTRAN code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{fortran}[1][]{\lstset{style=fortranstyle, title={\codetitlestyle{FORTRAN code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{fortran:nt}[1][]{\lstset{style=fortranstyle}}{} +\newcommand{\fortraninline}{\lstinline[style=fortranstyle,basicstyle=\ttfamily]} + + +%--- XML --- + +\lstdefinestyle{xmlstyle}{ +language=xml, +showtabs=true, +tab=, +tabsize=2, +basicstyle=\ttfamily\footnotesize, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +emphstyle=\color{exceptioncolour}\bfseries, +commentstyle=\color{commentcolour}\slshape, +breaklines=true, +breakatwhitespace= true, +aboveskip=1ex, +frame=trbl, +framesep=.3ex, +rulecolor=\color{black!40}, +backgroundcolor=\color{yellow!10} +} + +\newcommand{\inputxml}[1]{\lstinputlisting[style=xmlstyle, title={\codetitlestyle{XML code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{xml}[1][]{\lstset{style=xmlstyle, title={\codetitlestyle{XML code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{xml:nt}[1][]{\lstset{style=xmlstyle}}{} + +%--- Typesetting Bash --- + +\lstdefinestyle{bashstyle}{ +language=bash, +showtabs=true, +tab=, +tabsize=2, +basicstyle=\ttfamily\footnotesize, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +otherkeywords={\ , \}, \{, \%, \&, \|}, +emphstyle=\color{exceptioncolour}\bfseries, +commentstyle=\color{commentcolour}\slshape, +breaklines=true, +breakatwhitespace= true, +aboveskip=1ex, +frame=trbl, +framesep=.3ex, +rulecolor=\color{black!40}, +backgroundcolor=\color{yellow!10} +} + +\newcommand{\inputbash}[1]{\lstinputlisting[style=bashstyle, title={\codetitlestyle{Bash code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{bash}[1][]{\lstset{style=bashstyle, title={\codetitlestyle{Bash code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{bash:nt}[1][]{\lstset{style=bashstyle}}{} +\lstnewenvironment{csh}[1][]{\lstset{style=bashstyle, title={\codetitlestyle{Csh code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{csh:nt}[1][]{\lstset{style=bashstyle}}{} + +%--- SWIG --- + +\newcommand{\inputswig}[1]{\lstinputlisting[style=cppstyle, title={\codetitlestyle{SWIG code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{swigcode}[1][]{\lstset{style=cppstyle, title={\codetitlestyle{SWIG code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{swigcode:nt}[1][]{\lstset{style=cppstyle}}{} + +%--- UFL --- + +\newcommand{\inputufl}[1]{\lstinputlisting[style=pythonstyle, title={\codetitlestyle{UFL code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{uflcode}[1][]{\lstset{style=pythonstyle, title={\codetitlestyle{UFL code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{uflcode:nt}[1][]{\lstset{style=pythonstyle}}{} + +%--- MATLAB --- + +% Note: problem with too large width of frame +\lstnewenvironment{matlab}[1][]{ +\lstset{ +language=matlab, +basicstyle=\ttfamily\small, +backgroundcolor=\color{yellow!10} +frame=trbl, +rulecolor=\color{black!40}, +emphstyle=\color{blue}, +commentstyle=\color{commentcolour}\slshape, +keywordstyle=\color{keywordcolour}\bfseries, +}}{} + +%--- Other --- + +\lstdefinestyle{anycodestyle}{ +language=bash, +showtabs=true, +tab=, +tabsize=2, +basicstyle=\ttfamily\footnotesize, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +emphstyle=\color{exceptioncolour}\bfseries, +commentstyle=\color{commentcolour}\slshape, +breaklines=true, +breakatwhitespace= true, +aboveskip=1ex, +frame=trbl, +framesep=.3ex, +rulecolor=\color{black!40}, +backgroundcolor=\color{yellow!10} +} + +\newcommand{\inputanycode}[1]{\lstinputlisting[style=anycodestyle, title={\codetitlestyle{Code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{anycode}[1][]{\lstset{style=anycodestyle, title={\codetitlestyle{Code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{anycode:nt}[1][]{\lstset{style=anycodestyle}}{} + +%--- Output from running programs --- + +\lstnewenvironment{progoutput}[1][]{\lstset{style=gencodestyle, title={\codetitlestyle{Output}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{progoutput:nt}[1][]{\lstset{style=gencodestyle}}{} + +%--- Generated code --- + +\lstdefinestyle{gencodestyle}{ +language=bash, +showtabs=true, +tab=, +tabsize=2, +basicstyle=\ttfamily\footnotesize, +stringstyle=\color{stringcolour}, +showstringspaces=false, +alsoletter={1234567890}, +emphstyle=\color{exceptioncolour}\bfseries, +commentstyle=\color{commentcolour}\slshape, +breaklines=true, +breakatwhitespace= true, +aboveskip=1ex, +frame=trbl, +framesep=.3ex, +rulecolor=\color{black!40}, +backgroundcolor=\color{yellow!10} +} + +\newcommand{\inputgencode}[1]{\lstinputlisting[style=cppstyle, title={\codetitlestyle{Generated code}}, belowcaptionskip=\belowtitleskip]{#1}} +\lstnewenvironment{gencode}[1][]{\lstset{style=gencodestyle, title={\codetitlestyle{Generated code}}, belowcaptionskip=\belowtitleskip}}{} +\lstnewenvironment{gencode:nt}[1][]{\lstset{style=gencodestyle}}{} diff --git a/9.5/nadigest b/9.5/nadigest new file mode 100644 index 0000000..61b672d --- /dev/null +++ b/9.5/nadigest @@ -0,0 +1,30 @@ +Version 9.3.0 of deal.II, the object-oriented finite element library +awarded the J. H. Wilkinson Prize for Numerical Software, has been +released. It is available for free under an Open Source license from +the deal.II homepage at https://www.dealii.org/ + +The major changes of this release are: +- Ten new tutorial programs covering: particle methods, tracking + locations in a flow field, a matrix-free geometric multigrid solver + for a nonlinear problem, automatic and symbolic differentiation, + SUNDIALS interfaces for nonlinear problems, SIPG approach to + discontinuous Galerkin methods, an explicit integrator for the + Euler equations, a solver for the Black-Scholes equations, and + topology optimization problems. +- Experimental support for simplex and mixed meshes. +- Improved flexibility of the particle infrastructure. +- Support for global-coarsening multigrid algorithms. +- Advances in the matrix-free infrastructure. +- Usage of MPI-3.0 shared-memory features to reduce memory footprint +- Improved support for evaluation and integration at arbitrary points +- More than 210 other new features, improvements, and bugfixes. +For more information see the preprint at https://www.dealii.org/deal93-preprint.pdf + +The main features of deal.II are: +- Extensive documentation and 76 fully-functional example programs +- Support for dimension-independent programming +- Locally refined adaptive meshes with multigrid support +- A zoo of different finite elements and fast linear algebra +- Built-in support for shared memory and distributed parallel computing, +- Interfaces to Trilinos, PETSc, METIS, UMFPACK and other external software +- Output for a wide variety of visualization platforms. diff --git a/9.5/paper.bib b/9.5/paper.bib new file mode 100644 index 0000000..2f0b9fb --- /dev/null +++ b/9.5/paper.bib @@ -0,0 +1,1446 @@ +%% do not edit this file, edit in the deal.II main repository, copy here, but +%% keep this note in here for the next one. + +%% The deal.II paper + +@Article{BangerthHartmannKanschat2007, + title = {deal.{II} --- a General Purpose Object Oriented Finite Element Library}, + author = {Bangerth, W. and Hartmann, R. and Kanschat, G.}, + journal = {{ACM} Trans. Math. Softw.}, + volume = {33}, + number = {4}, + year = {2007}, + doi = {10.1145/1268776.1268779} +} + +@Article{dealII2020design, + title = {The {deal.II} finite element library: {D}esign, features, and + insights}, + author = {Daniel Arndt and Wolfgang Bangerth and Denis Davydov and Timo + Heister and Luca Heltai and Martin Kronbichler and Matthias Maier + and Jean-Paul Pelteret and Bruno Turcksin and David Wells}, + journal = {Computers \& Mathematics with Applications}, + volume = {81}, + pages = {407--422}, + year = {2021}, + DOI = {10.1016/j.camwa.2020.02.022}, +} + +@Misc{changes84, + Title = {List of Changes}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_3_and_8_4.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_3_and_8_4.html} +} + +@Misc{changes85, + Title = {List of Changes}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html} +} + +@Misc{changes90, + key={List of Changes}, + Title = {List of Changes for 9.0}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_5_and_9_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_8_5_0_and_9_0.html} +} + +@Misc{changes91, + key={List of Changes}, + Title = {List of Changes for 9.1}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_0_1_and_9_1_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_0_1_and_9_1_0.html} +} + +@Misc{changes92, + key={List of Changes}, + Title = {List of Changes for 9.2}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html} +} + +@Misc{changes93, + key={List of Changes}, + Title = {List of Changes for 9.3}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_2_0_and_9_3_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_2_0_and_9_3_0.html} +} + +@Misc{changes94, + key={List of Changes}, + Title = {List of Changes for 9.4}, + Note = {\url{https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_3_3_and_9_4_0.html}}, + Url = {https://www.dealii.org/developer/doxygen/deal.II/changes_between_9_3_3_and_9_4_0.html} +} + +@article{dealII80, + title = {The \texttt{deal.II} Library, Version 8.0}, + author = {W. Bangerth and T. Heister and L. Heltai and G. Kanschat + and M. Kronbichler and M. Maier and B. Turcksin and T. D. Young}, + journal = {arXiv preprint \url{http://arxiv.org/abs/1312.2266v3}}, + year = {2013}, +} + +@article{dealII81, + title = {The \texttt{deal.II} Library, Version 8.1}, + author = {W. Bangerth and T. Heister and L. Heltai and G. Kanschat + and M. Kronbichler and M. Maier and B. Turcksin and T. D. Young}, + journal = {arXiv preprint \url{http://arxiv.org/abs/1312.2266v4}}, + year = {2013}, +} + +@article{dealII82, + title = {The \texttt{deal.II} Library, Version 8.2}, + author = {W. Bangerth and T. Heister and L. Heltai + and G. Kanschat and M. Kronbichler + and M. Maier and B. Turcksin + and T. D. Young}, + journal = {Archive of Numerical Software}, + volume = 3, + year = {2015}, +} + +@article{dealII83, + title = {The \texttt{deal.II} Library, Version 8.3}, + author = {W. Bangerth and T. Heister and L. Heltai + and G. Kanschat and M. Kronbichler + and M. Maier and B. Turcksin}, + journal = {Archive of Numerical Software}, + volume = {4}, + number = {100}, + year = {2016}, + pages = {1--11}, + issn = {2197-8263}, + doi = {10.11588/ans.2016.100.23122}, +} + + @article{dealII85, + title = {The \texttt{deal.II} Library, Version 8.5}, + author = {D. Arndt and W. Bangerth and D. Davydov and T. Heister and + L. Heltai and M. Kronbichler and M. Maier and J.-P. Pelteret + and B. Turcksin and D. Wells}, + journal = {Journal of Numerical Mathematics}, + year = {2017}, + volume = 25, + number = 3, + pages = {137--146}, + Doi = {10.1515/jnma-2016-1045} + } + +@article{dealII84, + title = {The \texttt{deal.II} Library, Version 8.4}, + author = {W. Bangerth and D. Davydov and T. Heister and + L. Heltai and G. Kanschat and M. Kronbichler and M. Maier + and B. Turcksin and D. Wells}, + journal = {Journal of Numerical Mathematics}, + year = {2016}, + volume = {24}, + number = {3}, + pages = {135--141}, + doi = {10.1515/jnma-2016-1045} + } + + + +@article{dealII90, +title = {The \texttt{deal.II} Library, Version 9.0}, +author = {G. Alzetta and D. Arndt and W. Bangerth and V. Boddu and + B. Brands and D. Davydov and R. Gassmoeller and T. Heister and + L. Heltai and K. Kormann and M. Kronbichler and M. Maier and + J.-P. Pelteret and B. Turcksin and D. Wells}, +journal = {J. Numer. Math.}, +volume = "26", +number = "4", +pages = "173--184", +year = 2018, +doi = "10.1515/jnma-2018-0054" +} + + +@article{dealII91, + doi = {10.1515/jnma-2019-0064}, + url = {https://doi.org/10.1515/jnma-2019-0064}, + year = {2019}, + month = dec, + publisher = {Walter de Gruyter {GmbH}}, + volume = {27}, + number = {4}, + pages = {203--213}, + author = {Daniel Arndt and Wolfgang Bangerth and Thomas C. Clevenger and Denis Davydov and Marc Fehling and Daniel Garcia-Sanchez and Graham Harper and Timo Heister and Luca Heltai and Martin Kronbichler and Ross Maguire Kynch and Matthias Maier and Jean-Paul Pelteret and Bruno Turcksin and David Wells}, + title = {The \texttt{deal.II} library, Version 9.1}, + journal = {Journal of Numerical Mathematics} +} + + +@article{dealII92, + title = {The \texttt{deal.II} Library, Version 9.2}, + author = {Daniel Arndt and Wolfgang Bangerth and Bruno Blais and + Thomas C. Clevenger and Marc Fehling and Alexander V. Grayver and + Timo Heister and Luca Heltai and Martin Kronbichler and Matthias Maier and + Peter Munch and Jean-Paul Pelteret and Reza Rastak and + Ignacio Thomas and Bruno Turcksin and Zhuoran Wang and David Wells}, + journal = {Journal of Numerical Mathematics}, + publisher = {De Gruyter}, + year = {2020}, + volume = {28}, + number = {3}, + pages = {131--146}, + DOI = {10.1515/jnma-2020-0043}, + url = {https://doi.org/10.1515/jnma-2020-0043} +} + +@article{dealII93, + title = {The \texttt{deal.II} Library, Version 9.3}, + author = {Daniel Arndt and Wolfgang Bangerth and Bruno Blais and + Marc Fehling and Rene Gassm{\"o}ller and Timo Heister + and Luca Heltai and Uwe K{\"o}cher and Martin + Kronbichler and Matthias Maier and Peter Munch and + Jean-Paul Pelteret and Sebastian Proell and Konrad + Simon and Bruno Turcksin and David Wells and Jiaqi + Zhang}, + journal = {Journal of Numerical Mathematics}, + year = {2021}, + url = {https://dealii.org/deal93-preprint.pdf}, + doi = {10.1515/jnma-2021-0081}, + volume = {29}, + number = {3}, + pages = {171--186} +} + + +%% The deal.II web page and online reference. +%% Please cite specific versions only if you really need to + +@Manual{DealIIReference, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and T. Heister and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org} +} + +@Manual{DealIIReference600, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/6.0.0}, + year = 2007 +} + +@Manual{DealIIReference610, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/6.1.0}, + year = 2008 +} + +@Manual{DealIIReference621, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/6.2.1}, + year = 2009 +} + +@Manual{DealIIReference631, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/6.3.1}, + year = 2010 +} + +@Manual{DealIIReference700, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/7.0.0}, + year = 2011 +} + +@Manual{DealIIReference710, + title = {{\tt deal.{I}{I}} Differential Equations Analysis Library, + Technical Reference}, + author = {W. Bangerth and G. Kanschat}, + note = {\texttt{http://www.dealii.org}}, + url = {http://www.dealii.org/7.1.0}, + year = 2011 +} + +%% Additional papers on deal.II and special aspects + +@TechReport{BangerthKanschat1999, + title = {Concepts for Object-Oriented Finite Element Software -- the \texttt{deal.II} library}, + address = {Heidelberg}, + author = {Bangerth, W. and Kanschat, G.}, + institution = {SFB~359}, + number = {1999-43}, + type = {Preprint}, + year = {1999}, + url = {http://www.dealii.org/developer/reports/deal-paper.pdf} +} + + +@article{SartoriGiulianiBardelloni-2018-a, + Author = {Sartori, Alberto and Giuliani, Nicola and Bardelloni, Mauro and Heltai, Luca}, + Journal = {SoftwareX}, + Pages = {318--327}, + Title = {{deal2lkit: A toolkit library for high performance programming in deal.II}}, + Volume = {7}, + Year = {2018}} + + +@Article{BangerthKayserHerold2007, + author = {W. Bangerth and O. Kayser-Herold}, + title = {Data Structures and Requirements for $hp$ Finite Element + Software}, + journal = {ACM Transactions on Mathematical Software}, + year = 2009, + volume = 36, + number = 1, + pages = {4/1--4/31} +} + +@Article{JanssenKanschat2011, + author = {Janssen, B. and Kanschat, G.}, + title = {Adaptive multilevel methods with local smoothing for + {${H}^1$}- and {$H^{\text{curl}}$}-conforming high order + finite element methods}, + journal = {SIAM J. Sci. Comput.}, + year = 2011, + volume = 33, + number = 4, + pages = {2095--2114}, + doi = {10.1137/090778523} +} + +@Article{Kanschat2004, + title = {Multi-level methods for discontinuous {G}alerkin {FEM} on locally refined meshes}, + author = {Kanschat, G.}, + journal = {Comput. \& Struct.}, + number = {28}, + pages = {2437--2445}, + volume = {82}, + year = {2004}, + doi = {10.1016/j.compstruc.2004.04.015} +} + +@Article{BangerthBursteddeHeisterKronbichler11, + author = {W. Bangerth and C. Burstedde and T. Heister + and M. Kronbichler}, + title = {Algorithms and data structures for massively parallel generic + adaptive finite element codes}, + journal = {ACM Transactions on Mathematical Software}, + year = {2012}, + volume = {38}, + number = {2}, + pages = {14/1--28}} + + +@Article{KronbichlerKormann2012, + author = {M. Kronbichler and K. Kormann}, + title = {A generic interface for parallel cell-based finite element operator application}, + journal = {Comput. Fluids}, + year = 2012, + volume = 63, + pages = {135--147}} + +@Article{KronbichlerWall2018, + author = {Kronbichler, M. and Wall, W. A.}, + title = {A performance comparison of continuous and discontinuous {G}alerkin + methods with fast multigrid solvers}, + journal = {SIAM J. Sci. Comput.}, + pages = {A3423--A3448}, + volume = 40, + number = 5, + year = 2018, + doi = {10.1137/16M110455X}} + +@Article{KronbichlerKormann2019, + author = {M. Kronbichler and K. Kormann}, + title = {Fast matrix-free evaluation of discontinuous {G}alerkin finite element operators}, + journal = {ACM Transactions on Mathematical Software}, + volume = 45, + number = 3, + pages = {29:1--29:40}, + year = 2019, + doi = {10.1145/3325864}} + +@Article{KronbichlerLjungkvist2019, + author = {Kronbichler, M. and Ljungkvist, K.}, + title = {Multigrid for Matrix-Free High-Order Finite Element Computations on Graphics Processors}, + journal = {ACM Transactions on Parallel Compututing}, + volume = {6}, + number = {1}, + pages = {2/1--32}, + year = 2019} + +@article{Fehn2020, + doi = {10.1016/j.jcp.2020.109538}, + year = {2020}, + volume = {415}, + pages = {109538}, + author = {Niklas Fehn and Peter Munch and Wolfgang A. Wall and Martin Kronbichler}, + title = {Hybrid multigrid methods for high-order discontinuous {G}alerkin discretizations}, + journal = {Journal of Computational Physics} +} + + +@inproceedings{Arndt2020sppexa, +author = {Daniel Arndt and Niklas Fehn and Guido Kanschat and Katharina Kormann and Martin Kronbichler and Peter Munch and Wolfgang A. Wall and Julius Witte}, +title = {{ExaDG} -- High-Order Discontinuous {G}alerkin for the Exa-Scale}, +booktitle="Software for Exascale Computing -- SPPEXA 2016--2019", +series={Lecture Notes in Computational Science and Engineering 136}, +year="2020", +publisher="Springer International Publishing", +address="Cham", +editor="Bungartz, Hans-Joachim +and Nagel, Wolfgang E. +and Reiz, Severin +and Uekermann, Benjamin +and Neumann, Philipp", +doi = {10.1007/978-3-030-47956-5_8} +} + + +@techreport{DeSimoneHeltaiManigrasso2009, + Author = {A. DeSimone and L. Heltai and C. Manigrasso}, + Institution = {SISSA}, + Number = {42/2009/M}, + Title = {Tools for the Solution of {PDEs} Defined on Curved Manifolds with deal.{II}}, + Year = {2009}} + +@techreport{HeltaiMola2015, + Author = {L. Heltai and A. Mola}, + Institution = {SISSA}, + Title = {{Towards the Integration of CAD and FEM using open source libraries: a +Collection of deal.II Manifold Wrappers for the OpenCASCADE Library}}, + Year = 2015} + +@article{HeltaiBangerthKronbichlerMola2019, + doi = {10.1145/3468428}, + year = {2021}, + month = dec, + publisher = {Association for Computing Machinery ({ACM})}, + volume = {47}, + number = {4}, + pages = {1--30}, + author = {Luca Heltai and Wolfgang Bangerth and Martin Kronbichler and Andrea Mola}, + title = {Propagating Geometry Information to Finite Element Computations}, + journal = {{ACM} Transactions on Mathematical Software} +} + +@article{trilinos64, + author = {C. Jhurani and + T. M. Austin and + M. A. Heroux and + J. M. Willenbring}, + title = {Supporting 64-bit global indices in {E}petra and other {T}rilinos + packages -- {T}echniques used and lessons learned}, + journal = {arXiv}, + volume = {1307.6638}, + year = {2013}, + ee = {http://arxiv.org/abs/1307.6638}, + bibsource = {DBLP, http://dblp.uni-trier.de} +} + + +@Article{BH13, + author = {Wolfgang Bangerth and Timo Heister}, + title = {What makes computational open source software libraries successful?}, + journal = {Computational Science \& Discovery}, + year = 2013, + volume = 6, + pages = {015010/1--18}} + + +@Article{FHB13, + author = {J. Frohne and T. Heister and W. Bangerth}, + title = {Efficient numerical methods for the large-scale, parallel + solution of elastoplastic contact problems}, + journal = {submitted}, + year = 2013} + +@Article{TKB16, + author = {B. Turcksin and M. Kronbichler and W. Bangerth}, + title = {\textit{WorkStream} -- a design pattern for multicore-enabled finite element computations}, + journal = {ACM Transactions on Mathematical Software}, + year = 2016, + volume = 43, + number = 1, + pages = {2/1--2/29} +} + +@Misc{cpp11, + key = {C++11}, + author = {{International Standards Organization}}, + title = {{ISO/IEC} 14882:2011: The {C}++11 Programming Language Standard}, + howpublished = {\url{http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372}}, + year = 2011} + +@Misc{cpp14, + key = {C++14}, + author = {{International Standards Organization}}, + title = {{ISO/IEC} 14882:2014: The {C}++14 Programming Language Standard}, + howpublished = {\url{https://www.iso.org/standard/64029.html}}, + year = 2014} + +@Article{heroux2005trilinos, + author = {M. A. Heroux and R. A. Bartlett and V. E. Howle and R. J. Hoekstra and J. J. Hu + and T. G. Kolda and R. B. Lehoucq and K. R. Long and R. P. Pawlowski and + E. T. Phipps and A. G. Salinger and H. K. Thornquist and R. S. Tuminaro and + J. M. Willenbring and A. Williams and K. S. Stanley}, + title = {An overview of the {T}rilinos project}, + journal = {ACM Transactions on Mathematical Software}, + year = 2005, + volume = 31, + pages = {397--423}} + +See: https://trilinos.github.io/cite.html +@Manual{trilinos-web-page, + title = {The {T}rilinos {P}roject {W}ebsite}, + author = {{The Trilinos Project Team}}, + note = {\url{https://trilinos.github.io/}} +} + +See: https://petsc.org/release/#citing-petsc +@misc{petsc-web-page, + author = {Satish Balay and Shrirang Abhyankar and Mark~F. Adams and Steven Benson and Jed Brown + and Peter Brune and Kris Buschelman and Emil~M. Constantinescu and Lisandro Dalcin and Alp Dener + and Victor Eijkhout and William~D. Gropp and V\'{a}clav Hapla and Tobin Isaac and Pierre Jolivet + and Dmitry Karpeev and Dinesh Kaushik and Matthew~G. Knepley and Fande Kong and Scott Kruger + and Dave~A. May and Lois Curfman McInnes and Richard Tran Mills and Lawrence Mitchell and Todd Munson + and Jose~E. Roman and Karl Rupp and Patrick Sanan and Jason Sarich and Barry~F. Smith + and Stefano Zampini and Hong Zhang and Hong Zhang and Junchao Zhang}, + title = {{PETS}c {W}eb page}, + url = {https://petsc.org/}, + howpublished = {\url{https://petsc.org/}}, + year = {2022}, +} + +@techreport{petsc-user-ref, + author = {Satish Balay and Shrirang Abhyankar and Mark~F. Adams and Steven Benson and Jed Brown + and Peter Brune and Kris Buschelman and Emil Constantinescu and Lisandro Dalcin and Alp Dener + and Victor Eijkhout and William~D. Gropp and V\'{a}clav Hapla and Tobin Isaac and Pierre Jolivet + and Dmitry Karpeev and Dinesh Kaushik and Matthew~G. Knepley and Fande Kong and Scott Kruger + and Dave~A. May and Lois Curfman McInnes and Richard Tran Mills and Lawrence Mitchell and Todd Munson + and Jose~E. Roman and Karl Rupp and Patrick Sanan and Jason Sarich and Barry~F. Smith + and Stefano Zampini and Hong Zhang and Hong Zhang and Junchao Zhang}, + title = {{PETSc/TAO} Users Manual}, + institution = {Argonne National Laboratory}, + number = {ANL-21/39 - Revision 3.17}, + year = {2022}, +} + + +@Article{davis2004umfpack, + author = {T. A. Davis}, + title = {Algorithm 832: {UMFPACK V4.3}---an unsymmetric-pattern multifrontal method}, + journal = {ACM Transactions on Mathematical Software}, + year = 2004, + volume = 30, + pages = {196--199}} + +@Book{reinders2007tbb, + author = {J. Reinders}, + title = {Intel Threading Building Blocks}, + publisher = {O'Reilly}, + year = 2007} + +See: https://p4est.github.io/cite.html +@Article{burstedde2011p4est, + author = {C. Burstedde and L. C. Wilcox and O. Ghattas}, + title = {\texttt{p4est}: {S}calable algorithms for parallel + adaptive mesh refinement on forests of octrees}, + journal = {SIAM J. Sci. Comput.}, + volume = 33, + number = 3, + pages = {1103-1133}, + year = 2011} + +@article{burstedde2020parallel, + doi = {10.1145/3401990}, + title={Parallel tree algorithms for {AMR} and non-standard data access}, + author={Burstedde, Carsten}, + journal={ACM Transactions on Mathematical Software (TOMS)}, + volume={46}, + number={4}, + pages={1--31}, + year={2020}, + publisher={ACM New York, NY, USA} +} + +@Book{lehoucq1998arpack, + author = {R. B. Lehoucq and D. C. Sorensen and C. Yang}, + title = {{ARPACK} users' guide: solution of large-scale eigenvalue problems with implicitly restarted Arnoldi methods}, + publisher = {SIAM, Philadelphia}, + year = 1998} + +See: http://mumps.enseeiht.fr/index.php?page=bibtex +@Article{amestoy2000, + author = {P.R. Amestoy and I.S. Duff and J.-Y. L'Excellent}, + title = {Multifrontal parallel distributed symmetric and unsymmetric solvers}, + journal = {Comput. Methods in Appl. Mech. Eng.}, + year = 2000, + volume = 184, + pages = {501--520}} + + +@article{amestoy2001mumps, + author = {P. R. Amestoy and I. S. Duff and J. Koster and J.-Y. L'Excellent}, + title = {A Fully Asynchronous Multifrontal Solver Using Distributed Dynamic Scheduling}, + journal = {SIAM Journal on Matrix Analysis and Applications}, + volume = {23}, + number = {1}, + year = {2001}, + pages = {15-41} +} + + +@article{amestoy2006, + author = {P. R. Amestoy and A. Guermouche and J.-Y. L'Excellent and S. Pralet}, + title = {Hybrid scheduling for the parallel solution of linear systems}, + journal = {Parallel Computing}, + volume = {32}, + number = {2}, + year = {2006}, + pages = {136-156} +} + +@article{amestoy2019mumps, + title = {{Performance and Scalability of the Block Low-Rank Multifrontal + Factorization on Multicore Architectures}}, + author = {P. R. Amestoy and A. Buttari and J.-Y. L'Excellent and T. Mary}, + journal = {ACM Transactions on Mathematical Software}, + volume = {45}, + issue = {1}, + pages = {2:1--2:26}, + year={2019}, +} + +See: https://ginkgo-project.github.io/ginkgo/doc/develop/citing_ginkgo.html +@article{anzt2022ginkgo, + doi = {10.1145/3480935}, + url = {https://doi.org/10.1145/3480935}, + year = {2022}, + month = mar, + publisher = {Association for Computing Machinery ({ACM})}, + volume = {48}, + number = {1}, + pages = {1--33}, + author = {Hartwig Anzt and Terry Cojean and Goran Flegar and Fritz G\"{o}bel and Thomas Gr\"{u}tzmacher and Pratik Nayak and Tobias Ribizel and Yuhsiang Mike Tsai and Enrique S. Quintana-Ort{\'{\i}}}, + title = {Ginkgo: A Modern Linear Operator Algebra Framework for High Performance Computing}, + journal = {{ACM} Transactions on Mathematical Software} +} + +@article{anzt2020ginkgo, + doi = {10.21105/joss.02260}, + url = {https://doi.org/10.21105/joss.02260}, + year = {2020}, + publisher = {The Open Journal}, + volume = {5}, + number = {52}, + pages = {2260}, + author = {Hartwig Anzt and Terry Cojean and Yen-Chen Chen and Goran Flegar and Fritz G\"{o}bel and Thomas Gr\"{u}tzmacher and Pratik Nayak and Tobias Ribizel and Yu-Hsiang Tsai}, + title = {Ginkgo: A high performance numerical linear algebra library}, + journal = {Journal of Open Source Software} +} + +@Misc{opencascade-web-page, + key = {OpenCASCADE}, + title = {{OpenCASCADE: Open CASCADE Technology, 3D modeling \& numerical simulation}}, + note = {\url{http://www.opencascade.org/}}} + +@Misc{muparser-web-page, + key = {muparser}, + title = {{muparser: Fast Math Parser Library}}, + note = {\url{https://beltoforion.de/en/muparser}}} + +@Misc{symengine-web-page, + key = {symengine}, + title = {{SymEngine: fast symbolic manipulation library, written in C++}}, + note = {\url{https://symengine.org/}}} + +@Misc{boost-web-page, + key = {Boost}, + title = {{Boost C++ Libraries}}, + note = {\url{http://www.boost.org/}}} + +See: http://portal.hdfgroup.org/display/knowledge/How+do+I+properly+cite+HDF5+in+a+paper +@Misc{hdf5-web-page, + author = {{The HDF Group}}, + title = "{Hierarchical Data Format, version 5}", + year = {2022}, + note = {\url{http://www.hdfgroup.org/HDF5/}} +} + +@article{karypis1998metis, + title={A fast and high quality multilevel scheme for partitioning irregular graphs}, + author={Karypis, G. and Kumar, V.}, + journal={SIAM J. Sci. Comput.}, + volume={20}, + number={1}, + pages={359--392}, + year={1998}, + publisher={SIAM} +} + +@article{rew1990netcdf, + title={{NetCDF}: an interface for scientific data access}, + author={Rew, R. and Davis, G.}, + journal={Computer Graphics and Applications, IEEE}, + volume={10}, + number={4}, + pages={76--82}, + year={1990}, + publisher={IEEE} +} + +@Article{hernandez2005slepc, + author = "V. Hernandez and J. E. Roman and V. Vidal", + title = "{SLEPc}: A Scalable and Flexible Toolkit for the Solution of Eigenvalue + Problems", + journal = "{ACM} Trans. Math. Software", + volume = "31", + number = "3", + pages = "351--362", + year = "2005" +} + +@article{Lachat1976, +author = {Lachat, J. C. and Watson, J. O.}, +doi = {10.1002/nme.1620100503}, +issn = {0029-5981}, +journal = {International Journal for Numerical Methods in Engineering}, +number = {5}, +pages = {991--1005}, +title = {{Effective numerical treatment of boundary integral equations: A formulation for three-dimensional elastostatics}}, +url = {http://doi.wiley.com/10.1002/nme.1620100503}, +volume = {10}, +year = {1976} +} + +@article{Telles-2005-a, +author = {Telles, JCF}, +journal = {International Journal for Numerical Methods in Engineering}, +mendeley-groups = {FEM}, +mendeley-tags = {filedpapers}, +number = {5}, +publisher = {Wiley Online Library}, +title = {{A self-adaptive co-ordinate transformation for efficient numerical evaluation of general boundary element integrals}}, +type = {Journal article}, +volume = {24}, +year = {2005} +} + +@article{GiulianiMolaHeltai-2015-a, +author = {Giuliani, Nicola and Mola, Andrea and Heltai, Luca and Formaggia, Luca}, +doi = {10.1016/j.enganabound.2015.04.006}, +file = {:Users/heltai/Library/Mobile Documents/com\~{}apple\~{}CloudDocs/Mendeley//Giuliani et al.\_2015\_FEM SUPG stabilisation of mixed isoparametric BEMs application to linearised free surface flows.pdf:pdf}, +journal = {Engineering Analysis with Boundary Elements}, +keywords = {linearised free surface}, +pages = {8--22}, +title = {{FEM SUPG stabilisation of mixed isoparametric BEMs: application to linearised free surface flows}}, +volume = {59}, +year = {2015} +} + +@book{Cottrell2009, +author = {Cottrell, JA A and Hughes, TJR J R and Bazilevs, Y.}, +file = {:Users/heltai/Library/Mobile Documents/com\~{}apple\~{}CloudDocs/Mendeley/Cottrell, Hughes, Bazilevs\_2009\_Isogeometric analysis toward integration of CAD and FEA.pdf:pdf}, +mendeley-groups = {Igastokes,Books,Geostrophisics,FEM}, +publisher = {John Wiley \& Sons Inc}, +title = {{Isogeometric analysis: toward integration of CAD and FEA}}, +url = {http://books.google.com/books?hl=en\&lr=\&id=9Q9y0Xtz5E4C\&oi=fnd\&pg=PR5\&dq=Isogeometric+analysis:+toward+integration+of+CAD+and+FEA\&ots=JLSZtYQkL3\&sig=MZdoIBEu1cZs2sAwnPDy4WVOaVE}, +year = {2009} +} + +@book{AbramowitzStegun, + author = {M. Abramowitz and I.A. Stegun}, + title = {Handbook of Mathematical Functions}, + publisher = {Dover}, + year = {1965} +} + +@techreport{MadayPatera, + author = {Y. Maday and A.T. Patera and E.M. Rønquist}, + title = {A well-posed optimal spectral element approximation for the {S}tokes problem}, + number = {87-47}, + institution = {ICASE}, + address = {Hampton, VA}, + year = {1987} +} + + +@article{MaierBardelloniHeltai-2016-a, + Author = {Matthias Maier and Mauro Bardelloni and Luca Heltai}, + Journal = {Computers and Mathematics with Applications}, + Title = {Linear{O}perator -- a generic, high-level expression syntax for linear algebra}, + Doi = {10.1016/j.camwa.2016.04.024}, + number = {1}, + pages = {1--24}, + volume = {72}, + Year = {2016}} + +@misc{MaierBardelloniHeltai-2016-b, + author = {Matthias Maier and + Mauro Bardelloni and + Luca Heltai}, + title = {{LinearOperator Benchmarks, Version 1.0.0}}, + month = mar, + year = 2016, + doi = {10.5281/zenodo.47202}, + url = {http://dx.doi.org/10.5281/zenodo.47202} +} + +@article{Davydov2016, + Author = {Denis Davydov and Tymofiy Gerasimov and Jean-Paul Pelteret and Paul Steinmann}, + Day = {12}, + Doi = {10.1186/s40323-017-0093-0}, + Issn = {2213-7467}, + Journal = {Advanced Modeling and Simulation in Engineering Sciences}, + Month = {Dec}, + Number = {1}, + Pages = {7}, + Title = {Convergence study of the h-adaptive {PUM} and the hp-adaptive {FEM} applied to eigenvalue problems in quantum mechanics}, + Volume = {4}, + Year = {2017}, +} + +See: https://www.gnu.org/software/gsl/#moreinfo +@book{galassi2009gsl, + author = {Galassi, M. and Davies, Jim and Theiler, James and Gough, B. and Jungman, G. and Booth, Michael and Rossi, F.}, + title = {GNU Scientific Library Reference Manual}, + year = {2009}, + isbn = {0954612078}, + publisher = {Network Theory Ltd.}, + edition = {3rd} +} + +@misc{gsl-web-page, + key = {GSL}, + title = {{GSL: GNU Scientific Library}}, + note = {\url{http://www.gnu.org/software/gsl}}} + +@misc{nanoflann, + author = {Blanco, Jose Luis and Rai, Prankal Kumar}, + title = {nanoflann: a {C}++ header-only fork of {FLANN}, a library for + {N}earest {N}eighbor ({NN}) with {KD}-trees}, + howpublished = {\url{https://github.com/jlblancoc/nanoflann}}, + year = {2014} +} + +@inproceedings{adol-c, + author = {A. Walther and A. Griewank}, + title = {Getting started with {ADOL}-{C}}, + booktitle = {Combinatorial Scientific Computing}, + publisher = {U. Naumann and O.Schenk}, + series = {Chapman-Hall CRC Computational Science}, + pages = {181-202}, + year = {2012} +} + +@Article{griewank1996adolc, + author = {Griewank, Andreas and Juedes, David and Utke, Jean}, + title = {Algorithm 755: {ADOL-C}: a package for the automatic differentiation of algorithms written in {C/C++}}, + journal = {ACM Transactions on Mathematical Software}, + year = {1996}, + volume = {22}, + number = {2}, + pages = {131--167}, + doi = {10.1145/229473.229474}, + publisher = {ACM}, +} + +@article{hindmarsh2005sundials, + title={{SUNDIALS}: Suite of nonlinear and differential/algebraic equation solvers}, + author={Hindmarsh, Alan C and Brown, Peter N and Grant, Keith E and Lee, Steven L and Serban, Radu and Shumaker, Dan E and Woodward, Carol S}, + journal={ACM Transactions on Mathematical Software}, + volume={31}, + number={3}, + pages={363--396}, + year={2005}, + publisher={ACM} +} + +@Misc{schulze2021assimp, + title={Open asset import library (assimp)}, + author={Schulze, Thomas and Gessler, Alexander and Kulling, Kim and Nadlinger, David and Klein, Jonathan and Sibly, Mark and Gubisch, Matthias}, + HowPublished={\url{https://github.com/assimp/assimp}}, + year={2021} +} + +@Misc{clang-tidy, + Title = {{Clang-Tidy}}, + Author = {LLVM}, + HowPublished = {\url{http://clang.llvm.org/extra/clang-tidy/}}, +} + +@Misc{coverity, + Title = {{C}overity {S}can ({Synopsys, Inc.})}, + Key = {Coverity}, + HowPublished = {\url{https://scan.coverity.com}}, +} + +@TechReport{GHPB16, + author = {R. Gassm{\"o}ller and E. Heien and E. G. Puckett and W. Bangerth}, + title = {Flexible and scalable particle-in-cell methods for massively parallel computations}, + institution = {arXiv:1612.03369}, + year = 2016} + + +@Article{KHB12, + author = {M. Kronbichler and T. Heister and W. Bangerth}, + title = {High Accuracy Mantle Convection Simulation through Modern Numerical Methods}, + journal = {Geophysics Journal International}, + year = 2012, + volume = 191, + pages = {12--29}} + +@Article{HDGB17, + author = {T. Heister and J. Dannberg and R. Gassm{\"o}ller and W. Bangerth}, + title = {High Accuracy Mantle Convection Simulation through Modern Numerical Methods. {II}: Realistic Models and Problems}, + journal = {Geophysics Journal International}, + year = 2017, + volume = 210, + pages = {833--851}} + +@techreport{ridzal2014rol, + title={Rapid Optimization Library}, + author={Ridzal, Denis and Kouri, Drew Philip}, + year={2014}, + institution={Sandia National Laboratories (SNL-NM), Albuquerque, NM (United States)} +} + +@BOOK{blackford1997scalapack, + AUTHOR = {Blackford, L. S. and Choi, J. and Cleary, A. and + D'Azevedo, E. and Demmel, J. and Dhillon, I. and + Dongarra, J. and Hammarling, S. and Henry, G. and + Petitet, A. and Stanley, K. and Walker, D. and + Whaley, R. C.}, + TITLE = {{ScaLAPACK} Users' Guide}, + PUBLISHER = {Society for Industrial and Applied Mathematics}, + YEAR = {1997}, + ADDRESS = {Philadelphia, PA}, + ISBN = {0-89871-397-8 (paperback)} +} + +@article{GiulianiMolaHeltai-2018-a, + Author = {Giuliani, Nicola and Mola, Andrea and Heltai, Luca}, + Journal = {Advances in Engineering Software}, + Month = jul, + Pages = {39--58}, + Title = {{$\pi$-BEM: A flexible parallel implementation for adaptive, geometry aware, and high order boundary element methods}}, + Volume = {121}, + Year = {2018}, + doi = {10.1016/j.advengsoft.2018.03.008} +} + +See: https://gmsh.info/ +@article{geuzaine2009gmsh, + title={Gmsh: A {3-D} finite element mesh generator with built-in pre-and post-processing facilities}, + author={Geuzaine, Christophe and Remacle, Jean-Fran{\c{c}}ois}, + journal={International journal for numerical methods in engineering}, + volume={79}, + number={11}, + pages={1309--1331}, + year={2009}, + publisher={Wiley Online Library} +} + +@article{ClevengerHeisterKanschatKronbichler2019, + doi = {10.1145/3425193}, + year = {2021}, + volume = {47}, + number = {1}, + pages = {7/1--27}, + author = {Thomas C. Clevenger and Timo Heister and Guido Kanschat and Martin Kronbichler}, + title = {A Flexible, Parallel, Adaptive Geometric Multigrid Method for {FEM}}, + journal = {{ACM} Transactions on Mathematical Software} +} + + +@BOOK{anderson1999lapack, + AUTHOR = {Anderson, E. and Bai, Z. and Bischof, C. and + Blackford, S. and Demmel, J. and Dongarra, J. and + Du Croz, J. and Greenbaum, A. and Hammarling, S. and + McKenney, A. and Sorensen, D.}, + TITLE = {{LAPACK} Users' Guide}, + EDITION = {Third}, + PUBLISHER = {Society for Industrial and Applied Mathematics}, + YEAR = {1999}, + ADDRESS = {Philadelphia, PA}, + ISBN = {0-89871-447-8 (paperback)} +} + +@misc{Pelteret2016a, + author = {Pelteret, J-P. V. and McBride, A.}, + title = {The \texttt{deal.II} code gallery: Quasi-Static Finite-Strain Compressible Elasticity}, + year = {2016}, + url = {https://dealii.org/developer/doxygen/deal.II/code_gallery_Quasi_static_Finite_strain_Compressible_Elasticity.html}, + note = {Accessed April 2018. doi: \href{http://dx.doi.org/10.5281/zenodo.1228964}{\texttt{10.5281/zenodo.1228964}}}, + doi = {10.5281/zenodo.1228964}, +} + +@InCollection{Bartlett2006a, + author = {Bartlett, R. A. and Gay, D. M. and Phipps, E. T.}, + title = {Automatic Differentiation of C++ Codes for Large-Scale Scientific Computing}, + booktitle = {International Conference on Computational Science {\textendash} {ICCS} 2006}, + publisher = {Springer Berlin Heidelberg}, + year = {2006}, + editor = {Alexandrov, V.N. and van Albada, G.D. and Sloot, P.M.A. and Dongarra, J.}, + pages = {525--532}, + doi = {10.1007/11758549_73}, + organization = {Springer}, +} + +@Misc{cusolver-web-page, + key = {cusolver}, + title = {cu{SOLVER} {L}ibrary}, + note = {\url{https://docs.nvidia.com/cuda/cusolver/index.html}} +} + +@Misc{cusparse-web-page, + key = {cusparse}, + title = {cu{SPARSE} {L}ibrary}, + note = {\url{https://docs.nvidia.com/cuda/cusparse/index.html}} +} + + +@article{BR85, + doi = {10.1090/s0025-5718-1985-0771031-7}, + url = {https://doi.org/10.1090/s0025-5718-1985-0771031-7}, + year = {1985}, + publisher = {American Mathematical Society ({AMS})}, + volume = {44}, + number = {169}, + pages = {71--79}, + author = {Christine Bernardi and Genevi$\lbrace${\`{e}}ve Raugel}, + title = {Analysis of some finite elements for the {S}tokes problem}, + journal = {Mathematics of Computation} +} + +@PhdThesis{Zag06, + author = {S. Zaglmayr}, + title = {High Order Finite Element Methods for Electromagnetic Field Computation}, + school = {Johannes Kepler University, Linz, Austria}, + year = 2006} + + +@article{Kynch2017, + doi = {10.1016/j.compstruc.2016.05.021}, + url = {https://doi.org/10.1016/j.compstruc.2016.05.021}, + year = {2017}, + month = mar, + publisher = {Elsevier {BV}}, + volume = {181}, + pages = {41--54}, + author = {R. M. Kynch and P. D. Ledger}, + title = {Resolving the sign conflict problem for hp{\textendash}hexahedral {N}{\'{e}}d{\'{e}}lec elements with application to eddy current problems}, + journal = {Computers {\&} Structures} +} + +@inproceedings{ljungkvist2017, + author = {Ljungkvist, Karl}, + title = {Matrix-free Finite-element Computations on Graphics Processors with Adaptively Refined Unstructured Meshes}, + booktitle = {Proceedings of the 25th High Performance Computing Symposium}, + series = {HPC '17}, + year = {2017}, + isbn = {978-1-5108-3822-2}, + location = {Virginia Beach, Virginia}, + pages = {1:1--1:12}, + articleno = {1}, + numpages = {12}, + url = {http://dl.acm.org/citation.cfm?id=3108096.3108097}, + acmid = {3108097}, + publisher = {Society for Computer Simulation International}, + address = {San Diego, CA, USA}, + keywords = {GPU, adaptive refinement, finite element methods, hanging nodes, matrix free}, +} + +@techreport{munch2020hyperdeal, + title={hyper.deal: An efficient, matrix-free finite-element library for high-dimensional partial differential equations}, + author={Peter Munch and Katharina Kormann and Martin Kronbichler}, + year={2021}, + institution={arXiv:2002.08110, accepted for publication in the ACM Transactions on Mathematical Software} +} + +@article{Gordon82, +author = {Gordon, William J. and Thiel, Linda C.}, +title = {Transfinite mappings and their application to grid generation}, +journal = {Appl. Math. Comput.}, +volume = 10, +pages = {171--233}, +year = 1982, +doi = {10.1016/0096-3003(82)90191-6} +} + +@article{BabuskaSuri1990, + title = {The p- and h-p versions of the finite element method, an overview}, + author = {Babuška, I. and Suri, M.}, + year = {1990}, + journal = {Computer Methods in Applied Mechanics and Engineering}, + volume = {80}, + pages = {5--26}, + issn = {0045-7825}, + doi = {10.1016/0045-7825(90)90011-A}, + number = {1} +} + +@article{Mavriplis1994, + title = {Adaptive mesh strategies for the spectral element method}, + author = {Mavriplis, C.}, + year = {1994}, + journal = {Computer Methods in Applied Mechanics and Engineering}, + volume = {116}, + pages = {77--86}, + issn = {0045-7825}, + doi = {10.1016/S0045-7825(94)80010-3}, + number = {1} +} + +@article{MelenkWohlmuth2001, + title = {On residual-based a posteriori error estimation in \textit{hp}-{{FEM}}}, + author = {Melenk, J. M. and Wohlmuth, B. I.}, + year = {2001}, + journal = {Advances in Computational Mathematics}, + volume = {15}, + pages = {311--331}, + issn = {1019-7168, 1572-9044}, + doi = {10.1023/A:1014268310921}, + number = {1-4} +} + +@inproceedings{HoustonSeniorSueli2003, + title = {Sobolev regularity estimation for hp-adaptive finite element methods}, + booktitle = {Numerical {{Mathematics}} and {{Advanced Applications}}}, + author = {Houston, P. and Senior, B. and Süli, E.}, + editor = {Brezzi, Franco and Buffa, Annalisa and Corsaro, Stefania and Murli, Almerico}, + year = {2003}, + pages = {631--656}, + publisher = {{Springer Milan}}, + location = {{Milano}}, + doi = {10.1007/978-88-470-2089-4_58}, + isbn = {978-88-470-2089-4} +} + +@article{HoustonSueli2005, + title = {A note on the design of \textit{hp}-adaptive finite element methods for elliptic partial differential equations}, + author = {Houston, P. and Süli, E.}, + year = {2005}, + journal = {Computer Methods in Applied Mechanics and Engineering}, + volume = {194}, + pages = {229--243}, + issn = {0045-7825}, + doi = {10.1016/j.cma.2004.04.009}, + number = {2} +} + +@article{EibnerMelenk2007, + title = {An adaptive strategy for \textit{hp}-{{FEM}} based on testing for analyticity}, + author = {Eibner, T. and Melenk, J. M.}, + year = {2007}, + journal = {Computational Mechanics}, + volume = {39}, + pages = {575--595}, + issn = {1432-0924}, + doi = {10.1007/s00466-006-0107-0}, + number = {5} +} + + + +@Article{GLHPB18, + doi = {10.1029/2018gc007508}, + url = {https://doi.org/10.1029/2018gc007508}, + year = {2018}, + month = sep, + publisher = {American Geophysical Union ({AGU})}, + volume = {19}, + number = {9}, + pages = {3596--3604}, + author = {Rene Gassm\"{o}ller and Harsha Lokavarapu and Eric Heien and Elbridge Gerry Puckett and Wolfgang Bangerth}, + title = {Flexible and Scalable Particle-in-Cell Methods With Adaptive Mesh Refinement for Geodynamic Computations}, + journal = {Geochemistry, Geophysics, Geosystems} +} + +@article{Brenner2005, + doi = {10.1007/s10915-004-4135-7}, + url = {https://doi.org/10.1007/s10915-004-4135-7}, + year = {2005}, + month = jun, + publisher = {Springer Science and Business Media {LLC}}, + volume = {22-23}, + number = {1-3}, + pages = {83--118}, + author = {Susanne C. Brenner and Li-Yeng Sung}, + title = {$C^0$ Interior Penalty Methods for Fourth Order Elliptic Boundary Value Problems on Polygonal Domains}, + journal = {Journal of Scientific Computing} +} + +@Article{clevenger_stokes19, + Title = {Comparison between Algebraic and Matrix-free Geometric Multigrid for a {S}tokes Problem}, + Author = {Thomas C. Clevenger and Timo Heister}, + Journal = {submitted}, + Year = {2019}, + Url = {https://arxiv.org/abs/1907.06696} +} + +@article{logg2012, +author = {Logg, Anders}, +year = {2009}, +month = {05}, +number = {4}, +title = {Efficient Representation of Computational Meshes}, +volume = {4}, +pages={283--295}, +journal = {Int. J. Computational Science and Engineering Int. J. Computational Science and Engineering}, +doi = {10.1504/IJCSE.2009.029164} +} + +@article{becker2000multigrid, + title={Multigrid techniques for finite elements on locally refined meshes}, + author={Becker, Roland and Braack, Malte}, + journal={Numerical linear algebra with applications}, + volume={7}, + number={6}, + pages={363--379}, + year={2000}, + publisher={Wiley Online Library} +} + +@inproceedings{sundar2012parallel, + title={Parallel geometric-algebraic multigrid on unstructured forests of octrees}, + author={Sundar, Hari and Biros, George and Burstedde, Carsten and Rudi, Johann and Ghattas, Omar and Stadler, Georg}, + booktitle={SC'12: Proceedings of the International Conference on High Performance Computing, Networking, Storage and Analysis}, + pages={1--11}, + year={2012}, + organization={IEEE} +} + +@article{witherden2015identification, + title={On the identification of symmetric quadrature rules for finite element methods}, + author={Witherden, Freddie D and Vincent, Peter E}, + journal={Computers \& Mathematics with Applications}, + volume={69}, + number={10}, + pages={1232--1241}, + year={2015}, + publisher={Elsevier} +} + +@Misc{schloemer21, + author = {Nico Schl\"omer}, + Title = {quadpy: Your one-stop shop for numerical integration in python}, + Note = {\url{https://github.com/nschloe/quadpy/}}, + Url = {https://github.com/nschloe/quadpy/}, + year={2021} +} + +@article{lebrun2020arborx, + title={{ArborX}: {A} Performance Portable Geometric Search Library}, + author={Lebrun-Grandi{\'e}, Damien and Prokopenko, Andrey and Turcksin, Bruno and Slattery, Stuart R}, + journal={ACM Transactions on Mathematical Software}, + volume={47}, + number={1}, + pages={1--15}, + year={2020}, + publisher={ACM New York, NY, USA}, + doi={10.1145/3412558} +} + +@article{bungartz2016precice, + title={preCICE--a fully parallel library for multi-physics surface coupling}, + author={Bungartz, Hans-Joachim and Lindner, Florian and Gatzhammer, Bernhard and Mehl, Miriam and Scheufele, Klaudius and Shukaev, Alexander and Uekermann, Benjamin}, + journal={Computers \& Fluids}, + volume={141}, + pages={250--258}, + year={2016}, + publisher={Elsevier} +} + +@article{lindner2020exafsa, + title={ExaFSA: Parallel Fluid-Structure-Acoustic Simulation}, + author={Lindner, Florian and Totounferoush, Amin and Mehl, Miriam and Uekermann, Benjamin and Pour, Neda Ebrahimi and Krupp, Verena and Roller, Sabine and Reimann, Thorsten and Sternel, D{\"o}rte C and Egawa, Ryusuke and others}, + journal={Software for Exascale Computing-SPPEXA 2016-2019}, + volume={136}, + pages={271}, + year={2020}, + publisher={Springer Nature} +} + +@article{golshan2022lethe, + title={Lethe-DEM: An open-source parallel discrete element solver with load balancing}, + author={Golshan, Shahab and Munch, Peter and Gassm{\"o}ller, Rene and Kronbichler, Martin and Blais, Bruno}, + journal={Computational Particle Mechanics}, + pages={1--20}, + year={2022}, + publisher={Springer} +} + +@article{mirzadeh2016parallel, + title={Parallel level-set methods on adaptive tree-based grids}, + author={Mirzadeh, Mohammad and Guittet, Arthur and Burstedde, Carsten and Gibou, Frederic}, + journal={Journal of Computational Physics}, + volume={322}, + pages={345--364}, + year={2016}, + publisher={Elsevier} +} + +@article{hoefler2010scalable, + title={Scalable communication protocols for dynamic sparse data exchange}, + author={Hoefler, Torsten and Siebert, Christian and Lumsdaine, Andrew}, + journal={ACM Sigplan Notices}, + volume={45}, + number={5}, + pages={159--168}, + year={2010}, + publisher={ACM New York, NY, USA} +} + +@article{ibanez2016pumi, + title={PUMI: Parallel unstructured mesh infrastructure}, + author={Ibanez, Daniel A and Seol, E Seegyoung and Smith, Cameron W and Shephard, Mark S}, + journal={ACM Transactions on Mathematical Software (TOMS)}, + volume={42}, + number={3}, + pages={1--28}, + year={2016}, + publisher={ACM New York, NY, USA} +} + +@misc{munch2022gc, + title={Efficient distributed matrix-free multigrid methods on locally refined meshes for {FEM} computations}, + author= {Munch, Peter and Heister, Timo and Prieto Saavedra, Laura and Kronbichler, Martin}, + year= {2022}, + url = {https://arxiv.org/abs/2203.12292} +} + +@incollection{munch2022hn, + title = {Efficient application of hanging-node constraints for matrix-free high-order FEM computations on {CPU} and {GPU}}, + author = {Munch, Peter and Ljungkvist, Karl and Kronbichler, Martin}, + booktitle = {ISC High Performance 2022}, + editor = {A.-L. Varbanescu and A. Bhatele and P. Luszczek and B. Marc}, + series = {LNCS}, + volume = 13289, + pages = {133--152}, + year = {2022}, + publisher = {Springer International Publishing}, + doi = {10.1007/978-3-031-07312-0_7} +} + +@inproceedings{ljungkvist2017matrix, + title={Matrix-free finite-element computations on graphics processors with adaptively refined unstructured meshes.}, + author={Ljungkvist, Karl}, + booktitle={SpringSim (HPC)}, + pages={1--1}, + year={2017} +} + +@article{saye2015, + title = {High-{Order} {Quadrature} {Methods} for {Implicitly} {Defined} {Surfaces} and {Volumes} in {Hyperrectangles}}, + volume = {37}, + issn = {1064-8275, 1095-7197}, + url = {http://epubs.siam.org/doi/10.1137/140966290}, + doi = {10.1137/140966290}, + language = {en}, + number = {2}, + urldate = {2016-01-27}, + journal = {SIAM Journal on Scientific Computing}, + author = {Saye, R. I.}, + month = jan, + year = {2015}, + pages = {A993--A1019} +} + +@article{burman_cutfem_2015, + title = {{{CutFEM}}: {{Discretizing}} Geometry and Partial Differential Equations}, + shorttitle = {{{CutFEM}}}, + author = {Burman, Erik and Claus, Susanne and Hansbo, Peter and Larson, Mats G. and Massing, Andr{\'e}}, + year = {2015}, + month = nov, + journal = {International Journal for Numerical Methods in Engineering}, + volume = {104}, + number = {7}, + pages = {472--501}, + issn = {00295981}, + doi = {10.1002/nme.4823}, + langid = {english} +} + +@article{kronbichler2022cg, + title = {Enhancing data locality of the conjugate gradient method for + high-order matrix-free finite-element implementations}, + author = {Martin Kronbichler and Dmytro Sashko and Peter Munch}, + journal = {The International Journal of High Performance Computing Applications}, + year = {2022}, + volume = {in press} +} + +@inproceedings{kronbichler2021next, + title={A next-generation discontinuous {G}alerkin fluid dynamics solver with application to high-resolution lung airflow simulations}, + author={Kronbichler, Martin and Fehn, Niklas and Munch, Peter and Bergbauer, Maximilian and Wichmann, Karl-Robert and Geitner, Carolin and Allalen, Momme and Schulz, Martin and Wall, Wolfgang A}, + booktitle={Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, SC'21}, + pages={1--15}, + address={St. Louis, MO, USA}, + year={2021}, + publisher={Association for Computing Machinery ({ACM})}, + doi={10.1145/3458817.3476171} +} + +See: https://doc.cgal.org/latest/Manual/how_to_cite_cgal.html +@book{cgal-user-ref, + title = {{CGAL} User and Reference Manual}, + author = {{The CGAL Project}}, + publisher = {{CGAL Editorial Board}}, + edition = {{5.4.1}}, + year = 2022, + note = {\url{https://doc.cgal.org/5.4.1/Manual/packages.html}} +} + + +@misc{fehling2022, + doi = {10.48550/ARXIV.2206.06512}, + url = {https://arxiv.org/abs/2206.06512}, + author = {Fehling, Marc and Bangerth, Wolfgang}, + keywords = {Numerical Analysis (math.NA), Mathematical Software (cs.MS), FOS: Mathematics, FOS: Computer and information sciences, G.1.8; G.4}, + title = {Algorithms for Parallel Generic $hp$-adaptive Finite Element Software}, + publisher = {arXiv}, + year = {2022}, + copyright = {arXiv.org perpetual, non-exclusive license} +} + +@article{orlando2021efficient, + title={An efficient and accurate implicit DG solver for the incompressible Navier-Stokes equations}, + author={Orlando, Giuseppe and Della Rocca, Alessandro and Barbante, Paolo Francesco and Bonaventura, Luca and Parolini, Nicola}, + journal={International Journal for Numerical Methods in Fluids}, + year={2021}, + publisher={Wiley Online Library} +} + +@inproceedings{hammond2014int_max, + title={To INT\_MAX... and beyond! Exploring large-count support in MPI}, + author={Hammond, Jeff R and Sch{\"a}fer, Andreas and Latham, Rob}, + booktitle={2014 Workshop on Exascale MPI at Supercomputing Conference}, + pages={1--8}, + year={2014}, + organization={IEEE} +} + +@article{massing2013efficient, + title={Efficient implementation of finite element methods on nonmatching and overlapping meshes in three dimensions}, + author={Massing, Andr{\'e} and Larson, Mats G and Logg, Anders}, + journal={SIAM Journal on Scientific Computing}, + volume={35}, + number={1}, + pages={C23--C47}, + year={2013}, + publisher={SIAM} +} diff --git a/9.5/paper.tex b/9.5/paper.tex new file mode 100644 index 0000000..57d3b6e --- /dev/null +++ b/9.5/paper.tex @@ -0,0 +1,1309 @@ +\documentclass{ansarticle-preprint} +%\usepackage{ucs} +\usepackage[utf8]{inputenc} +\usepackage{amsmath} +%\usepackage{cite} +\usepackage{anslistings} +\usepackage{multicol} +\usepackage{pdfsync} +\usepackage{enumitem} + +\usepackage{pgfplots} +\usepackage{pgfplotstable} + +\usepackage{fontenc} +\usepackage{graphicx} +\usepackage{xspace} + +\usepackage{siunitx} + +\usepackage{floatflt} + +\usepackage{multirow} + +\usepackage{booktabs} + +%\renewcommand{\baselinestretch}{2.0} + +\graphicspath{{svg/}} + +\usepackage[normalem]{ulem} + +\usepackage{caption} +\usepackage{subcaption} + +\usepackage{todonotes} + +\pgfplotsset{compat=1.9} +\definecolor{gnuplot@lightblue}{RGB}{87,181,232} +\definecolor{gnuplot@green}{RGB}{0,158,115} +\definecolor{gnuplot@purple}{RGB}{148,0,212} + +\newcommand{\specialword}[1]{\texttt{#1}} +\newcommand{\dealii}{{\specialword{deal.II}}\xspace} +\newcommand{\pfrst}{{\specialword{p4est}}\xspace} +\newcommand{\trilinos}{{\specialword{Trilinos}}\xspace} +\newcommand{\aspect}{\specialword{Aspect}\xspace} +\newcommand{\petsc}{\specialword{PETSc}\xspace} +\newcommand{\cmake}{{\specialword{CMake}}\xspace} +\newcommand{\candi}{{\specialword{candi}}\xspace} + + + +\usetikzlibrary{shapes.misc} +\tikzset{cross/.style={cross out, draw=black, minimum size=2*(#1-\pgflinewidth), inner sep=0pt, outer sep=0pt}, +%default radius will be 1pt. +cross/.default={2pt}} + +% +% Author list -- please add yourself in both places below (in +% alphabetical order) if you think that your +% contributions to the last release warrant this +% + +\hypersetup{ + pdfauthor={ + Daniel Arndt, + Wolfgang Bangerth, + Marco Feder, + Marc Fehling, + Rene Gassm\"{o}ller, + Timo Heister, + Luca Heltai, + Martin Kronbichler, + Matthias Maier, + Peter Munch, + Jean-Paul Pelteret, + Simon Sticko, + Bruno Turcksin, + David Wells + }, + pdftitle={The deal.II Library, Version 9.4, 2022}, +} + +\title{The \dealii Library, Version 9.4} + + \author[1*]{Daniel Arndt} + \affil[1]{Scalable Algorithms and Coupled Physics Group, + Computational Sciences and Engineering Division, + Oak Ridge National Laboratory, 1 Bethel Valley Rd., + TN 37831, USA. + \texttt{arndtd/turcksinbr@ornl.gov}} + + \author[2,3]{Wolfgang~Bangerth} + \affil[2]{Department of Mathematics, Colorado State University, Fort + Collins, CO 80523-1874, USA. + \texttt{bangerth/marc.fehling@colostate.edu}} + \affil[3]{Department of Geosciences, Colorado State University, Fort + Collins, CO 80523, USA.} + + \author[4]{Marco~Feder} +\affil[4]{SISSA, + International School for Advanced Studies, + Via Bonomea 265, + 34136, Trieste, Italy. + {\texttt{marco.feder/luca.heltai@sissa.it}}} + +\author[2]{Marc~Fehling} + +\author[5]{Rene~Gassm{\"o}ller} +\affil[5]{Department of Geological Sciences, + University of Florida, + 1843 Stadium Road, + Gainesville, FL, 32611, USA. + {\texttt{rene.gassmoeller@ufl.edu}}} + +\author[6]{Timo~Heister} + \affil[6]{School of Mathematical and Statistical Sciences, + Clemson University, + Clemson, SC, 29634, USA + {\texttt{heister@clemson.edu}}} + +\author[4]{Luca~Heltai} + + \author[7,8]{Martin~Kronbichler} + \affil[7]{Department of Information Technology, + Uppsala University, + Box 337, 751\,05 Uppsala, Sweden. + {\texttt{martin.kronbichler/simon.sticko@it.uu.se}}} + \affil[8]{Institute of Mathematics, + University of Augsburg, + Universit\"atsstr.~12a, 86159 Augsburg, Germany. + {\texttt{martin.kronbichler@uni-a.de}}} + +\author[9]{Matthias~Maier} +\affil[9]{Department of Mathematics, + Texas A\&M University, + 3368 TAMU, + College Station, TX 77845, USA. + {\texttt{maier@math.tamu.edu}}} + +\author[8,10]{Peter Munch} + \affil[10]{Institute of Material Systems Modeling, + Helmholtz-Zentrum Hereon, + Max-Planck-Str. 1, 21502 Geesthacht, Germany. + {\texttt{peter.muench@hereon.de}}} + + +\author[11]{Jean-Paul~Pelteret} +\affil[11]{Independent researcher. +{\texttt{jppelteret@gmail.com}}} + +\author[7,12]{Simon~Sticko} +\affil[12]{Department of Mathematics and Mathematical Statistics, + Umeå University, + SE-90187 Umeå, Sweden} + +\author[1*]{Bruno~Turcksin} + +\author[13]{David Wells} +\affil[13]{Department of Mathematics, University of North Carolina, + Chapel Hill, NC 27516, USA. + {\texttt{drwells@email.unc.edu}}} + +\renewcommand{\labelitemi}{--} + + +\begin{document} +\maketitle + +\footnotetext{% + $^\ast$ This manuscript has been authored by UT-Battelle, LLC under Contract No. + DE-AC05-00OR22725 with the U.S. Department of Energy. + %The United States + %Government retains and the publisher, by accepting the article for + %publication, acknowledges that the United States Government retains a + %non-exclusive, paid-up, irrevocable, worldwide license to publish or reproduce + %the published form of this manuscript, or allow others to do so, for United + %States Government purposes. The Department of Energy will provide public + %access to these results of federally sponsored research in accordance with the + %DOE Public Access Plan (http://energy.gov/downloads/doe-public-access-plan). +} + + +\begin{abstract} + This paper provides an overview of the new features of the finite element + library \dealii, version 9.4. +\end{abstract} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Overview} + +\dealii version 9.4.0 was released June 24, 2022. +This paper provides an +overview of the new features of this release and serves as a citable +reference for the \dealii software library version 9.4. \dealii is an +object-oriented finite element library used around the world in the +development of finite element solvers. It is available for free under the +GNU Lesser General Public License (LGPL). Downloads are available at +\url{https://www.dealii.org/} and \url{https://github.com/dealii/dealii}. + +The major changes of this release are: +% +\begin{itemize} + \item Advances in simplex- and mixed-mesh support (see Section~\ref{sec:simplex}); + \item Repartitioning of distributed meshes (see Section~\ref{sec:repartitioning}); + \item Advances in matrix-free infrastructure (see Section~\ref{sec:mf}); + \item Advances in multigrid infrastructure (see Section~\ref{sec:multigrid}); + \item CutFEM support (see Section~\ref{sec:cut}); + \item Experimental integration of the Computational Geometry Algorithms Library (CGAL) (see Section~\ref{sec:cgalwrappers}); + \item Performance improvements in the particle infrastructure (see Section~\ref{sec:particles}); + \item Support for large MPI buffers and parallel I/O (see Section~\ref{sec:large-mpi}); + \item Improvements to unstructured communication (see Section~\ref{sec:CA}); + \item Three new tutorial programs and one new code gallery program (see Section~\ref{subsec:steps}). +\end{itemize} +% + +While all of these major changes are discussed in detail in +Section~\ref{sec:major}, there +are a number of other noteworthy changes in the current \dealii release, +which we briefly outline in the remainder of this section: +% +\begin{itemize} +% \item \texttt{AffineConstraints::make\_consistent\_in\_parallel()} allows +% to make constraints consistent in parallel. + \item The \texttt{DataOutResample} class interpolates values defined on one + triangulation onto a second, potentially unrelated triangulation. + By using this class, one can output the result obtained on an + unstructured mesh on a structured one (which might facilitate a more + memory-efficient storage format, for example, if this second + triangulation is a uniformly refined rectangle or box), or one can create a slice in 3D. + +\item The new member function \texttt{find\_point\_owner\_rank()} of + \texttt{parallel\allowbreak ::distributed::\allowbreak Tri-\allowbreak angulation} allows one to find the MPI + ranks of cells containing specified points. + It is communication-free and leverages the functionality of \pfrst (>v.2.2). + Its algorithm is described in \cite{burstedde2020parallel}. This information will + enable efficient construction of the + communication pattern used in the class \texttt{Utilities::\allowbreak MPI::\allowbreak RemotePointEvaluation}. Furthermore, this function could be used in the future to allow + particle simulations in which particle movement is not + limited by CFL conditions, as done in \cite{mirzadeh2016parallel}. + +\item The new function + \texttt{GridGenerator::pipe\_junction()} + generates a triangulation of three cone-shaped pipes that cross at a bifurcation point in any possible configuration. + A manifold description is applied to the boundary, which can be extended into the volume via transfinite interpolation \cite{Gordon82} using the \texttt{TransfiniteInterpolationManifold} class \cite{dealII90}. + \item A new DoF renumbering function \texttt{DoFRenumbering::support\_point\_wise()} which groups together + shape functions by their support point. This functionality is useful in developing nodal schemes since, e.g., the $x$, $y$, and $z$ + components at a point will be consecutive in the solution vector. It also improves interoperability with external libraries which expect + data in this format. + \item The \texttt{FEInterfaceValues} class, which computes common quantities at the interface of two cells, has been overhauled to make it + more consistent with the rest of the library and use more intuitive names for functions. For example, + \texttt{FEInterfaceValues::jump\_gradient()} is now \texttt{FEInterfaceValues::jump\_in\_shape\_gradients()}. Several new + functions, such as \texttt{FEInterfaceValues::get\_jump\_in\_function\_values()}, have also been added. + \item The \texttt{MeshWorker::ScratchData} and \texttt{MeshWorker::CopyData} have been made $hp$-compatible, + and support face integration where the integration rule and mapping differs on either side of an interface. + The \texttt{MeshWorker::CopyData} class has also been made compatible with complex numbers. + \item Vectors attached to \texttt{DataOut} do not need to be in + ghosted state anymore. Internally, we create a copy of the vector + with appropriate ghost elements. +\end{itemize} +% +The changelog lists more than 100 other features and bugfixes. + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Major changes to the library} +\label{sec:major} + +This release of \dealii contains a number of large and significant changes, +which will be discussed in this section. +It of course also includes a +vast number of smaller changes and added functionality; the details of these +can be found +\href{https://dealii.org/developer/doxygen/deal.II/changes_between_9_3_3_and_9_4_0.html} +{in the file that lists all changes for this release}; see \cite{changes94}. + +%\newpage + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Advances in simplex- and mixed-mesh support}\label{sec:simplex} + +\dealii has supported simplex and mixed meshes since the previous +release, 9.3, on an experimental basis. +We have continued to work on this support; the current state is +sufficient to support several larger-scale programs, although not all +functionality in \dealii works with such meshes yet. Specifically, +we have fixed many bugs and generalized existing functions that +previously only worked for hypercube-shaped cells. The most notable +new functionalities are: + +\begin{figure} + + \centering + + \phantom{.} + \hfill + \begin{tikzpicture}[scale=1.7] + + \coordinate (0) at (0,0); + \coordinate (1) at (1,0); + \coordinate (2) at (0,1); + + \coordinate (3) at (0,0.5); + \coordinate (4) at (0.5,0.5); + \coordinate (5) at (0.5,0); + + \foreach \i in {0,1, 2, 3, 4, 5} + \draw[blue,fill=blue] (\i) circle (1.1pt) node [below] {}; + + + \draw (0) --(1) -- (2) -- (0); + \draw (3) --(4) -- (5) -- (3); + + \end{tikzpicture} + \hfill\hfill + \begin{tikzpicture}[scale=1.3] + + \coordinate (0) at (0,0,0); + \coordinate (1) at (0,0,1); + \coordinate (2) at (1,0,0); + \coordinate (3) at (0,1,0); + \coordinate (4) at (0,0,0.5); + \coordinate (6) at (0.5,0,0); + \coordinate (7) at (0,0.5,0); + \coordinate (5) at (0.5,0.0,0.5); + \coordinate (8) at (0.0,0.5,0.5); + \coordinate (9) at (0.5,0.5,0.0); + + \draw (0) -- (1) -- (2) -- (0); + \draw (0) -- (1) -- (3) -- (0); + \draw (1) -- (2) -- (3) -- (1); + + \draw[-, fill=red!30, opacity=.5] (4)--(6)--(7)--cycle; + \draw[-, fill=red!30, opacity=.5] (0)--(6)--(7)--cycle; + \draw[-, fill=red!30, opacity=.5] (0)--(4)--(7)--cycle; + \draw[-, fill=red!30, opacity=.5] (0)--(4)--(6)--cycle; + + \draw[-, fill=blue!30, opacity=.5] (1)--(4)--(5)--cycle; + \draw[-, fill=blue!30, opacity=.5] (1)--(4)--(8)--cycle; + \draw[-, fill=blue!30, opacity=.5] (4)--(5)--(8)--cycle; + \draw[-, fill=blue!30, opacity=.5] (1)--(5)--(8)--cycle; + + \draw[-, fill=green!30, opacity=.5] (2)--(5)--(6)--cycle; + \draw[-, fill=green!30, opacity=.5] (2)--(6)--(9)--cycle; + \draw[-, fill=green!30, opacity=.5] (2)--(5)--(9)--cycle; + \draw[-, fill=green!30, opacity=.5] (5)--(6)--(9)--cycle; + + \draw[-, fill=orange!30, opacity=.5] (7)--(8)--(9)--cycle; + \draw[-, fill=orange!30, opacity=.5] (3)--(7)--(9)--cycle; + \draw[-, fill=orange!30, opacity=.5] (3)--(7)--(8)--cycle; + \draw[-, fill=orange!30, opacity=.5] (3)--(8)--(9)--cycle; + + \foreach \i in {0,1,2,3,4,5,6,7,8,9} + \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {}; + + \end{tikzpicture} + \begin{tikzpicture}[scale=1.3] + + \coordinate (0) at (0,0,0); + \coordinate (1) at (0,0,1); + \coordinate (2) at (1,0,0); + \coordinate (3) at (0,1,0); + \coordinate (4) at (0,0,0.5); + \coordinate (6) at (0.5,0,0); + \coordinate (7) at (0,0.5,0); + \coordinate (5) at (0.5,0.0,0.5); + \coordinate (8) at (0.0,0.5,0.5); + \coordinate (9) at (0.5,0.5,0.0); + + \draw (0) -- (1) -- (2) -- (0); + \draw (0) -- (1) -- (3) -- (0); + \draw (1) -- (2) -- (3) -- (1); + + \draw[-, fill=red!30, opacity=.5] (4)--(5)--(6)--cycle; + \draw[-, fill=red!30, opacity=.5] (4)--(5)--(8)--cycle; + \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle; + \draw[-, fill=red!30, opacity=.5] (5)--(6)--(8)--cycle; + +% \draw[-, fill=blue!30, opacity=.5] (4)--(6)--(7)--cycle; +% \draw[-, fill=blue!30, opacity=.5] (4)--(6)--(8)--cycle; +% \draw[-, fill=blue!30, opacity=.5] (4)--(7)--(8)--cycle; +% \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(8)--cycle; + +% \draw[-, fill=green!30, opacity=.5] (6)--(7)--(8)--cycle; +% \draw[-, fill=green!30, opacity=.5] (6)--(7)--(9)--cycle; +% \draw[-, fill=green!30, opacity=.5] (6)--(8)--(9)--cycle; +% \draw[-, fill=green!30, opacity=.5] (7)--(8)--(9)--cycle; +% + \draw[-, fill=blue!30, opacity=.5] (5)--(6)--(8)--cycle; + \draw[-, fill=blue!30, opacity=.5] (5)--(6)--(9)--cycle; + \draw[-, fill=blue!30, opacity=.5] (5)--(8)--(9)--cycle; + \draw[-, fill=blue!30, opacity=.5] (6)--(8)--(9)--cycle; + + \foreach \i in {0,1,2,3,4,5,6,7,8,9} + \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {}; + + \end{tikzpicture} + \begin{tikzpicture}[scale=1.3] + + \coordinate (0) at (0,0,0); + \coordinate (1) at (0,0,1); + \coordinate (2) at (1,0,0); + \coordinate (3) at (0,1,0); + \coordinate (4) at (0,0,0.5); + \coordinate (6) at (0.5,0,0); + \coordinate (7) at (0,0.5,0); + \coordinate (5) at (0.5,0.0,0.5); + \coordinate (8) at (0.0,0.5,0.5); + \coordinate (9) at (0.5,0.5,0.0); + + \draw (0) -- (1) -- (2) -- (0); + \draw (0) -- (1) -- (3) -- (0); + \draw (1) -- (2) -- (3) -- (1); + +% \draw[-, fill=red!30, opacity=.5] (4)--(5)--(6)--cycle; +% \draw[-, fill=red!30, opacity=.5] (4)--(5)--(8)--cycle; +% \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle; +% \draw[-, fill=red!30, opacity=.5] (5)--(6)--(8)--cycle; + + \draw[-, fill=red!30, opacity=.5] (4)--(6)--(7)--cycle; + \draw[-, fill=red!30, opacity=.5] (4)--(6)--(8)--cycle; + \draw[-, fill=red!30, opacity=.5] (4)--(7)--(8)--cycle; + \draw[-, fill=red!30, opacity=.5] (6)--(7)--(8)--cycle; + + \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(8)--cycle; + \draw[-, fill=blue!30, opacity=.5] (6)--(7)--(9)--cycle; + \draw[-, fill=blue!30, opacity=.5] (6)--(8)--(9)--cycle; + \draw[-, fill=blue!30, opacity=.5] (7)--(8)--(9)--cycle; + +% \draw[-, fill=orange!30, opacity=.5] (5)--(6)--(8)--cycle; +% \draw[-, fill=orange!30, opacity=.5] (5)--(6)--(9)--cycle; +% \draw[-, fill=orange!30, opacity=.5] (5)--(8)--(9)--cycle; +% \draw[-, fill=orange!30, opacity=.5] (6)--(8)--(9)--cycle; + + \foreach \i in {0,1,2,3,4,5,6,7,8,9} + \draw[blue,fill=blue] (\i) circle (1.0pt) node [below] {}; + + \end{tikzpicture} + \hfill + \phantom{.} + + % We definitely supported tri refinement in 9.3 - see 6ceb8b70559dc2274761a28dc7836f1e9602da8c (Dec 4, 2020) + % and also 74b8171dd030a4b2de41955b8d913cde06974b91 (Feb 4, 2021) + \caption{\it The previous release, 9.3 \cite{dealII93}, + added support for adaptive mesh + refinement with triangles. This release adds support for global + tetrahedral refinement by subdividing each tetrahedron into eight + children, as shown on the right.} + \label{fig:refinement} +\end{figure} + +\begin{itemize} +\item Experimental support for locally refined meshes: For finite + element computations on locally refined +meshes, one needs (i) the possibility to locally refine the mesh (see +Figure~\ref{fig:refinement}), and (ii) appropriate hanging-node +constraints. Both are now available in 2D; for 3D, the implementation +of the constraint definitions is still in progress. +\item \texttt{QIteratedSimplex} allows to build composite simplex quadrature rules. +\item The new wrappers to the \texttt{CGAL} library allow for the easy + creation of simplex +meshes. For more details, see Section~\ref{sec:cgalwrappers}. +\end{itemize} + +Furthermore, we have continued to remove uses of the +\texttt{GeometryInfo} class (which is specific to hypercube cells) from +the library, and to replace them with more general equivalent +functionality based on the +\texttt{ReferenceCell} class. Once all instances of +\texttt{GeometryInfo} are removed, we will deprecate the class. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Repartitioning of distributed meshes}\label{sec:repartitioning} + +\dealii has two classes that support distributed storage of meshes: +\texttt{parallel::\allowbreak distributed::\allowbreak Triangulation} +(which in the following we will abbreviate as \texttt{p::d::T}) and +\texttt{parallel::\allowbreak fully\allowbreak distributed::\allowbreak + Triangulation} (or, in short, \texttt{p::f::T}). The former is +partitioned based on the space-filling Morton (or Z-order) curve +implemented by the \pfrst backend. The latter, more recent +class is currently statically partitioned at creation time. + +There are now new utility functions in the +\texttt{RepartitioningPolicyTools} namespace that can be +used to create a new \texttt{p::f::T} instance, +given a distributed triangulation (\texttt{p::f::T} or +\texttt{p::d::T}) and a vector that indicates the designated owner processes of locally +owned cells. This approach allows for partitioning \texttt{p::f::T} +based on arbitrary criteria. The workflow is shown in the following listing: +\begin{c++} +// Original triangulation: +parallel::distributed::Triangulation tria(communicator); + +// Select a partitioning policy and use it: +const RepartitioningPolicyTools::CellWeightPolicy policy(tria, fu); +const auto construction_data = TriangulationDescription::Utilities:: + create_description_from_triangulation(tria, policy.partition(tria)); + +// Create the new triangulation: +parallel::fullydistributed::Triangulation tria_pft(comm); +tria_pft.create_triangulation(construction_data); +\end{c++} + +\begin{figure} + \centering + \def\svgwidth{0.8\columnwidth} + \input{svg/repartitioning.pdf_tex} + \caption{\it Visualization of the repartitioning process and the + construction of the new mesh of process 0. Top + left: Existing ownership of the cells of the mesh, distributed + on four processes. Bottom left: + Requested new ownership. Second column: Processes 0 and 1 + collect information about the cells they own or that are ghost + cells. Processes 2 and 3 do not contribute to process 0. Third column: What + processes 0 and 1 would send to process 0. Fourth column: The + combined knowledge on process 0.}\label{fig:repartitioning} +\end{figure} + +The setup process (of \texttt{construction\_data}) is visualized in Figure~\ref{fig:repartitioning}. At +first, locally owned cells and their +surrounding (ghost) cells are collected on each process and +sent to the new owner. On the +receiving side, the sets of all cells are combined and possible duplicates +are removed. This information is enough to construct a new triangulation. +For sending/receiving, we apply consensus-based algorithms~\cite{hoefler2010scalable}, which +we introduced into the library in release 9.2~\cite{dealII92} -- see +also Section~\ref{sec:CA}. This kind of consensus-based +algorithm is used also in \cite{ibanez2016pumi} for repartitioning. + +In addition to the predefined partitioning policies, users +can write their own by implementing the +\texttt{RepartitioningPolicyTools::Base} interface. Like the +``active'' level of finest cells, the scheme also allows for +arbitrarily repartitioned multigrid levels. + +In future releases, we plan to add support for repartitioning based on distributed graph +partitioning libraries, e.g., \texttt{ParMETIS} or \texttt{Zoltan}. Furthermore, we intend to extend +\texttt{p::f::T} to support adaptive mesh refinement, completing \texttt{p::f::T} +as a complement to \texttt{p::d::T}. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Advances in matrix-free infrastructure}\label{sec:mf} + +The matrix-free infrastructure of \dealii is used to solve problems +without assembling matrices, providing only the action of the matrix +instead. It has seen a number of new features in this release, the most +notable ones being: +\begin{itemize} +\item Improved support for computations with Hessians of shape functions: Just like values and gradients, Hessians can be +now evaluated and integrated during matrix-free loops +both for cells and faces. This could enable, for example, writing +a matrix-free version of step-47, which solves the biharmonic equation with the discontinuous Galerkin method. +\item Cell-centric loops now also allow access to gradients and Hessians +of neighboring cells on faces. The major difficulty here was the relative orientation +of cells on unstructured meshes. +\item Users can now create their own cell batches, by providing \texttt{FEEvaluation::reinit()} a list of cell IDs. \texttt{FEEvaluation} +accesses the appropriate data and reshuffles mapping data accordingly on +the fly in order to enable vectorization over cells. The new feature is useful in several +contexts, for example for sharp interfaces (e.g., two-phase flow +or shock capturing), where one needs to treat cells that are ``cut'' by +the interface in a special way. A challenge is that cell batches +might contain cut or non-cut cells, effectively counteracting the cross-cell vectorization. +Previous functionality has provided the option of masking certain cells in cell batches, which works well if +the code paths do not diverge too much, or to +categorize cells during \texttt{MatrixFree::reinit()} in such a way that mixed cell batches do not occur. However, \texttt{MatrixFree::reinit()} +might be too expensive if recategorization needs to happen very frequently to follow the dynamics of a system, e.g., in each time step. Despite some overhead compared to static matrix-free loops, the new feature can be the best option in such dynamic scenarios. +\item Initial support for H(div)-conforming elements with Piola transform, based on Raviart--Thomas finite element spaces with the updated class \texttt{FE\_RaviartThomasNodal}, has been added. This feature is currently limited to meshes in standard orientation and affine geometries. Full support and performance optimizations will be provided in a future release. +\item Selected matrix-free algorithms can now exploit additional data locality + between the matrix-vector product and vector operations happening nearby in + an algorithm. Interfaces have been added to both the + \texttt{PreconditionChebyshev} class (a frequently used smoother in multigrid + methods) and the conjugate gradient implementation in \texttt{SolverCG}. + From the user's perspective, an operator needs to define a \texttt{vmult} operation, + taking two additional \texttt{std::function} arguments. The first function + defines the operation to be scheduled on the vector entries before the + matrix-vector product touches them, and the second what happens + afterward. The new features also include a renumbering to maximize data + locality. The theory is described in the + contribution~\cite{kronbichler2022cg}. +\end{itemize} +Besides these new features, we improved the performance of +hanging-node-constraint evaluation on the CPU. Instead of performing +quasi-dense matrix-vector multiplications~\cite{KronbichlerKormann2012}, we now use an +approach based on in-place interpolation and sum factorization, similar +to what was already done in the GPU code~\cite{ljungkvist2017matrix}. In \cite{munch2022hn}, the algorithm is described +and performance numbers are shown, indicating a reduction +of overhead of cells with hanging nodes by a factor of ten. + +Finally, we have performed a major restructuring of the internals +of the \texttt{FEEvaluation} classes. This reduces some overhead for low polynomial degrees and will enable us to add support for new element types in the future. + +We would like to remind users that we transitioned from the use of Booleans +to flags to configure the evaluation and integration process of \texttt{FEEvaluation} +and \texttt{FEFaceEvaluation}: + +\begin{c++} +fe_eval.evaluate(false, true, false) // old (deprecated) +fe_eval.evaluate(EvaluationFlags::gradients) // new +\end{c++} + +%\begin{c++} +%additional_data.mapping_update_flags = ... | update_hessians; +%\end{c++} +% +%\begin{c++} +%FEEvaluation phi(matrix_free); +% +%phi.reinit(cell); +%phi.gather_evaluate(src, ... | EvaluationFlags::hessians); +% +%for(const auto q : phi.quadrature_point_indices()) +% phi.submit_hessian(phi.get_hessian(q), q); +% +%phi.integrate_scatter(... | EvaluationFlags::hessians, dst); +%\end{c++} +% +%... similar for faces; can be used to implement biharmonic equation (like in +%step-X) + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Advances in multigrid infrastructure}\label{sec:multigrid} + +In release 9.3~\cite{dealII93}, we added support for global-coarsening multigrid in +addition to the established local-smoothing infrastructure. Global +coarsening algorithms smoothen over the whole computational domain on each +multigrid level, which is obtained by coarsening the finest cells of +the next finer multigrid level. +For this purpose, we use a sequence of triangulations, and we perform +the smoothing only on their active levels. To create the sequence of +triangulations, one can use the functions \texttt{MGTransferGlobalCoarseningTools::create\_geometric\_coarsening\_sequence()}. A new version takes an +instance of \texttt{RepartitioningPolicyTools::Base} (see Subsection~\ref{sec:repartitioning}) as argument, which allows specifying the parallel +distribution of each multigrid level (in contrast to the fixed first-child policy in the case of local smoothing). These features have been developed and tuned for running on a supercomputer scale +with complicated coarse meshes as presented in \cite{kronbichler2021next}. +Furthermore, we added support for block vectors, +fixed a number of limitations, and performed performance optimizations of +the transfer operator; particularly, the redundant copy from/to temporary vectors +has been eliminated. Furthermore, hanging-node constraints are applied +efficiently in the same way as in the matrix-free loops (see Subsection~\ref{sec:mf}). + +In \cite{munch2022gc}, the performance of the local-smoothing and global-coarsening +infrastructure of \dealii was compared for locally refined meshes. The results indicate that +the local definition of multigrid levels might introduce load imbalances +in the case of local smoothing so that global coarsening is favorable despite +potentially more expensive intergrid transfers. In order to assess the benefits +of one approach against the other, \dealii provides new functions +\texttt{workload\_imbalance()} and \texttt{vertical\_communication\_efficiency()} +in the \texttt{MGTools} namespace for the estimation of the imbalance during, e.g., +smoothing or the +communication efficiency during intergrid transfer, purely based on the given mesh. +% MK: I would not add this part, it does not really fit into this paper as +% there is nothing to report at this point (and we should then add references +% to the actual literature). +%The publication \cite{munch2022gc} also points out that not +%all types of smoothers are applicable for global coarsening due to the +%presence of hanging nodes, which is a motivation to add new smoother types +%to \dealii in the future. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{CutFEM support}\label{sec:cut} + +Several classes have been added to the \texttt{NonMatching} namespace to enable the use of cut finite element methods~\cite{burman_cutfem_2015}. +In the literature, these types of methods are also referred to as immersed, extended, or fictitious finite element methods. +Here, the domain, $\Omega$, is immersed in the background mesh, as illustrated in Fig.~\ref{fig:immersed-domain}. +Often, one solves for the degrees of freedom of the smallest submesh +which completely covers the domain, i.e., the blue and yellow cells of +Fig.~\ref{fig:location-to-level-set}. +The bilinear form in the weak form would then, for example, look like +\begin{equation} + a(u,v) = (\nabla u, \nabla v)_\Omega - (\partial_n u, v)_\Gamma + \ldots +\end{equation} +Thus, when assembling on a cut cell $K$, we are +required to integrate over the part of the domain and the part of the boundary, $\Gamma = \partial \Omega$, that falls inside the cell: +$K\cap \Omega$ and $K \cap \Gamma$. +Many of the new classes that support these operations assume that the domain is described by a level set function, +$\psi : \mathbb{R}^d \to \mathbb{R}$, such that +\begin{align}\label{eq:levelset} + \Omega = \{x \in \mathbb{R}^d : \psi(x)<0\}, + \qquad + \Gamma = \{x \in \mathbb{R}^d : \psi(x) = 0\}. +\end{align} + + + +\begin{figure} + \centering + \begin{subfigure}[b]{0.3\textwidth} + \centering + \includegraphics[height=.12\paperheight]{svg/immersed-domain.pdf} + \caption{\label{fig:immersed-domain}} + \end{subfigure} + \qquad + \begin{subfigure}[b]{0.3\textwidth} + \centering + \includegraphics[height=.12\paperheight]{svg/location-to-level-set.pdf} + \caption{ \label{fig:location-to-level-set}} + \end{subfigure} + \caption{\it (a) Domain immersed in a background mesh. (b) Value of \texttt{LocationToLevelSet} for each cell.} +%\end{figure} +% +%\begin{figure} + \centering + \includegraphics[width=.4\paperwidth]{svg/immersed_quadratures.pdf} + \caption{\it Quadrature points for integrating over the three different regions of a cell cut by the zero contour of the level set function, $\psi$. \label{fig:immersed_quadratures}} +\end{figure} + +Specifically, the following are the key new classes and functions: +\begin{itemize} + \item The \texttt{MeshClassifier} class identifies how the active cells and faces are located relative to the zero contour of the level set function, as illustrated in Figure~\ref{fig:location-to-level-set}. Its member function \texttt{location\_to\_level\_set()} takes a cell or face and + returns an enum, \texttt{LocationToLevelSet}, with values \{\texttt{inside}, \texttt{outside}, \texttt{intersected}\}. + This information is typically needed when choosing what element (e.g., \texttt{FE\_Q} or \texttt{FE\_Nothing}) and/or what quadrature (defined over the + complete cell or over a part---see below) a cell + should use. + + \item The \texttt{QuadratureGenerator} class, which implements the algorithm in \cite{saye2015}, generates high-order quadrature rules for the three different regions of a \texttt{BoundingBox}, $B$, defined by the sign of the level set function: + \begin{align}\label{eq:boundingbox} + B \cap \Omega = \{ x\in B: \psi(x) < 0 \}, \quad + B \cap \Gamma = \{ x\in B: \psi(x) = 0 \}, \quad + \{ x\in B: \psi(x) > 0 \}. + \end{align} + An example of these quadratures is shown in Figure~\ref{fig:immersed_quadratures}. + The \texttt{FaceQuadratureGenerator} class does the same for faces. + Furthermore, the new classes \texttt{DiscreteQuadratureGenerator} and \texttt{DiscreteFaceQuadratureGenerator} can be used to generate these quadrature rules over a cell or face when the level set function lies in a finite element space: $\psi_h \in V_h$, and when the reference cell of the cell or face is a hypercube. + + \item \texttt{ImmersedSurfaceQuadrature} is a class representing a quadrature rule over a $(d-1)$-dimensional surface embedded in $\mathbb{R}^d$ ($\psi = 0$ in Figure~\ref{fig:immersed_quadratures}). In addition to the weight, it stores the unit normal to the surface, for each quadrature point. This is needed to transform the quadrature rule from reference space to real space. + + \item \texttt{FEImmersedSurfaceValues} is an \texttt{FEFaceValues}-like class for evaluating real space values based on an \texttt{ImmersedSurfaceQuadrature}. + + \item \texttt{NonMatching::FEValues} combines the functionality of + several of the above classes to simplify assembly of linear systems. It works similarly to \texttt{hp::FEValues}: + When calling the \texttt{reinit()} function, immersed quadrature rules are generated in the background and + \texttt{FEValues} objects for the inside/outside region and a \texttt{FEImmersedSurfaceValues} object for the surface regions are set up internally. These can then be obtained using getter-functions (\texttt{get\_inside/outside/surface\_fe\_values()}) and used for the assembly. + Since the generation of immersed quadrature rules is not cheap, + \texttt{NonMatching::FEValues} calls \texttt{QuadratureGenerator} only if needed, i.e., if the cell is intersected. If not, already cached \texttt{FEValues} objects will be returned by the getter functions. + Correspondingly, the class \texttt{NonMatching::FEInterfaceValues} generates + \texttt{FEInterfaceValues} objects for assembling face terms over $F \cap \{x : \psi(x) < 0 \}$ or $F \cap \{x : \psi(x) > 0 \}$. +\end{itemize} +The new \texttt{step-85} tutorial illustrates how many of these classes work together. + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Experimental integration of the Computational Geometry Algorithms + Library (CGAL)}\label{sec:cgalwrappers} + +The Computational Geometry Algorithms Library (CGAL, \url{https://www.cgal.org/}) is a widely used +library to describe geometries and meshes \cite{cgal-user-ref}. \dealii now +has wrappers for CGAL classes and functions, provided in the new +namespace \texttt{CGALWrappers}: they implement functionality +spanning from mesh generation to boolean operations between +triangulations and cells. These wrappers are enabled only if \dealii +is compiled with \texttt{C++17}. \textit{This feature is still experimental and +interfaces might change during the next release cycle.} + +The main mesh generation function is +\texttt{GridGenerator::implicit\_function()}, which creates a \texttt{Triangulation} out of the zero level set of an implicit function $\psi$ similar to \eqref{eq:levelset}. +For \texttt{dim==3}, the mesh consists of tetrahedra. A prototypical use case is the following, where the surface is the zero level set of Taubin's heart function $f=\bigl ( x^2 + \frac{9y^2}{4} +z^2 -1 \bigr ) -x^2 z^3 - \frac{9y^2z^3}{80}$. The resulting \texttt{Triangulation<3>} is shown in Figure~\ref{fig:heart_tria} +and the required steps are: +\begin{c++} +// 1) An implicit function, e.g., Taubin's heart surface (not shown) +ImplicitFunction f; + +// 2) Configure output mesh (optional) +CGALWrappers::AdditionalData<3> data; data.cell_size = .05; + +// 3) Create mesh +Triangulation<3> tria; +GridGenerator::implicit_function(tria, f, data, /* more arguments */...); +\end{c++} + +A related function is +\texttt{GridGenerator::surface\_mesh\_to\_volumetric\_mesh()}, which +computes a tetrahedral volume mesh \texttt{Triangulation<3>}, based on a +given surface mesh \texttt{Triangulation<2,3>} that bounds +the three dimensional shape. + +CGAL also provides Boolean operations on meshes: they can be accessed via +the utility function +\texttt{CGALWrappers::\allowbreak{}compute\_boolean\_operation()}. The +available operations are \textit{co-refinement}, \textit{intersection}, +\textit{union}, and \textit{difference}. Oftentimes, Boolean +operations and co-refinement around the intersection produces +badly shaped mesh cells. To overcome this issue, one can use \texttt{CGALWrappers::\allowbreak{}remesh\_surface()}. +A possible workflow to create a high-quality mesh of the union of a cube and +a sphere mesh is given in the following listing: +\begin{c++} +// 1) Create deal.II triangulations, e.g., cube and sphere (not shown) +Triangulation tria0, tria1; + +// 2) Convert to CGAL surface meshes (assuming Kernel is already defined) +CGAL::Surface_mesh surface_mesh0, surface_mesh1; +CGALWrappers::dealii_tria_to_cgal_surface_mesh(tria0, surface_mesh0); +CGALWrappers::dealii_tria_to_cgal_surface_mesh(tria1, surface_mesh1); + +// 3) Compute the union of the two meshes +CGALWrappers::compute_boolean_operation(surface_mesh0, surface_mesh1, + BooleanOperation::compute_union, out_mesh); + +// 4) Convert CGAL surface mesh to deal.II surface mesh +Triangulation<2, 3> tria_out; +CGALWrappers::cgal_surface_mesh_to_dealii_triangulation(out_mesh, tria_out); + +// 5) Convert surface to volume mesh via surface_mesh_to_volumetric_mesh() +\end{c++} +The output of the Boolean operation is shown in Fig.~\ref{fig:corefinement}; +Fig.~\ref{fig:corefinement_remeshed} shows the mesh after remeshing. +\begin{figure} + \centering + \begin{subfigure}[b]{0.28\textwidth} + \centering + \includegraphics[width=\textwidth]{png/heart_implicit.png} + \caption{\label{fig:heart_tria}} + \end{subfigure}\qquad + \hfill + \begin{subfigure}[b]{0.28\textwidth} + \centering + \includegraphics[width=\textwidth]{png/intersection_cube_sphere_mesh.png} + \caption{\label{fig:corefinement}} + \end{subfigure} + \hfill + \begin{subfigure}[b]{0.35\textwidth} + \centering + \includegraphics[width=\textwidth]{png/cube_sphere_remeshed.png} + \caption{ \label{fig:corefinement_remeshed}} + \end{subfigure} + \caption{\it (a) Triangulation created by filling a heart-shaped surface implicitly described by a function $f$. (b) Union of a cube with a sphere with badly shaped cells at the intersection. (c) Remeshed version of the same triangulation.} +\end{figure} + +The function +\texttt{CGALWrappers::compute\_quadrature\_on\_boolean\_operation()} +returns a quadrature that allows exact integration of polynomials on +polyhedral elements created by a Boolean operation between \dealii cells. +The quadrature rule is built by (i) subdividing the polyhedral region in tetrahedra, (ii) computing on each a \texttt{QGaussSimplex<3>} quadrature rule via \texttt{QSimplex<3>::\allowbreak{}compute\_affine\_transformation()}, and (iii) +collecting all in a single quadrature object on the \emph{physical} cell. + +The new utility functions will be the building blocks for functions in +the \texttt{NonMatching} namespace in future releases. While our current +CutFEM implementation (see Section~\ref{sec:cut}) relies on a level set description of the domain to determine +the boundary and the quadrature rules, one could do that also based on non-matching overlapping +grids~\cite{massing2013efficient}, for which the newly introduced, CGAL-based Boolean operations and +quadrature-generation functionality might be helpful. +The functionalities are also applicable in a broad context of immersed problems, such as +for weakly imposing boundary conditions on the interface of an immersed boundary +using Nitsche's method and for coupling terms using Lagrange multipliers. + +%These utility functions will be the building blocks for functions in the \texttt{NonMatching} namespace that will, e.g., assemble coupling terms like $(u,v)_{\Omega}$, with $\Omega$ a domain immersed in a fixed background mesh $B$ and $u,v$ finite element functions on $V_h(B)$, as needed, e.g., in +%the context of CutFEM (see Section~\ref{sec:cut}) or Nitsche's method to weakly impose boundary conditions at an interface. The same applies to coupling terms of the form $(u,q)_{\Omega}$ in formulations using Lagrange multipliers, where now $q \in Q_h(\Omega)$, with $Q_h(\Omega)$ the space of the multiplier variable. +%Note that the most relevant difference between this and the \texttt{QuadratureGenerator} in Section~\ref{sec:cut} is that the \texttt{Quadrature} objects are created directly from two overlapping grids, one +%spanning over $B$ and the other one over $\Omega$, and not from a level set function. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Performance improvement of particle infrastructure}\label{sec:particles} + +In the release described herein, we have reorganized the data +structures and optimized the algorithms that support using particles +in \dealii. In our previously reported implementation~\citep{dealII93} we stored all particle data as a separate contiguous array for each particle property, but particle identifiers (IDs) were still stored in a multimap tree-like structure. + +Our new particle containers are organized as follows: Particle IDs are stored in a list of dynamic arrays, each array containing the particle IDs of all particles in a unique cell. Each ID is a handle that determines the location of the data of this unique particle in the property arrays. +The list of ID arrays only contains entries for cells that contain particles. We keep a separate cache structure that contains pointers to the particular list entries for each cell. If a cell has no particles, this pointer is invalid. + +This structure allows for the following significant performance improvements: + +\begin{itemize} +\item All particle data (both their identifiers and their actual data) are now stored as separate and contiguous arrays in memory, which improves spatial locality for better prefetching of data and makes iterating over particles extremely efficient. +\item The choice of a list container that only includes entries for cells that contain particles means iteration is efficient, even if many cells in the domain do not contain any particles (as can be the case for discrete element methods~\cite{golshan2022lethe}). +\item Creating separate arrays for each cell allows us to easily move particle IDs from one cell to another as a local operation, affecting only the two cell containers in question. We take care to reuse allocated memory to minimize the number of memory reallocations. +\item The separate cache structure that contains entries for each cell allows quick random access to the particles of a particular cell, and also allows quickly determining if a particular cell has particles at all. +\end{itemize} + +In addition to the new storage structure, we have made the following algorithmic improvements: +Determining if a particle is inside a cell after changing its position involves inverting the mapping for this cell. We have reorganized our algorithms to perform these inversions on a batch of particles in the same cell instead of particle-by-particle, which allows us to make use of vectorized instructions during the inversion using the generic scheme of~\cite{KronbichlerKormann2012}. +In addition, after sorting all particles into their new cells, the arrays that store particle properties are now sorted in the same order as the particle IDs in the list of arrays, which allows for cache efficient iteration over particle properties. +Because the particle IDs are already sorted in the intended order at this time, we can reorder the particle properties as part of a copy operation into a new data container that replaces the existing container. This approach avoids a costly in-place sort of the particle properties. + +\begin{table} + \caption{\it Timing of various particle operations for tutorial program \texttt{step-68} (particle advection in a 2D, Cartesian box) using 400,000 particles on a single process.} + \label{tab:particle_timing} + \centering + \begin{tabular}{lccc} + \toprule + Particle Operation & \dealii 9.3 & \dealii 9.4 & Speedup \\ \midrule + Generation & 444 ms & 235 ms & 1.9$\times$ \\ + Iteration & 4.18 ms & 0.638 ms & 6.6$\times$ \\ + Advection & 37.8 ms & 33.9 ms & 1.15$\times$ \\ + Sorting & 21.9 ms & 9.27 ms & 2.4$\times$ \\ + \bottomrule + \end{tabular} + \end{table} + +We illustrate the combined effect of these performance improvements in Table~\ref{tab:particle_timing}. We measure the averaged compute time for four particle operations in a slightly modified version of the \dealii tutorial program \texttt{step-68} when advecting 400,000 particles on a single process (we have not observed any influence of the described changes on the parallel scalability of the algorithms). +The four operations we have measured are: +\begin{itemize} +\item Generation of a set of 400,000 particles at positions that are not aligned with the background mesh, i.e., the containing cell of each particle has to be identified with a search algorithm. +\item Iteration over the whole set of created particles, without + significant computation and in particular without accessing particle data. +\item Advection of all particles, which involves iteration over all particles, evaluation of the finite element solution at the location of the particles, read and write access to the position of all particles to modify their location, and write access to the particle properties (to store their velocity for visualization purposes). +\item Sorting, i.e., the inversion of the mapping of each cell to find the new particle locations relative to this cell, and moving all particles that have left their original cell into new cells (both \dealii 9.3 and \dealii 9.4). In \dealii 9.4, this operation also includes reordering the particle properties for optimal iteration. +\end{itemize} + +Table~\ref{tab:particle_timing} shows that all particle operations are +much faster in \dealii 9.4 than in version 9.3. In particular, operations that depend strongly on particle storage structure and require few fixed computations (like iteration and sorting) benefit massively from the above-mentioned optimizations. We note that the exact gains will depend strongly on the exact combination of geometry, mapping, dimensionality, and the number of particles per cell in any specific model, and can be smaller or larger than the measurements provided here. + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Support for large MPI buffers and parallel I/O} +\label{sec:large-mpi} + + Sending large messages over MPI or reading and writing large buffers using MPI I/O, + especially when dealing with small datatypes like \texttt{MPI\_CHAR}, + can often require processing more than $2^{31}$ objects at once. Prior + to the recent MPI-4 standard, which introduced a new set of \texttt{MPI\_*\_c()} functions, all MPI functions expected the ``count'' + to be a signed integer. This limits the number of objects to $2^{31}$, + i.e., writing of up to 2 GB at once if the datatype is \texttt{MPI\_CHAR}. + Several places in the library could exceed this limit, + for example when producing large graphical output, large + checkpoint files, or when broadcasting large datasets such as lookup tables. + + With this release we introduce a new module \texttt{Utilities::MPI::LargeCount} which enables sending and receiving MPI messages and I/O containing more than $2^{31}$ objects by implementing + the before-mentioned \texttt{MPI\_*\_c()} functions, e.g., \texttt{MPI\_Bcast\_c()}, using MPI-3 features if necessary. The + solution is based on custom datatypes as described in~\cite{hammond2014int_max}. +This functionality is now used in all places in the library where + large counts might be necessary (\texttt{DataOut::write\_vtu\_in\_parallel()} for graphical output, checkpointing of \texttt{Triangulation} objects, etc.). + + While implementing these changes we also worked on the following: + \begin{itemize} + \item Testing of large I/O with large chunks per MPI rank (>2 GB) and + large total sizes (>4 GB). Several instances of 32-bit data types for + offsets were changed to 64-bit to correctly support files larger + than 4 GB (HDF5 output, VTU output, checkpointing). + \item Performance testing of MPI I/O routines used for parallel VTU output with large performance improvements by switching from a shared + file pointer to individual file pointers, see Table~\ref{tab:mpi-io}. + \end{itemize} + +\begin{table} + \caption{\it Performance comparison of writing large VTU graphical output using MPI I/O on + TACC Frontera \texttt{/scratch1} file system with 16 file servers (``OSTs'') and a theoretical peak performance of 50 GB/s. The ROMIO version used enforces sequential writes when using \texttt{MPI\_File\_write\_ordered()}.} + \label{tab:mpi-io} + + \centering + + \begin{tabular}{llcc} + \toprule + Version & MPI routine used & 1 file, striping 16 & 16 files, no striping \\\midrule + \dealii{} 9.3 & \texttt{MPI\_File\_write\_ordered()} & 3 GB/s & 15 GB/s \\ + \dealii{} 9.4 & \texttt{MPI\_File\_write\_at\_all()} & 17 GB/s & 21 GB/s \\ + \bottomrule +\end{tabular} + + \end{table} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Improvements to unstructured communication} +\label{sec:CA} + +Many problems in parallel computations can be stated in the following +way: Each process in a parallel universe has a number of queries to +send to other processes that do not know that they will be asked, and +who will then have to respond with replies. This problem is solved by +``consensus algorithms''~\cite{hoefler2010scalable}. An example of where this problem appears is +given in Section~\ref{sec:repartitioning}. + +\dealii has had an implementation of these algorithms for some time, +but the current release substantially expands on it. Specifically, the +updated interfaces -- now based on function objects such as lambda +functions to formulate and process queries and replies -- can deal +with arbitrary data types for queries and replies, rather than only +arrays of data types natively supported by MPI. To make this possible, +the implementation packs and unpacks these objects into character +arrays via the \texttt{Utilities::pack()} and +\texttt{Utilities::unpack()} functions. We have also worked on making +these functions efficient: if the object to be packed is an array +(or array of arrays) of elements that satisfy the +\texttt{std::is\_trivially\_copyable} type trait, then the data is +copied into the character array via \texttt{std::memcpy}; only for +other objects do the packing and unpacking functions rely on BOOST's +serialization library. + +A special case of consensus algorithms is where the sender does not +actually require an answer. This happens, for example, during repartitioning +of meshes (Section~\ref{sec:repartitioning}), where a process sends parts of +the new mesh to the new owners: the new owner does not know how many processes +will send it mesh parts and the sender only needs an acknowledgment that the +data has been received. Previously, such a case was implemented through a consensus +algorithm where the reply message is simply empty. +The rewritten interfaces now support this case more explicitly: Code using +these interfaces no longer has to provide functions that formulate +and read the (empty) replies, though internally these functions still +send around an empty reply; this case will be implemented in the +future, using the interfaces now already in place. + +By the time of writing, \dealii uses consensus-based algorithms to determine +the owners of distributed index sets (\texttt{Utilities::MPI::Partitioner}, +\texttt{Utilities::MPI::Noncontiguous\allowbreak Partitioner}, \texttt{internal::MatrixFreeFunctions::VectorDataExchange}; see~\cite{dealII91}), +to set up the global-coarsening transfer operators (see~\cite{dealII92} and +Section~\ref{sec:multigrid}), to repartition distributed meshes (see Section~\ref{sec:repartitioning}), and basis coupling algorithms between non-matching +meshes, based on the communication patters in \texttt{RemotePointeEvaluation} (see~\cite{dealII92}). + +Finally, in the spirit of optimizing communication, the +\texttt{Utilities::MPI::broadcast()} function has been optimized for +objects that are arrays of data types natively supported by MPI and +which consequently can be sent without packing and unpacking. + + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{New and improved tutorials and code gallery programs} +\label{subsec:steps} + +Many of the \dealii tutorial programs were revised in a variety of ways +as part of this release. In addition, there are a number of new tutorial +programs: +\begin{itemize} + \item + \texttt{step-81} was contributed by Manaswinee Bezbaruah (Texas A\&M + University) and Matthias Maier (Texas A\&M University). It explains how + to solve the complex-valued time-harmonic Maxwell equations for an + optical scattering problem. + \item + \texttt{step-82} was contributed by Andrea Bonito (Texas A\&M + University) and Diane Guignard (University of Ottawa). It shows how + \dealii can be used to implement the local discontinuous Galerkin + (LDG) method for approximating the solution to the bi-Laplacian + problem. The method is an alternative to the C0IP method used in + \texttt{step-47}. + \item + \texttt{step-85} was contributed by Simon Sticko (Uppsala University). + It shows how to use the new CutFEM infrastructure to solve a Poisson + problem on a circular domain that is embedded in a Cartesian background + mesh. +\end{itemize} + +There is also a new program in the code gallery (a collection of +user-contributed programs that often solve more complicated problems +than tutorial programs, and that are intended as starting points for further +research rather than as teaching tools): +\begin{itemize} + \item ``TRBDF2-DG projection solver for the incompressible Navier--Stokes equations'' was contributed by Giuseppe Orlando (Politecnico di Milano). It shows + how to solve the incompressible Navier--Stokes equations efficiently + with \dealii's matrix-free DG infrastructure, multigrid, and adaptive-mesh + refinement. Interested readers are referred to~\cite{orlando2021efficient}. +\end{itemize} +Finally, the ``MCMC for the Laplace equation'' code gallery +program has been updated by providing MATLAB and Python versions of +the benchmark that is implemented in this code. + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\subsection{Incompatible changes}\label{subsec:deprecated} + +The 9.4 release includes +\href{https://dealii.org/developer/doxygen/deal.II/changes_between_9_3_3_and_9_4_0.html} +{around 40 incompatible changes}; see \cite{changes94}. The majority of these changes +should not be visible to typical user codes; some remove previously +deprecated classes and functions; and the majority changes internal +interfaces that are not usually used in external +applications. That said, the following are worth mentioning since they +may have been more widely used: +\begin{itemize} + \item In continuation of our attempt to merge the classes \texttt{DoFHandler} and \texttt{hp::DoFHandler}, we have removed the + template parameter \texttt{DoFHandlerType} from a number of classes and + functions, instead using \texttt{dim}/\texttt{spacedim} template arguments. Affected + classes include \texttt{SolutionTransfer} and \texttt{DataOut}. + \item \texttt{FE\_RaviartThomasNodal} now uses a different polynomial space to allow + for a simpler use on faces in non-standard orientation. The new polynomials + are anisotropic tensor products of Lagrange polynomials on the points of the + Gauss--Lobatto quadrature formula. This change leads to different entries, for example, in + the matrices and constraints, but no change in accuracy should be expected as + the resulting basis spans the same polynomial space. + \item The class \texttt{MappingQ} now applies a high-order mapping + to all cells, not just the cells near the boundary, functionality + that was previously provided by the \texttt{MappingQGeneric} + class. The latter has been marked as deprecated. + \item Changes to weighted repartitioning of + \texttt{parallel::distributed::Triangulation} objects include + the removal of the default weight of each cell in order to ensure + consistency with the rest of the library and to improve flexibility. +\end{itemize} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{How to cite \dealii}\label{sec:cite} + +In order to justify the work the developers of \dealii put into this +software, we ask that papers using the library reference one of the +\dealii papers. This helps us justify the effort we put into this library. + +There are various ways to reference \dealii. To acknowledge the use of +the current version of the library, \textbf{please reference the present + document}. For up-to-date information and a bibtex entry +see +\begin{center} + \url{https://www.dealii.org/publications.html} +\end{center} + +The original \dealii paper containing an overview of its +architecture is \cite{BangerthHartmannKanschat2007}, and a more recent +publication documenting \dealii's design decisions is available as \cite{dealII2020design}. If you rely on +specific features of the library, please consider citing any of the +following: +\begin{multicols}{2} + \vspace*{-36pt} + \begin{itemize}[leftmargin=4mm] + \item For geometric multigrid: \cite{Kanschat2004,JanssenKanschat2011,ClevengerHeisterKanschatKronbichler2019, munch2022gc}; + \item For distributed parallel computing: \cite{BangerthBursteddeHeisterKronbichler11}; + \item For $hp$-adaptivity: \cite{BangerthKayserHerold2007,fehling2022}; + \item For partition-of-unity (PUM) and finite element enrichment methods: + \cite{Davydov2016}; + \item For matrix-free and fast assembly techniques: + \cite{KronbichlerKormann2012,KronbichlerKormann2019}; + \item For computations on lower-dimensional manifolds: + \cite{DeSimoneHeltaiManigrasso2009}; + \item For curved geometry representations and manifolds: + \cite{HeltaiBangerthKronbichlerMola2019}; + \item For integration with CAD files and tools: + \cite{HeltaiMola2015}; + \item For boundary element computations: + \cite{GiulianiMolaHeltai-2018-a}; + \item For the \texttt{LinearOperator} and + \texttt{Packaged\-Operation} facilities: + \cite{MaierBardelloniHeltai-2016-a,MaierBardelloniHeltai-2016-b}; + \item For uses of the \texttt{WorkStream} interface: + \cite{TKB16}; + \item For uses of the \texttt{ParameterAcceptor} concept, the + \texttt{MeshWorker::ScratchData} base class, and the + \texttt{ParsedConvergenceTable} class: + \cite{SartoriGiulianiBardelloni-2018-a}; + \item For uses of the particle functionality in \dealii: + \cite{GLHPB18}. + \vfill\null + \end{itemize} +\end{multicols} + +\dealii can interface with many other libraries: +\begin{multicols}{3} + \begin{itemize}[leftmargin=4mm] + \item ADOL-C \cite{griewank1996adolc} + \item ArborX \cite{lebrun2020arborx} + \item ARPACK \cite{lehoucq1998arpack} + \item Assimp \cite{schulze2021assimp} + \item BLAS and LAPACK \cite{anderson1999lapack} + \item Boost \cite{boost-web-page} + \item CGAL \cite{cgal-user-ref} + \item cuSOLVER \cite{cusolver-web-page} + \item cuSPARSE \cite{cusparse-web-page} + \item Gmsh \cite{geuzaine2009gmsh} + \item GSL \cite{galassi2009gsl,gsl-web-page} + \item Ginkgo \cite{anzt2020ginkgo,anzt2022ginkgo} + \item HDF5 \cite{hdf5-web-page} + \item METIS \cite{karypis1998metis} + \item MUMPS \cite{amestoy2001mumps,amestoy2019mumps} + \item muparser \cite{muparser-web-page} + \item OpenCASCADE \cite{opencascade-web-page} + \item p4est \cite{burstedde2011p4est,burstedde2020parallel} + \item PETSc \cite{petsc-user-ref,petsc-web-page} + \item ROL \cite{ridzal2014rol} + \item ScaLAPACK \cite{blackford1997scalapack} + \item SLEPc \cite{hernandez2005slepc} + \item SUNDIALS \cite{hindmarsh2005sundials} + \item SymEngine \cite{symengine-web-page} + \item TBB \cite{reinders2007tbb} + \item Trilinos \cite{heroux2005trilinos,trilinos-web-page} + \item UMFPACK \cite{davis2004umfpack} + \end{itemize} +\end{multicols} +Please consider citing the appropriate references if you use +interfaces to these libraries. + +The two previous releases of \dealii can be cited as +\cite{dealII92,dealII93}. + + +\section{Acknowledgments} + +\dealii is a worldwide project with dozens of contributors around the +globe. Other than the authors of this paper, the following people +contributed code to this release:\\ +% +% Uwe Koecher doesn't usually show up in the changelog, but +% we should make sure he's listed. +% + +% This is up-to-date as of 9.4 RC1 - should be the final list. +Pasquale Africa, +Tyler Anderson, +Francesco Andreuzzi, +Mathias Anselmann, +Maximilian Bergbauer, +Manaswinee Bezbaruah, +Bruno Blais, +Till Budde, +Fabian Castelli, +Praveen Chandrashekar, +Huimin Chen, +Cu Cui, +Ivo Dravins, +Niklas Fehn, +Corbin Foucart, +Johannes Friedlein, +Sebastian Fuchs, +Daniel Garcia-Sanchez, +Nicola Giuliani, +Alexander Grayver, +Diane Guignard, +Jake Harmon, +Sean Ingimarson, +Pengfei Jia, +Sebastian Kinnewig, +Uwe K{\"o}cher, +Katharina Kormann, +Paras Kumar, +Wenyu Lei, +Alberto F. Martin, +Nils Much, +Lucas Myers, +Justin O'Connor, +Judith Pauen, +Vachan Potluri, +Raghunandan Pratoori, +Sebastian Proell, +Ce Qin, +Reza Rastak, +Jose E. Roman, +Raphael Schoof, +Magdalena Schreter, +Konrad Simon, +Daniel Sun, +Kuljit S. Virk, +Michał Wichrowski, +Niklas Wik, +Jiaqi Zhang. + + +Their contributions are much appreciated! + + +\bigskip + +\dealii and its developers are financially supported through a +variety of funding sources: + + +D.~Arndt and B.~Turcksin: Research sponsored by the Laboratory Directed Research and +Development Program of Oak Ridge National Laboratory, managed by UT-Battelle, +LLC, for the U. S. Department of Energy. + +W.~Bangerth, T.~Heister, and R.~Gassm{\"o}ller were partially +supported by the Computational Infrastructure for Geodynamics initiative +(CIG), through the National Science Foundation (NSF) under Award +No.~EAR-1550901 and The University of California -- Davis. + +W.~Bangerth and M.~Fehling were partially supported by Award OAC-1835673 +as part of the Cyberinfrastructure for Sustained Scientific Innovation (CSSI) +program. + +W.~Bangerth was also partially supported by Awards DMS-1821210 and EAR-1925595. + +T.~Heister was also partially supported by NSF +Awards OAC-2015848, DMS-2028346, and +EAR-1925575. + +R.~Gassm{\"o}ller was also partially supported by the NSF Awards +EAR-1925677 and EAR-2054605. + +L.~Heltai was partially supported by the Italian Ministry of Instruction, +University and Research (MIUR), under the 2017 PRIN project NA-FROM-PDEs MIUR +PE1, ``Numerical Analysis for Full and Reduced Order Methods for the efficient +and accurate solution of complex systems governed by Partial Differential +Equations''. + +M.~Kronbichler and P.~Munch were partially supported by the +Bayerisches Kompetenznetzwerk +f\"ur Technisch-Wissen\-schaft\-li\-ches Hoch- und H\"ochstleistungsrechnen +(KONWIHR) in the context of the projects +``High-order matrix-free finite element implementations with +hybrid parallelization and improved data locality'' and ``Fast and scalable finite element algorithms for coupled multiphysics problems and non-matching grids''. + +M.~Maier was partially supported by NSF Awards DMS-1912847 and DMS-2045636. + +S.~Sticko was partially supported by eSSENCE of e-Science. + +D.~Wells was supported by the NSF Award OAC-1931516. + +The Interdisciplinary Center for Scientific Computing (IWR) at Heidelberg +University has provided hosting services for the \dealii web page. + +\bibliography{paper}{} +\bibliographystyle{abbrv} + +\end{document} diff --git a/9.5/png/cube_sphere_remeshed.png b/9.5/png/cube_sphere_remeshed.png new file mode 100644 index 0000000..0836eb3 Binary files /dev/null and b/9.5/png/cube_sphere_remeshed.png differ diff --git a/9.5/png/heart_implicit.png b/9.5/png/heart_implicit.png new file mode 100644 index 0000000..4e0ac8d Binary files /dev/null and b/9.5/png/heart_implicit.png differ diff --git a/9.5/png/intersection_cube_sphere_mesh.png b/9.5/png/intersection_cube_sphere_mesh.png new file mode 100644 index 0000000..1eb855b Binary files /dev/null and b/9.5/png/intersection_cube_sphere_mesh.png differ diff --git a/9.5/svg/repartitioning.pdf_tex b/9.5/svg/repartitioning.pdf_tex new file mode 100644 index 0000000..6a494c3 --- /dev/null +++ b/9.5/svg/repartitioning.pdf_tex @@ -0,0 +1,74 @@ +%% Creator: Inkscape 1.1.2 (1:1.1+202202050942+0a00cf5339), www.inkscape.org +%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 +%% Accompanies image file 'repartitioning.pdf' (pdf, eps, ps) +%% +%% To include the image in your LaTeX document, write +%% \input{.pdf_tex} +%% instead of +%% \includegraphics{.pdf} +%% To scale the image, write +%% \def\svgwidth{} +%% \input{.pdf_tex} +%% instead of +%% \includegraphics[width=]{.pdf} +%% +%% Images with a different path to the parent latex file can +%% be accessed with the `import' package (which may need to be +%% installed) using +%% \usepackage{import} +%% in the preamble, and then including the image with +%% \import{}{.pdf_tex} +%% Alternatively, one can specify +%% \graphicspath{{/}} +%% +%% For more information, please see info/svg-inkscape on CTAN: +%% http://tug.ctan.org/tex-archive/info/svg-inkscape +%% +\begingroup% + \makeatletter% + \providecommand\color[2][]{% + \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% + \renewcommand\color[2][]{}% + }% + \providecommand\transparent[1]{% + \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% + \renewcommand\transparent[1]{}% + }% + \providecommand\rotatebox[2]{#2}% + \newcommand*\fsize{\dimexpr\f@size pt\relax}% + \newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% + \ifx\svgwidth\undefined% + \setlength{\unitlength}{685.42349496bp}% + \ifx\svgscale\undefined% + \relax% + \else% + \setlength{\unitlength}{\unitlength * \real{\svgscale}}% + \fi% + \else% + \setlength{\unitlength}{\svgwidth}% + \fi% + \global\let\svgwidth\undefined% + \global\let\svgscale\undefined% + \makeatother% + \begin{picture}(1,0.45555441)% + \lineheight{1}% + \setlength\tabcolsep{0pt}% + \put(0,0){\includegraphics[width=\unitlength,page=1]{repartitioning.pdf}}% + \put(0.88271721,0.05279977){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 0\end{tabular}}}}% + \put(0.9104046,0.05279977){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 1\end{tabular}}}}% + \put(0.93785528,0.05279977){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 2\end{tabular}}}}% + \put(0.96554266,0.05279977){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\lineheight{1.25}\smash{\begin{tabular}[t]{l}\tiny 3\end{tabular}}}}% + \put(0.86017523,0.05279977){\color[rgb]{0,0,0}\makebox(0,0)[rt]{\lineheight{1.25}\smash{\begin{tabular}[t]{r}\tiny{ranks:}\end{tabular}}}}% + \put(0,0){\includegraphics[width=\unitlength,page=2]{repartitioning.pdf}}% + \put(0.09066097,0.44446978){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old partitioning}\end{tabular}}}}% + \put(0.09066096,0.00303474){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{new partitioning}\end{tabular}}}}% + \put(0,0){\includegraphics[width=\unitlength,page=3]{repartitioning.pdf}}% + \put(0.36421447,0.44446978){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old rank "0"}\end{tabular}}}}% + \put(0.36421447,0.00303474){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{old rank "1"}\end{tabular}}}}% + \put(0,0){\includegraphics[width=\unitlength,page=4]{repartitioning.pdf}}% + \put(0.91235736,0.22755196){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{new rank "0"}\end{tabular}}}}% + \put(0,0){\includegraphics[width=\unitlength,page=5]{repartitioning.pdf}}% + \put(0.40658635,0.2244243){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\textit{ghost cells}\end{tabular}}}}% + \put(0,0){\includegraphics[width=\unitlength,page=6]{repartitioning.pdf}}% + \end{picture}% +\endgroup% diff --git a/9.5/svg/repartitioning.svg b/9.5/svg/repartitioning.svg new file mode 100644 index 0000000..be8b0d9 --- /dev/null +++ b/9.5/svg/repartitioning.svg @@ -0,0 +1,1020 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \tiny 0 + \tiny 1 + \tiny 2 + \tiny 3 + \tiny{ranks:} + + + + + + + + + + + + + + + + + + \textit{old partitioning} + \textit{new partitioning} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \textit{old rank "0"} + \textit{old rank "1"} + + + + + + + + + + + + + + + \textit{new rank "0"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \textit{ghost cells} + + + +