// 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: . // fichier : Courbe1D.h // classe : Courbe1D /************************************************************************ * DATE: 19/01/2001 * * $ * * AUTEUR: G RIO (mailto:gerardrio56@free.fr) * * $ * * PROJET: Herezh++ * * $ * ************************************************************************ * BUT: Classe virtuelle permettant le calcul d'une fonction 1D * * ainsi qu'éventuellement un certain nombre d'information supplé- * * mentaires telles que dérivées. * * si le nom de la courbe = "_" il s'agit d'une courbe interne * * à un objet, c'est-à-dire gérée seulement par l'entité qui la * * contient, donc pas besoin de nom (elle n'est pas utilisée autre * * part). Si le nom est différent de "_" c'est une courbe qui est * * gérée et référencée dans LesCourbes, donc à partir de son nom, * * on peut la retrouver. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * $ * ************************************************************************/ #ifndef COURBE_1_D_H #define COURBE_1_D_H #include "UtilLecture.h" #include "EnumCourbe1D.h" #include "Enum_IO_XML.h" /** @defgroup Les_courbes_1D Les_courbes_1D * * \author Gérard Rio * \version 1.0 * \date 19/01/2001 * \brief Def des courbes 1D * */ /// @addtogroup Les_courbes_1D /// @{ /// /** * * BUT: Classe virtuelle permettant le calcul d'une fonction 1D * ainsi qu'éventuellement un certain nombre d'information supplé- * mentaires telles que dérivées. * si le nom de la courbe = "_" il s'agit d'une courbe interne * à un objet, c'est-à-dire gérée seulement par l'entité qui la * contient, donc pas besoin de nom (elle n'est pas utilisée autre * part). Si le nom est différent de "_" c'est une courbe qui est * gérée et référencée dans LesCourbes, donc à partir de son nom, * on peut la retrouver. * * * \author Gérard Rio * \version 1.0 * \date 19/01/2001 * \brief Classe virtuelle permettant le calcul d'une fonction 1D ainsi qu'éventuellement un certain nombre d'information supplémentaires telles que dérivées. * */ class Courbe1D { public : /// conteneur public pour une valeur et une dérivée class ValDer { public : double valeur; double derivee; }; /// conteneur public pour une valeur et un booleen pour le strictement /// inclus class Valbool { public : double valeur; bool dedans; }; /// conteneur public pour une valeur et une dérivée et un booleen pour le strictement /// inclus class ValDerbool { public: double valeur; double derivee; bool dedans; }; /// conteneur public pour une valeur, une dérivée première et une dérivée seconde class ValDer2 { public : double valeur; double derivee; double der_sec; }; /// CONSTRUCTEURS : /// par défaut Courbe1D( string nom = "", EnumCourbe1D typ = AUCUNE_COURBE1D) : nom_ref(nom),typeCourbe(typ),permet_affichage(0) {}; /// de copie Courbe1D(const Courbe1D& Co) : nom_ref(Co.nom_ref),typeCourbe(Co.typeCourbe) , permet_affichage(Co.permet_affichage) {}; /// DESTRUCTEUR : virtual ~Courbe1D() {}; // METHODES PUBLIQUES : // --------- virtuelles --------- /// affichage de la courbe virtual void Affiche() const = 0; /// ramène le nom de la courbe const string& NomCourbe() const {return nom_ref;}; /// vérification que tout est ok, pres à l'emploi /// ramène true si ok, false sinon virtual bool Complet_courbe()const =0 ; /// Lecture des donnees de la classe sur fichier /// le nom passé en paramètre est le nom de la courbe /// s'il est vide c-a-d = "", la methode commence par lire le nom sinon /// ce nom remplace le nom actuel virtual void LectDonnParticulieres_courbes(const string& nom, UtilLecture * ) = 0; /// établir le lien entre la courbe et des courbes déjà existantes dont /// on connait que le nom /// permet ainsi de complèter la courbe /// 1) renseigne si la courbe dépend d'autre courbe ou non virtual bool DependAutreCourbes() const {return false;}; ///< par défaut non /// 2) retourne une liste de nom correspondant aux noms de courbes dont dépend *this virtual list & ListDependanceCourbes(list & lico) const; /// 3) établit la connection entre la demande de *this et les courbes passées en paramètres virtual void Lien_entre_courbe (list & ) {}; /// def info fichier de commande virtual void Info_commande_Courbes1D(UtilLecture & entreePrinc) = 0; /// ramène la valeur virtual double Valeur(double x) = 0; /// ramène la valeur et la dérivée en paramètre virtual Courbe1D::ValDer Valeur_Et_derivee(double x) = 0; /// ramène la dérivée virtual double Derivee(double x) = 0; /// ramène la valeur et les dérivées première et seconde en paramètre virtual Courbe1D::ValDer2 Valeur_Et_der12(double x) = 0; /// ramène la dérivée seconde virtual double Der_sec(double x) = 0; /// ramène la valeur si dans le domaine strictement de définition /// si c'est inférieur au x mini, ramène la valeur minimale possible de y /// si supérieur au x maxi , ramène le valeur maximale possible de y virtual Valbool Valeur_stricte(double x) = 0; /// ramène la valeur et la dérivée si dans le domaine strictement de définition /// si c'est inférieur au x mini, ramène la valeur minimale possible de y et Y' correspondant /// si supérieur au x maxi , ramène le valeur maximale possible de y et Y' correspondant virtual ValDerbool Valeur_Et_derivee_stricte(double x) = 0; ///----- lecture écriture de restart ----- /// cas donne le niveau de la récupération /// = 1 : on récupère tout /// = 2 : on récupère uniquement les données variables (supposées comme telles) virtual void Lecture_base_info(ifstream& ent,const int cas) = 0; /// cas donne le niveau de sauvegarde /// = 1 : on sauvegarde tout /// = 2 : on sauvegarde uniquement les données variables (supposées comme telles) virtual void Ecriture_base_info(ofstream& sort,const int cas) = 0; /// sortie du schemaXML: en fonction de enu virtual void SchemaXML_Courbes1D(ofstream& sort,const Enum_IO_XML enu) = 0; // ---------- static --------- /// ramène un pointeur sur la courbe correspondant au type de courbe passé en paramètre /// IMPORTANT : il y a création d'une courbe (utilisation d'un new) static Courbe1D* New_Courbe1D(string& nom,EnumCourbe1D typeCourbe); /// ramène un pointeur sur une courbe copie de celle passée en paramètre /// IMPORTANT : il y a création d'une courbe (utilisation d'un new) static Courbe1D* New_Courbe1D(const Courbe1D& Co); /// ramène la liste des identificateurs de courbes actuellement disponibles static list Liste_courbe_disponible(); // ---------- non virtuelle --------- /// ramène le type de la courbe EnumCourbe1D Type_courbe() const { return typeCourbe;}; protected : // VARIABLES PROTEGEES : EnumCourbe1D typeCourbe; // type de la courbe string nom_ref; // nom de référence de la courbe // ----- controle de la sortie des informations: utilisé par les classes dérivées int permet_affichage; // pour permettre un affichage spécifique dans les méthodes, pour les erreurs et warning // METHODES PROTEGEES : // ramène true si les variables de la classe mère sont complèté bool Complet_var() const; }; /// @} // end of group #endif