//************************************************************************ // --- Logiciel MEF++ // --- // --- Copyright 1996-2000 GIREF, Université Laval // --- TOUS DROITS RÉSERVÉS // --- ALL RIGHTS RESERVED // --- // --- Ce logiciel est couvert par la Loi sur le droit d'auteur. // --- L'utilisation, ou la modification de ce logiciel sous toutes ses // --- formes, que ce soit code source ou code compilé, à des fins // --- personnelles et non commerciales sont autorisées sans frais pour // --- autant que la présente notice de copyright ainsi que cette // --- permission apparaissent dans toutes les copies ainsi que dans la // --- documentation. // --- Le GIREF et l'Université Laval ne prétendent en aucune façon que // --- ce logiciel convient à un emploi quelconque. Celui-ci est // --- distribué sans aucune garantie implicite ou explicite. //************************************************************************ //******************************************************************** // Nom du fichier: conversionVU.cc // //******************************************************************** // Description: Programme servant a faire la conversion du // format GIREF vers VU. // //******************************************************************** #include "ChaineCar.h" #include "ChampGeoLin.h" #include "ChampScalConstElem.h" #include "ChampScalLin.h" #include "ChampScalQuad.h" #include "ChampTensO2SymLin.h" #include "ChampVect2DLin.h" #include "ChampVect2DQuad.h" #include "ChampVect3DLin.h" #include "ChampVect3DQuad.h" #include "ExportVU.h" #include "ExpressionAlgebrique.h" #include "fonctionsChaineCar.h" #include "InitialisationArgvArgc.h" #include "InitialisationTraitementSignal.h" #include "Maillage.h" #include "PETScInitialisation.h" #include "traducteurERMsg.h" #include #include #include using namespace std; ExportVU lExport; // pas de compression a priori car on va ajouter le temps dans le fichier template void importeChamp(PTTypeChamp& pChamp,std::ifstream& pFichier,ChaineCar& pNomDuChamp, ChaineCar& pNomDuFichier){ pChamp.asgnNom(pNomDuChamp); ERMsg lMsg = pChamp.importe(pFichier); if(lMsg) lExport.ajouteChamp(pChamp, pNomDuChamp); if(lMsg) lMsg = lExport.exporteInfo(pNomDuFichier); } int main(int argc, char *argv[]) { /// //*********************************** //* BLOC: Initialisations générales * //*********************************** PETScInitialisation lPETScInit(&argc, &argv); sInitialisationArgvArgc.asgnArguments(argc, argv); initialiseTraitementSignal(); const vector lArgv = sInitialisationArgvArgc.reqArgv(); // On déclare une variable qui contiendra potentiellement un message d'erreur ERMsg lMsg = ERMsg(ERMsg::OK); // On recupere le GroupeProcessus associe a PETSC_COMM_WORLD const PAGroupeProcessus lGroupeGlobal = PETScInitialisation::reqPetscCommWorld(); // On déclare les variables qui seront extraites de la ligne de commande ChaineCar lNom; ChaineCar lTypeDeChamp; ChaineCar lNomDuFichier; ChaineCar lNomDuChamp; std::ifstream lFichier; // Vérification des paramètres passés à la ligne de commande. const Entier lNbArg = lArgv.size(); if (lNbArg < 3 || lNbArg > 4) { ChaineCar lNomProgramme = sInitialisationArgvArgc.reqNomProgramme(); ChaineCar lMessageUsage = "USAGE: \n"; lMessageUsage += enleveCheminAccesFichier(lNomProgramme); lMessageUsage += " Prefixe_fichier_mail nom_fichier_champ [nom_du_champ]"; lMsg.ajoute(ERMsg(ERMsg::ERREUR, lMessageUsage)); } else { lNom = lArgv[1]; lNomDuFichier = lArgv[2]; if(lNbArg == 4){ lNomDuChamp = lArgv[3]; } else { lNomDuChamp = "defaut"; } } if(lMsg) { lFichier.open(lNomDuFichier.c_str()); if(lFichier){ importeString(lFichier,lTypeDeChamp); // on rewind lFichier.seekg (0, std::ios::beg); } else { lMsg.ajoute(ERMsg(ERMsg::ERREUR,"ERREUR LECTURE FICHIER: "+ lNomDuFichier)); } } // Lecture du Maillage Maillage lMail; if(lMsg) lMsg = lMail.importe(lNom); if(lMsg){ // Creation d'un champ geometrique LINEAIRE ChampGeoLin lChampGeo(lMail); lExport.asgnChampGeometrique(lChampGeo); lExport.asgnDegreInterpolation(Exportation::MAILLAGE_LINEAIRE); if(lTypeDeChamp == "ChampScalConstElem"){ ChampScalConstElem lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampScalLin"){ ChampScalLin lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampScalQuad"){ ChampScalQuad lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampVect2DLin"){ ChampVect2DLin lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampVect2DQuad"){ ChampVect2DQuad lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampVect3DLin"){ ChampVect3DLin lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampVect3DQuad"){ ChampVect3DQuad lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else if(lTypeDeChamp == "ChampTensO2SymLin"){ ChampTensO2SymLin lChamp(lChampGeo); importeChamp(lChamp,lFichier,lNomDuChamp,lNomDuFichier); } else { lMsg.ajoute(ERMsg(ERMsg::ERREUR,"Ce type de champs: " + lTypeDeChamp + " n'est pas traité, ajoutez-le dans le source et recompilez!")); } } // if (lMsg) if (!lMsg) { cerr << traducteurERMsg(lMsg); } return 0; }