// 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-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 <https://www.gnu.org/licenses/>.
//
// For more information, please consult: <https://herezh.irdl.fr/>.

#include "Ddl_enum_etendu.h"


//======================== tableau tab_Dee ===============================
// on définie le  tableau des Ddl_enum_etendu qui sont valides
// en variables globales
// 1) def du tableau static
Tableau < Ddl_enum_etendu > Ddl_enum_etendu::tab_Dee(0);  
int Ddl_enum_etendu::taillTab = 0;
// et de la map
map < string, int , std::less < string> > Ddl_enum_etendu::map_Ddl_enum_etendu;
// 2) on se sert d'un contructeur d'une class static
// pour remplir le tableau, et également pour initialiser la map map_Ddl_enum_etendu 

// -- tableaux particuliers (ne servent pas à la construction, sont simplement des commodités
Tableau <Ddl_enum_etendu> Ddl_enum_etendu::tab_FN_FT(0); // le tableau des deux ddl etendus

Initialisation_tab_Dee::Initialisation_tab_Dee()
  { Tableau < Ddl_enum_etendu >& tab_Dee = Ddl_enum_etendu::tab_Dee; // pour faciliter 
    tab_Dee.Change_taille(137); Ddl_enum_etendu::taillTab = tab_Dee.Taille();
    int nbenumddl = NbEnum_ddl();
    tab_Dee(1).nom = "Green-Lagrange11" ;tab_Dee(1).enu = EPS11;tab_Dee(1).posi_nom = nbenumddl + 1;
    tab_Dee(2).nom = "Green-Lagrange22" ;tab_Dee(2).enu = EPS22;tab_Dee(2).posi_nom = nbenumddl + 2;
    tab_Dee(3).nom = "Green-Lagrange33" ;tab_Dee(3).enu = EPS33;tab_Dee(3).posi_nom = nbenumddl + 3;
    tab_Dee(4).nom = "Green-Lagrange12" ;tab_Dee(4).enu = EPS12;tab_Dee(4).posi_nom = nbenumddl + 4;
    tab_Dee(5).nom = "Green-Lagrange13" ;tab_Dee(5).enu = EPS13;tab_Dee(5).posi_nom = nbenumddl + 5;
    tab_Dee(6).nom = "Green-Lagrange23" ;tab_Dee(6).enu = EPS23;tab_Dee(6).posi_nom = nbenumddl + 6;
    tab_Dee(7).nom = "Almansi11" ;tab_Dee(7).enu = EPS11;tab_Dee(7).posi_nom = nbenumddl + 7;
    tab_Dee(8).nom = "Almansi22" ;tab_Dee(8).enu = EPS22;tab_Dee(8).posi_nom = nbenumddl + 8;
    tab_Dee(9).nom = "Almansi33" ;tab_Dee(9).enu = EPS33;tab_Dee(9).posi_nom = nbenumddl + 9;
    tab_Dee(10).nom = "Almansi12" ;tab_Dee(10).enu = EPS12;tab_Dee(10).posi_nom = nbenumddl + 10;
    tab_Dee(11).nom = "Almansi13" ;tab_Dee(11).enu = EPS13;tab_Dee(11).posi_nom = nbenumddl + 11;
    tab_Dee(12).nom = "Almansi23" ;tab_Dee(12).enu = EPS23;tab_Dee(12).posi_nom = nbenumddl + 12;
    tab_Dee(13).nom = "Cauchy_local11" ;tab_Dee(13).enu = SIG11;tab_Dee(13).posi_nom = nbenumddl + 13;
    tab_Dee(14).nom = "Cauchy_local22" ;tab_Dee(14).enu = SIG22;tab_Dee(14).posi_nom = nbenumddl + 14;
    tab_Dee(15).nom = "Cauchy_local33" ;tab_Dee(15).enu = SIG33;tab_Dee(15).posi_nom = nbenumddl + 15;
    tab_Dee(16).nom = "Cauchy_local12" ;tab_Dee(16).enu = SIG12;tab_Dee(16).posi_nom = nbenumddl + 16;
    tab_Dee(17).nom = "Cauchy_local13" ;tab_Dee(17).enu = SIG13;tab_Dee(17).posi_nom = nbenumddl + 17;
    tab_Dee(18).nom = "Cauchy_local23" ;tab_Dee(18).enu = SIG23;tab_Dee(18).posi_nom = nbenumddl + 18;
    tab_Dee(19).nom = "Almansi_local11" ;tab_Dee(19).enu = EPS11;tab_Dee(19).posi_nom = nbenumddl + 19;
    tab_Dee(20).nom = "Almansi_local22" ;tab_Dee(20).enu = EPS22;tab_Dee(20).posi_nom = nbenumddl + 20;
    tab_Dee(21).nom = "Almansi_local33" ;tab_Dee(21).enu = EPS33;tab_Dee(21).posi_nom = nbenumddl + 21;
    tab_Dee(22).nom = "Almansi_local12" ;tab_Dee(22).enu = EPS12;tab_Dee(22).posi_nom = nbenumddl + 22;
    tab_Dee(23).nom = "Almansi_local13" ;tab_Dee(23).enu = EPS13;tab_Dee(23).posi_nom = nbenumddl + 23;
    tab_Dee(24).nom = "Almansi_local23" ;tab_Dee(24).enu = EPS23;tab_Dee(24).posi_nom = nbenumddl + 24;
    tab_Dee(25).nom = "Def_principaleI" ;tab_Dee(25).enu = EPS11;tab_Dee(25).posi_nom = nbenumddl + 25;
    tab_Dee(26).nom = "Def_principaleII" ;tab_Dee(26).enu = EPS11;tab_Dee(26).posi_nom = nbenumddl + 26;
    tab_Dee(27).nom = "Def_principaleIII" ;tab_Dee(27).enu = EPS11;tab_Dee(27).posi_nom = nbenumddl + 27;
    tab_Dee(28).nom = "Sigma_principaleI" ;tab_Dee(28).enu = SIG11;tab_Dee(28).posi_nom = nbenumddl + 28;
    tab_Dee(29).nom = "Sigma_principaleII" ;tab_Dee(29).enu = SIG11;tab_Dee(29).posi_nom = nbenumddl + 29;
    tab_Dee(30).nom = "Sigma_principaleIII" ;tab_Dee(30).enu = SIG11;tab_Dee(30).posi_nom = nbenumddl + 30;
    tab_Dee(31).nom = "contrainte_mises" ;tab_Dee(31).enu = SIG11;tab_Dee(31).posi_nom = nbenumddl + 31;
    tab_Dee(32).nom = "contrainte_tresca" ;tab_Dee(32).enu = SIG11;tab_Dee(32).posi_nom = nbenumddl + 32;
    tab_Dee(33).nom = "def_plastique_cumulee" ;tab_Dee(33).enu = EPS11;tab_Dee(33).posi_nom = nbenumddl + 33;
    
    tab_Dee(34).nom = "Vit_def11" ;tab_Dee(34).enu = DEPS11;tab_Dee(34).posi_nom = nbenumddl + 34;
    tab_Dee(35).nom = "Vit_def22" ;tab_Dee(35).enu = DEPS22;tab_Dee(35).posi_nom = nbenumddl + 35;
    tab_Dee(36).nom = "Vit_def33" ;tab_Dee(36).enu = DEPS33;tab_Dee(36).posi_nom = nbenumddl + 36;
    tab_Dee(37).nom = "Vit_def12" ;tab_Dee(37).enu = DEPS12;tab_Dee(37).posi_nom = nbenumddl + 37;
    tab_Dee(38).nom = "Vit_def13" ;tab_Dee(38).enu = DEPS13;tab_Dee(38).posi_nom = nbenumddl + 38;
    tab_Dee(39).nom = "Vit_def23" ;tab_Dee(39).enu = DEPS23;tab_Dee(39).posi_nom = nbenumddl + 39;
    
    tab_Dee(40).nom = "Vit_principaleI" ;tab_Dee(40).enu = DEPS11;tab_Dee(40).posi_nom = nbenumddl + 40;
    tab_Dee(41).nom = "Vit_principaleII" ;tab_Dee(41).enu = DEPS11;tab_Dee(41).posi_nom = nbenumddl + 41;
    tab_Dee(42).nom = "Vit_principaleIII" ;tab_Dee(42).enu = DEPS11;tab_Dee(42).posi_nom = nbenumddl + 42;

    tab_Dee(43).nom = "Delta_def11" ;tab_Dee(43).enu = EPS11;tab_Dee(43).posi_nom = nbenumddl + 43;
    tab_Dee(44).nom = "Delta_def22" ;tab_Dee(44).enu = EPS22;tab_Dee(44).posi_nom = nbenumddl + 44;
    tab_Dee(45).nom = "Delta_def33" ;tab_Dee(45).enu = EPS33;tab_Dee(45).posi_nom = nbenumddl + 45;
    tab_Dee(46).nom = "Delta_def12" ;tab_Dee(46).enu = EPS12;tab_Dee(46).posi_nom = nbenumddl + 46;
    tab_Dee(47).nom = "Delta_def13" ;tab_Dee(47).enu = EPS13;tab_Dee(47).posi_nom = nbenumddl + 47;
    tab_Dee(48).nom = "Delta_def23" ;tab_Dee(48).enu = EPS23;tab_Dee(48).posi_nom = nbenumddl + 48;
    
    tab_Dee(49).nom = "logarithmique11" ;tab_Dee(49).enu = EPS11;tab_Dee(49).posi_nom = nbenumddl + 49;
    tab_Dee(50).nom = "logarithmique22" ;tab_Dee(50).enu = EPS22;tab_Dee(50).posi_nom = nbenumddl + 50;
    tab_Dee(51).nom = "logarithmique33" ;tab_Dee(51).enu = EPS33;tab_Dee(51).posi_nom = nbenumddl + 51;
    tab_Dee(52).nom = "logarithmique12" ;tab_Dee(52).enu = EPS12;tab_Dee(52).posi_nom = nbenumddl + 52;
    tab_Dee(53).nom = "logarithmique13" ;tab_Dee(53).enu = EPS13;tab_Dee(53).posi_nom = nbenumddl + 53;
    tab_Dee(54).nom = "logarithmique23" ;tab_Dee(54).enu = EPS23;tab_Dee(54).posi_nom = nbenumddl + 54;    
    
    tab_Dee(55).nom = "Almansi_totale11" ;tab_Dee(55).enu = EPS11;tab_Dee(55).posi_nom = nbenumddl + 55;
    tab_Dee(56).nom = "Almansi_totale22" ;tab_Dee(56).enu = EPS22;tab_Dee(56).posi_nom = nbenumddl + 56;
    tab_Dee(57).nom = "Almansi_totale33" ;tab_Dee(57).enu = EPS33;tab_Dee(57).posi_nom = nbenumddl + 57;
    tab_Dee(58).nom = "Almansi_totale12" ;tab_Dee(58).enu = EPS12;tab_Dee(58).posi_nom = nbenumddl + 58;
    tab_Dee(59).nom = "Almansi_totale13" ;tab_Dee(59).enu = EPS13;tab_Dee(59).posi_nom = nbenumddl + 59;
    tab_Dee(60).nom = "Almansi_totale23" ;tab_Dee(60).enu = EPS23;tab_Dee(60).posi_nom = nbenumddl + 60;    

    tab_Dee(61).nom = "Green_Lagrange_totale11" ;tab_Dee(61).enu = EPS11;tab_Dee(61).posi_nom = nbenumddl + 61;
    tab_Dee(62).nom = "Green_Lagrange_totale22" ;tab_Dee(62).enu = EPS22;tab_Dee(62).posi_nom = nbenumddl + 62;
    tab_Dee(63).nom = "Green_Lagrange_totale33" ;tab_Dee(63).enu = EPS33;tab_Dee(63).posi_nom = nbenumddl + 63;
    tab_Dee(64).nom = "Green_Lagrange_totale12" ;tab_Dee(64).enu = EPS12;tab_Dee(64).posi_nom = nbenumddl + 64;
    tab_Dee(65).nom = "Green_Lagrange_totale13" ;tab_Dee(65).enu = EPS13;tab_Dee(65).posi_nom = nbenumddl + 65;
    tab_Dee(66).nom = "Green_Lagrange_totale23" ;tab_Dee(66).enu = EPS23;tab_Dee(66).posi_nom = nbenumddl + 66;    

    tab_Dee(67).nom = "logarithmique_totale11" ;tab_Dee(67).enu = EPS11;tab_Dee(67).posi_nom = nbenumddl + 67;
    tab_Dee(68).nom = "logarithmique_totale22" ;tab_Dee(68).enu = EPS22;tab_Dee(68).posi_nom = nbenumddl + 68;
    tab_Dee(69).nom = "logarithmique_totale33" ;tab_Dee(69).enu = EPS33;tab_Dee(69).posi_nom = nbenumddl + 69;
    tab_Dee(70).nom = "logarithmique_totale12" ;tab_Dee(70).enu = EPS12;tab_Dee(70).posi_nom = nbenumddl + 70;
    tab_Dee(71).nom = "logarithmique_totale13" ;tab_Dee(71).enu = EPS13;tab_Dee(71).posi_nom = nbenumddl + 71;
    tab_Dee(72).nom = "logarithmique_totale23" ;tab_Dee(72).enu = EPS23;tab_Dee(72).posi_nom = nbenumddl + 72;
     
    tab_Dee(73).nom = "energie_elastique" ;    tab_Dee(73).enu = EPS11; tab_Dee(73).posi_nom = nbenumddl + 73;
    tab_Dee(74).nom = "dissipation_plastique"  ;tab_Dee(74).enu = EPS11;tab_Dee(74).posi_nom = nbenumddl + 74;
    tab_Dee(75).nom = "dissipation_visqueuse"  ;tab_Dee(75).enu = EPS11;tab_Dee(75).posi_nom = nbenumddl + 75;    

    tab_Dee(76).nom = "masse_relax_dyn"  ;tab_Dee(76).enu = X1;tab_Dee(76).posi_nom = nbenumddl + 76; 
    tab_Dee(77).nom = "def_duale_mises"    ;tab_Dee(77).enu = EPS11;tab_Dee(77).posi_nom = nbenumddl + 77; 
    
    tab_Dee(78).nom = "Spherique_eps" ;    tab_Dee(78).enu = EPS11; tab_Dee(78).posi_nom = nbenumddl + 78;
    tab_Dee(79).nom = "Q_eps"  ;           tab_Dee(79).enu = EPS11; tab_Dee(79).posi_nom = nbenumddl + 79;
    tab_Dee(80).nom = "Cos3phi_eps"  ;     tab_Dee(80).enu = EPS11; tab_Dee(80).posi_nom = nbenumddl + 80;    

    tab_Dee(81).nom = "Spherique_sig" ;    tab_Dee(81).enu = SIG11; tab_Dee(81).posi_nom = nbenumddl + 81;
    tab_Dee(82).nom = "Q_sig"  ;           tab_Dee(82).enu = SIG11; tab_Dee(82).posi_nom = nbenumddl + 82;
    tab_Dee(83).nom = "Cos3phi_sig"  ;     tab_Dee(83).enu = SIG11; tab_Dee(83).posi_nom = nbenumddl + 83;    

    tab_Dee(84).nom = "Spherique_Deps" ;    tab_Dee(84).enu = DEPS11; tab_Dee(84).posi_nom = nbenumddl + 84;
    tab_Dee(85).nom = "Q_Deps"  ;           tab_Dee(85).enu = DEPS11; tab_Dee(85).posi_nom = nbenumddl + 85;
    tab_Dee(86).nom = "Cos3phi_Deps"  ;     tab_Dee(86).enu = DEPS11; tab_Dee(86).posi_nom = nbenumddl + 86;  

    tab_Dee(87).nom = "def_equivalente"  ;     tab_Dee(87).enu = DEPS11; tab_Dee(87).posi_nom = nbenumddl + 87;  
    tab_Dee(88).nom = "def_duale_mises_maxi"    ;tab_Dee(88).enu = EPS11;tab_Dee(88).posi_nom = nbenumddl + 88; 
    tab_Dee(89).nom = "vitesse_def_equivalente"    ;tab_Dee(89).enu = DEPS11;tab_Dee(89).posi_nom = nbenumddl + 89; 

    tab_Dee(90).nom = "reaction_normale"    ;tab_Dee(90).enu = X1;tab_Dee(90).posi_nom = nbenumddl + 90; 
    tab_Dee(91).nom = "reaction_tangentielle"    ;tab_Dee(91).enu = X1;tab_Dee(91).posi_nom = nbenumddl + 91; 

    tab_Dee(92).nom = "force_gene_ext"    ;tab_Dee(92).enu = X1;tab_Dee(92).posi_nom = nbenumddl + 92;
    tab_Dee(93).nom = "force_gene_int"    ;tab_Dee(93).enu = X1;tab_Dee(93).posi_nom = nbenumddl + 93;
    tab_Dee(94).nom = "pression_ext"    ;tab_Dee(94).enu = X1;tab_Dee(94).posi_nom = nbenumddl + 94;
   
    tab_Dee(95 ).nom = "N_11"     ;tab_Dee(95).enu = SIG11;tab_Dee(95).posi_nom = nbenumddl + 95;
    tab_Dee(96 ).nom = "N_22"     ;tab_Dee(96).enu = SIG22;tab_Dee(96).posi_nom = nbenumddl + 96;
    tab_Dee(97 ).nom = "N_33"     ;tab_Dee(97).enu = SIG33;tab_Dee(97).posi_nom = nbenumddl + 97;
    tab_Dee(98 ).nom = "N_12"     ;tab_Dee(98).enu = SIG12;tab_Dee(98).posi_nom = nbenumddl + 98;
    tab_Dee(99 ).nom = "N_13"     ;tab_Dee(99).enu = SIG13;tab_Dee(99).posi_nom = nbenumddl + 99;
    tab_Dee(100).nom = "N_23"     ;tab_Dee(100).enu = SIG23;tab_Dee(100).posi_nom = nbenumddl + 100;

    tab_Dee(101).nom = "M_11"     ;tab_Dee(101).enu = SIG11;tab_Dee(101).posi_nom = nbenumddl + 101;
    tab_Dee(102).nom = "M_22"     ;tab_Dee(102).enu = SIG22;tab_Dee(102).posi_nom = nbenumddl + 102;
    tab_Dee(103).nom = "M_33"     ;tab_Dee(103).enu = SIG33;tab_Dee(103).posi_nom = nbenumddl + 103;
    tab_Dee(104).nom = "M_12"     ;tab_Dee(104).enu = SIG12;tab_Dee(104).posi_nom = nbenumddl + 104;
    tab_Dee(105).nom = "M_13"     ;tab_Dee(105).enu = SIG13;tab_Dee(105).posi_nom = nbenumddl + 105;
    tab_Dee(106).nom = "M_23"     ;tab_Dee(106).enu = SIG23;tab_Dee(106).posi_nom = nbenumddl + 106;
   
    tab_Dee(107).nom = "norme_gradT"     ;tab_Dee(107).enu = GRADT1;tab_Dee(107).posi_nom = nbenumddl + 107;
    tab_Dee(108).nom = "norme_DgradT"     ;tab_Dee(108).enu = DGRADT1;tab_Dee(108).posi_nom = nbenumddl + 108;
    tab_Dee(109).nom = "norme_dens_flux"     ;tab_Dee(109).enu = FLUXD1;tab_Dee(109).posi_nom = nbenumddl + 109;
   
    tab_Dee(110).nom = "contact_actif"    ;tab_Dee(110).enu = X1;tab_Dee(110).posi_nom = nbenumddl + 110;

    tab_Dee(111).nom = "DeltagradT1"    ;tab_Dee(111).enu = GRADT1;tab_Dee(111).posi_nom = nbenumddl + 111;
    tab_Dee(112).nom = "DeltagradT2"    ;tab_Dee(112).enu = GRADT1;tab_Dee(112).posi_nom = nbenumddl + 112;
    tab_Dee(113).nom = "DeltagradT3"    ;tab_Dee(113).enu = GRADT1;tab_Dee(113).posi_nom = nbenumddl + 113;
   
    tab_Dee(114).nom = "N_surf_1"    ;tab_Dee(114).enu = X1;tab_Dee(114).posi_nom = nbenumddl + 114;
    tab_Dee(115).nom = "N_surf_2"    ;tab_Dee(115).enu = X2;tab_Dee(115).posi_nom = nbenumddl + 115;
    tab_Dee(116).nom = "N_surf_3"    ;tab_Dee(116).enu = X3;tab_Dee(116).posi_nom = nbenumddl + 116;
   
    tab_Dee(117).nom = "N_surf_1_t"    ;tab_Dee(117).enu = X1;tab_Dee(117).posi_nom = nbenumddl + 117;
    tab_Dee(118).nom = "N_surf_2_t"    ;tab_Dee(118).enu = X2;tab_Dee(118).posi_nom = nbenumddl + 118;
    tab_Dee(119).nom = "N_surf_3_t"    ;tab_Dee(119).enu = X3;tab_Dee(119).posi_nom = nbenumddl + 119;
   
    tab_Dee(120).nom = "N_surf_1_t0"    ;tab_Dee(120).enu = X1;tab_Dee(120).posi_nom = nbenumddl + 120;
    tab_Dee(121).nom = "N_surf_2_t0"    ;tab_Dee(121).enu = X2;tab_Dee(121).posi_nom = nbenumddl + 121;
    tab_Dee(122).nom = "N_surf_3_t0"    ;tab_Dee(122).enu = X3;tab_Dee(122).posi_nom = nbenumddl + 122;
  
    tab_Dee(123).nom = "X1_t"    ;tab_Dee(123).enu = X1;tab_Dee(123).posi_nom = nbenumddl + 123;
    tab_Dee(124).nom = "X2_t"    ;tab_Dee(124).enu = X2;tab_Dee(124).posi_nom = nbenumddl + 124;
    tab_Dee(125).nom = "X3_t"    ;tab_Dee(125).enu = X3;tab_Dee(125).posi_nom = nbenumddl + 125;
   
    tab_Dee(126).nom = "X1_t0"    ;tab_Dee(126).enu = X1;tab_Dee(126).posi_nom = nbenumddl + 126;
    tab_Dee(127).nom = "X2_t0"    ;tab_Dee(127).enu = X2;tab_Dee(127).posi_nom = nbenumddl + 127;
    tab_Dee(128).nom = "X3_t0"    ;tab_Dee(128).enu = X3;tab_Dee(128).posi_nom = nbenumddl + 128;
   
    tab_Dee(129).nom = "Masse_diago_noeud"    ;tab_Dee(129).enu = X1;tab_Dee(129).posi_nom = nbenumddl + 129;
    tab_Dee(130).nom = "comp_tors_reaction"    ;tab_Dee(130).enu = X1;tab_Dee(130).posi_nom = nbenumddl + 130;

    tab_Dee(131).nom = "I_B" ;     tab_Dee(131).enu = EPS11; tab_Dee(131).posi_nom = nbenumddl + 131;
    tab_Dee(132).nom = "II_B"  ;   tab_Dee(132).enu = EPS11; tab_Dee(132).posi_nom = nbenumddl + 132;
    tab_Dee(133).nom = "III_B"  ;  tab_Dee(133).enu = EPS11; tab_Dee(133).posi_nom = nbenumddl + 133;
    tab_Dee(134).nom = "J1" ;     tab_Dee(134).enu = EPS11; tab_Dee(134).posi_nom = nbenumddl + 134;
    tab_Dee(135).nom = "J2"  ;   tab_Dee(135).enu = EPS11; tab_Dee(135).posi_nom = nbenumddl + 135;
    tab_Dee(136).nom = "J3"  ;  tab_Dee(136).enu = EPS11; tab_Dee(136).posi_nom = nbenumddl + 136;

    tab_Dee(137).nom = "ERREUR_RELATIVE"  ;  tab_Dee(137).enu = ERREUR; tab_Dee(137).posi_nom = nbenumddl + 137;
    // initialisation de la map qui relie string et Ddl_enum_etendu
    for (int i=1; i<= Ddl_enum_etendu::taillTab; i++)
      Ddl_enum_etendu::map_Ddl_enum_etendu[tab_Dee(i).nom] = i; 
		
	   // cas de tableaux particuliers
	   Ddl_enum_etendu::tab_FN_FT.Change_taille(2);
	   Ddl_enum_etendu::tab_FN_FT(1) = tab_Dee(90);Ddl_enum_etendu::tab_FN_FT(2) = tab_Dee(91); 	
       
  }; 
// 3) initialisation réelle du tableau
Initialisation_tab_Dee Ddl_enum_etendu::init_tab_Dee;   

//======================== fin tableau tab_Dee ===============================

Ddl_enum_etendu::Ddl_enum_etendu(Enum_ddl en , string no ) :
         nom(no), enu(en)  
   {// vérification dans grandeurs
    if (nom != "-")
     { // cas 1: le nom est connu et différent d'un nom énuméré
       map < string, int , std::less < string> >::iterator ili=
                                          map_Ddl_enum_etendu.find(nom);
       if (ili != map_Ddl_enum_etendu.end())
          { *this =  tab_Dee((*ili).second);}
       else
        {// cas 2: le nom est égal à un type énuméré 
         if (ExisteEnum_ddl(no))
          { nom ="-"; enu = Id_nom_ddl(no); posi_nom = enu;}
         else   
          { cout << "\n erreur de construction d un  Ddl_enum_etendu !!"
                 << " le nom " << nom << " n'est pas connu ";
            cout << "\n Ddl_enum_etendu(Enum_ddl en = NU_DDL, string no = )";
            Sortie(1);
           }
         }  
      }
    else
      posi_nom = enu;              
    }; 
    
// constructeur fonction d'un string
Ddl_enum_etendu::Ddl_enum_etendu( string no ) :
   nom(no)
   {// vérification dans grandeurs
    if (nom != "-")
     { // cas 1: le nom est connu et différent d'un nom énuméré
       map < string, int , std::less < string> >::iterator ili=
                                          map_Ddl_enum_etendu.find(nom);
       if (ili != map_Ddl_enum_etendu.end())
          { *this =  tab_Dee((*ili).second);}
       else
        {// cas 2: le nom est égal à un type énuméré 
         if (ExisteEnum_ddl(no))
          { nom ="-"; enu = Id_nom_ddl(no); posi_nom = enu;} 
         else   
          { cout << "\n erreur de construction d un  Ddl_enum_etendu !!"
                 << " le nom " << nom << " n'est pas connu ";
            cout << "\n Ddl_enum_etendu(Enum_ddl en = NU_DDL, string no = )";
            Sortie(1);
           }
         }  
      }
    else
      { posi_nom = NbEnum_ddl();
        enu = NU_DDL;
       }               
    }; 
    
/*// constructeur fonction d'un tableau de caractère
Ddl_enum_etendu::Ddl_enum_etendu( char* no ) :
   nom(no)
   {// vérification dans grandeurs
    if (nom != "-")
     { bool verif = false; //int posi;
       // cas 1: le nom est connu et différent d'un nom énuméré
       map < string, int , std::less < string> >::iterator ili=
                                          map_Ddl_enum_etendu.find(nom);
       if (ili != map_Ddl_enum_etendu.end())
          { *this =  tab_Dee((*ili).second);}
       
//       for (int i=1;i<= taillTab;i++) 
//        if (tab_Dee(i).nom == nom)
//          { verif = true;posi = i; break;}
//       if (verif)
//          {posi_nom = NbEnum_ddl() + posi;enu=tab_Dee(posi).enu;} 

       else   
        {// cas 2: le nom est égal à un type énuméré 
         if (ExisteEnum_ddl(no))
          { nom ="-"; enu = Id_nom_ddl(no); posi_nom = enu;} 
         else   
          { cout << "\n erreur de construction d un  Ddl_enum_etendu !!"
                 << " le nom " << nom << " n'est pas connu ";
            cout << "\n Ddl_enum_etendu( char* no )";
            Sortie(1);
           }
         }  
      }
    else
      { posi_nom = NbEnum_ddl();
        enu = NU_DDL;
       }               
    }; */
     
// retour le type de grandeur auquel apartient le ddl étendue
// par exemple : UY : apartiend à un vecteur
// SIG12 : à un tenseur, TEMP : à un scalaire
EnumTypeGrandeur Ddl_enum_etendu::TypeDeGrandeur() const
 { int nbenumddl = NbEnum_ddl();
   if (nom=="-")
     {// cas d'un ddl pur
      return TypeGrandeur(enu);
      }
   else if (((posi_nom >=1+nbenumddl)&&(posi_nom<=24+nbenumddl)) ||
            ((posi_nom >=34+nbenumddl)&&(posi_nom<=39+nbenumddl)) ||
            ((posi_nom >=43+nbenumddl)&&(posi_nom<=72+nbenumddl)) ||
            ((posi_nom >=95+nbenumddl)&&(posi_nom<=106+nbenumddl)))
     {return TENSEURBB;}
   else if (((posi_nom >=92+nbenumddl)&&(posi_nom<=93+nbenumddl))||
            ((posi_nom >=111+nbenumddl)&&(posi_nom<=128+nbenumddl)))
     {return COORDONNEE;}
   else 
     {return SCALAIRE;};
  };

// test pour savoir si le nom passer en paramètre est valide
// ramène vrai si no correspond à un Enum_ddl  ou 
// s'il correspond à un type dérivé : ex contrainte de mise est un type
// dérivée de contrainte
bool Ddl_enum_etendu::VerifExistence(string rep)
  { // tout d'abord on vérifie pour les Enum_ddl
    if (ExisteEnum_ddl(rep)) return true;
    // maintenant vérification des types dérivées
    return ( map_Ddl_enum_etendu.find(rep) != map_Ddl_enum_etendu.end());
   };
   
// récupération d'un Ddl_enum_etendu correspondant à un string
Ddl_enum_etendu Ddl_enum_etendu::RecupDdl_enum_etendu(string rep)
  { // tout d'abord on balaie les Enum_ddl
    if (ExisteEnum_ddl(rep))
      { // recup du ddl 
        Enum_ddl en = Id_nom_ddl (rep);
        Ddl_enum_etendu a(en);
        // retour
        return a;
      };
    // sinon cas des types dérivées
    map < string, int , std::less < string> >::iterator ili=
                 map_Ddl_enum_etendu.find(rep);
    if (ili != map_Ddl_enum_etendu.end())
      { return tab_Dee((*ili).second);}
    else
      { cout << "\n erreur il n'existe pas de type de ddl etendue correspondant à "
             << rep << " !!!!!";
        cout << "\n Ddl_enum_etendu RecupDdl_enum_etendu(string rep)";
        Sortie(1);
      };

    // pour taire le compilo
    Ddl_enum_etendu a;       
    return a;  
   };

// transformation d'une liste d'Enum_ddl en Ddl_enum_etendu
List_io <Ddl_enum_etendu> Ddl_enum_etendu::TransfoList_io(const  List_io <Enum_ddl> &  li)
  { List_io <Ddl_enum_etendu> ret;
    List_io <Enum_ddl>::const_iterator ii,iifin= li.end();
    for (ii = li.begin();ii != iifin; ii++)
       ret.push_back(Ddl_enum_etendu(*ii));
    return ret;
   }     

// transformation d'un tableau d'énumération en un tableau de Ddl_enum_etendu
Tableau < Ddl_enum_etendu > Ddl_enum_etendu::TransfoTableau(const Tableau <Enum_ddl> & tab)
    { int taille = tab.Taille();
      Tableau < Ddl_enum_etendu > taa(taille);
      for (int i=1;i<= taille;i++)
        taa(i) = Ddl_enum_etendu(tab(i));
      return taa;
     };   
      
// test si un élément existe dans une liste donnée
bool Ddl_enum_etendu::Existe_dans_la_liste
           (const List_io <Ddl_enum_etendu> & lis, const Ddl_enum_etendu& dd) 
 { List_io < Ddl_enum_etendu>::const_iterator retour_existe =
   find(lis.begin(),lis.end(),dd);
   if (retour_existe != lis.end())
      return true;
   else // 
   return false;   
 };               


// récupération du premier Ddl_enum_etendu du même type : i.e. la première composante
Ddl_enum_etendu Ddl_enum_etendu::PremierDdlEnumEtenduFamille(const Ddl_enum_etendu& a)
 { int nbenumddl = NbEnum_ddl();
   if (a.nom=="-")
     {// cas d'un ddl pur
      return Ddl_enum_etendu(PremierDdlFamille(a.Enum()),"-");
     }
   else
    {int posi = a.posi_nom - nbenumddl;
     if (posi < 7)
      return Ddl_enum_etendu(EPS11,"Green-Lagrange11");
     else if (posi < 13)
      return Ddl_enum_etendu(EPS11,"Almansi11");
     else if (posi < 19)
      return Ddl_enum_etendu(SIG11,"Cauchy_local11");
     else if (posi < 25)
      return Ddl_enum_etendu(SIG11,"Almansi_local11");
     else if (posi < 34) // scalaire idem
      return Ddl_enum_etendu(a);
     else if (posi < 40)
      return Ddl_enum_etendu(DEPS11,"Vit_def11");
     else if (posi < 43)
      return Ddl_enum_etendu(a);
     else if (posi < 49)
      return Ddl_enum_etendu(EPS11,"Delta_def11");
     else if (posi < 55)
      return Ddl_enum_etendu(EPS11,"logarithmique11");
     else if (posi < 61)
      return Ddl_enum_etendu(EPS11,"Almansi_totale11");
     else if (posi < 67)
      return Ddl_enum_etendu(EPS11,"Green_Lagrange_totale11");
     else if (posi < 73)
      return Ddl_enum_etendu(EPS11,"logarithmique_totale11");

     else if (posi < 95)
      return Ddl_enum_etendu(a);
     
     else if (posi < 101)
      return Ddl_enum_etendu(SIG11,"N_11");
     
     else if (posi < 107)
      return Ddl_enum_etendu(SIG11,"M_11");
     
     else if (posi < 111)
      return Ddl_enum_etendu(a);
     
     else if (posi < 114)
      return Ddl_enum_etendu(GRADT1,"DeltagradT1");
     else if (posi < 117)
      return Ddl_enum_etendu(X1,"N_surf_1");
     else if (posi < 120)
      return Ddl_enum_etendu(X1,"N_surf_1_t");
     else if (posi < 123)
      return Ddl_enum_etendu(X1,"N_surf_1_t0");
     else if (posi < 126)
      return Ddl_enum_etendu(X1,"X1_t");
     else if (posi < 129)
      return Ddl_enum_etendu(X1,"X1_t0");
     else if (posi < 138)
      return Ddl_enum_etendu(a);
     else
       {cout << "\n *** erreur *** cas non prevu " << a
             << "\n Ddl_enum_etendu::PremierDdlEnumEtenduFamille(..."
             << endl;
        Sortie(1);
       };
    };
  };


// création et récupération d'une liste d'enum de grandeurs quelconques équivalentes
// sous forme de grandeurs évoluées, à la liste de Ddl_enum_etendu passée en argument
// et d'une liste de ddl_enum_etendu, pour les grandeurs qui n'ont pas d'équivalent
// retourne également true ou false suivant que toutes les grandeurs ont un équivalent ou pas
void Ddl_enum_etendu::Equivalent_en_grandeur_quelconque
                     (const list <Ddl_enum_etendu> & list_enu_etendu
                      , list <EnumTypeQuelconque> & list_enu_quelconque
                      , list <Ddl_enum_etendu> & list_enu_restant)
 { // on vide les listes de retour
   list_enu_quelconque.clear();
   list_enu_restant.clear();
   // on balaie la list des énu
   list <Ddl_enum_etendu>::const_iterator ie,iefin=list_enu_etendu.end();
   for (ie=list_enu_etendu.begin();ie!=iefin;ie++)
     { // on traite d'abord le cas des ddl pur
       if ((*ie).Position() <= NbEnum_ddl())
        {EnumTypeQuelconque enu_quelc = Equi_Enum_ddl_en_enu_quelconque((*ie).Enum());
         if (enu_quelc ==UN_DDL_ENUM_ETENDUE)
          list_enu_restant.push_back((*ie));
         else list_enu_quelconque.push_back(enu_quelc);
        }
       else // sinon c'est un cas évolué
        {int posi = (*ie).Position();
         switch (posi)
          { case 1: case 2: case 3: case 4: case 5: case 6:
              {list_enu_quelconque.push_back(GREEN_LAGRANGE); break;}
            case 7: case 8: case 9: case 10: case 11: case 12:
              {list_enu_quelconque.push_back(ALMANSI); break;}
            case 25: case 26: case 27:
              {list_enu_quelconque.push_back(DEF_PRINCIPALES); break;}
            case 28: case 29: case 30:
              {list_enu_quelconque.push_back(SIGMA_PRINCIPALES); break;}
            case 31: {list_enu_quelconque.push_back(CONTRAINTE_MISES); break;}
            case 32: {list_enu_quelconque.push_back(CONTRAINTE_TRESCA); break;}
            case 34:case 35:case 36:case 37:case 38:case 39:
            {list_enu_quelconque.push_back(VITESSE_DEFORMATION_COURANTE); break;}
            case 40: case 41: case 42:
              {list_enu_quelconque.push_back(VIT_PRINCIPALES); break;}
            case 43:case 44:case 45:case 46:case 47:case 48:
            {list_enu_quelconque.push_back(DELTA_DEF); break;}
           case 49: case 50: case 51: case 52: case 53: case 54:
              {list_enu_quelconque.push_back(LOGARITHMIQUE); break;}
            case 55: case 56: case 57: case 58: case 59: case 60:
              {list_enu_quelconque.push_back(ALMANSI_TOTAL);
               break;
              }
            case 61: case 62: case 63: case 64: case 65: case 66:
              {list_enu_quelconque.push_back( GREEN_LAGRANGE_TOTAL);
                break;
              }
            case 67: case 68: case 69: case 70: case 71: case 72:
              {list_enu_quelconque.push_back(LOGARITHMIQUE_TOTALE);
                break;
              }
           case 77: {list_enu_quelconque.push_back(DEF_DUALE_MISES); break;}
           case 78: {list_enu_quelconque.push_back(SPHERIQUE_EPS); break;}
           case 79: {list_enu_quelconque.push_back(Q_EPS); break;}
           case 80: {list_enu_quelconque.push_back(COS3PHI_EPS); break;}
           case 81: {list_enu_quelconque.push_back(SPHERIQUE_SIG); break;}
           case 82: {list_enu_quelconque.push_back(Q_SIG); break;}
           case 83: {list_enu_quelconque.push_back(COS3PHI_SIG); break;}
           case 84: {list_enu_quelconque.push_back(SPHERIQUE_DEPS); break;}
           case 85: {list_enu_quelconque.push_back(Q_DEPS); break;}
           case 86: {list_enu_quelconque.push_back(COS3PHI_DEPS); break;}
           case 114: case 115: case 116: // le vecteur normal au temps t+dt
              {list_enu_quelconque.push_back( NN_SURF); break;}
           case 117: case 118: case 119: // le vecteur normal au temps t
              {list_enu_quelconque.push_back( NN_SURF_t); break;}
           case 120: case 121: case 122: // le vecteur normal au temps t0
              {list_enu_quelconque.push_back( NN_SURF_t0); break;}
           case 123: case 124: case 125: // la position à t
              {list_enu_quelconque.push_back( POSITION_GEOMETRIQUE_t); break;}
           case 126: case 127: case 128: // la position à t0
              {list_enu_quelconque.push_back( POSITION_GEOMETRIQUE_t0); break;}
           case 130:
              {list_enu_quelconque.push_back(COMP_TORSEUR_REACTION); break;}

           case 131:
              {list_enu_quelconque.push_back(INVAR_B1); break;}
           case 132:
              {list_enu_quelconque.push_back(INVAR_B2); break;}
           case 133:
              {list_enu_quelconque.push_back(INVAR_B3); break;}
           case 134:
              {list_enu_quelconque.push_back(INVAR_J1); break;}
           case 135:
              {list_enu_quelconque.push_back(INVAR_J2); break;}
           case 136:
              {list_enu_quelconque.push_back(INVAR_J3); break;}
           case 137:
              {list_enu_quelconque.push_back(ERREUR_SIG_RELATIVE); break;}

           default: // sinon on le stock en ddl_étendu
              list_enu_restant.push_back((*ie));break;
          };// fin du switch
       }; // fin du test: if ((*ie).Position() <= NbEnum_ddl())
    }; // fin de la boucle sur les ddl étendues de départ
 };

// idem mais pour une seule grandeur: ramène l'énum quelconque s'il existe sinon
// ramène RIEN_TYPEQUELCONQUE
EnumTypeQuelconque Ddl_enum_etendu::Equivalent_en_grandeur_quelconque(const Ddl_enum_etendu & enu_etendu)
 {  EnumTypeQuelconque en_tQ = RIEN_TYPEQUELCONQUE; // init par défaut
    // on traite d'abord le cas des ddl pur
    if (enu_etendu.Position() <= NbEnum_ddl())
     {EnumTypeQuelconque enu_quelc = Equi_Enum_ddl_en_enu_quelconque(enu_etendu.Enum());
      if (enu_quelc ==UN_DDL_ENUM_ETENDUE)
       en_tQ = RIEN_TYPEQUELCONQUE;
      else en_tQ = enu_quelc;
     }
    else // sinon c'est un cas évolué
        {int posi = enu_etendu.Position()-NbEnum_ddl();
         switch (posi)
          { case 1: case 2: case 3: case 4: case 5: case 6:
              {en_tQ = GREEN_LAGRANGE; break;}
            case 7: case 8: case 9: case 10: case 11: case 12:
              {en_tQ = ALMANSI; break;}
            case 25: case 26: case 27:
              {en_tQ = DEF_PRINCIPALES; break;}
            case 28: case 29: case 30:
              {en_tQ = SIGMA_PRINCIPALES; break;}
            case 31: {en_tQ = CONTRAINTE_MISES; break;}
            case 32: {en_tQ = CONTRAINTE_TRESCA; break;}
            case 34:case 35:case 36:case 37:case 38:case 39:
              {en_tQ = VITESSE_DEFORMATION_COURANTE; break;}
            case 40: case 41: case 42:
              {en_tQ = VIT_PRINCIPALES; break;}
            case 43:case 44:case 45:case 46:case 47:case 48:
              {en_tQ = DELTA_DEF; break;}
            case 49: case 50: case 51: case 52: case 53: case 54:
              {en_tQ = LOGARITHMIQUE; break;}
            case 55: case 56: case 57: case 58: case 59: case 60:
              {en_tQ = ALMANSI_TOTAL;break;
              }
            case 61: case 62: case 63: case 64: case 65: case 66:
              {en_tQ =  GREEN_LAGRANGE_TOTAL;break;
              }
            case 67: case 68: case 69: case 70: case 71: case 72:
              {en_tQ = LOGARITHMIQUE_TOTALE;break;
              }
            case 77: {en_tQ = DEF_DUALE_MISES; break;}
            case 78: {en_tQ = SPHERIQUE_EPS; break;}
            case 79: {en_tQ = Q_EPS; break;}
            case 80: {en_tQ = COS3PHI_EPS; break;}
            case 81: {en_tQ = SPHERIQUE_SIG; break;}
            case 82: {en_tQ = Q_SIG; break;}
            case 83: {en_tQ = COS3PHI_SIG; break;}
            case 84: {en_tQ = SPHERIQUE_DEPS; break;}
            case 85: {en_tQ = Q_DEPS; break;}
            case 86: {en_tQ = COS3PHI_DEPS; break;}
            case 114: case 115: case 116: // le vecteur normal
               {en_tQ =  NN_SURF; break;}
            case 117: case 118: case 119: // le vecteur normal au temps t
               {en_tQ =   NN_SURF_t; break;}
           case 120: case 121: case 122: // le vecteur normal au temps t0
               {en_tQ =   NN_SURF_t0; break;}
           case 123: case 124: case 125: // la position à t
               {en_tQ =   POSITION_GEOMETRIQUE_t; break;}
           case 126: case 127: case 128: // la position à t0
               {en_tQ =   POSITION_GEOMETRIQUE_t0; break;}
           case 130:
               {en_tQ = COMP_TORSEUR_REACTION; break;}
            
           case 131:
              {en_tQ = INVAR_B1; break;}
           case 132:
              {en_tQ = INVAR_B2; break;}
           case 133:
              {en_tQ = INVAR_B3; break;}
           case 134:
              {en_tQ = INVAR_J1; break;}
           case 135:
              {en_tQ = INVAR_J2; break;}
           case 136:
              {en_tQ = INVAR_J3; break;}
           case 137:
              {en_tQ = ERREUR_SIG_RELATIVE; break;}

           default: // sinon on le stock en ddl_étendu
               en_tQ = RIEN_TYPEQUELCONQUE;break;
          };// fin du switch
       }; // fin du test: if (enu_etendu.Position() <= NbEnum_ddl())
      // retour
      return en_tQ;
 };

      





