From: Frederic D. <de...@us...> - 2004-04-30 07:19:45
|
Update of /cvsroot/fudaa/fudaa_devel/dodico/src/org/fudaa/dodico/olb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1703/src/org/fudaa/dodico/olb Modified Files: ServeurOLB.java Added Files: DResultatsOlb.java DCalculOlb.java DParametresOlb.java Removed Files: DResultatsOLB.java DParametresOLB.java DCalculOLB.java Log Message: Changement des classes OLB en Olb Reintegration du package usine --- NEW FILE: DCalculOlb.java --- /** * @file DCalculOLB.java * @creation 1999-11-25 * @modification $Date: 2004/04/30 07:18:36 $ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... */ package org.fudaa.dodico.olb; import java.io.File; import java.io.InputStreamReader; import org.fudaa.dodico.calcul.DCalcul; import org.fudaa.dodico.corba.objet.IConnexion; import org.fudaa.dodico.corba.olb.ICalculOlb; import org.fudaa.dodico.corba.olb.ICalculOlbOperations; import org.fudaa.dodico.corba.olb.IParametresOlb; import org.fudaa.dodico.corba.olb.IParametresOlbHelper; import org.fudaa.dodico.corba.olb.IResultatsOlb; import org.fudaa.dodico.corba.olb.IResultatsOlbHelper; import org.fudaa.dodico.objet.CDodico; /** * Une encapsulation du programme d'optimisation de largeur de bande ecrit en * C++. * * @version $Revision: 1.1 $ $Date: 2004/04/30 07:18:36 $ by $Author: deniger $ * @author Bertrand Marchand */ public class DCalculOlb extends DCalcul implements ICalculOlb,ICalculOlbOperations { private StringBuffer traceBuffer_= new StringBuffer(); private boolean succes_= false; private boolean arretDemande_= false; private Process proc_= null; // Sous process d'exécution du programme. public DCalculOlb() { super(); setFichiersExtensions(new String[] { ".olb_in", ".olb_out" }); } public Object clone() { return new DCalculOlb(); } public String toString() { return "DCalculOlb()"; } public String description() { return "OLB, serveur d'optimisation de largeur de bande: " + super.description(); } /** * Exécution de OLB */ public void calcul(IConnexion c) { succes_= false; if (!verifieConnexion(c)) return; IParametresOlb params= IParametresOlbHelper.narrow(parametres(c)); if (params == null) CDodico.exception_axel(this, new Exception("params non definis (null)")); IResultatsOlb results= IResultatsOlbHelper.narrow(resultats(c)); if (results == null) CDodico.exception_axel(this, new Exception("results non definis (null)")); results.maillage(null); log(c, "lancement du calcul"); traceBuffer_= new StringBuffer(); String os= System.getProperty("os.name"); String path= cheminServeur(); String fichier= "olb" + c.numero(); try { if (arretDemande_) return; System.out.println("Ecriture des paramètres pour " + fichier); DParametresOlb.ecritParametresOLB(path + fichier, params.maillage()); if (arretDemande_) return; System.out.println("Exécution de OLB pour " + fichier); String exe; if (os.startsWith("Windows")) exe= "olb.exe"; else exe= "olb-" + os + ".x"; // String[] cmd; // int icmd=0; // if( os.startsWith("Windows") ) { // cmd=new String[4]; // cmd[icmd++]=path+"launcher.bat"; // if( path.indexOf(':')!=-1 ) { // // lettre de l'unite (ex: "C:") // cmd[icmd++]=path.substring(0, path.indexOf(':')+1); // // chemin du serveur // cmd[icmd++]=path.substring(path.indexOf(':')+1); // } // else { // // si pas de lettre dans le chemin // cmd[icmd++]="fake_cmd"; // cmd[icmd++]=path; // } // System.out.println(cmd[0]+" "+cmd[1]+" "+cmd[2]); // } else { // cmd=new String[2]; // cmd[icmd++]=path+"launcher.sh"; // System.out.println(cmd[0]); // } // cmd[icmd++]=fichier; String[] cmd= new String[3]; cmd[0]= path + exe; cmd[1]= fichier + ".olb_in"; cmd[2]= fichier + ".olb_out"; // CExec ex=new CExec(); // ex.setCommand(cmd); // ex.setOutStream(System.out); // ex.setErrStream(System.err); // ex.exec(); if (arretDemande_) return; proc_= Runtime.getRuntime().exec(cmd, null, new File(path)); if (arretDemande_) proc_.destroy(); else proc_.waitFor(); if (arretDemande_) return; InputStreamReader perr= new InputStreamReader(proc_.getErrorStream()); InputStreamReader pout= new InputStreamReader(proc_.getInputStream()); int ch; // Trace d'exécution. while ((ch= pout.read()) != -1) traceBuffer_.append((char)ch); // Erreurs sur stream Error String sResult= ""; while ((ch= perr.read()) != -1) sResult += (char)ch; traceBuffer_.append(sResult); // Succès du calcul si aucune erreur et fichier résultats existant. if (proc_.exitValue() == 0) { succes_= new File(path + fichier + ".olb_out").length() != 0; } // Le calcul s'est mal déroulé. if (!succes_) { System.out.println("Erreurs :" + sResult); return; } results.setFichier(path + fichier); System.out.println("Fin du calcul"); log(c, "calcul terminé"); } catch (Exception ex) { log(c, "erreur du calcul"); CDodico.exception_axel(this, ex); } finally { if (arretDemande_) { traceBuffer_.append("\n*** Interruption utilisateur ***\n"); arretDemande_= false; } } } /** * Arret demandé du calcul en cours. */ public void setArretDemande() { arretDemande_= true; // Arret du sous process s'il est en cours. if (proc_ != null) proc_.destroy(); } /** * Annulation de l'arret demandé. */ public void clearArretDemande() { arretDemande_= false; } /** * Retourne la trace d'exécution sous forme de chaine. Les lignes sont * séparées par des caractères de fin de ligne "\n". * * @return La trace d'exécution. */ public String traceExecution() { return traceBuffer_.toString(); } /** * Retourne l'état de sortie du calcul. Le calcul s'est correctement déroulé * si des résultats existent. * * @return <i>true</i> Le calcul s'est bien déroulé. <i>false</i> sinon. */ public boolean estOK() { return succes_; } } --- NEW FILE: DParametresOlb.java --- /** * @file DParametresOLB.java * @creation 1999-11-25 * @modification $Date: 2004/04/30 07:18:36 $ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... */ package org.fudaa.dodico.olb; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import org.fudaa.dodico.calcul.DParametres; import org.fudaa.dodico.corba.geometrie.SElement; import org.fudaa.dodico.corba.geometrie.SMaillage; import org.fudaa.dodico.corba.geometrie.SNoeud; import org.fudaa.dodico.corba.geometrie.SPoint; import org.fudaa.dodico.corba.olb.IParametresOlb; import org.fudaa.dodico.corba.olb.IParametresOlbOperations; import org.fudaa.dodico.objet.CDodico; /** * Les parametres Olb * * @version $Revision: 1.1 $ $Date: 2004/04/30 07:18:36 $ by $Author: deniger $ * @author Bertrand Marchand */ public class DParametresOlb extends DParametres implements IParametresOlb,IParametresOlbOperations { private SMaillage sMaillage_; public DParametresOlb() { super(); sMaillage_= new SMaillage(); } public Object clone() { return new DParametresOlb(); } public String toString() { String s= "DParametresOLB"; return s; } public void maillage(SMaillage _m) { sMaillage_= _m; } public SMaillage maillage() { return sMaillage_; } /** * Ecriture des parametres dans un fichier */ public static void ecritParametresOLB(String fichier, SMaillage _m) { SNoeud[] nds= _m.noeuds; SElement[] els= _m.elements; /*Hashtable nd2Num= new Hashtable(nds.length); for (int i= 0; i < nds.length; i++) nd2Num.put(nds[i], new Integer(i + 1));*/ System.out.println("Ecriture de " + fichier + ".olb_in"); try { PrintWriter fout= new PrintWriter(new FileWriter(fichier + ".olb_in")); // <NOEUDS> fout.println("NOEUDS"); // <nombre de noeuds>,<nombre de valeurs=1> fout.println(nds.length + " " + 1); // <numéro de noeud>,<x>,<y>,<z> for (int i= 0; i < nds.length; i++) { SPoint pt= nds[i].point; fout.println((i + 1) + " " + pt.x + " " + pt.y + " " + pt.z); } fout.println(); // <ELEMENTS> fout.println("ELEMENTS"); // <nombre d'éléments> fout.println(els.length); // <numéro d'élément>,<nombre de noeuds>,<numéros de noeuds> for (int i= 0; i < els.length; i++) { int[] ndsEle= els[i].noeudsIdx; fout.print((i + 1) + " " + ndsEle.length); for (int j= 0; j < ndsEle.length; j++) fout.print(" " + (ndsEle[j]+1)); fout.println(); } fout.flush(); fout.close(); } catch (IOException ex) { CDodico.exception(ex); } } } --- NEW FILE: DResultatsOlb.java --- /** * @file DResultatsOLB.java * @creation 1999-11-25 * @modification $Date: 2004/04/30 07:18:36 $ * @license GNU General Public License 2 * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne * @mail de...@fu... */ package org.fudaa.dodico.olb; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.fudaa.dodico.calcul.DResultats; import org.fudaa.dodico.corba.geometrie.LTypeElement; import org.fudaa.dodico.corba.geometrie.SElement; import org.fudaa.dodico.corba.geometrie.SMaillage; import org.fudaa.dodico.corba.geometrie.SNoeud; import org.fudaa.dodico.corba.geometrie.SPoint; import org.fudaa.dodico.corba.olb.IResultatsOlb; import org.fudaa.dodico.corba.olb.IResultatsOlbOperations; import org.fudaa.dodico.fortran.FortranReader; import org.fudaa.dodico.objet.CDodico; /** * Les resultats OLB * * @version $Revision: 1.1 $ $Date: 2004/04/30 07:18:36 $ by $Author: deniger $ * @author Bertrand Marchand */ public class DResultatsOlb extends DResultats implements IResultatsOlb,IResultatsOlbOperations { private String fichier_= ""; private SMaillage sMai_= null; public DResultatsOlb() { super(); } public void setFichier(String _fichier) { fichier_= _fichier; } public Object clone() { DResultatsOlb r= new DResultatsOlb(); r.setFichier(fichier_); return r; } public void maillage(SMaillage _m) { sMai_= _m; } public SMaillage maillage() { if (sMai_ == null) sMai_= litResultatsOLB(fichier_); return sMai_; } public static SMaillage litResultatsOLB(String fichier) { SMaillage r= null; SElement[] elements= null; SNoeud[] noeuds= null; try { int i, j, nbnoeuds, nbelts; FortranReader finp= new FortranReader(new FileReader(fichier + ".olb_out")); // Lecture noeuds finp.readFields(); finp.readFields(); nbnoeuds= finp.intField(0); System.out.println("OLB_out nombre de noeuds: " + nbnoeuds); noeuds= new SNoeud[nbnoeuds]; for (i= 0; i < nbnoeuds; i++) { finp.readFields(); j= finp.intField(0); if (j != i + 1) System.err.println("OLB_out Decalage en ligne : " + (i + 1)); SPoint p= new SPoint( finp.doubleField(1), finp.doubleField(2), finp.doubleField(3)); noeuds[i]= new SNoeud(p); } // Lecture elements finp.readFields(); finp.readFields(); finp.readFields(); nbelts= finp.intField(0); System.out.println("OLB_out nombre d'elements: " + nbelts); elements= new SElement[nbelts]; for (i= 0; i < nbelts; i++) { finp.readFields(); j= finp.intField(0); if (j != i + 1) System.err.println("OLB_out Decalage en ligne : " + (i + 1)); int nbNdsEle= finp.intField(1); int[] nds= new int[nbNdsEle]; for (j= 0; j < nbNdsEle; j++) nds[j]= finp.intField(j + 2) - 1; if (nbNdsEle == 3) elements[i]= new SElement(nds, LTypeElement.T3); else elements[i]= new SElement(nds, LTypeElement.T6); } finp.close(); r= new SMaillage(elements, noeuds); System.err.println("OLB_out Termine !"); } catch (IOException ex) { CDodico.exception(DResultatsOlb.class, ex); } finally { File finp= new File(fichier + ".olb_out"); if (finp.exists()) finp.delete(); } return r; } } Index: ServeurOLB.java =================================================================== RCS file: /cvsroot/fudaa/fudaa_devel/dodico/src/org/fudaa/dodico/olb/ServeurOLB.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** ServeurOLB.java 27 Apr 2004 16:05:39 -0000 1.6 --- ServeurOLB.java 30 Apr 2004 07:18:36 -0000 1.7 *************** *** 10,14 **** import java.util.Date; ! import org.fudaa.dodico.boony.BoonyLib; import org.fudaa.dodico.objet.CDodico; /** --- 10,14 ---- import java.util.Date; ! import org.fudaa.dodico.objet.UsineLib; import org.fudaa.dodico.objet.CDodico; /** *************** *** 33,37 **** //Cas particulier : il s'agit de creer un serveur de calcul dans une jvm donne //Cette Méthode n'est pas a imiter. If faut utiliser Boony pour creer des objet corba. ! CDodico.rebind(nom, BoonyLib.createService(DCalculOLB.class)); System.out.println("OLB server running... "); System.out.println("Name: " + nom); --- 33,37 ---- //Cas particulier : il s'agit de creer un serveur de calcul dans une jvm donne //Cette Méthode n'est pas a imiter. If faut utiliser Boony pour creer des objet corba. ! CDodico.rebind(nom, UsineLib.createService(DCalculOlb.class)); System.out.println("OLB server running... "); System.out.println("Name: " + nom); --- DResultatsOLB.java DELETED --- --- DCalculOLB.java DELETED --- --- DParametresOLB.java DELETED --- |