#include "Handler_exception.h" // This file is part of the Herezh++ application. // // The finite element software Herezh++ is dedicated to the field // of mechanics for large transformations of solid structures. // It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600) // INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) . // // Herezh++ is distributed under GPL 3 license ou ultérieure. // // Copyright (C) 1997-2021 Université Bretagne Sud (France) // AUTHOR : Gérard Rio // E-MAIL : gerardrio56@free.fr // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, // or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // For more information, please consult: . #include "CharUtil.h" #include "ParaGlob.h" #include "ParaAlgoControle.h" // méthode utilitaire, utilisable par les classes dérivées, permettant d'agir si un controle-c est émis // où une autre interruption générée par un kill // intervient sur des paramètres stockés dans ParaAlgoControle, qui sont actuellement actif (accessible via ParaGlob) // c'est donc via ces paramètres que les autres programmes peuvent récupérer les infos et agir // en conséquence éventuellement void Handler_signal(int theSignal) { // cout << "\n Je receptionne le signal " << theSignal << endl ; // cout << "\n tappez sur quelque chose pour continuer "; // string toto; // cin >> toto; // // dans le cas d'un controle c on génère une exception // // qui est reprise par herezh.c if (theSignal == SIGINT ) { Sortie(0); // *** test // sauvegarde de l'etat actuel dans le .BI // et également le .PI !! ce qui est bigrement utile pour la reprise sur des gros calculs // on modifie les paramètres dans ParaAlgoControle ParaGlob::param->ParaAlgoContActifs().ChangeSortieEtatActuelDansBI(true); ParaGlob::param->ParaAlgoContActifs().ChangeSortieEquilibreGlobal(true); // ErrSortieFinale toto; cout << "\n Je receptionne le signal " << theSignal << endl ; cout << "\n tappez sur quelque chose pour continuer "; // throw (toto); } else // les autres cas { //On va proposer un menu string rep=" "; cout << "\n --- definition des parametres de controle ------ "; while ((Minuscules(rep) != "f")&&(Minuscules(rep) != "0")) {// on met une boucle de surveillance pour l'interactif au cas où try { cout << "\n choix : " << "\n (0 ou f) (defaut) fin immediate d'execution " << "\n (1 ou c) continue l'execution " << "\n (2) lecture de donnees secondaire dans le .info" << "\n (3) sortie de la recherche d'equilibre global " << "\n (4) sauvegarde de l'etat actuel dans le .BI " << "\n (5) sauvegarde post-traitement (CVisu) actuel" << "\n (6) affiche nom grandeurs actuelles accessibles globalement " << "\n (7) modification d'une constante globale utilisateur " << "\n "; int nb_choix=7; // maxi du num de choix actuel rep = lect_return_defaut(false,"f"); if ((Minuscules(rep) == "f") || (Minuscules(rep) == "0"))// sortie directe Sortie(0); if ((Minuscules(rep) == "c") || (Minuscules(rep) == "1"))// sortie directe return; int num = ChangeEntier(rep); if (!((num >= 0)&&(num<=nb_choix))) { cout << "\n Erreur on attendait un entier entre 0 et "<ChangeDemandeLectureSecondaireInPointInfo(1); break; } case 3: // sortie d'une boucle d'iteration d'equilibre global { // on modifie les paramètres dans ParaAlgoControle ParaGlob::param->ParaAlgoContActifs().ChangeSortieEquilibreGlobal(true); break; } case 4: // sauvegarde de l'etat actuel dans le .BI { // on modifie les paramètres dans ParaAlgoControle ParaGlob::param->ParaAlgoContActifs().ChangeSortieEtatActuelDansBI(true); break; } case 5: // sauvegarde de l'etat actuel dans le .BI { // on modifie les paramètres dans ParaAlgoControle ParaGlob::param->ParaAlgoContActifs().ChangeSortieEtatActuelDansCVisu(true); break; } case 6: // affichage des grandeurs actuelles accessibles globalement { // on affiche directement ParaGlob::param->Affiche_GrandeurGlobal(cout); break; } case 7: // modification d'une constante globale utilisateur { ParaGlob::param->Modif_interactive_constante_utilisateur(); break; } }; } catch ( ... ) { cout << "\n *** erreur inconnue, on continue " << endl; }; }; }; };