137 lines
6 KiB
C++
Executable file
137 lines
6 KiB
C++
Executable file
|
|
#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) <https://www.irdl.fr/>.
|
|
//
|
|
// Herezh++ is distributed under GPL 3 license ou ultérieure.
|
|
//
|
|
// Copyright (C) 1997-2022 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 <https://www.gnu.org/licenses/>.
|
|
//
|
|
// For more information, please consult: <https://herezh.irdl.fr/>.
|
|
|
|
#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 "<<nb_choix<<" !!, "
|
|
<< "\n redonnez une bonne valeur"
|
|
<< "\n ou taper f ou 0 pour arreter le programme";
|
|
};
|
|
switch (num)
|
|
{ case 0: // sortie
|
|
{ Sortie(0);break;} // normalement cela a déjà été filtré avant
|
|
case 1: // on continue l'exécution
|
|
{ return;break;
|
|
}
|
|
case 2: // lecture de donnees secondaire dans le .info
|
|
{ // on modifie les paramètres dans ParaAlgoControle
|
|
ParaGlob::param->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;
|
|
};
|
|
};
|
|
};
|
|
|
|
};
|
|
|