Mercurial > fem-fenics-eugenio
diff doc/presentation/Mox_30_01/fem-library.tex @ 205:17b92c718a2b
Presentation for the seminar at MOX
author | gedeone-octave <marcovass89@hotmail.it> |
---|---|
date | Thu, 30 Jan 2014 09:14:35 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/presentation/Mox_30_01/fem-library.tex Thu Jan 30 09:14:35 2014 +0100 @@ -0,0 +1,233 @@ +\documentclass[10pt]{beamer} + + +\usetheme{Octave} +\usepackage{thumbpdf} +\usepackage{wasysym} +\usepackage{ucs} +\usepackage[utf8]{inputenc} +\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} +\usepackage{verbatim} +\usepackage{listings} +\usepackage{attachfile} +\usepackage{mathtools} +\usepackage{parcolumns} +\usepackage[framemethod=TikZ]{mdframed} +\usepackage[strict]{changepage} + + +\lstset{ + language=C++, + keywordstyle=\bfseries\ttfamily\color[rgb]{0,0,1}, + identifierstyle=\ttfamily, + commentstyle=\color[rgb]{0.133,0.545,0.133}, + stringstyle=\ttfamily\color[rgb]{0.627,0.126,0.941}, + showstringspaces=false, + basicstyle=\scriptsize, + numberstyle=\tiny, + numbers=left, + stepnumber=1, + numbersep=10pt, + tabsize=2, + breaklines=true, + prebreak = \raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}}, + breakatwhitespace=false, + aboveskip={1.5\baselineskip}, + columns=fixed, + upquote=true, + extendedchars=true, +} + + + + +\title{Fem-fenics} +\subtitle{Una libreria di elementi finiti per Octave} +\author[Marco Vassallo]{\bf Marco Vassallo } +\date{30 Gennaio 2014} +\begin{document} + +\frame[plain]{\titlepage} + +\section*{} +\begin{frame} + \frametitle{Outline} + \tableofcontents[section=2] +\end{frame} + +\AtBeginSection[] +{\frame<handout:0>{\frametitle{Outline}\tableofcontents[currentsection]}} + +%\AtBeginSubsection[] +%{\frame<handout:0>{\frametitle{Outline}\tableofcontents[sectionstyle=show/hide,subsectionstyle=show/shaded/hide]}} + +\newcommand<>{\highlighton}[1]{% +\alt#2{\structure{#1}}{{#1}}} + +\newcommand{\icon}[1]{\pgfimage[height=1em]{#1}} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%% Content starts here %%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Una libreria di elementi finiti per Octave} +\subsection{Introduzione} +\begin{frame}[fragile]{Why?} + \begin{itemize} + \item Non vi è una libreria generica in Octave (msh, fpl, bim, ..) + \item Lasciare all'utente la scelta di utilizzare il linguaggio che preferisce + \item Sfruttare le potenzialità di Octave per la risoluzione di sistemi lineari + e sistemi di o.d.e + \item Migliorare i punti deboli dell'interfaccia Python + \end{itemize} + +\end{frame} + +\begin{frame} +\frametitle{Installazione, Documentazione, Wiki, ...} +\only<1>{ +\texttt{pkg install fem-fenics -forge} +\begin{center} +\includegraphics[width=.9\linewidth]{inst.png} +\end{center} +} + + +\only<2>{ +\url{http://wiki.octave.org/Fem-fenics} +\begin{center} +\includegraphics[width=.9\linewidth]{wiki.png} +\end{center} +} + + +\only<3>{ +\url{http://octave.sourceforge.net/fem-fenics/overview.html} +\begin{center} +\includegraphics[width=.9\linewidth]{func.png} +\end{center} +} +\end{frame} + +\subsection{Esempi} + +\begin{frame}[fragile]{Poisson} +\scriptsize +\only<1>{ +\includegraphics[width=1.\linewidth]{pois.png}} + +\only<2>{ +\includegraphics[width=1.\linewidth]{pois2.png}} + +\end{frame} + +\begin{frame}[fragile]{Navier Stokes} +\scriptsize +\includegraphics[width=1.\linewidth]{ns.png} +\end{frame} + +\begin{frame}[fragile]{Mixed Poisson} +\scriptsize +\includegraphics[width=1.\linewidth]{mixed.png} + +\end{frame} + +\begin{frame}[fragile]{Elasticity} +\scriptsize +\includegraphics[width=1.\linewidth]{hyper.png} +\end{frame} + +\section{Implementazione} + +\begin{frame}[fragile]{Octave e C++} + \begin{itemize} + \item Octave è principalmente scritto in C++ (script, Fortran) + \item Octave offre un'interfaccia per includere codice C++ come ``dinamically linked extension'' + \item Una volta compilato (\texttt{mkoctfile}) il codice può essere chiamato dall' ``interpreter'' come + ogni altra funzione + \item Octave offre la possibilità di aggiungere nuove classi all'``interpreter'' + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Il problema} +\includegraphics[width=1.\linewidth]{octfem.png} +\end{frame} + +\begin{frame}[fragile]{Class design} +\only<1>{\lstinputlisting[language=C++,linerange=1-23,firstnumber=1]{./esempi/classe.cc}} +\only<2>{\lstinputlisting[language=C++,linerange=41-54,firstnumber=last]{./esempi/classe.cc}} +\only<3>{\lstinputlisting[language=C++,linerange=29-38,firstnumber=last]{./esempi/classe.cc}} +%\only<4>{\lstinputlisting[language=C++,linerange=57-72,firstnumber=last]{./esempi/classe.cc}} +\pause +%\attachfile[icon=Paperclip]{./esempi/classe.cc}{source code of the example} +\end{frame} + +\begin{frame}[fragile]{Funzioni dinamiche in Octave} +\only<1>{\lstinputlisting[language=C++,linerange=1-17,firstnumber=1]{./esempi/func.cc}} +\only<2>{\lstinputlisting[language=C++,linerange=18-29,firstnumber=last]{./esempi/func.cc}} +\pause +%\attachfile[icon=Paperclip]{./esempi/func.cc}{source code of the example} +\end{frame} + +\begin{frame}[fragile]{Perchè abbiamo due file ?} +Come funziona Fenics in C++ +\begin{itemize} + \item Problema risolto in due file: \texttt{Poisson.ufl} e \texttt{Poisson.cc} + \item Problema astratto definito dall'utente nel file \texttt{Poisson.ufl} . + \item Il file viene compilato dall'utente e viene generato l'header \texttt{Poisson.h} + \item \texttt{Poisson.h} contiene la definizione della classe Poisson e dei costruttori delle forme + (bi)lineari e dello spazio funzionale + \item L'header viene incluso nel file \texttt{Poisson.cc} e il problema risolto + \begin{lstlisting} +#include "Poisson.h" +int main() +{ + UnitSquareMesh mesh(32, 32); + Poisson::FunctionSpace V(mesh); + Poisson::BilinearForm a(V, V); + Poisson::LinearForm L(V); + ... + \end{lstlisting} + +\end{itemize} +\end{frame} + +\begin{frame}[fragile]{Code on the fly} +\lstinputlisting[language=C++,linerange=1-22,firstnumber=1]{./esempi/import_ufl_FunctionSpace.m} +%\only<2>{\lstinputlisting[language=C++,linerange=1-32,firstnumber=1]{./esempi/generate_fs.m}} +%\pause +%\attachfile[icon=Paperclip]{./esempi/func.cc}{source code of the example} +\end{frame} + + +\begin{frame}[fragile]{Code on the fly} +\lstinputlisting[language=C++,linerange=1-22,firstnumber=1]{./esempi/generate_fs.m} +%\attachfile[icon=Paperclip]{./esempi/func.cc}{source code of the example} +\end{frame} + +\begin{frame}[fragile]{Implementzione} + Altri aspetti implementativi descritti nella documentazione + \begin{itemize} + \item Conversione da (p, e, t) a dolfin xml + \item Estensione del pkg msh con la funzione \texttt{mshm\_refine ()} + \item Conversione da csc a csr + \item Polimorfismo (save, plot) + \item Autoconf, Automake e la generazione del pkg + \end{itemize} +\end{frame} + +\begin{frame}[fragile]{Conclusione} +La prima versione del pkg è stata rilasciata, ma ancora del +lavoro resta da fare + \begin{itemize} + \item TODO sulla wiki + \item Aggiungere funzioni disponibili in Fenics + \item Estendere con nuovi esempi + \item Migliorare la gestione delle matrici + \item Controllare che tutto funzioni anche con le nuove versioni di Octave e Fenics + \item ... + \end{itemize} +\end{frame} +\end{document}