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}