MODULE SALOME MULTIPR
=====================
Par EDF/CS, 02/2007


Description
-----------
MULTIPR est un module pour la plateforme SALOME (v3.2).
Le module sert au partitionnement et a la decimation de maillages tetraedriques (TETRA10),
dans le but de pouvoir visualiser d'importants volumes de donnees scientifiques.


Contenu de ce fichier
---------------------
I.    INSTALLATION/COMPILATION
II.   L'APPLICATION AUTONOME EN LIGNE DE COMMANDE multipr
III   LE MODULE SALOME MULTIPR


*******************************************************************************
*
* I. INSTALLATION/COMPILATION
*
*******************************************************************************

A. Information generales
------------------------
MULTIPR a besoin des prerequis suivants:
    1. Salome V3.2
    2. MESPLITTER (branche MED sur CVS : WP1_2_3_17-01-2007_Data_format_at_entry_of_visualization_pipeline)
    3. MED fichier v2.3
    4. METIS v4.0.1 (version NON modifiee par EDF)
    5. SCOTCH v4

A propos de MEDSPLITTER :
MEDSPLITTER est un partitionneur de fichiers MED qui repose sur le format MED v2.3
et les outils METIS et SCOTCH. L'outil a ete developpe par Vincent Bergeaud du CEA.
Dans le cadre du module MULTIPR, MEDSPLITTER est utilise pour partitionner des grains
(scenario a 2 echelles).
    


B. Installation/compilation
---------------------------


   B.1. Se procurer le module MED/MEDSPLITTER compatible avec MULTIPR
   ------------------------------------------------------------------
   
1. Charger la branche CVS WP1_2_3_17-01-2007_Data_format_at_entry_of_visualization_pipeline dans le repertoire MED sur le server d'OpenCascade
   > cvs -d ":pserver:salome2anonymous@www.opencascade.com:/home/server/cvs/MED" login
   rntlrntl   (<--- mot de passe)
   > cvs -d ":pserver:salome2anonymous@www.opencascade.com:/home/server/cvs/MED" checkout -kk -RP -r WP1_2_3_17-01-2007_Data_format_at_entry_of_visualization_pipeline MED_SRC
   > cvs -d ":pserver:salome2anonymous@www.opencascade.com:/home/server/cvs/MED" logout
   (note : MEDPLITTER peut galement tre compil  partir de la branche CVS BR_SPLITTER_improved)
   
2. Modifier le code pour utiliser MED fichier v2.3 :
   A. Supprimer les 6 fichiers suivants :
      MED_SRC/src/medmem/MEDMEM_MEDMEMchampLire.hxx/cxx
      MED_SRC/src/medmem/MEDMEM_MEDMEMgaussEcr.hxx/cxx
      MED_SRC/src/medmem/MEDMEM_MEDMEMprofilEcr.hxx/cxx
   B. Mettre a jour le fichier medmem/Makefile.in en supprimant les 6 lignes correspondantes
   C. Mettre a jour le fichier MEDMEM_MedFieldDriver22.hxx
      1. Dans la section "includes, supprimer les 3 lignes #include "MEDMEM_MEDMEMchampLire.hxx" ...
      2. Remplacer ces lignes par l'inclusion de l'API MED :
         namespace med_2_2 
         {
             extern "C" 
	     { 
                 #include <med.h>
                 #include <med_proto.h>
             }
         }
      3. Effectuer les changements suivants (utiliser l'API MED fichier v2.3) :
         MEDMEMchampLire -> MEDchampLire
         MEDMEMgaussEcr  -> MEDgaussEcr
         MEDMEMprofilEcr -> MEDprofilEcr
         => En tout, il y a 4 lignes a changer
      

   B.2. Prerequis a la compilation du module MED/MEDSPLITTER
   ---------------------------------------------------------
   
3. Verifier que la variable d'environnement LD_LIBRARY_PATH ne pointe pas vers un repertoire MED
4. Verifier que la variable d'environnement MED_ROOT_DIR n'est pas definie
5. Installer METIS v4.0.1 (soit <METIS_DIR> le repertoire d'installation)
   A. Charger le source sur http://glaros.dtc.umn.edu/gkhome/metis/metis/download
   B. Decompresser l'archive : tar -zxvz metis-4.0.tar.gz
   C. Puis make dans le repertoire
   D. Verifier que tout est OK : depuis \Graph, lancer ./mtest 4elt.graph
6. Verifier que la bibliotheque boost v1.32 ou + est installee
   A. Bien verifier que le paquet libboost_program_option est inclu (ce paquet est utilise par MEDSPLITTER)
   B. Ajouter la variable d'environnement export BOOSTDIR=/usr, si ncessaire
   C. Si necessaire, dans /usr/lib, ajouter le lien 
      ln -s libboost_program_options.so libboost_program_options-gcc-mt.so
      (droits administrateur necessaires)
      

   B.3. Compilation du module MED/MEDSPLITTER
   ------------------------------------------
   
7. Pour compiler la branche MED WP1_2_3_17-01-2007_Data_format_at_entry_of_visualization_pipeline avec SALOME V3.2.2 (Debian Sarge)
   Dans le repertoire SALOME v3.2.2 :
   A. Sourcer prerequis-Sarge-slash-usr.sh et envSalome-V3_2_2.sh
   B. Verifier que la variable d'environnement MED2HOME pointe bien vers
      MED fichier v2.3
8. Pour compiler avec METIS v4.0.1 precedemment charge : 
   Renommer la fonction log2 en log2_ dans metis\lib\proto.h  
   (sinon, un conflit se produit)
   
Depuis le repertoire MED contenant WP1_2_3_17-01-2007_Data_format_at_entry_of_visualization_pipeline :
9. Creer un repertoire Build et un repertoire MED au cote de MED_SRC
10. Dans le repertoire MED_SRC, faire ./build_configure
11. Depuis le repertoire Build, faire (en remplacant les <...> par les bons rpertoires) 
    ../MED_SRC/configure --prefix=<PATH>/MED --enable-splitter=yes --with-metis=<METIS_DIR> --with-scotch=<SCOTCH_DIR>
    --enable-production=yes --disable-debug  
12. Puis : make
13. Puis : make install


   B.4. Tester l'installation du module MED/MEDSPLITTER
   ----------------------------------------------------
   
14. Definir la variable d'environnement MED_ROOT_DIR (=<PATH>/MED)
15. Eventuellement, mettre a jour les variables d'environnement LD_LIBRARY_PATH et PYTHONPATH
16. Pour verifier que MEDMEM est bien installe :
    Depuis le repertoire <PATH>/MED : python bin/salome/testMedMemGeneral.py
17. Pour verifier que MEDSPLITTER est bien installe :
    A. Dans <PATH>/MED/bin/salome, creer le repertoire tests : mkdir tests
    B. Puis : 
       ./test_SPLITTER_indivisible
       ./test_SPLITTER_square
       ./medsplitter --input-file=<PATH>/MED/share/salome/resources/med/pointe_import22.med --output-file=toto --ndomains=2 --meshname=maa1


   B.5. Compiler le module MULTIPR
   -------------------------------
   
18. Creer un repertoire Build et un repertoire MULTIPR au cote de MULTIPR_SRC
19. Dans le repertoire MULTIPR_SRC, faire ./build_configure
20. Depuis le repertoire Build, faire (en remplacant les <...> par les bons rpertoires) 
    ../MULTIPR_SRC/configure --prefix=<PATH>/MULTIPR --enable-production=yes --disable-debug  
21. Puis : make
22. Puis : make install


Information supplementaire :
Pour compiler MULTIPR, les 8 variables d'environnement suivantes doivent etre definies :
KERNEL_ROOT_DIR, GUI_ROOT_DIR, MED_ROOT_DIR, MED2HOME, HDF5HOME, OMNIORBDIR, CASROOT, QTDIR
L'existence de ces variables est teste par le script build_configure.
    

*******************************************************************************
*
* II. L'APPLICATION AUTONOME EN LIGNE DE COMMANDE multipr
*
*******************************************************************************

Tests de l'application autonome en ligne de commande multipr
------------------------------------------------------------
L'application "multipr" se trouve dans .../bin/salome

1. Affichage de la page d'aide
   
   $ ./multipr 
   
2. Autotest complet de l'application

   $ ./multipr --auto /data
   (ou /data designe le repertoire dans lequel se trouve le fichier agregat100grains_12pas.med)
   
3. Affichage de la liste des maillages et des champs d'un fichier MED sequentiel :
  
   $ ./multipr --info agregat100grains_12pas.med
   
4. Affichage de toutes les informations concernant un maillage :
   
   $ ./multipr --info agregat100grains_12pas.med MAIL
   
5. Partitionnement (1 echelle) : 
   Extraction des grains du maillage MAIL dans le fichier agregat100grains_12pas.med
   
   $ ./multipr --part1 agregat100grains_12pas.med MAIL
   
6. Partitionnement (2 echelles) :
   Decoupage du grain numero 98 en 3 parties :
   
   $ ./multipr --part2 agregat100grains_12pas_grains_maitre.med MAIL_98 3
   
7. Decimation :
   Creation de 3 resolutions du grain numero 99 en prenant :
   comme reference le 12e pas de temps du champ SIG_____SIEF_ELGA_______________
   comme seuil pour la resolution MEDIUM : 10
   comme seuil pour la resolution BASSE : 25
   comme rayon pour le calcul du voisinage : 0.3
   
   $ ./multipr --decim agregat100grains_12pas_grains_maitre.med MAIL_99 SIG_____SIEF_ELGA_______________ 12 Filtre_GradientMoyen 10 25 0.3 

8. Messages d'erreur :
   Les exemples suivants sont des commandes erronees :
   
   $ ./multipr --part1 agregat100grains_12pas.m MAIL
   ... MULTIPR: FileNotFoundException (MULTIPR_Mesh.cxx, line 663): MED file not found
   
   $ ./multipr --part1 agregat100grains_12pas.med MAILLAGE
   ... MULTIPR: IllegalStateException (MULTIPR_Mesh.cxx, line 747): mesh not found in the given MED file
   
   $ ./multipr --part2 agregat100grains_12pas.med MAIL 2
   ... MULTIPR: IOException (MULTIPR_API.cxx, line 106): waiting for a distributed MED file (not a sequential one)
   
   $ ./multipr --part2 agregat100grains_12pas_grains_maitre.med MAIL_95 0
   ... MULTIPR: IllegalArgumentException (MULTIPR_API.cxx, line 97): pNbParts should be >= 2

   $ ./multipr --decim agregat100grains_12pas_grains_maitre.med MAIL_99 SIG_____SIEF_ELGA_______________ 14 Filtre_GradientMoyen 10 25 0.3 
   ... MULTIPR: IllegalArgumentException (MULTIPR_DecimationFilter.cxx, line 100): invalid field iteration (14)
   
   $ ./multipr --decim agregat100grains_12pas_grains_maitre.med MAIL_99 SIG_____SIEF_ELGA___________TEST 12 Filtre_GradientMoyen 10 25 0.3 
   MULTIPR: IllegalArgumentException (MULTIPR_DecimationFilter.cxx, line 99): field not found

   etc.
   

*******************************************************************************
*
* III. LE MODULE SALOME MULTIPR
*
*******************************************************************************   
   
Lancer le module salome seul : ./bin/salome/runAppli depuis le repertoire MULTIPR





