// FICHIER : Met_Sfe1.cc // CLASSE : Met_Sfe1 // 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 using namespace std; //introduces namespace std #include #include #include "Sortie.h" #include "Util.h" #include "MathUtil.h" #include "Met_Sfe1.h" // ========================================================================================= // vu la taille des executables le fichier est decompose en quatre // le premier : Met_Sfe1s1.cp concerne les constructeurs, destructeur et // la gestion des variables // le second : Met_Sfe1s2.cp concerne le calcul des grandeurs publics // le troisieme : Met_Sfe1s3.cp concerne le calcul des grandeurs protegees, et des courbures pour SFE1 et SFE2 et QSFE1 // le quatrième : Met_Sfe1s4.cp concerne le calcul des courbures pour les éléments SFE3 et QSFE3 // ========================================================================================= // METHODES PUBLIQUES : // ------------------------ calculs ---------------------------------------- // cas explicite à t, toutes les grandeurs sont a 0 ou t // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Expli& Met_Sfe1::CalSfe1_explicit_t ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) {// récu if ((epas != NULL)&&(!tCalEpais)) epais = *epas; if (premier_calcul) {// Base a t=0 : // -----tout d'abord on calcul les elements relatifs a la surface médiane ----- // partie a_alpha Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_0(); // la normale Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 ajacobien_0 = jacobien_0; // sauvegarde Met_abstraite::Calcul_gijBB_0 (); // metrique base naturelle *aijBB_0 = *gijBB_0; Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes *aijHH_0 = *gijHH_0; Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- puis la courbure à t=0 ----- // calcul de la coubure a 0 curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- puis la base dans l'épaisseur à t=0 ----- //la base a t0 Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // metrique base naturelle Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 }; // ici on ne met pas la partie à t dans le cas d'un premier calcul car il n'y a pas de grandeur // à t+dt, d'où les grandeurs à t vont jouer le rôle de grandeur à tdt // Base a t=t : // ------ 1) tout d'abord la partie médiane à t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_t(); // la normale Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_t(); // calcul du jacobien a t ajacobien_t = jacobien_t; // sauvegarde Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // calcul et sauvegarde la base duale // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai int nbddl = d_gijBB_t.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_t)(i).CoordoB(1).Zero();(*d_giB_t)(i).CoordoB(2).Zero();}; if (tCalEpais) { for (int i=1;i<=nbddl;i++) (*d_giB_t)(i).CoordoB(3).Zero(); D_epaisseur_t(phiS); }; D_a_alpha_B_t(dphiS,nombre_noeud,phiS); // variation des a_alpha (dans la surface médiane) if (tCalEpais) { Cal_d_N_t(); // variation de la normale D_a_3_B_t(); // variation de a_3_B }; *d_giB_t = *d_aiB_t; // pour la suite des calcul dans met_abstraite // base duale // dans le cas où l'élément est 2D (pas de ddl d'épaisseur),on a uniquement // le calcul de la variation à plat (dans le plan aiB_1 et aiB_2) de aiH, il manque la partie // ***** suivant N pour être complet // --- par contre dans le cas 3D, le calcul est complet Met_abstraite::D_giH_t(); *d_aiH_t = *d_giH_t; // ----- 2) calcul de la courbure et variation a t ------ Dcourbure_t (tab_noeud,curb_t,dcurb_t,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha Cal_d_N_alpha_t(); // variation de N,alpha //la base a t Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); // les termes relatif aux gi (et non a la facette) Met_abstraite::Calcul_gijBB_t (); // " Met_abstraite::Calcul_gijHH_t (); // composantes controvariantes Met_abstraite::Calcul_giH_t (); // base duale // les termes de variation des gi D_giB_t(dphiS,nombre_noeud,phiH); // pour les gi Met_abstraite::D_gijBB_t(); //variation de la metrique en BB Met_abstraite::D_gijBB_t(); //variation de la metrique en BB if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_t(); // calcul du jacobien a t // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Expli_t_t& Met_Sfe1::CalSfe1_explicit_t(..." << endl; Sortie(1); }; // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_expli; }; // calcul simplifie, a utiliser lorsque l'on se sert des grandeurs // liers a la facette deja calculee, ainsi que la courbure // cas explicite à t, toutes les grandeurs sont a 0 ou t // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Expli& Met_Sfe1::CalSfe1_explicit_simple_t ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & ,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai int nbddl = d_gijBB_t.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_t)(i).CoordoB(1).Zero();(*d_giB_t)(i).CoordoB(2).Zero();}; if (tCalEpais) for (int i=1;i<=nbddl;i++) (*d_giB_t)(i).CoordoB(3).Zero(); // normalement ça ne peut pas être un premier calcul #ifdef MISE_AU_POINT if (premier_calcul) {cout << "\nErreur : cette fonction n'est pas a etre utilisee lors d'un premier calcul !! "; cout << "\n Met_abstraite::Expli_t_t& Met_Sfe1::CalSfe1_explicit_simple_t(..." << endl; Sortie(1); }; #endif // les termes relatif aux gi (et non a la facette) //la base a t Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_t (); // " Met_abstraite::Calcul_gijHH_t (); // composantes controvariantes if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_t(); // calcul du jacobien a t Met_abstraite::Calcul_giH_t (); // base duale // les termes de variation des gi D_giB_t(dphiS,nombre_noeud,phiH); // pour les gi Met_abstraite::D_gijBB_t(); //variation de la metrique en BB // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Expli_t_t& Met_Sfe1::CalSfe1_explicit_simple_t( ..." << endl; Sortie(1); }; // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_expli; }; // cas explicite à tdt, toutes les grandeurs sont a 0 ou tdt // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t+dt sont calculées const Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_tdt ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur if (premier_calcul) { //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ // partie a_alpha Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_0(); // la normale Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 ajacobien_0 = jacobien_0; // sauvegarde Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- // calcul de la coubure a 0 curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- //la base a t0 Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // metrique base naturelle Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 //===== Base a t: // ------ 1) tout d'abord la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_t(); // la normale Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_t(); // calcul du jacobien a t ajacobien_t = jacobien_t; // sauvegarde Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // calcul et sauvegarde la base duale // ----- 2) puis la courbure à t = t ----- curb_t = courbure_t(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t = t ----- //la base a t Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_t(); // calcul du jacobien a t Met_abstraite::Calcul_gijBB_t (); // métrique à t Met_abstraite::Calcul_gijHH_t (); // composantes controvariantes à t Met_abstraite::Calcul_giH_t(); }; //===== Base a t=t+dt : // ------ 1) tout d'abord la partie médiane à t ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t+dt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_tdt(); // la normale Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt ajacobien_tdt = jacobien_tdt; // sauvegarde Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // calcul et sauvegar de la base duale // les termes de variation des ai naturelles et duaux // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai int nbddl = d_gijBB_tdt.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_tdt)(i).CoordoB(1).Zero();(*d_giB_tdt)(i).CoordoB(2).Zero();}; if (tCalEpais) { for (int i=1;i<=nbddl;i++) (*d_giB_tdt)(i).CoordoB(3).Zero(); D_epaisseur_tdt(phiS); }; D_a_alpha_B_tdt(dphiS,nombre_noeud,phiS); // variation des a_alpha (dans la surface médiane) if (tCalEpais) { Cal_d_N_tdt(); // variation de la normale D_a_3_B_tdt(); // variation de a_3_B }; *d_giB_tdt = *d_aiB_tdt; // pour la suite des calcul dans met_abstraite // base duale // dans le cas où l'élément est 2D (pas de ddl d'épaisseur),on a uniquement // le calcul de la variation à plat (dans le plan aiB_1 et aiB_2) de aiH, il manque la partie // ***** suivant N pour être complet // --- par contre dans le cas 3D, le calcul est complet Met_abstraite::D_giH_tdt(); *d_aiH_tdt = *d_giH_tdt; // ----- 2) calcul de la coubure et variation a t+dt ------ Dcourbure_tdt (tab_noeud,curb_tdt,dcurb_tdt,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha Cal_d_N_alpha_tdt(); // variation de N,alpha // ----- 3) bases dans l'épaisseur et leur variation à t = t + dt ----- //la base a tdt Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt Met_abstraite::Calcul_giH_tdt(); // base duale // les termes de variation des gi D_giB_tdt(dphiS,nombre_noeud,phiH); // pour les gi Met_abstraite::D_gijBB_tdt(); //variation de la metrique en BB // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_tdt..." << endl; Sortie(1); }; // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_expli_t_tdt; }; // calcul simplifie à tdt, a utiliser lorsque l'on se sert des grandeurs // liers a la facette deja calculee, ainsi que la courbure // cas explicite à tdt, toutes les grandeurs sont a 0 ou tdt // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_simple_tdt ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & ,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai int nbddl = d_gijBB_tdt.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_tdt)(i).CoordoB(1).Zero();(*d_giB_tdt)(i).CoordoB(2).Zero();}; if (tCalEpais) for (int i=1;i<=nbddl;i++) (*d_giB_tdt)(i).CoordoB(3).Zero(); // normalement ça ne peut pas être un premier calcul #ifdef MISE_AU_POINT if (premier_calcul) {cout << "\nErreur : cette fonction n'est pas a etre utilisee lors d'un premier calcul !! "; cout << "\n Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_simple_tdt(..." << endl; Sortie(1); }; #endif //la base a tdt Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); // les termes relatif aux gi (et non a la facette) Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt Met_abstraite::Calcul_giH_tdt(); // base duale // les termes de variation des gi D_giB_tdt(dphiS,nombre_noeud,phiH); // pour les gi Met_abstraite::D_gijBB_tdt(); //variation de la metrique en BB // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_simple_tdt( ..." << endl; Sortie(1); }; // liberation des tenseurs intermediaires LibereTenseur(); return ex_expli_t_tdt; }; // cas implicite, toutes les grandeurs sont a 0 ou t+dt // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Impli& Met_Sfe1::CalSfe1_implicit ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur if (premier_calcul) { //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ // partie a_alpha Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_0(); // la normale Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 ajacobien_0 = jacobien_0; // sauvegarde Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- // calcul de la coubure a 0 curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- //la base a t0 Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 //===== Base a t: // ------ 1) tout d'abord la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_t(); // la normale Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_t(); // calcul du jacobien a t ajacobien_t = jacobien_t; // sauvegarde Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // calcul et sauvegarde de la base duale // ----- 2) puis la courbure à t = t ----- curb_t = courbure_t(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t = t ----- //la base a t Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale Met_abstraite::Jacobien_t(); // calcul du jacobien a t Met_abstraite::Calcul_gijBB_t(); Met_abstraite::Calcul_gijHH_t(); Met_abstraite::Calcul_giH_t(); }; //===== Base a t=t+dt : // ------ 1) tout d'abord la partie médiane à tdt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t+dt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_tdt(); // la normale Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt ajacobien_tdt = jacobien_tdt; // sauvegarde Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // calcul et sauvegarde la base duale // --- les termes de variation des ai naturelles et duaux // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai (effacement des variations externes de l'appel précédent) int nbddl = d_gijBB_tdt.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_tdt)(i).CoordoB(1).Zero();(*d_giB_tdt)(i).CoordoB(2).Zero();}; // (*d_aiB_tdt)(i)(1).Zero();(*d_aiB_tdt)(i)(2).Zero(); if (tCalEpais) { for (int i=1;i<=nbddl;i++) (*d_giB_tdt)(i).CoordoB(3).Zero(); D_epaisseur_tdt(phiS); }; D_a_alpha_B_tdt(dphiS,nombre_noeud,phiS); // variation des a_alpha (dans la surface médiane) if (tCalEpais) { Cal_d_N_tdt(); // variation de la normale D_a_3_B_tdt(); // variation de a_3_B }; *d_giB_tdt = *d_aiB_tdt; // pour la suite des calcul dans met_abstraite // base duale // dans le cas où l'élément est 2D (pas de ddl d'épaisseur),on a uniquement // le calcul de la variation à plat (dans le plan aiB_1 et aiB_2) de aiH, il manque la partie // ***** suivant N pour être complet // --- par contre dans le cas 3D, le calcul est complet Met_abstraite::D_giH_tdt(); *d_aiH_tdt = *d_giH_tdt; if (type_calcul_jacobien==1) // cas où on utilise la variation du jacobien de la surface sans courbure { Met_abstraite::Djacobien_tdt(); // variation du jacobien d_ajacobien_tdt = d_jacobien_tdt; }; // ----- 2) calcul de la coubure et variation a t+dt ------ Dcourbure_tdt (tab_noeud,curb_tdt,dcurb_tdt,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha Cal_d_N_alpha_tdt(); // variation de N,alpha // ----- programme de vérification par différences finies des dérivées --------- // Mat_pleine tabdphiH; // ne sert à rien // Verif_Dcourbure(tab_noeud,gradV_instantane,dphiS,nombre_noeud,phiS // ,tabdphiH,phiH,epas,tabTypeCL,vplan); // ----- fin programme de vérification par différences finies des dérivées ------ // ----- 3) bases dans l'épaisseur et leur variation à t = t + dt ----- //la base a tdt Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); // les termes relatif aux gi (et non a la facette) Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes // les termes de variation des gi D_giB_tdt(dphiS,nombre_noeud,phiH); // calcul des variations / "tous" les ddl Met_abstraite::D_gijBB_tdt(); //variation de la metrique en BB Met_abstraite::Calcul_giH_tdt(); // base duale Met_abstraite::D_giH_tdt(); // variation de la base duale Met_abstraite::D_gijHH_tdt(); //variation de la metrique en HH if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface avec courbure finale { Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt Met_abstraite::Djacobien_tdt(); // variation du jacobien }; // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Expli_t_tdt& Met_Sfe1::CalSfe1_explicit_tdt..." << endl; Sortie(1); }; LibereTenseur(); // retour des infos return ex_impli; }; // calcul simplifie, a utiliser lorsque l'on se sert des grandeurs // liées a la facette deja calculee, ainsi que la courbure et sa variation // cas implicite, toutes les grandeurs sont a 0 ou t+dt // gradV_instantane : true : calcul du gradient de vitesse instantannée // premier_calcul : true : cas d'un premier calcul -> toutes les grandeurs sont calculées // false: uniquement les grandeurs à t sont calculées const Met_abstraite::Impli& Met_Sfe1::CalSfe1_implicit_simple ( const Tableau& tab_noeud ,bool gradV_instantane,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & ,bool premier_calcul ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // initialisation des variations par rapport aux ddl externes pour tous les termes // relatif a la base ai int nbddl = d_gijBB_tdt.Taille(); for (int i=1;i<=nbddl;i++) { (*d_giB_tdt)(i).CoordoB(1).Zero();(*d_giB_tdt)(i).CoordoB(2).Zero();}; if (tCalEpais) for (int i=1;i<=nbddl;i++) (*d_giB_tdt)(i).CoordoB(3).Zero(); // normalement ça ne peut pas être un premier calcul #ifdef MISE_AU_POINT if (premier_calcul) {cout << "\nErreur : cette fonction n'est pas a etre utilisee lors d'un premier calcul !! "; cout << "\n Met_abstraite::Impli& Met_Sfe1::CalSfe1_implicit_simple(..." << endl; Sortie(1); }; #endif //la base a tdt Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); // les termes relatif aux gi (et non a la facette) Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); // base duale // les termes de variation des gi D_giB_tdt(dphiS,nombre_noeud,phiH); // pour les gi Met_abstraite::D_gijBB_tdt(); //variation de la metrique en BB Met_abstraite::D_giH_tdt(); // variation de la base duale Met_abstraite::D_gijHH_tdt(); //variation de la metrique en HH if (type_calcul_jacobien==2) // cas où on utilise le jacobien de la surface sans courbure { Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt Met_abstraite::Djacobien_tdt(); // variation du jacobien }; // pour le gradient instannée pour l'instant, pas d'implantation if (gradV_instantane) { cout << "\nErreur : pas de calcul du gradient instantanne pour l'instant avec la metrique SFE"; cout << "\n Met_abstraite::Impli& Met_Sfe1::CalSfe1_implicit_simple(..." << endl; Sortie(1); }; // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_impli; }; // --------------- cas du calcul pour la matrice masse -------------------- // calcul pour la matrice masse: // dans le cas des SFE, on ne calcul que sur la surface centrale, et pour const Met_abstraite::Dynamiq& Met_Sfe1::Cal_pourMatMass ( const Tableau& tab_noeud, const Mat_pleine& dphiS, int nombre_noeud,const Vecteur& phiS) { //===== Base a t=0: Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour le stockage éventuel Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // idem Met_abstraite::Jacobien_0(); // jacobien initiale ajacobien_0 = jacobien_0; // sauvegarde // liberation des tenseurs intermediaires LibereTenseur(); return ex_Dynamiq; }; // --------------- test sur la courbure ------------------------------ // test si la courbure est anormalement trop grande // inf_normale : indique en entrée le det mini pour la courbure en locale // retour 1: si tout est ok, // 0: une courbure trop grande a été détecté int Met_Sfe1::Test_courbure_anormale (Enum_dure temps,double inf_normale, const Tableau& tab_noeud ,const Mat_pleine& dphiS,int nombre_noeud,const Vecteur& phiS) { int retour = 1; // init par défaut switch (temps) {case TEMPS_0 : { //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ // partie a_alpha Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_0(); // la normale Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_0(); // calcul du jacobien a 0 ajacobien_0 = jacobien_0; // sauvegarde Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde Tableau tab_coor(6); for (int i=1;i<=6;i++) tab_coor(i) = tab_noeud(i)->Coord0(); retour = (this->*PtTest_courbure_anormale)(inf_normale,tab_coor,(*aiB_0),(*aiH_0)); break; } case TEMPS_t : { // ------ la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_t(); // la normale Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_t(); // calcul du jacobien a t ajacobien_t = jacobien_t; // sauvegarde Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // calcul et sauvegarde de la base duale Tableau tab_coor(6); for (int i=1;i<=6;i++) tab_coor(i) = tab_noeud(i)->Coord1(); retour = (this->*PtTest_courbure_anormale)(inf_normale,tab_coor,(*aiB_t),(*aiH_t)); break; } case TEMPS_tdt : { // ------ la partie médiane à t+dt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a tdt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_tdt(); // la normale Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite // calcul du jacobien de la facette centrale sans courbure Met_abstraite::Jacobien_tdt(); // calcul du jacobien a tdt ajacobien_tdt = jacobien_tdt; // sauvegarde Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // calcul et sauvegarde de la base duale Tableau tab_coor(6); for (int i=1;i<=6;i++) tab_coor(i) = tab_noeud(i)->Coord2(); retour = (this->*PtTest_courbure_anormale)(inf_normale,tab_coor,(*aiB_tdt),(*aiH_tdt)); break; } default : cout << "\nErreur : valeur incorrecte du type Enum_dure : = " << Nom_dure(temps) <<" !\n"; cout << "\n Met_Sfe1::Test_courbure_anormale(... \n"; Sortie(1); }; // retour return retour; }; //-------- pour la remontee aux infos duaux ------------ const Met_abstraite::InfoImp& Met_Sfe1::CalSfe1_InfoImp ( const Tableau& tab_noeud ,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) { if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // Base et point a t=0 : tout d'abord on calcul les elements relatifs a la facette plane Met_abstraite::Calcul_M0(tab_noeud,phiS,nombre_noeud); *P0 = *M0; // pour toutes les grandeurs à 0, on les a sauvegardé dans Deformation donc on ne devrait pas les re- // calculer, là il y a des économies de temps à faire // et il y a plein de chose qui sont calculé que je met en commentaire car on se demande à quoi ça sert //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); // la normale est nécessaire pour le calcul de M0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); Calcul_M0(tab_noeud,phiH,nombre_noeud); //===== Base a t=tdt: Met_abstraite::Calcul_Mtdt(tab_noeud,phiS,nombre_noeud); *Ptdt = *Mtdt; // ------ 1) tout d'abord la partie médiane à t = t + dt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= tdt Calcul_N_tdt(); // la normale est nécessaire pour le calcul de Mtdt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // sauvegarde // ----- 2) puis la courbure à t=tdt ----- curb_tdt = courbure_tdt(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=tdt ----- Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes à tdt Met_abstraite::Calcul_giH_tdt(); Calcul_Mtdt(tab_noeud,phiH,nombre_noeud); // retour des infos // liberation des tenseurs intermediaires LibereTenseur(); return ex_InfoImp; }; const Met_abstraite::InfoExp_t& Met_Sfe1::CalSfe1_InfoExp_t ( const Tableau& tab_noeud ,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) { if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur Met_abstraite::Calcul_M0(tab_noeud,phiS,nombre_noeud); *P0 = *M0; // pour toutes les grandeurs à 0, on les a sauvegardé dans Deformation donc on ne devrait pas les re- // calculer, là il y a des économies de temps à faire // et il y a plein de chose qui sont calculé que je met en commentaire car on se demande à quoi ça sert //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); // la normale est nécessaire pour le calcul de M0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); Calcul_M0(tab_noeud,phiH,nombre_noeud); //===== Base a t=t: Met_abstraite::Calcul_Mt(tab_noeud,phiS,nombre_noeud); *Pt = *Mt; // ------ 1) tout d'abord la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= t Calcul_N_t(); // la normale est nécessaire pour le calcul de Mt if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // sauvegarde // ----- 2) puis la courbure à t=t ----- curb_t = courbure_t(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=t ----- Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_t (); // " Met_abstraite::Calcul_gijHH_t (); // composantes controvariantes à t Met_abstraite::Calcul_giH_t(); Calcul_Mt(tab_noeud,phiH,nombre_noeud); // retour des infos // liberation des tenseurs intermediaires LibereTenseur(); return ex_InfoExp_t; }; const Met_abstraite::InfoExp_tdt& Met_Sfe1::CalSfe1_InfoExp_tdt ( const Tableau& tab_noeud ,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) { if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // Base et point a t=0 : tout d'abord on calcul les elements relatifs a la facette plane Met_abstraite::Calcul_M0(tab_noeud,phiS,nombre_noeud); *P0 = *M0; // pour toutes les grandeurs à 0, on les a sauvegardé dans Deformation donc on ne devrait pas les re- // calculer, là il y a des économies de temps à faire // et il y a plein de chose qui sont calculé que je met en commentaire car on se demande à quoi ça sert //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); // la normale est nécessaire pour le calcul de M0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); Calcul_M0(tab_noeud,phiH,nombre_noeud); //===== Base a t=tdt: Met_abstraite::Calcul_Mtdt(tab_noeud,phiS,nombre_noeud); *Ptdt = *Mtdt; // ------ 1) tout d'abord la partie médiane à t = t + dt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= tdt Calcul_N_tdt(); // la normale est nécessaire pour le calcul de Mtdt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // sauvegarde // ----- 2) puis la courbure à t=tdt ----- curb_tdt = courbure_tdt(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=tdt ----- Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes à tdt Met_abstraite::Calcul_giH_tdt(); Calcul_Mtdt(tab_noeud,phiH,nombre_noeud); // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_InfoExp_tdt; }; // cas sortie d'info à 0 t et tdt: point, giB, giH, // calcul des termes de la classe Info0_t_tdt const Met_abstraite::Info0_t_tdt& Met_Sfe1::CalSfe1_Info0_t_tdt ( const Tableau& tab_noeud ,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) { if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur // Base et point a t=0 : tout d'abord on calcul les elements relatifs a la facette plane Met_abstraite::Calcul_M0(tab_noeud,phiS,nombre_noeud); *P0 = *M0; // pour toutes les grandeurs à 0, on les a sauvegardé dans Deformation donc on ne devrait pas les re- // calculer, là il y a des économies de temps à faire // et il y a plein de chose qui sont calculé que je met en commentaire car on se demande à quoi ça sert //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); // la normale est nécessaire pour le calcul de M0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " Met_abstraite::Calcul_gijHH_0 (); // composantes controvariantes à 0 Met_abstraite::Calcul_giH_0(); Calcul_M0(tab_noeud,phiH,nombre_noeud); //===== Base a t=t: Met_abstraite::Calcul_Mt(tab_noeud,phiS,nombre_noeud); *Pt = *Mt; // ------ 1) tout d'abord la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= t Calcul_N_t(); // la normale est nécessaire pour le calcul de Mt if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // sauvegarde // ----- 2) puis la courbure à t=t ----- curb_t = courbure_t(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=t ----- Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_t (); // " Met_abstraite::Calcul_gijHH_t (); // composantes controvariantes à t Met_abstraite::Calcul_giH_t(); Calcul_Mt(tab_noeud,phiH,nombre_noeud); //===== Base a t=tdt: Met_abstraite::Calcul_Mtdt(tab_noeud,phiS,nombre_noeud); *Ptdt = *Mtdt; // ------ 1) tout d'abord la partie médiane à t = t + dt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= tdt Calcul_N_tdt(); // la normale est nécessaire pour le calcul de Mtdt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // sauvegarde // ----- 2) puis la courbure à t=tdt ----- curb_tdt = courbure_tdt(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=tdt ----- Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_tdt (); // " Met_abstraite::Calcul_gijHH_tdt (); // composantes controvariantes à tdt Met_abstraite::Calcul_giH_tdt(); Calcul_Mtdt(tab_noeud,phiH,nombre_noeud); // liberation des tenseurs intermediaires LibereTenseur(); // retour des infos return ex_Info0_t_tdt; }; // cas du calcul de la déformation d'Almansi uniquement const Met_abstraite::Pour_def_Almansi Met_Sfe1::CalSfe1_pour_def_Almansi_au_temps ( Enum_dure temps,const Tableau& tab_noeud ,Mat_pleine const & dphiS,int nombre_noeud ,Vecteur const & phiS ,Mat_pleine const & ,Vecteur const& phiH,const Epai* epas ,Tableau const & tabTypeCL,Tableau const & vplan) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur Met_abstraite::Pour_def_Almansi pdamsi; // pour toutes les grandeurs à 0, on les a sauvegardé dans Deformation donc on ne devrait pas les re- // calculer, là il y a des économies de temps à faire // et il y a plein de chose qui sont calculé que je met en commentaire car on se demande à quoi ça sert //===== Base a t=0: // ------ 1) tout d'abord la partie médiane à t = 0 ------ Calcul_a_alpha_B_0(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t=0 if (tCalEpais) // cas 3D {Calcul_epaisseur_0(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_0(); // la normale Calcul_a_3_B_0(); // le troisième vecteur }; *giB_0 = *aiB_0; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_0 (); *aijBB_0 = *gijBB_0; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_0 (); *aijHH_0 = *gijHH_0; // composantes controvariantes Met_abstraite::Calcul_giH_0(); *aiH_0 = *giH_0; // sauvegarde // ----- 2) puis la courbure à t=0 ----- curb_0 = courbure_0(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_0(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=0 ----- Calcul_giB_0(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_0 (); // " pdamsi.gijBB_0=gijBB_0; switch (temps) { case TEMPS_t: {// ------ 1) tout d'abord la partie médiane à t = t ------ Calcul_a_alpha_B_t(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= t if (tCalEpais) // cas 3D {Calcul_epaisseur_t(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_t(); // la normale Calcul_a_3_B_t(); // le troisième vecteur }; *giB_t = *aiB_t; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_t (); *aijBB_t = *gijBB_t; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_t (); *aijHH_t = *gijHH_t; // composantes controvariantes Met_abstraite::Calcul_giH_t(); *aiH_t = *giH_t; // sauvegarde // ----- 2) puis la courbure à t=t ----- curb_t = courbure_t(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_t(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=t ----- Calcul_giB_t(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_t (); // " pdamsi.gijBB=gijBB_t; break; } case TEMPS_tdt: {// ------ 1) tout d'abord la partie médiane à t = t + dt ------ Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nombre_noeud,phiS); // calcul de la base a t= tdt if (tCalEpais) // cas 3D {Calcul_epaisseur_tdt(tab_noeud,phiS); // calcul des épaisseurs interpolées Calcul_N_tdt(); // la normale Calcul_a_3_B_tdt(); // le troisième vecteur }; *giB_tdt = *aiB_tdt; // pour la suite des calcul dans met_abstraite Met_abstraite::Calcul_gijBB_tdt (); *aijBB_tdt = *gijBB_tdt; // metrique base naturelle en tenseur 2D Met_abstraite::Calcul_gijHH_tdt (); *aijHH_tdt = *gijHH_tdt; // composantes controvariantes Met_abstraite::Calcul_giH_tdt(); *aiH_tdt = *giH_tdt; // sauvegarde // ----- 2) puis la courbure à t=tdt ----- curb_tdt = courbure_tdt(tab_noeud,tabTypeCL,vplan); Cal_N_alpha_tdt(); // N,alpha // ----- 3) puis la base dans l'épaisseur à t=tdt ----- Calcul_giB_tdt(tab_noeud,dphiS,nombre_noeud,phiH); Met_abstraite::Calcul_gijBB_tdt (); // " pdamsi.gijBB=gijBB_tdt; break; } }; return pdamsi; }; // cas du calcul de la déformation logarithmique uniquement const Met_abstraite::Pour_def_log Met_Sfe1::CalSfe1_pour_def_log_au_temps ( Enum_dure ,const Tableau& ,Mat_pleine const & ,int ,Vecteur const & ,Mat_pleine const & ,Vecteur const& ,const Epai* ,Tableau const & ,Tableau const & ) {cout << "\n erreur, calcul non fonctionnelle !! " << "\n Met_abstraite::Pour_def_log Met_Sfe1::CalSfe1_pour_def_log_au_temps(.." << endl; Sortie(1); // pour l'instant rien Met_abstraite::Pour_def_log toto; return toto; }; // ========== utilise par le contact ========================= // calcul d'un point M0 en fonction des phi et des coordonnees a 0 const Coordonnee & Met_Sfe1::PointSfe1M_0 // ( stockage a t=0) ( const Tableau& tab_noeud, const Vecteur& phiS,Mat_pleine const & dphiS ,const Epai* epas, const Vecteur& phiH) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur else {Calcul_epaisseur_0(tab_noeud,phiS);}; // sinon on calcul l'interpolation Met_abstraite::Calcul_M0(tab_noeud,phiS,nomb_noeud); *P0 = *M0; // le point de la surface médiane Calcul_a_alpha_B_0(tab_noeud,dphiS,nomb_noeud,phiS); // calcul de la base a t=0 Calcul_N_0(); // la normale Calcul_M0(tab_noeud,phiH,nomb_noeud); // là on utilise l'épaisseur calculée ou récupérée return *M0; }; // calcul d'un point M en fonction des phi et des coordonnees a t const Coordonnee & Met_Sfe1::PointSfe1M_t // ( stockage a t) ( const Tableau& tab_noeud, const Vecteur& phiS,Mat_pleine const & dphiS ,const Epai* epas, const Vecteur& phiH) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur else {Calcul_epaisseur_t(tab_noeud,phiS);}; // sinon on calcul l'interpolation Met_abstraite::Calcul_Mt(tab_noeud,phiS,nomb_noeud); *Pt = *Mt; // le point de la surface médiane Calcul_a_alpha_B_t(tab_noeud,dphiS,nomb_noeud,phiS); // calcul de la base a t=t Calcul_N_t (); Calcul_Mt(tab_noeud,phiH,nomb_noeud); // là on utilise l'épaisseur calculée ou récupérée return *Mt; }; /* // calcul de la variation d'un point M par rapport aux ddl , // en fonction des phi et des coordonnees a t const Tableau & Met_Sfe1::D_PointSfe1M_t // ( stockage a t) (const Tableau& tab_noeud,const Vecteur& Phi) { Calcul_d_Mt(tab_noeud,Phi,nomb_noeud); return *d_Mt; }; */ // calcul d'un point M en fonction des phi et des coordonnees a tdt const Coordonnee & Met_Sfe1::PointSfe1M_tdt // ( stockage a tdt) ( const Tableau& tab_noeud, const Vecteur& phiS,Mat_pleine const & dphiS ,const Epai* epas, const Vecteur& phiH) {if ((epas != NULL)&&(!tCalEpais)) epais = *epas; // récup éventuelle de l'épaisseur else {Calcul_epaisseur_tdt(tab_noeud,phiS);}; // sinon on calcul l'interpolation Met_abstraite::Calcul_Mtdt(tab_noeud,phiS,nomb_noeud); *Ptdt = *Mtdt; // le point de la surface médiane Calcul_a_alpha_B_tdt(tab_noeud,dphiS,nomb_noeud,phiS); // calcul de la base a t=tdt Calcul_N_tdt (); Calcul_Mtdt(tab_noeud,phiH,nomb_noeud); // là on utilise l'épaisseur calculée ou récupérée return *Mtdt; }; /* // calcul de la variation d'un point M par rapport aux ddl , // en fonction de phis et des coordonnees a tdt const Tableau & Met_Sfe1::D_PointSfe1M_tdt // ( stockage a tdt) (const Tableau& tab_noeud,const Vecteur& Phi) { Calcul_d_Mtdt(tab_noeud,Phi,nomb_noeud); return *d_Mtdt; }; // calcul de la vitesse du point M en fonction de phi et des coordonnees a 0 // dans le cas où les ddl de vitesse existent, ils sont directement interpolés // dans le cas où ils n'existent pas, on utilise les vitesses moyennes : delta M / delta t const Coordonnee & Met_Sfe1::VitesseSfe1M_0 // ( stockage a t=0) (const Tableau& tab_noeud,const Vecteur& Phi) { if (tab_noeud(1)->Existe_ici(V1)) { Calcul_V0(tab_noeud,Phi,nomb_noeud); } else { Calcul_V_moy0(tab_noeud,Phi,nomb_noeud); }; return *V0; }; // idem mais au noeud passé en paramètre const Coordonnee & Met_Sfe1::VitesseM_0(const Noeud* noeud) { if (noeud->Existe_ici(V1)) { Calcul_V0(noeud); } else { Calcul_V_moy0(noeud); }; return *V0; }; // calcul de la vitesse du point M en fonction de phi et des coordonnees a t // dans le cas où les ddl de vitesse existent, ils sont directement interpolés // dans le cas où ils n'existent pas, on utilise les vitesses moyennes : delta M / delta t const Coordonnee & Met_Sfe1::VitesseSfe1M_t // ( stockage a t=t) (const Tableau& tab_noeud,const Vecteur& Phi) { if (tab_noeud(1)->Existe_ici(V1)) { Calcul_Vt(tab_noeud,Phi,nomb_noeud); } else { Calcul_V_moyt(tab_noeud,Phi,nomb_noeud); }; return *Vt; }; // idem mais au noeud passé en paramètre const Coordonnee & Met_Sfe1::VitesseM_t(const Noeud* noeud) { if (noeud->Existe_ici(V1)) { Calcul_Vt(noeud); } else { Calcul_V_moyt(noeud); }; return *Vt; }; // calcul de la variation de la vitesse du point M par rapport aux ddl , // en fonction de phi et des coordonnees a t // dans le cas où les ddl de vitesse existent, ils sont directement interpolés // dans le cas où ils n'existent pas, on utilise les vitesses moyennes : delta M / delta t // ddl_vitesse : indique si oui ou non il s'agit de variation par rapport // aux ddl de vitesse ou au ddl de position const Tableau & Met_Sfe1::D_VitesseSfe1M_t // ( stockage a t) (const Tableau& tab_noeud,const Vecteur& Phi,bool ddl_vitesse) { if (tab_noeud(1)->Existe_ici(V1)) { Calcul_d_Vt(tab_noeud,Phi,nomb_noeud); ddl_vitesse = true;} else { Calcul_d_V_moyt(tab_noeud,Phi,nomb_noeud); ddl_vitesse = false;}; return *d_Vt; }; // idem mais au noeud passé en paramètre const Tableau & Met_Sfe1::D_VitesseSfe1M_t(const Noeud* noeud,bool ddl_vitesse) { if (noeud->Existe_ici(V1)) { Calcul_d_Vt(noeud); ddl_vitesse = true;} else { Calcul_d_V_moyt(noeud); ddl_vitesse = false; }; return *d_Vt; }; // calcul de la vitesse du point M en fonction de phi et des coordonnees a tdt // dans le cas où les ddl de vitesse existent, ils sont directement interpolés // dans le cas où ils n'existent pas, on utilise les vitesses moyennes : delta M / delta t const Coordonnee & Met_Sfe1::VitesseSfe1M_tdt // ( stockage a tdt) (const Tableau& tab_noeud,const Vecteur& Phi) { if (tab_noeud(1)->Existe_ici(V1)) { Calcul_Vtdt(tab_noeud,Phi,nomb_noeud); } else { Calcul_V_moytdt(tab_noeud,Phi,nomb_noeud);}; return *Vtdt; }; // idem mais au noeud passé en paramètre const Coordonnee & Met_Sfe1::VitesseSfe1M_tdt(const Noeud* noeud) { if (noeud->Existe_ici(V1)) { Calcul_Vtdt(noeud); } else { Calcul_V_moytdt(noeud); }; return *Vtdt; }; // calcul de la variation de la vitesse du point M par rapport aux ddl , // en fonction de phi et des coordonnees a tdt // dans le cas où les ddl de vitesse existent, ils sont directement interpolés // dans le cas où ils n'existent pas, on utilise les vitesses moyennes : delta M / delta t // ddl_vitesse : indique si oui ou non il s'agit de variation par rapport // aux ddl de vitesse ou au ddl de position const Tableau & Met_Sfe1::D_VitesseSfe1M_tdt // ( stockage a tdt) (const Tableau& tab_noeud,const Vecteur& Phi,bool ddl_vitesse) { if (tab_noeud(1)->Existe_ici(V1)) { Calcul_d_Vtdt(tab_noeud,Phi,nomb_noeud); ddl_vitesse = true;} else { Calcul_d_V_moytdt(tab_noeud,Phi,nomb_noeud); ddl_vitesse = false; }; return *d_Vtdt; }; // idem mais au noeud passé en paramètre const Tableau & Met_Sfe1::D_VitesseSfe1M_tdt(const Noeud* noeud,bool ddl_vitesse) { if (noeud->Existe_ici(V1)) { Calcul_d_Vtdt(noeud); ddl_vitesse = true;} else { Calcul_d_V_moytdt(noeud); ddl_vitesse = false; }; return *d_Vtdt; }; // calcul de la base naturel ( stockage a t=0) au point correspondant au dphi const BaseB& Met_Sfe1::BaseSfe1Nat_0 // en fonction des coordonnees a t=0 ( const Tableau& tab_noeud, const Mat_pleine& dphi,const Vecteur& phi) { Calcul_giB_0 (tab_noeud,dphi,nomb_noeud,phi); return *giB_0; }; // calcul de la base naturel ( stockage a t) au point correspondant au dphi const BaseB& Met_Sfe1::BaseSfe1Nat_t // en fonction des coordonnees a t ( const Tableau& tab_noeud, const Mat_pleine& dphi,const Vecteur& phi) { Calcul_giB_t (tab_noeud,dphi,nomb_noeud,phi); return *giB_t; }; // calcul de la base naturel ( stockage a t=tdt) au point correspondant au dphi const BaseB& Met_Sfe1::BaseSfe1Nat_tdt // en fonction des coordonnees a tdt ( const Tableau& tab_noeud, const Mat_pleine& dphi,const Vecteur& phi) { Calcul_giB_tdt (tab_noeud,dphi,nomb_noeud,phi); return *giB_tdt; }; // calcul de la base naturelle et duale ( stockage a t=0) en fonction des coord a 0 void Met_Sfe1::BaseSfe1ND_0( const Tableau& tab_noeud,const Mat_pleine& dphi, const Vecteur& phi,BaseB& bB,BaseH& bH) { Calcul_giB_0 (tab_noeud,dphi,nomb_noeud,phi); Calcul_gijBB_0 (); // " Calcul_gijHH_0 (); // composantes controvariantes Calcul_giH_0 (); bB = *giB_0; bH = *giH_0; }; // calcul de la base naturelle et duale ( stockage a t) en fonction des coord a t void Met_Sfe1::BaseSfe1ND_t( const Tableau& tab_noeud, const Mat_pleine& dphi, const Vecteur& phi,BaseB& bB,BaseH& bH) { Calcul_giB_t (tab_noeud,dphi,nomb_noeud,phi); Calcul_gijBB_t (); // " Calcul_gijHH_t (); // composantes controvariantes Calcul_giH_t (); bB = *giB_t; bH = *giH_t; }; // calcul de la base naturelle et duale ( stockage a tdt) en fonction des coord a tdt void Met_Sfe1::BaseSfe1ND_tdt( const Tableau& tab_noeud, const Mat_pleine& dphi, const Vecteur& phi,BaseB& bB,BaseH& bH) { Calcul_giB_tdt (tab_noeud,dphi,nomb_noeud,phi); Calcul_gijBB_tdt (); // " Calcul_gijHH_tdt (); // composantes controvariantes Calcul_giH_tdt (); bB = *giB_tdt; bH = *giH_tdt; }; */