$$$$ G_ULTI2D
* G_ULTI2D  PROCEDUR  AF221230  16/11/03    21:15:04     9139           
'DEBPROC' G_ULTI2D TAB1*'TABLE';
* --------------------------------------------------------
*  Procedure G_ULTI2D
*    fonction pour la determination de la position de l'etat de contrainte S
*    actuel par rapport à la surface limite pour les trois couches 
*    (externe, interne et intermediaire) selon le modele de MARTI 
*    (voir EFFMERTI). la procedure donne en sortie la
*    valeur de controle VAL1. Si VAL1<0. S est en dehors du domaine ultime
*                                VAL1>0. S est à l'intérieur du domaine ultime
*   
*    VAL1 = G_ULTI2D TAB1;
*
*    En entree on utilise une table TAB1. Un indice de la table TAB1
*    indique si la definition de la surface limite doit etre faite pour 
*    la couche extrene, interne ou intermediaire:
*
*    TAB1.'TYPE_COUCHE'         MOT pour indiquer le type de couche
*                                 'COUCHE_EXT'  couche externe
*                                 'COUCHE_INT'  couche interne
*                                 'COUCHE_COR'  couche intermediaire
*
*    1er option:  TAB1.'TYPE_COUCHE' = 'COUCHE_EXT'  (couche externe)
*             ou  TAB1.'TYPE_COUCHE' = 'COUCHE_INT'  (couche interne)
*
*        TAB1.'S11'     Contrainte sigma_11 [FLOTTANT]
*            .'S22'     Contrainte sigma_22 [FLOTTANT]
*            .'S12'     Contrainte sigma_12 [FLOTTANT]
*            .'FCK'     Resistence caracteristiques du beton [FLOTTANT]
*            .'FSK_1'   Resis. caract. de l'acier direction x [FLOTTANT]
*            .'FSK_2'   Resis. caract. de l'acier direction y [FLOTTANT]
*            .'RHO_1'   taux d'acier direction x [FLOTTANT]
*            .'RHO_2'   taux d'acier direction y [FLOTTANT]
*            .'GAMMA_C' coefficient gamma_c
*            .'ALPA_C'  coefficient alpha 
*            .'NU_C'    coefficient nu
*            .'GAMMA_S' coefficient gamma_s
*
*
*    2er option:  TAB1.'TYPE_COUCHE' = 'COUCHE_COR'  (couche interm.)
*
*        TAB1.'T1'      Contrainte sigma_11 [FLOTTANT]
*            .'T2'      Contrainte sigma_22 [FLOTTANT]
*            .'FCK'     Resistence caracteristique du beton [FLOTTANT]
*            .'FSK_T'   Resis. caract. de l'acier direction x [FLOTTANT]
*            .'RHO_T   taux d'acier direction x [FLOTTANT]
*            .'GAMMA_C' coefficient gamma_c
*            .'ALPA_C'  coefficient alpha 
*            .'NU_C'    coefficient nu
*            .'GAMMA_S'     coefficient gamma_s
*            .'COT_THETA'   cotg(theta) - facteur cisaillement[FLOTTANT]
*
*
*  Develeppers:
*    Alberto FRAU
*    DEN/DANS/DM2S/SEMT/EMSI
*    Nicolas ILE
*    DEN/DANS/DM2S/SEMT/EMSI
*
* --------------------------------------------------------
*
* Type of surface
'SI' ('EXIST' TAB1 'TYPE_COUCHE');
  TPY1 = TAB1.'TYPE_COUCHE';
  'SI' ('NEG' ('TYPE' TPY1) 'MOT');
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
'SINON';
  'MESS' 'Input Error ...';
  'QUIT' G_ULTI2D;
'FINSI';
*
*
'SI' (('EGA' TPY1 'COUCHE_INT') 'OU' ('EGA' TPY1 'COUCHE_EXT'));
*
* ------------  Surface ultime pour les couches externes et ---------
* ------------  interne du modele de MARTI -------------------------
*
* controle
  'SI' ('EXIST' TAB1 'S11');
    X1 = TAB1.'S11';
    'SI' ('NEG' ('TYPE' X1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'S22');
    Y1 = TAB1.'S22';
    'SI' ('NEG' ('TYPE' Y1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'S12');
    Z1 = TAB1.'S12';
    'SI' ('NEG' ('TYPE' Z1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'FCK');
    FC1 = TAB1.'FCK';
    'SI' ('NEG' ('TYPE' FC1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'FSK_1');
    FSX = TAB1.'FSK_1';
    'SI' ('NEG' ('TYPE' FSX) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'FSK_2');
    FSY = TAB1.'FSK_2';
    'SI' ('NEG' ('TYPE' FSY) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'RHO_1');
    RSX = TAB1.'RHO_1';
    'SI' ('NEG' ('TYPE' RSX) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'RHO_2');
    RSY = TAB1.'RHO_2';
    'SI' ('NEG' ('TYPE' RSY) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'GAMMA_C');
    GAMC = TAB1.'GAMMA_C';
    'SI' ('NEG' ('TYPE' GAMC) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'ALPA_C');
    ALP1 = TAB1.'ALPA_C';
    'SI' ('NEG' ('TYPE' ALP1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'NU_C');
    NU1 = TAB1.'NU_C';
    'SI' ('NEG' ('TYPE' NU1) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
  'SI' ('EXIST' TAB1 'GAMMA_S');
    GAMS = TAB1.'GAMMA_S';
    'SI' ('NEG' ('TYPE' GAMS) 'FLOTTANT');
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
  'SINON';
    'MESS' 'Input Error ...';
    'QUIT' G_ULTI2D;
  'FINSI';
*
* Determination of resistances (Steel and concrete)
  FXS = ((FSX)*(RSX))/(GAMS);
  FYS = ((FSY)*(RSY))/(GAMS);
  FC = ((ALP1)*((FC1)/(GAMC)));
  FC = FC*NU1;
*
  VAL1 = -10000.;
*
*
****************************************************************
*  Domain 1
****************************************************************
*
  'SI' ((X1 '<EG' (FXS)) 'ET'
      (X1 '>EG' (FXS - FC)) 'ET'
      (Y1 '<EG' (FYS)) 'ET'
      (Y1 '>' (FYS - FC)) 'ET'
      ((X1 + Y1 - FXS - FYS + FC) '>EG' 0.0));
*
      VAL1 = ((FXS - X1)*(FYS - Y1)) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 2
****************************************************************
*
  'SI' ((X1 '<EG' (FXS - (0.5*FC))) 'ET'
      (X1 '>EG' ((-1.0)*(FXS + FC))) 'ET'
      (Y1 '>EG' (FYS - (0.5*FC))) 'ET'
      (Y1 '<EG' (FYS)) 'ET'
      ((X1 + Y1 - FXS - FYS + FC) '<' 0.0) 'ET'
      ((X1 + Y1 + FXS - FYS + FC) '>EG' 0.0));
*
      VAL1 = ((FC - FYS + Y1)*(FYS - Y1)) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 3
****************************************************************
*
  'SI' ((X1 '<EG' (FXS)) 'ET'
      (X1 '>' (FXS - (0.5*FC))) 'ET'
      (Y1 '>EG' ((-1.0)*(FYS + FC))) 'ET'
      (Y1 '<EG' (FYS - (0.5*FC))) 'ET'
      ((X1 + Y1 - FXS - FYS + FC) '<' 0.0) 'ET'
       ((X1 + Y1 - FXS + FYS + FC) '>EG' 0.0));
*
      VAL1 = ((FXS - X1)*(FC - FXS + X1)) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 4
****************************************************************
*
  'SI' ((X1 '<' (FXS - (0.5*FC))) 'ET'
      (X1 '>EG' ((-1.0)*(FXS + (0.5*FC)))) 'ET'
      (Y1 '<' (FYS - (0.5*FC))) 'ET'
      (Y1 '>EG' ((-1.0)*(FYS + (0.5*FC)))));
*
      VAL1 = (((FC)*(FC))/(4.0)) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 5
****************************************************************
*
  'SI' ((X1 '<' ((-1.0)*(FXS + (0.5*FC)))) 'ET'
      (X1 '>EG' ((-1.0)*(FXS + (FC)))) 'ET'
      (Y1 '>EG' ((-1.0)*(FYS + FC))) 'ET'
      (Y1 '<EG' FYS) 'ET'
      ((X1 + Y1 + FXS - FYS + FC) '<' 0.0) 'ET'
     ((X1 + Y1 + FXS + FYS + FC) '>EG' 0.0));
*
      VAL1 = ((-1.0)*((FXS + X1)*(FC + FXS + X1))) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 6
****************************************************************
*
  'SI' ((X1 '<EG' FXS) 'ET'
      (X1 '>EG' ((-1.0)*(FXS + (0.5*FC)))) 'ET'
      (Y1 '<' ((-1.0)*(FYS + (0.5*FC)))) 'ET'
      (Y1 '>EG' ((-1.0)*(FYS + (FC)))) 'ET'
      ((X1 + Y1 - FXS + FYS + FC) '<' 0.0) 'ET'
      ((X1 + Y1 + FXS + FYS + FC) '>EG' 0.0));
*
      VAL1 = ((-1.0)*((FYS + Y1)*(FC + FYS + Y1))) - ((Z1)*(Z1));
*
  'FINSI';
*
****************************************************************
*  Domain 7
****************************************************************
*
  'SI' ((X1 '<EG' ((1.0)*(FXS))) 'ET'
      (X1 '>EG' ((-1.0)*(FXS + (FC)))) 'ET'
      (Y1 '>EG' ((-1.0)*(FYS + (FC)))) 'ET'
      (Y1 '<EG' ((1.0)*(FYS))) 'ET'
       ((X1 + Y1 + FXS + FYS + FC) '<' 0.0));
*
      VAL1 = ((FC + FXS + X1)*(FC + FYS + Y1)) - ((Z1)*(Z1));
*
  'FINSI';
*
'SINON';
  'SI' (('EGA' TPY1 'COUCHE_COR'));
*
* ------------  Surface ultime pour la couches externes et ----
* ------------  interne du modele de MARTI -------------------------
*
*   controle
    'SI' ('EXIST' TAB1 'T1');
      X1 = TAB1.'T1';
      'SI' ('NEG' ('TYPE' X1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'T2');
      Y1 = TAB1.'T2';
      'SI' ('NEG' ('TYPE' Y1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'FCK');
      FC1 = TAB1.'FCK';
      'SI' ('NEG' ('TYPE' FC1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'FSK_T');
      FST = TAB1.'FSK_T';
      'SI' ('NEG' ('TYPE' FST) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'RHO_T');
      RST = TAB1.'RHO_T';
      'SI' ('NEG' ('TYPE' RST) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'GAMMA_C');
      GAMC = TAB1.'GAMMA_C';
      'SI' ('NEG' ('TYPE' GAMC) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'ALPA_C');
      ALP1 = TAB1.'ALPA_C';
      'SI' ('NEG' ('TYPE' ALP1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'GAMMA_S');
      GAMS = TAB1.'GAMMA_S';
      'SI' ('NEG' ('TYPE' GAMS) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'NU_C');
      NU1 = TAB1.'NU_C';
      'SI' ('NEG' ('TYPE' NU1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
    'SI' ('EXIST' TAB1 'COT_THETA');
      COTH1 = TAB1.'COT_THETA';
      'SI' ('NEG' ('TYPE' COTH1) 'FLOTTANT');
        'MESS' 'Input Error ...';
        'QUIT' G_ULTI2D;
      'FINSI';
    'SINON';
      'MESS' 'Input Error ...';
      'QUIT' G_ULTI2D;
    'FINSI';
*
*   
    'SI' (RST > 0.0);
      FC = ((ALP1)*((FC1)/(GAMC)));
      FGA = ((((FST)*(RST))/(GAMS)))*(COTH1);
      FGB = (((1.0)*(NU1))*(FC))/(COTH1 + ((1.0)/(COTH1)));
      FG1 = 'MINI' ('PROG' FGA FGB);
    'SINON';
      'SI' (FC1 < 1.e6);
        FG1 = ((0.35)/(GAMC))*((((FC1)/(10.0)))**(0.5));
        FG1 = ((FG1)*(10.0));
      'SINON';
        FG1 = ((0.35)/(GAMC))*(((FC1)/(1.E6))**(0.5));
        FG1 = ((FG1)*(1.E6));
      'FINSI';
    'FINSI';
*
    VAL1 = ((FG1)*(FG1)) - ((X1*X1)) - ((Y1*Y1));
  'FINSI';
'FINSI';
*
'FINPROC' VAL1;
