SlideShare a Scribd company logo
1 of 5
Download to read offline
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

More Related Content

Similar to Reutilisabilité

Similar to 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
 

Recently uploaded

SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationpapediallo3
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 

Recently uploaded (20)

SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Cours de Management des Systèmes d'information
Cours de Management des Systèmes d'informationCours de Management des Systèmes d'information
Cours de Management des Systèmes d'information
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 

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