$$$$ POSTDDI
* POSTDDI   PROCEDUR  CHAT      96/08/05    21:25:23     2238           
'DEBPROC' POSTDDI tab*TABLE tabmat*TABLE geo*MAILLAGE
periode*FLOTTANT nperi*ENTIER idebu*ENTIER;
*
****************************************************************
*                                                              *
* Calcul du mombre de cycles à rupture sur un ou plusieurs     *
* cycles stabilises                                            *
*                                                              *
* Entrées :                                                    *
* ---------                                                    *
*    tab :    TABLE en sortie de PASAPAS                       *
*    tabmat : Parametres des lois d'endommagement              *
*    geo :    Partie du maillage sur laquelle on effectue le   *
*             calcul                                           *
*    periode: Periode du chargement                            *
*    nperi :  Nombre de periodes sur lesquelles on calcule le  *
*             nombre de cycles à rupture                       *
*    idebu :  Numero de la premiere periode de calcul          *
*                                                              *
* Sorties :                                                    *
* ---------                                                    *
*     nf :    table indicee par les numeros de periodes        *
*             contenant les nombres de cycles à rupture en     *
*             fatigue seule (champs par element)               *
*     nc :    table indicee par les numeros de periodes        *
*             contenant les nombres de cycles à rupture en     *
*             fluage seule (champs par element)                *
*     nr :    table (par periode) des nombres de cycles a      *
*             rupture (entiers)                                *
*     dfin :  table indicee par les numeros de periodes        *
*             contenant les dommages finaux (champs par        *
*             element)                                         *
****************************************************************
*
mat0 = 'REDU' (tab .'CARACTERISTIQUES') geo  ;
mod0 = 'REDU'  (tab .'MODELE') geo  ;
t0   = tab .'TEMPS' ;
sig0 = tab.'CONTRAINTES';
var0 = tab.'VARIABLES_INTERNES';
nf = TABLE;
nc = TABLE;
nr = TABLE;
dfin = TABLE;
*
* Donnees materiau
* ----------------
petita = tabmat.'PETITA';
b      = tabmat.'B';
c      = tabmat.'C';
sigu   = tabmat.'SIGU';
sigl   = tabmat.'SIGL';
m      = tabmat.'M';
alpha  = tabmat.'ALPHA';
beta   = tabmat.'BETA';
granda = tabmat.'GRANDA';
k      = tabmat.'K';
r      = tabmat.'R';
*
* MCHAML constants
* ----------------
chun   =  'MANU' 'CHML' mod0 'SCAL' 1.   'STRESSES' TYPE 'SCALAIRE';
chsigl =  'MANU' 'CHML' mod0 'SCAL' sigl 'STRESSES' TYPE 'SCALAIRE';
chsigu =  'MANU' 'CHML' mod0 'SCAL' sigu 'STRESSES' TYPE 'SCALAIRE';
*
* Reperage des indices
* --------------------
ideb1=idebu-1;
nbtemps=(dime t0) - 1;
tabdime=TABLE ;
i0=1;
*
'REPETER' bloc0 (nperi+ideb1);
dimperi = 0;
iperi=&bloc0;
'REPETER' bloc1 nbtemps;
t1=t0.i0;
'SI' (t1 '>' (iperi*periode));
'QUIT' bloc1;
'FINSI';
dimperi=dimperi+1;
i0=i0+1;
'SI' (i0 '>' nbtemps);
'QUIT' bloc1;
'FINSI';
'FIN' bloc1;
tabdime.iperi=dimperi;
'FIN' bloc0;
*
indicini=1;
'REPETER' bloc01 ideb1;
indicini=indicini+(tabdime.(&bloc01));
'FIN' bloc01;
*
* Calcul des grandeurs caracteristiques du cycle en fatigue
* ---------------------------------------------------------
sigb=TABLE;
sigm=TABLE;
deltasig=TABLE;
i0 = indicini;

'REPETER' bloc2 nperi;

dimperi=tabdime.((&bloc2)+ideb1);
sumsig = 'ZERO' mod0 'CONTRAIN';
sigmax = 'ZERO' mod0 'STRESSES';

'REPETER' bloc3 dimperi;
  sig1='REDU' (sig0.i0) geo;
  sumsig=sumsig+sig1;
  j2 = 'VMIS' mod0 sig1;
  sigmax=( ('ABS' (sigmax-j2)) + ('ABS' (sigmax+j2)) )/2.;
  i0=i0+1;
'FIN' bloc3;

sumsig=sumsig/dimperi;
j2 = 'VMIS' mod0 sumsig;
sigb.(&bloc2)=j2;
sigm.(&bloc2)=sigmax;
deltasig.(&bloc2)=sigmax-j2;

'FIN' bloc2;

t1 = t0.indicini;
chi = postddi1 (var0.indicini) alpha mod0;
dc1 = (chi/granda)**r;
i0 = indicini+1;

'REPETER' bloc4 nperi;
*
* Dommage de fatigue
* ------------------
iperi = (&bloc4);
m0 = m*(chun-(c*(sigb.iperi)));
sigfat = (sigm.iperi - chsigl)*((chsigu-sigm.iperi)**(-1));
alph1 = petita*(sigfat+(abs(sigfat)))/2.;
msqalph = alph1 masq 'EGINFE' 1.E-8;
alph1 = alph1+(msqalph*1.e-8);
tmp = (deltasig.iperi)*(m0**(-1));
df = alph1*(beta+1)*(tmp**beta);
msqfat = (df 'MASQ' 'EGINFE' 1.E-12)*1.e-12;
df=df+msqfat;
nf.iperi = df**(-1);
*
* Dommage de fluage
* -----------------
dimperi = tabdime.(iperi+ideb1);
integ1 = 'ZERO' mod0 'STRESSES';
'REPETER' bloc5 dimperi;
var1 = var0.i0;
chi = postddi1 var1 alpha mod0;
dc2 = (chi/granda)**r;
t2 = t0.i0;
dt = t2 - t1;
integ1 = integ1 + ( (dc1+dc2)*dt/2.);
dc1 = dc2;
t1 = t2;
i0 = i0+1;
'SI' (i0 '>' nbtemps);
'QUIT' bloc5;
'FINSI';
'FIN' bloc5;
dc = (k+1)*integ1;
msqflu = dc 'MASQ' 'EGINFE' 1.E-12;
dc=dc+(msqflu*1.e-12);
nc.iperi = dc**(-1);
*
* Cumul
* -----
d0 = chun;
d1 = chun;
d2 = chun;
nsim = 0;
'REPETER' bloc6;
A = d0**(k+1.); B = A -dc; detr A; d1=B **(1./(k+1));detr B;
*d1 = ( d0**(k+1.) - dc )**(1./(k+1));

**** NB: d1 = 1 - D1, d2= 1 - D2
A = d1**(beta+1);B = chun  - A; detr A; CE='LOG' B; detr B;
A=alph1 * CE; detr CE; tmp = 'EXP' A; detr A;
*tmp = 'EXP' ( alph1 * ('LOG' ( (chun - (d1**(beta+1)) ) ) ) );

A=df + tmp; B= 'LOG' A; detr A;CE = (alph1**(-1.)); 
AC = CE * B; detr CE; detr B; tmp2='EXP' AC; detr AC;
*tmp2 = 'EXP' ( (alph1**(-1.)) * ('LOG' (df + tmp) ) );

A = chun - tmp2; d2=A **(1./(beta+1.)); detr A;
*d2 = (chun - tmp2) ** (1./(beta+1.)) ;

A=chun-msqalph; B=A * d2;detr A; detr d2;
A=msqalph*d1; d2 = A + B; detr A; detr B;
*d2 = msqalph*d1+((chun-msqalph)*d2);

'SI' ( (('MINI' d2) '<EG' 1.e-12) 'OU' ((&bloc6) '>' 1e8) );
'QUIT' bloc6;
'FINSI';
nsim = nsim+1;
d0 = d2;
'FIN' bloc6;
nr . (iperi) = nsim;
dfin.(iperi) = chun-d2;
'FIN' bloc4;
'FINPROC' nf nc nr dfin;
