SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
R´utilisabilit´
                                      e            e
                        G´nie Logiciel pour le Calcul Scientifique
                         e
                                       Caner Candan - caner@candan.fr
                                                    6 mars 2011

R´sum´
 e   e                                                            effet nous pouvons utiliser l’outil d’installation de pa-
                                                                  quets “aptitute”. Une rapide introduction est pr´sent´
                                                                                                                    e    e
   Le G´nie Logiciel constitue l’ensemble des activit´s
           e                                             e        en figure 1.
permettant de d´finir la conception jusqu’` la pro-
                   e                            a
duction d’un logiciel et la R´utilisabilit´ peut ˆtre
                                    e        e         e          $> sudo aptitude install libpetsc3.1
d´finit comme une mani`re de concevoir et r´aliser les
  e                        e                    e                 $> sudo aptitude install libpetsc3.1-dev
composants de base des m´thodes num´riques de fa¸on
                              e           e            c          $> sudo aptitude install petsc3.1-doc
la plus r´utilisable possible. Pour les illustrer, nous
             e
utiliserons une m´thode it´rative, qui contrairement
                     e          e                                 $> sudo aptitude install libslepc3.1
aux m´thodes directes, se prˆte mieux aux matrices de
         e                       e                                $> sudo aptitude install libslepc3.1-dev
grandes tailles. Elles permettent de r´duire la taille de
                                        e                         $> sudo aptitude install slepc3.1-doc
la matrice en se limitant aux ´l´ments non-nuls. Il est
                                   ee
´galement important de noter que la m´thode it´rative
e                                         e        e
utilis´e est une m´thode de projection pour r´soudre de
       e           e                           e                  Figure 1 – Commandes pour l’installation des librairies
tr`s grandes tailles de probl`mes. Elle est constitu´e de
   e                            e                    e            et des d´pendances
                                                                          e
3 parties principales : la projection dans un sous-espace,
la r´solution avec une m´thode classique et le retour
     e                       e
dans l’espace de d´part.
                    e
                                                                  Configuration Puis pour ´viter les “Makefile”
                                                                                                    e
  Nous rappelons, ci-dessous, les objectifs attendus du           d´sordonn´s et incompl`tes fournit dans les exemples
                                                                   e         e              e
rapport :                                                         des librairies ainsi que les variables d’environnement `
                                                                                                                         a
                                                                  d´finir, nous pouvons faire appel ` l’outil CMake 1 .
                                                                   e                                  a
    – se      familiariser    avec     la   r´utilisabilit´
                                             e            e
      s´quentielle/parall`le ` l’aide d’une biblioth`que
       e                   e a                        e             Ce dernier facilite grandement la configuration d’un
      num´rique orient´e composant,
           e             e                                        projet en PETSc 2 ou SLEPc et permet ainsi ` quiconque
                                                                                                             a
    – utilisation des biblioth`ques PETSc, SLEPc,
                              e                                   une rapide prise en main des biblioth`ques utilis´es. De
                                                                                                       e           e
    – impl´mentation des op´rations matricielles de base,
           e                  e                                   plus la configuration de CMake est multi-plateforme. Le
      de la m´thode it´rative ERAM et de la m´thode
                e         e                         e             code 1 illustre un exemple de fichier de configuration
      hybride MERAM,                                              CMake pour un projet simple.
    – mise ` l’´chelle des exemples r´alis´s en int´grant
             a e                       e e          e
      les composants de ces biblioth`ques dans l’environ-
                                     e                            Code 1 Fichier de configuration d’un projet pour le
      nement YML.                                                 programme “hello world” en PETSc avec CMake

                                                            CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
1      Installation et configuration de                      PROJECT(hello)
       l’environnement                                      FIND_PACKAGE(PETSc REQUIRED)
                                                            INCLUDE_DIRECTORIES( ${PETSC_INCLUDES} )
Pr´ambule Il est important, avant tout, de pr´senter ADD_EXECUTABLE(hello hello.cpp)
   e                                                 e
les d´marches n´cessaires ` l’installation et la configura- TARGET_LINK_LIBRARIES(hello ${PETSC_LIBRARIES})
     e            e           a
tion de l’environnement. Nous entendons principalement
par environnement les librairies PETSc et SLEPc. Puis
nous aborderons une m´thode de configuration d’un pro-
                          e                                   De la mˆme mani`re il suffirait d’inclure le code 2 pour
                                                                     e         e
jet utilisant ces librairies ` l’aide d’outils comme CMake. compiler un projet en SLEPc.
                             a

                                                                     1. CMake : g´n´rateur et langage haut niveau de Makefile
                                                                                   e e
Installation Utilisant un OS bas´ sur “debian”, une
                                 e                                multi-plateforme
“Ubuntu 10.10”, il est possible d’installer PETSc et                 2. FindPETSc.cmake available from https://github.com/
SLEPc, sans qu’aucune compilation soit n´cessaire. En
                                          e                       jedbrown/cmake-modules/blob/master/FindPETSc.cmake


                                                              1
2   DESIGN                                                                                                           2


Code 2 Configuration additionnel pour un projet en Code 4 Exemple de code en petsc-cxx
SLEPc
                                                             #include <petsc_cxx/petsc_cxx>
FIND_PACKAGE(SLEPC REQUIRED)                                 using namespace petsc_cxx;
INCLUDE_DIRECTORIES( ${SLEPC_INCLUDES} )                     int main(int ac, char** av)
TARGET_LINK_LIBRARIES(hello ${SLEPC_LIBRARIES}) {
                                                                   Parser parser(ac, av, "Introductory "
                                                                                                "example "
                                                                                                "of code using "
2 Design                                                                                        "petsc-cxx.");
                                                                   Context context(parser);
C vs C++ Les librairies PETSc 3 et SLEPc ont ´t´         ee
                                                                   // YOUR CODE
d´velopp´es principalement en langage C sans utilisation
  e       e
                                                                   return 0;
d’aucun paradigme de programmation. Nous avons donc
                                                             }
choisit de porter le code des librairies en C++ afin de
profiter du paradigme objet offert par ce dernier ainsi
que les concepts de m´ta-programmation. Deux projets
                         e
en d´coulent : petsc-cxx 4 et slepc-cxx 5 . Cela nous permet petsc_cxx::Parser, quant ` elle indique que l’on uti-
     e                                                                                       a
ainsi d’utiliser ces librairies d’une mani`re intuitive tout lise le gestionnaire de param`tres de PETSc.
                                            e                                                e
en profitant d’un langage fortement typ´, b´n´ficiant de
                                             e e e
contrats d’utilisation 6 et de couches d’abstraction.
                                                             slepc-cxx Nous savons que la librairie SLEPc est
                                                             d´pendante de PETSc, cela va de mˆme pour la librai-
                                                               e                                     e
petsc-cxx Pour situer le contexte de la librairie, nous
                              7                              rie slepc-cxx et petsc-cxx. Nous utilisons ´galement un
                                                                                                         e
utilisons l’espace de nom petsc_cxx. Ainsi toutes les
                                                             espace de nom pour slepc-cxx, il s’agit de slepc_cxx. Le
classes se situent dans ce mˆme contexte. Les codes 3 et 4
                               e
                                                             code 5 illustre l’initialisation d’un programme en slepc-
illustrent quelques diff´rences entre les librairies PETSc
                         e
                                                             cxx. D’autres exemples vont suivre.
et petsc-cxx.

Code 3 Exemple de code en PETSc                              Code 5 Exemple de code en slepc-cxx

#include <petscsys.h>                           #include <slepc_cxx/slepc_cxx>
static char help[] = "Introductory example of " int main(int ac, char** av)
                     "code using PETSc.nn";   {
int main(int ac, char** av)                         slepc_cxx::Parser parser(ac, av,
{                                                                            "Introductory "
    PetscInitialize(&ac, &av, (char *)0, help);                              "example "
    // YOUR CODE                                                             "of code using "
    PetscFinalize();                                                         "slepc-cxx.");
    return 0;                                       petsc_cxx::Context context(parser);
}                                                   // YOUR CODE
                                                    return 0;
                                                }
   Dans le cas de petsc-cxx le simple fait d’inclure le fi-
chier d’en-tˆte petsc_cxx/petsc_cxx est suffisant. Il est
            e
´ventuellement possible d’inclure uniquement des classes
e                                                              Comme nous le disions, slepc-cxx d´pend de
                                                                                                       e
sp´cifiques afin d’all´ger le code. Autre point, il n’est
  e                   e                                      petsc-cxx, c’est la raison pour laquelle nous utili-
plus n´cessaire de faire appel ` une fonction tel que
       e                         a                           sons la classe petsc_cxx::Context avec la classe
PetscFinalize() ` la fin du programme, ceci est fait
                    a                                        slepc_cxx::Parser. La classe slepc_cxx::Parser
de mani`re implicite lors de la sortie du contexte de
         e                                                   permet d’utiliser le gestionnaire de param`tres de
                                                                                                         e
la fonction main depuis la classe petsc_cxx::Context.        SLEPc.
Cette classe, prenant en param`tre un objet de type
                                  e
petsc_cxx::Parser, doit ˆtre appel´e au d´but du
                             e          e        e         Fonction objet Ce nouveau design est centr´ autour  e
programme pour situer le contexte PETSc. La classe         de ce que l’on nomme des foncteurs ou encore fonction
   3. Why is PETSc programmed in C, instead of For- objet. Il s’agit d’utiliser une classe comme fonction, in-
tran or C++ ? : http://www.mcs.anl.gov/petsc/petsc-as/ troduite en langage proc´durale, tout en profitant des
                                                                                       e
documentation/faq.html#why-c                               fonctionnalit´s apport´es par la programmation objet.
                                                                         e          e
   4. petsc-cxx : https://github.com/canercandan/petsc-cxx
   5. slepc-cxx : https://github.com/canercandan/slepc-cxx
                                                           Ainsi il est possible de d´l´guer l’appel ` une fonction ob-
                                                                                     ee              a
   6. Interface                                            jet. L’instanciation du foncteur s’effectuant avant l’ap-
   7. Namespace                                            pel, il est ainsi possible de passer des param`tres ` sa
                                                                                                             e     a
3        ´
     IMPLEMENTATION                                                                                                 3


construction ` travers le constructeur et d’effectuer en-
               a                                                La variable A est instanci´e avec la classe Matrix<T>.
                                                                                          e
suite l’appel.                                               La variable x est instanci´e avec la classe Vector<T>.
                                                                                        e
                                                             Tous deux utilisent le type Scalar. Puis le produit de
                                                             A et x est assign´ ` la variable b. De mani`re implicite
                                                                               ea                          e
Op´rations La classe principale que l’on nommera
     e
                 8                                           des routines sont appel´es en PETSc pour r´aliser le
                                                                                      e                        e
petsc_cxx::BO , est une classe abstraite repr´sentant
                                                    e
                                                             produit. Les param`tres pass´s ` l’instance de la matrice
                                                                                 e         e a
toutes les op´rations binaires prenant 3 param`tres `
               e                                      e    a
                                                             sont respectivement le nombre de lignes, le nombre de
l’appel (2 en entr´e et 1 en sortie). Il s’agit d’une inter-
                   e
                                                             colonnes et la valeur initiale pour tous les ´l´ments de
                                                                                                            ee
face de foncteurs. Elle impose l’impl´mentation d’une
                                         e
                                                             la matrice.
m´thode repr´sentative de la fonction d’appel.
   e           e
   Les classes d’op´rations qui h´ritent de la classe
                     e               e
petsc_cxx::BO sont multiples, ci-dessous une liste non- 3           Impl´mentation
                                                                           e
exhaustive.
   – petsc_cxx::MultiplyMatVec, pour la r´solution e            Dans cette section nous allons voir comment
      du syst`me lin´aire Ax = b
             e       e                                       impl´menter des op´rations matricielles de bases puis
                                                                  e                e
   – petsc_cxx::AdditionMatrix, pour l’addition de nous aborderons une impl´mentation de la m´thode
                                                                                          e                      e
      deux matrices                                          it´rative ERAM et de la m´thode hybride MERAM.
                                                               e                         e
   – petsc_cxx::Dot, pour le produit scalaire de deux
      vecteurs                                               Op´rations matricielles Le code 7 illustre le produit
                                                                 e
   – petsc_cxx::Scal, pour la mise ` l’´chelle d’un vec- matrice-vecteur sur le sous-espace de Krylov.
                                       a e
      teur
                                                             Code 7 Exemple de code illustrant le produit matrice-
Structure de donn´es Plusieurs types de structures vecteur sur le sous-espace de Krylov
                       e
de donn´es ont ´t´ port´es ` ce nouveau design, ci-
        e         ee     e a
                                                        #include <petsc_cxx/petsc_cxx>
dessous une liste non-exhaustive.
                                                        using namespace petsc_cxx;
  – petsc_cxx::Scalar, repr´sente le type scalaire
                                e
                                                        int main(int ac, char** av)
  – petsc_cxx::Int, repr´sente un entier
                          e
                                                        {
  – petsc_cxx::Real, repr´sente un r´el
                            e         e
                                                              Parser parser(ac, av);
  – petsc_cxx::Truth, repr´sente un bool´en
                              e          e
                                                              Context context(parser);
  – petsc_cxx::Matrix, classe repr´sentant une ma-
                                    e
                                                              const Int N = 4;
    trice PETSc
                                                              Matrix< Scalar > A(N,N,10);
  – petsc_cxx::Vector, classe repr´sentant un vecteur
                                  e
                                                              Vector< Scalar > x(N,2);
    PETSc
                                                              Vector< Scalar > b(N);
                                                              Krylov< Scalar > ksp;
Surcharge d’op´rateurs Le langage C++ nous offre
                  e                                           ksp(A,x,b);
´galement la possibilit´ de surcharger les diff´rents
e                        e                       e            return 0;
op´rateurs. Il est ainsi possible d’impl´menter un pro- }
  e                                     e
duit matrice-vecteur avec un code proche de l’´quation
                                               e
math´matique Ax = b. Un exemple est illustr´ dans le
     e                                        e
code 6.                                                    Nous utilisons la classe Krylov<T> impl´ment´ dans
                                                                                                        e     e
                                                        la librairie petsc-cxx. Cette classe appelle les fonctions de
Code 6 Exemple de code illustrant le produit matrice- la structure KSP disponible dans PETSc. Nous passons
vecteur en petsc-cxx                                    a
                                                        ` l’instance ksp de la classe, la matrice A et les vecteurs
                                                        x et b. Le r´sultat ´tant sauvegard´ dans le vecteur b.
                                                                      e      e                e
#include <petsc_cxx/petsc_cxx>
using namespace petsc_cxx;                              EPS La librairie SLEPc introduit une famille de
int main(int ac, char** av)                             fonctions, appel´ EPS 9 , pour le calcul des valeurs
                                                                           e
{                                                       propres. Il est indispensable de d´finir la m´thode de
                                                                                              e            e
     Parser parser(ac, av);                             r´solution ` utiliser parmi celles disponible :
                                                         e           a
     petsc_cxx::Context context(parser);
     const Int N = 4;                                      – “power”,
     Matrix< Scalar > A(N,N,10);                           – “subspace”,
     Vector< Scalar > x(N,2);                              – “arnoldi”,
     Vector< Scalar > b = A * b;                           – “lanczos”,
     return 0;                                             – “krylovschur”,
}                                                          – “lapack”
                                                           – “arpack”
    8. Binary Operation                                       9. EPS : Eigen Problem Solver
3           ´
        IMPLEMENTATION                                                                                                  4


    –   “blzpack”,                                             L’algorithme 10 illustre les diff´rentes ´tapes que
                                                                                               e       e
    –   “trlan”,                                             constitue ERAM.
    –   “blopex”,
    –   “primme”                                             Code         10       Algorithme          ERAM    (in      :
                                                             A, n, s, l, M, V, T ol; out : 1s , Us , Rhos )
    Nous utiliserons dans notre cas la m´thode d’Arnoldi.
                                        e
                                                               1. Choix de m, V, T ol 12
La projection d’Arnoldi Nous ne pourrons aborder               2. Algorithme M A(in : A, n, s, m, V ; out : λs , Us )
la m´thode d’Arnoldi sans d´crire sa m´thode de pro-
     e                         e           e                   3. Si rho_i = || A~u_i - ~lambda_i ~u_i ||
jection. L’algorithme 8 illustre ainsi la m´thode de pro-
                                           e                         > Tol pour i = 1 ` s alors
                                                                                      a
jection d’Arnoldi aussi appel´ r´duction d’Arnoldi.
                              e e                                   V = sum^s_{i=1} alpha_i . ~u_i et
                                                                    aller ` l’´tape 2.
                                                                          a   e
Code 8 Algorithme RA (in : A, n, m, V, out : Hm, V m)             Sinon Stop
    1. Phase d’initialisation : Choix de m et de V (V1 =
         V
       ||V || )                                                 La m´thode de r´solution d’Arnoldi, int´gr´ ` SLEPc
                                                                     e         e                       e ea
    2. Phase de Projection :                                 est une m´thode ERAM. Le code 11 pr´sente un exemple
                                                                       e                          e
                                                             d’impl´mentation de la m´thode ERAM en slepc-cxx.
                                                                   e                  e
        Pour j = 1 ` m faire
                   a
          z = AV_j
          Pour i = 1 ` m faire
                     a                                       Code 11 Impl´mentation de ERAM en slepc-cxx
                                                                         e
            h_ij = (z,v_i) //
                                                             #include <slepc_cxx/slepc_cxx>
            dot = Sigma(n,i=1)(x_i * y_i)
                                                             typedef petsc_cxx::Scalar T;
            z = z - h_ij * v_i
                                                             int main(int ac, char** av)
          Fin pour i
                                                             {
                                                                 slepc_cxx::Parser parser(ac, av);
          h_j+1,j = || z ||
                                                                 petsc_cxx::Context context(parser);
          v_j+1 = z / h_j+1,j
                                                                 const Int N = 30;
        Fin pour j
                                                                 petsc_cxx::Matrix<T> A(N);
    3. Hmyi = λi yi , i|m, 1
    4. ui = Vm ∗ yi , i|m, 1                                      // Quelques routines de remplissage
                                                                  // de la matrice creuse A
                                                                  // ` l’aide des fonctions SLEPC.
                                                                     a
    Hm est une matrice d’Hessenberg inf´rieur. 10
                                       e
                                                                  slepc_cxx::EPSolver<T> eps(EPSARNOLDI);
M´thode d’Arnoldi L’algorithme 9 illustre les
  e                                                               eps(A);
diff´rentes ´tapes que constitue la m´thode d’Arnoldi.
   e       e                        e
                                                                  return 0;
Code 9 Algorithme MA (in : A, n, s, m, V ; out : λs , Us ) }
    1. Algorithme RA(in : A, n, m, V ; out : λm , Um )
    2. R´solution du probl`me de valeur propre :
         e                    e
       Hm .yi = λi .yi pour i = 1 ` m et s´lection de s
                                   a       e
                                                         M´thode hybride MERAM Une m´thode hybride
                                                            e                                      e
       valeurs propres d´sir´es
                        e e
                                                         est une m´thode d´finie par un ensemble de m´thodes
                                                                    e         e                            e
    3. Retour dans l’espace de d´part : Ui = Vm .yi pour it´ratives qui collaborent afin d’acc´l´rer la convergence
                                e                          e                                 ee
       i=1`s a                                           d’une entre elles.

  SLEPc fournit un panel d’options pour les diff´rentes
                                                e         MERAM 13 est une m´thode hybride d´finie par un
                                                                                 e                 e
m´thodes de r´solution notamment pour Arnoldi. Il est
  e          e                                          ensemble d’instances d’une mˆme m´thode it´ratives
                                                                                       e      e         e
par exemple possible d’utiliser la m´thode d’Arnoldi en
                                    e                   (co-m´thodes) qui collaborent afin d’acc´l´rer la conver-
                                                             e                                  ee
mode diff´r´ avec l’option -eps_arnoldi_delayed.
        ee                                              gence d’une entre elles.

M´thode it´rative ERAM Il 11 s’agit d’un bon
   e         e                                             L’algorithme 12 illustre les diff´rentes ´tapes que
                                                                                              e       e
repr´sentant des m´thodes it´ratives d’alg`bre lin´aire.
     e             e        e             e       e      constitue MERAM.
Elle contient toutes les op´rations ´l´mentaires des
                            e         ee
m´thodes it´ratives de Krylov.
  e        e                                               On cherche s valeurs et vecteurs propres d’une matrice
                                                         creuse A d’ordre n.
    10. http://fr.wikipedia.org/wiki/Matrice_de_Hessenberg
    11. ERAM : Explicitely Restarted Arnoldi Method            13. MERAM : Multi-ERAM
4    CONCLUSION                                                                                                  5


Code         12      Algorithme          MERAM   (in       : t´l´charg´ 14 , utilis´ et modifi´.
                                                              ee      e            e         e
A, n, s, l, M, V, T ol; out : 1s , Us , Rhos )
    1. Projection
    2. Resolution dans le sous-espace
    3. Retour dans l’espace de d´part
                                e



   Le code 13 pr´sente un exemple d’impl´mentation de
                e                       e
la m´thode MERAM en slepc-cxx.
     e

Code 13 Impl´mentation de MERAM en slepc-cxx
            e

#include <slepc_cxx/slepc_cxx>
typedef petsc_cxx::Scalar T;
int main(int ac, char** av)
{
    slepc_cxx::Parser parser(ac, av);
    petsc_cxx::Context context(parser);
    const Int N = 30;
    petsc_cxx::Matrix<T> A(N);

       // Quelques routines de remplissage
       // de la matrice creuse A
       // ` l’aide des fonctions SLEPC.
          a

       slepc_cxx::EPSolver<T> eps(EPSARNOLDI);
       slepc_cxx::MERAM<T> meram(eps);
       meram(A);

       return 0;
}


   En reprenant le code d’impl´mentation de la m´thode
                                e                   e
ERAM nous incluons l’appel ` la classe MERAM dans
                                a
la librairie slepc-cxx effectuant les diff´rentes ´tapes cit´s
                                        e       e         e
pr´c´demment.
   e e


4      Conclusion
   Le concept de r´utilisabilit´ a ´t´ int´gr´ en partie
                   e           e ee       e e
grˆce au librairie petsc-cxx et slepc-cxx. Nous recon-
  a
naissons toutefois que la conception algorithmique
des composants de base des m´thodes num´riques
                                    e             e
reste une ´tape laborieuse. Cela explique le peu de
            e
param`tres dans ces nouvelles librairies. Nous avons
       e
ainsi pu aborder toute au long de ce rapport les ´tapes
                                                   e
d’installation et de configuration de l’environnement
de travail, le nouveau design pour la r´utilisabilit´ des
                                        e            e
composants de base, l’impl´mentation des op´rations
                             e                  e
de base d’alg`bre lin´aire mais aussi et surtout les
               e       e
m´thodes de calcul des valeurs propres en d´taillant la
  e                                          e
m´thode d’Arnoldi ainsi que les it´ratives ERAM et
  e                                   e
MERAM.

 Ce papier suit les termes de la licence “GNU Free
Documentation License 1.3” et peut ˆtre librement
                                      e                        14. https ://github.com/canercandan/reusability

Weitere ähnliche Inhalte

Ähnlich wie Reutilisabilité

Ähnlich wie Reutilisabilité (20)

Algo vol.2 sujets
Algo vol.2   sujetsAlgo vol.2   sujets
Algo vol.2 sujets
 
Etude des Frameworks PHP
Etude des Frameworks PHPEtude des Frameworks PHP
Etude des Frameworks PHP
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Algorithme
AlgorithmeAlgorithme
Algorithme
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Pe
PePe
Pe
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Tp2 - Latex
Tp2 - LatexTp2 - Latex
Tp2 - Latex
 
Php seance1
Php seance1Php seance1
Php seance1
 
Implémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En JavaImplémentation de l’algorithme du Simplexe En Java
Implémentation de l’algorithme du Simplexe En Java
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
tp-spring.pdf
tp-spring.pdftp-spring.pdf
tp-spring.pdf
 
Présentation devops&puppet 04112014
Présentation devops&puppet 04112014 Présentation devops&puppet 04112014
Présentation devops&puppet 04112014
 
Voyage Coeur Memoire
Voyage Coeur MemoireVoyage Coeur Memoire
Voyage Coeur Memoire
 
R Devtools
R DevtoolsR Devtools
R Devtools
 
Rapport de fin de stage maintenance info
Rapport de fin de stage  maintenance infoRapport de fin de stage  maintenance info
Rapport de fin de stage maintenance info
 
Maintenance equipement info dans un environnement reseau
Maintenance equipement info dans un environnement reseau Maintenance equipement info dans un environnement reseau
Maintenance equipement info dans un environnement reseau
 
Rapport de fin de stage maintenance info
Rapport de fin de stage  maintenance infoRapport de fin de stage  maintenance info
Rapport de fin de stage maintenance info
 
Asd
AsdAsd
Asd
 

Kürzlich hochgeladen

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 

Kürzlich hochgeladen (16)

SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 

Reutilisabilité

  • 1. R´utilisabilit´ e e G´nie Logiciel pour le Calcul Scientifique e Caner Candan - caner@candan.fr 6 mars 2011 R´sum´ e e effet nous pouvons utiliser l’outil d’installation de pa- quets “aptitute”. Une rapide introduction est pr´sent´ e e Le G´nie Logiciel constitue l’ensemble des activit´s e e en figure 1. permettant de d´finir la conception jusqu’` la pro- e a duction d’un logiciel et la R´utilisabilit´ peut ˆtre e e e $> sudo aptitude install libpetsc3.1 d´finit comme une mani`re de concevoir et r´aliser les e e e $> sudo aptitude install libpetsc3.1-dev composants de base des m´thodes num´riques de fa¸on e e c $> sudo aptitude install petsc3.1-doc la plus r´utilisable possible. Pour les illustrer, nous e utiliserons une m´thode it´rative, qui contrairement e e $> sudo aptitude install libslepc3.1 aux m´thodes directes, se prˆte mieux aux matrices de e e $> sudo aptitude install libslepc3.1-dev grandes tailles. Elles permettent de r´duire la taille de e $> sudo aptitude install slepc3.1-doc la matrice en se limitant aux ´l´ments non-nuls. Il est ee ´galement important de noter que la m´thode it´rative e e e utilis´e est une m´thode de projection pour r´soudre de e e e Figure 1 – Commandes pour l’installation des librairies tr`s grandes tailles de probl`mes. Elle est constitu´e de e e e et des d´pendances e 3 parties principales : la projection dans un sous-espace, la r´solution avec une m´thode classique et le retour e e dans l’espace de d´part. e Configuration Puis pour ´viter les “Makefile” e Nous rappelons, ci-dessous, les objectifs attendus du d´sordonn´s et incompl`tes fournit dans les exemples e e e rapport : des librairies ainsi que les variables d’environnement ` a d´finir, nous pouvons faire appel ` l’outil CMake 1 . e a – se familiariser avec la r´utilisabilit´ e e s´quentielle/parall`le ` l’aide d’une biblioth`que e e a e Ce dernier facilite grandement la configuration d’un num´rique orient´e composant, e e projet en PETSc 2 ou SLEPc et permet ainsi ` quiconque a – utilisation des biblioth`ques PETSc, SLEPc, e une rapide prise en main des biblioth`ques utilis´es. De e e – impl´mentation des op´rations matricielles de base, e e plus la configuration de CMake est multi-plateforme. Le de la m´thode it´rative ERAM et de la m´thode e e e code 1 illustre un exemple de fichier de configuration hybride MERAM, CMake pour un projet simple. – mise ` l’´chelle des exemples r´alis´s en int´grant a e e e e les composants de ces biblioth`ques dans l’environ- e Code 1 Fichier de configuration d’un projet pour le nement YML. programme “hello world” en PETSc avec CMake CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 1 Installation et configuration de PROJECT(hello) l’environnement FIND_PACKAGE(PETSc REQUIRED) INCLUDE_DIRECTORIES( ${PETSC_INCLUDES} ) Pr´ambule Il est important, avant tout, de pr´senter ADD_EXECUTABLE(hello hello.cpp) e e les d´marches n´cessaires ` l’installation et la configura- TARGET_LINK_LIBRARIES(hello ${PETSC_LIBRARIES}) e e a tion de l’environnement. Nous entendons principalement par environnement les librairies PETSc et SLEPc. Puis nous aborderons une m´thode de configuration d’un pro- e De la mˆme mani`re il suffirait d’inclure le code 2 pour e e jet utilisant ces librairies ` l’aide d’outils comme CMake. compiler un projet en SLEPc. a 1. CMake : g´n´rateur et langage haut niveau de Makefile e e Installation Utilisant un OS bas´ sur “debian”, une e multi-plateforme “Ubuntu 10.10”, il est possible d’installer PETSc et 2. FindPETSc.cmake available from https://github.com/ SLEPc, sans qu’aucune compilation soit n´cessaire. En e jedbrown/cmake-modules/blob/master/FindPETSc.cmake 1
  • 2. 2 DESIGN 2 Code 2 Configuration additionnel pour un projet en Code 4 Exemple de code en petsc-cxx SLEPc #include <petsc_cxx/petsc_cxx> FIND_PACKAGE(SLEPC REQUIRED) using namespace petsc_cxx; INCLUDE_DIRECTORIES( ${SLEPC_INCLUDES} ) int main(int ac, char** av) TARGET_LINK_LIBRARIES(hello ${SLEPC_LIBRARIES}) { Parser parser(ac, av, "Introductory " "example " "of code using " 2 Design "petsc-cxx."); Context context(parser); C vs C++ Les librairies PETSc 3 et SLEPc ont ´t´ ee // YOUR CODE d´velopp´es principalement en langage C sans utilisation e e return 0; d’aucun paradigme de programmation. Nous avons donc } choisit de porter le code des librairies en C++ afin de profiter du paradigme objet offert par ce dernier ainsi que les concepts de m´ta-programmation. Deux projets e en d´coulent : petsc-cxx 4 et slepc-cxx 5 . Cela nous permet petsc_cxx::Parser, quant ` elle indique que l’on uti- e a ainsi d’utiliser ces librairies d’une mani`re intuitive tout lise le gestionnaire de param`tres de PETSc. e e en profitant d’un langage fortement typ´, b´n´ficiant de e e e contrats d’utilisation 6 et de couches d’abstraction. slepc-cxx Nous savons que la librairie SLEPc est d´pendante de PETSc, cela va de mˆme pour la librai- e e petsc-cxx Pour situer le contexte de la librairie, nous 7 rie slepc-cxx et petsc-cxx. Nous utilisons ´galement un e utilisons l’espace de nom petsc_cxx. Ainsi toutes les espace de nom pour slepc-cxx, il s’agit de slepc_cxx. Le classes se situent dans ce mˆme contexte. Les codes 3 et 4 e code 5 illustre l’initialisation d’un programme en slepc- illustrent quelques diff´rences entre les librairies PETSc e cxx. D’autres exemples vont suivre. et petsc-cxx. Code 3 Exemple de code en PETSc Code 5 Exemple de code en slepc-cxx #include <petscsys.h> #include <slepc_cxx/slepc_cxx> static char help[] = "Introductory example of " int main(int ac, char** av) "code using PETSc.nn"; { int main(int ac, char** av) slepc_cxx::Parser parser(ac, av, { "Introductory " PetscInitialize(&ac, &av, (char *)0, help); "example " // YOUR CODE "of code using " PetscFinalize(); "slepc-cxx."); return 0; petsc_cxx::Context context(parser); } // YOUR CODE return 0; } Dans le cas de petsc-cxx le simple fait d’inclure le fi- chier d’en-tˆte petsc_cxx/petsc_cxx est suffisant. Il est e ´ventuellement possible d’inclure uniquement des classes e Comme nous le disions, slepc-cxx d´pend de e sp´cifiques afin d’all´ger le code. Autre point, il n’est e e petsc-cxx, c’est la raison pour laquelle nous utili- plus n´cessaire de faire appel ` une fonction tel que e a sons la classe petsc_cxx::Context avec la classe PetscFinalize() ` la fin du programme, ceci est fait a slepc_cxx::Parser. La classe slepc_cxx::Parser de mani`re implicite lors de la sortie du contexte de e permet d’utiliser le gestionnaire de param`tres de e la fonction main depuis la classe petsc_cxx::Context. SLEPc. Cette classe, prenant en param`tre un objet de type e petsc_cxx::Parser, doit ˆtre appel´e au d´but du e e e Fonction objet Ce nouveau design est centr´ autour e programme pour situer le contexte PETSc. La classe de ce que l’on nomme des foncteurs ou encore fonction 3. Why is PETSc programmed in C, instead of For- objet. Il s’agit d’utiliser une classe comme fonction, in- tran or C++ ? : http://www.mcs.anl.gov/petsc/petsc-as/ troduite en langage proc´durale, tout en profitant des e documentation/faq.html#why-c fonctionnalit´s apport´es par la programmation objet. e e 4. petsc-cxx : https://github.com/canercandan/petsc-cxx 5. slepc-cxx : https://github.com/canercandan/slepc-cxx Ainsi il est possible de d´l´guer l’appel ` une fonction ob- ee a 6. Interface jet. L’instanciation du foncteur s’effectuant avant l’ap- 7. Namespace pel, il est ainsi possible de passer des param`tres ` sa e a
  • 3. 3 ´ IMPLEMENTATION 3 construction ` travers le constructeur et d’effectuer en- a La variable A est instanci´e avec la classe Matrix<T>. e suite l’appel. La variable x est instanci´e avec la classe Vector<T>. e Tous deux utilisent le type Scalar. Puis le produit de A et x est assign´ ` la variable b. De mani`re implicite ea e Op´rations La classe principale que l’on nommera e 8 des routines sont appel´es en PETSc pour r´aliser le e e petsc_cxx::BO , est une classe abstraite repr´sentant e produit. Les param`tres pass´s ` l’instance de la matrice e e a toutes les op´rations binaires prenant 3 param`tres ` e e a sont respectivement le nombre de lignes, le nombre de l’appel (2 en entr´e et 1 en sortie). Il s’agit d’une inter- e colonnes et la valeur initiale pour tous les ´l´ments de ee face de foncteurs. Elle impose l’impl´mentation d’une e la matrice. m´thode repr´sentative de la fonction d’appel. e e Les classes d’op´rations qui h´ritent de la classe e e petsc_cxx::BO sont multiples, ci-dessous une liste non- 3 Impl´mentation e exhaustive. – petsc_cxx::MultiplyMatVec, pour la r´solution e Dans cette section nous allons voir comment du syst`me lin´aire Ax = b e e impl´menter des op´rations matricielles de bases puis e e – petsc_cxx::AdditionMatrix, pour l’addition de nous aborderons une impl´mentation de la m´thode e e deux matrices it´rative ERAM et de la m´thode hybride MERAM. e e – petsc_cxx::Dot, pour le produit scalaire de deux vecteurs Op´rations matricielles Le code 7 illustre le produit e – petsc_cxx::Scal, pour la mise ` l’´chelle d’un vec- matrice-vecteur sur le sous-espace de Krylov. a e teur Code 7 Exemple de code illustrant le produit matrice- Structure de donn´es Plusieurs types de structures vecteur sur le sous-espace de Krylov e de donn´es ont ´t´ port´es ` ce nouveau design, ci- e ee e a #include <petsc_cxx/petsc_cxx> dessous une liste non-exhaustive. using namespace petsc_cxx; – petsc_cxx::Scalar, repr´sente le type scalaire e int main(int ac, char** av) – petsc_cxx::Int, repr´sente un entier e { – petsc_cxx::Real, repr´sente un r´el e e Parser parser(ac, av); – petsc_cxx::Truth, repr´sente un bool´en e e Context context(parser); – petsc_cxx::Matrix, classe repr´sentant une ma- e const Int N = 4; trice PETSc Matrix< Scalar > A(N,N,10); – petsc_cxx::Vector, classe repr´sentant un vecteur e Vector< Scalar > x(N,2); PETSc Vector< Scalar > b(N); Krylov< Scalar > ksp; Surcharge d’op´rateurs Le langage C++ nous offre e ksp(A,x,b); ´galement la possibilit´ de surcharger les diff´rents e e e return 0; op´rateurs. Il est ainsi possible d’impl´menter un pro- } e e duit matrice-vecteur avec un code proche de l’´quation e math´matique Ax = b. Un exemple est illustr´ dans le e e code 6. Nous utilisons la classe Krylov<T> impl´ment´ dans e e la librairie petsc-cxx. Cette classe appelle les fonctions de Code 6 Exemple de code illustrant le produit matrice- la structure KSP disponible dans PETSc. Nous passons vecteur en petsc-cxx a ` l’instance ksp de la classe, la matrice A et les vecteurs x et b. Le r´sultat ´tant sauvegard´ dans le vecteur b. e e e #include <petsc_cxx/petsc_cxx> using namespace petsc_cxx; EPS La librairie SLEPc introduit une famille de int main(int ac, char** av) fonctions, appel´ EPS 9 , pour le calcul des valeurs e { propres. Il est indispensable de d´finir la m´thode de e e Parser parser(ac, av); r´solution ` utiliser parmi celles disponible : e a petsc_cxx::Context context(parser); const Int N = 4; – “power”, Matrix< Scalar > A(N,N,10); – “subspace”, Vector< Scalar > x(N,2); – “arnoldi”, Vector< Scalar > b = A * b; – “lanczos”, return 0; – “krylovschur”, } – “lapack” – “arpack” 8. Binary Operation 9. EPS : Eigen Problem Solver
  • 4. 3 ´ IMPLEMENTATION 4 – “blzpack”, L’algorithme 10 illustre les diff´rentes ´tapes que e e – “trlan”, constitue ERAM. – “blopex”, – “primme” Code 10 Algorithme ERAM (in : A, n, s, l, M, V, T ol; out : 1s , Us , Rhos ) Nous utiliserons dans notre cas la m´thode d’Arnoldi. e 1. Choix de m, V, T ol 12 La projection d’Arnoldi Nous ne pourrons aborder 2. Algorithme M A(in : A, n, s, m, V ; out : λs , Us ) la m´thode d’Arnoldi sans d´crire sa m´thode de pro- e e e 3. Si rho_i = || A~u_i - ~lambda_i ~u_i || jection. L’algorithme 8 illustre ainsi la m´thode de pro- e > Tol pour i = 1 ` s alors a jection d’Arnoldi aussi appel´ r´duction d’Arnoldi. e e V = sum^s_{i=1} alpha_i . ~u_i et aller ` l’´tape 2. a e Code 8 Algorithme RA (in : A, n, m, V, out : Hm, V m) Sinon Stop 1. Phase d’initialisation : Choix de m et de V (V1 = V ||V || ) La m´thode de r´solution d’Arnoldi, int´gr´ ` SLEPc e e e ea 2. Phase de Projection : est une m´thode ERAM. Le code 11 pr´sente un exemple e e d’impl´mentation de la m´thode ERAM en slepc-cxx. e e Pour j = 1 ` m faire a z = AV_j Pour i = 1 ` m faire a Code 11 Impl´mentation de ERAM en slepc-cxx e h_ij = (z,v_i) // #include <slepc_cxx/slepc_cxx> dot = Sigma(n,i=1)(x_i * y_i) typedef petsc_cxx::Scalar T; z = z - h_ij * v_i int main(int ac, char** av) Fin pour i { slepc_cxx::Parser parser(ac, av); h_j+1,j = || z || petsc_cxx::Context context(parser); v_j+1 = z / h_j+1,j const Int N = 30; Fin pour j petsc_cxx::Matrix<T> A(N); 3. Hmyi = λi yi , i|m, 1 4. ui = Vm ∗ yi , i|m, 1 // Quelques routines de remplissage // de la matrice creuse A // ` l’aide des fonctions SLEPC. a Hm est une matrice d’Hessenberg inf´rieur. 10 e slepc_cxx::EPSolver<T> eps(EPSARNOLDI); M´thode d’Arnoldi L’algorithme 9 illustre les e eps(A); diff´rentes ´tapes que constitue la m´thode d’Arnoldi. e e e return 0; Code 9 Algorithme MA (in : A, n, s, m, V ; out : λs , Us ) } 1. Algorithme RA(in : A, n, m, V ; out : λm , Um ) 2. R´solution du probl`me de valeur propre : e e Hm .yi = λi .yi pour i = 1 ` m et s´lection de s a e M´thode hybride MERAM Une m´thode hybride e e valeurs propres d´sir´es e e est une m´thode d´finie par un ensemble de m´thodes e e e 3. Retour dans l’espace de d´part : Ui = Vm .yi pour it´ratives qui collaborent afin d’acc´l´rer la convergence e e ee i=1`s a d’une entre elles. SLEPc fournit un panel d’options pour les diff´rentes e MERAM 13 est une m´thode hybride d´finie par un e e m´thodes de r´solution notamment pour Arnoldi. Il est e e ensemble d’instances d’une mˆme m´thode it´ratives e e e par exemple possible d’utiliser la m´thode d’Arnoldi en e (co-m´thodes) qui collaborent afin d’acc´l´rer la conver- e ee mode diff´r´ avec l’option -eps_arnoldi_delayed. ee gence d’une entre elles. M´thode it´rative ERAM Il 11 s’agit d’un bon e e L’algorithme 12 illustre les diff´rentes ´tapes que e e repr´sentant des m´thodes it´ratives d’alg`bre lin´aire. e e e e e constitue MERAM. Elle contient toutes les op´rations ´l´mentaires des e ee m´thodes it´ratives de Krylov. e e On cherche s valeurs et vecteurs propres d’une matrice creuse A d’ordre n. 10. http://fr.wikipedia.org/wiki/Matrice_de_Hessenberg 11. ERAM : Explicitely Restarted Arnoldi Method 13. MERAM : Multi-ERAM
  • 5. 4 CONCLUSION 5 Code 12 Algorithme MERAM (in : t´l´charg´ 14 , utilis´ et modifi´. ee e e e A, n, s, l, M, V, T ol; out : 1s , Us , Rhos ) 1. Projection 2. Resolution dans le sous-espace 3. Retour dans l’espace de d´part e Le code 13 pr´sente un exemple d’impl´mentation de e e la m´thode MERAM en slepc-cxx. e Code 13 Impl´mentation de MERAM en slepc-cxx e #include <slepc_cxx/slepc_cxx> typedef petsc_cxx::Scalar T; int main(int ac, char** av) { slepc_cxx::Parser parser(ac, av); petsc_cxx::Context context(parser); const Int N = 30; petsc_cxx::Matrix<T> A(N); // Quelques routines de remplissage // de la matrice creuse A // ` l’aide des fonctions SLEPC. a slepc_cxx::EPSolver<T> eps(EPSARNOLDI); slepc_cxx::MERAM<T> meram(eps); meram(A); return 0; } En reprenant le code d’impl´mentation de la m´thode e e ERAM nous incluons l’appel ` la classe MERAM dans a la librairie slepc-cxx effectuant les diff´rentes ´tapes cit´s e e e pr´c´demment. e e 4 Conclusion Le concept de r´utilisabilit´ a ´t´ int´gr´ en partie e e ee e e grˆce au librairie petsc-cxx et slepc-cxx. Nous recon- a naissons toutefois que la conception algorithmique des composants de base des m´thodes num´riques e e reste une ´tape laborieuse. Cela explique le peu de e param`tres dans ces nouvelles librairies. Nous avons e ainsi pu aborder toute au long de ce rapport les ´tapes e d’installation et de configuration de l’environnement de travail, le nouveau design pour la r´utilisabilit´ des e e composants de base, l’impl´mentation des op´rations e e de base d’alg`bre lin´aire mais aussi et surtout les e e m´thodes de calcul des valeurs propres en d´taillant la e e m´thode d’Arnoldi ainsi que les it´ratives ERAM et e e MERAM. Ce papier suit les termes de la licence “GNU Free Documentation License 1.3” et peut ˆtre librement e 14. https ://github.com/canercandan/reusability