view 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 source

\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}