FREEFEM++

De MaGridWiki
Aller à : Navigation, rechercher

N.B :

  • Ce tutoriel explique un exemple d’exécution de l'application FREEFEM++ sur la grille de calcul.
  • Ce tutoriel est adapté principalement à la VO nationale : magrid
  • L'utilisateur est supposé connecté à l'interface utilisateur (ex: ui2.cnrst.magrid.ma), authentifié (certificat valide) et autorisé (vo magrid).


Sommaire

Description du FreeFem++

FreeFem++ est un logiciel de résolution d'équations aux dérivées partielles par la méthode des éléments finis. Il s'agit d'un logiciel libre, écrit en C++, développé par F. Hecht, O. Pironneau, A. Le Hyaric, K. Ohtsuka, et disponible sur plusieurs plateformes Unix, Windows et MacOS.

Description des inputs/outputs

  • Inputs: shwarz.edp qui est un exemple qui provient avec les tutorials de FreeFem++ et le script exécutable freefem.sh qui chargera l'environnement pour l'exécution de FreeFem++ avec un argument en entrée shwartz.edp.
  • Outputs: schwarz.eps + les sorties standard et d’erreurs.
Fichier: schwarz.edp
//  Tutorial file schwarz.edp: Schwarz Algorithm
border a(t=0,1){x=t;y=0;} // This is a rectangle
border a1(t=1,2){x=t;y=0;}
border b(t=0,1){x=2;y=t;}
border c(t=2,0){x=t ;y=1;}
border d(t=1,0){x = 0; y = t;} // next is a circle
border e(t=0, pi/2){ x= cos(t); y = sin(t);}
border e1(t=pi/2, 2*pi){ x= cos(t); y = sin(t);}
real n=4;
 
//Omega1
mesh th = buildmesh( a(5*n) + a1(5*n) + b(5*n) + c(10*n) + d(5*n));
fespace Vh(th,P1); Vh v,u=0;
 
//Omega2
mesh TH = buildmesh ( e(5*n) + e1(25*n) );
fespace VH(TH,P1); VH V,U = 0;
 
for( int i=0; i< 4; i++) {
    plot(U,u, wait=1);
    solve AA(U,V)= int2d(TH)(dx(U)* dx(V)+ dy(U)* dy(V))
                 - int2d(TH)(V) + on(e,U=u)+ on(e1,U=0);
    solve aa(u,v)= int2d(th)(dx(u)*dx(v)+ dy(u)* dy(v))
                - int2d(th)(v) + on(a,d,u=U) + on(a1,b,c,u=0);
}
plot(U,u, wait=1, ps="schwarz.eps");

Le fichier du job: shwarz.jdl

Fichier: shwarz.jdl
Executable = "freefem.sh";
Arguments = "schwarz.edp";
InputSandbox = {"freefem.sh","schwarz.edp"};
StdOutput = "schwarz.out";
StdError  = "schwarz.err";
OutputSandbox = {"schwarz.out","schwarz.err","schwarz.eps"};
Requirements = Member("VO-magrid-freefempp_v3.14",other.GlueHostApplicationSoftwareRunTimeEnvironment);

Le fichier exécutable: freefem.sh

Fichier: freefem.sh
#!/bin/bash
source $VO_MAGRID_SW_DIR/setenv_freefempp_v3.14.sh
FreeFem++ -nw $1

Soumettre le job

[1]

Récupérer les résultats du job

[2]

Job avec persual

Il est également possible de visualiser les fichiers de sortie durant l’exécution du job en utilisant la propriété: Persual. Dans le fichier JDL ajouter les lignes:

# permettre à l'utilisateur de voir les fichier output durant l’exécution job
PerusalFileEnable = true;
# Le téléchargement du fichier output change chaque 1000 secs. C'est l'intervalle minimum toléré.
PerusalTimeInterval = 1000;

Ayant ajouté ces deux lignes, une fois le job est en état de Running, nous pouvons demander au WMS de commencer à récupérer le fichier de sortie en exécutant la commande suivante:

[elkharrim@ui2 freefem]$ glite-wms-job-perusal --set -i jobId001 -f shwartz.out

Ensuite, nous pouvons émettre la commande --get pour obtenir la première copie complète (avec --all) du fichier.

[elkharrim@ui2 freefem]$ glite-wms-job-perusal --get -i jobId001 -f shwartz.out --all --dir .


Pour actualiser le fichier téléchargé omettre le -all:

[elkharrim@ui2 freefem]$ glite-wms-job-perusal --get -i jobId001 -f shwartz.out --dir .

Si vous obtenez : "No files to be retrieved for the job:" ceci veut dire que le fichier n'a pas été mis à jour lors de la dernière exécution de --get.

Quand c'est fait, exécuter la commande de nettoyage:

[elkharrim@ui2 freefem]$ glite-wms-job-perusal --unset -i jobId001


Job longs

Si la durée d’exécution dépasse 12h alors il faut créer un proxy de renouvellement et ajouter dans le fichier JDL:

MyProxyServer = "myproxy.magrid.ma";

Ensuite, exécuter les commandes:

[elkharrim@ui2 freefem]$ voms-proxy-init --voms magrid

et

[elkharrim@ui2 freefem]$ myproxy-init -d -n -s myproxy.magrid.ma


Ensuite soumettre normalement le job.

Plus de détails dans [3].

Job avec un gros input and output

InputSandbox and outOutputSandbox ne peuvent pas être utilisés pour récupérer les gros output du job dans ce cas. On doit plutôt passer par les services qui permettent la gestion

des fichiers i.e. le LFC (LCG File Catalog) et le SE (Storage Element).

Supposons alors dans ce cas:

- Les inputs sont : in1.dat et in2.dat

- Les outputs sont : out1.dat, out2.dat, out3.dat


Les étapes à faire sont les suivantes: 1 - Transférer les inputs du UI vers le SE 2 - Transférer Les outputs du SE vers le UI


Transfère des fichier inputs du UI vers le SE

[elkharrim@ui2 freefem]$ export LFC_HOST=lfc.magrid.ma

Si vous n'avez pas encore créer votre dossier sur le LFC, faire:

[elkharrim@ui2 freefem]$ lfc-mkdir -p /grid/magrid/elkharrim

Ensuite, procéder au transfert:

[elkharrim@ui2 freefem]$ lcg-cr --vo magrid -d se1.cnrst.magrid.ma -l lfn:/grid/magrid/elkharrim/in1.dat file:`pwd`/in1.dat [elkharrim@ui2 freefem]$ lcg-cr --vo magrid -d se1.cnrst.magrid.ma -l lfn:/grid/magrid/elkharrim/in1.dat file:`pwd`/in2.dat


Le jdl du job contient les lignes suivantes:

Fichier: freefem.jdl
Executable = "freefem.sh";
Arguments = "asm.edp";
InputSandbox = {"asm.edp","freefem.sh"};
StdOutput = "std.out";
StdError  = "std.err";
OutputSandbox = {"std.out","std.err"};

Le script freefem.sh contient les lignes suivantes :

Fichier: freefem.sh
#!/bin/bash
source $VO_MAGRID_SW_DIR/setenv_freefempp_v3.14.sh
 
 
#Download les inputs from the SE to the WN
lcg-cp --vo magrid lfn:/grid/magrid/elkharrim/in1.dat file:`pwd`/in1.dat
lcg-cp --vo magrid lfn:/grid/magrid/elkharrim/in2.dat file:`pwd`/in2.dat
 
#processing
FreeFem++ $1
 
 
#Download les outputs from WN to the SE
lcg-cr --vo magrid -d se1.cnrst.magrid.ma -l lfn:/grid/magrid/elkharrim/out1.dat file:`pwd`/out1.dat
lcg-cr --vo magrid -d se1.cnrst.magrid.ma -l lfn:/grid/magrid/elkharrim/out2.dat file:`pwd`/out2.dat
lcg-cr --vo magrid -d se1.cnrst.magrid.ma -l lfn:/grid/magrid/elkharrim/out3.dat file:`pwd`/out3.dat


Transfère des fichier inputs du SE vers le UI

Une fois terminé on vérifie notre resultat s'il est bien dans le SE:

[elkharrim@ui2 freefem]$ lfc-ls /grid/magrid/elkharrim

A la fin on le récupère sur le UI:

[elkharrim@ui2 freefem]$ lcg-cp --vo magrid lfn:/grid/magrid/elkharrim/out1.dat file:`pwd`/out1.dat [elkharrim@ui2 freefem]$ lcg-cp --vo magrid lfn:/grid/magrid/elkharrim/out2.dat file:`pwd`/out2.dat [elkharrim@ui2 freefem]$ lcg-cp --vo magrid lfn:/grid/magrid/elkharrim/out3.dat file:`pwd`/out3.dat


Schwarz1.png

Navigation
Administrateur
Utilisateur
Applications
Autorité de Certification