* @RCCM PROCEDUR FANDEUR 14/10/10 21:15:01 8178
* ----------------------------------------------------------------------
****** PROCEDURE @RCCM ******
* ----------------------------------------------------------------------
*
* CETTE PROCEDURE PERMET D'EFFECTUER UN DEPOUILLEMENT RCCM :
* - linearisations de coupes
* - variations d'etats
* - fatigue
*
* ----------------------------------------------------------------------
*
* LES DONNEES SONT :
* ----> la table de definition des coupes
* ----> la table de definition des etats
* ----> la table de definition des groupes de transitoires
* ----> la table pour le calcul a la fatigue
*
* EN SORTIE :
* ----> impression des resultats
*
* ----------------------------------------------------------------------
* PAR Joseph MANNINO
* ----------------------------------------------------------------------
* ======================================================================
* initialisations
* ======================================================================
MESSAGE ' ' ;
MESSAGE '***** DEBUT DU CALCUL RCCM *****' ;
MESSAGE '--------------------------------' ;
MESSAGE ' ' ;
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* formation de la table des etats (la table des etats
* thermomecaniques doit etre complete ; la table des etats thermiques
* peut etre incomplete ou vide, elle est alors completee ici)
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FLEXT = VRAI ;
SI (NON (EXISTE TABET M)) ;
MESSAGE 'LA TABLE DES ETATS THERMOMECANIQUES NE CONVIENT PAS' ;
FINSI ;
SI (NETM EGA 0) ;
MESSAGE 'LA TABLE DES ETATS THERMOMECANIQUES NE CONVIENT PAS' ;
FINSI ;
REPETER BOUCLE (NETM) ;
I = &BOUCLE ;
SI (NON (EXISTE (TABET.M) I)) ;
MESSAGE 'LA TABLE DES ETATS THERMOMECANIQUES NE CONVIENT PAS' ;
FINSI ;
FIN BOUCLE ;
SI (NON (EXISTE TABET T)) ;
FLEXT = FAUX ;
FINSI ;
SI (EXISTE TABET T) ;
INDT = INDEX (TABET.T) ;
J = &BOUCLE ;
K = INDT.J ;
SI ((K > NETM) OU (K < 1)) ;
MESSAGE 'LA TABLE DES ETATS THERMIQUES NE CONVIENT PAS' ;
FINSI ;
FIN BOUCLE ;
FINSI ;
FINSI ;
TABETAT = TABLE ;
REPETER BOUCLE (NETM) ;
I = &BOUCLE ;
TABETAT.I = TABET.M.I ;
FIN BOUCLE ;
REPETER BOUCLE (NETM) ;
I = &BOUCLE ;
J = I + NETM ;
SI (FLEXT) ;
SI (EXISTE (TABET.T) I) ;
TABETAT.J = TABET.T.I ;
SINON ;
TABETAT.J = (TABETAT.I) * 0. ;
FINSI ;
FINSI ;
FIN BOUCLE ;
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* formation de la table des groupes (la table des groupes thermiques
* est formee a partir des groupes thermomecaniques) :
* - 1 : groupe thermomecanique
* - 2 : groupe thermique permettant d'exclure la flexion thermique
* reorganisation de la table des groupes :
* - l'etat 0 est mis a la fin
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
L = 1 ;
M = 2 ;
SI ( EXISTE TABGROU ) ;
TABGROU.M = TABLE ;
SI ( NGROUPTM EGA 0 ) ;
MESSAGE 'LES LISTES DES GROUPES NE CONVIENNENT PAS' ;
FINSI ;
REPETER BOUCLE1 (NGROUPTM) ;
I = &BOUCLE1 ;
LETAT1 = TABGROU.L.I ;
J = &BOUCLE2 ;
ETAT = EXTRAIRE LETAT1 J ;
SI (ETAT EGA 0) ;
SINON ;
FINSI ;
FIN BOUCLE2 ;
SI (FLEXT) ;
TABGROU.M.I = LETAT2 ;
MESSAGE ' ' ;
MESSAGE 'CREATION DU GROUPE THERMIQUE CORRESPONDANT AU GROUPE '
'THERMOMECANIQUE' I ;
LIST LETAT2 ;
MESSAGE ' ' ;
SINON ;
TABGROU.M.I = LETAT1 ;
MESSAGE ' ' ;
MESSAGE 'ATTENTION VOUS AVEZ EXCLU TOUTE LA FLEXION AU GROUPE '
'THERMOMECANIQUE' I ;
LIST LETAT1 ;
MESSAGE ' ' ;
FINSI ;
FIN BOUCLE1 ;
REPETER BOUCLE1 (NGROUPTM) ;
I = &BOUCLE1 ;
LETAT1 = ORDONNER 'DECROISSANT' (TABGROU.L.I) ;
LETAT2 = ORDONNER 'DECROISSANT' (TABGROU.M.I) ;
TABGROU.L.I = LETAT1 ;
TABGROU.M.I = LETAT2 ;
FIN BOUCLE1 ;
FINSI ;
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* INITIALISATIONS
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SEISME = FAUX ;
TCE = TABLE ;
TVTMG = TABLE ;
TVTHG = TABLE ;
TVARSG = TABLE ;
TABOCCUR = TABLE ;
TABDONF = TABLE ;
ID = 1 ;
IND1 = 1 ;
IND2 = 2 ;
IND3 = 3 ;
IND4 = 4 ;
IND5 = 5 ;
IND6 = 6 ;
IND7 = 7 ;
IND8 = 8 ;
IND9 = 9 ;
* ======================================================================
* verifications
* ======================================================================
MESSAGE ' ' ;
MESSAGE '---> phase verification' ;
MESSAGE ' ------------------' ;
MESSAGE ' ' ;
SI ( ( NCOUPS EGA 0 ) OU ( NETATS EGA 0 ) ) ;
FINSI ;
SI ( EXISTE TABGROU ) ;
REPETER BOUCLE1 ( NGROUPTM ) ;
I = &BOUCLE1 ;
LISTETM = TABGROU.IND1.I ;
REPETER BOUCLE2 ( NTRANS ) ;
J = &BOUCLE2 ;
ETAT = EXTRAIRE LISTETM J ;
SI ( ( ETAT > NETATS ) OU ( ETAT < 0 ) ) ;
MESSAGE 'LA FORMATION DES GROUPES THERMO-MECANIQUES NE '
'CONVIENT PAS' ;
FINSI ;
FIN BOUCLE2 ;
LISTETH = TABGROU.IND2.I ;
REPETER BOUCLE2 ( NTRANS ) ;
J = &BOUCLE2 ;
ETAT = EXTRAIRE LISTETH J ;
SI ( ( ETAT > NETATS ) OU ( ETAT < 0 ) ) ;
MESSAGE 'LA FORMATION DES GROUPES POUR EXCLUSION DE LA '
'FLEXION THERMIQUE NE CONVIENT PAS' ;
FINSI ;
FIN BOUCLE2 ;
FIN BOUCLE1 ;
SI ( EXISTE TABFATI ) ;
SI ( NTABFAT1 NEG NGROUPTM ) ;
MESSAGE 'LA TABLE DES NOMBRES D"OCCURENCES POUR LA FATIGUE NE '
'CONVIENT PAS' ;
FINSI ;
SI ( NTABFAT2 NEG NCOUPS ) ;
MESSAGE 'LA TABLE DE DESCRIPTION DES MATERIAUX POUR LA FATIGUE '
'NE CONVIENT PAS' ;
FINSI ;
SI (EXISTE TABFATI IND3) ;
SEISME = VRAI ;
SI ( NTABFAT3 NEG NCOUPS ) ;
MESSAGE 'LA TABLE DE DESCRIPTION DES SEISMES POUR LA FATIGUE '
'NE CONVIENT PAS' ;
FINSI ;
FINSI ;
REPETER BOUCLE1 ( NCOUPS ) ;
I = &BOUCLE1 ;
LISTEMA = TABFATI.IND2.I ;
SI (((NON SEISME) ET (NMATER NEG 6)) OU
(SEISME ET (NMATER NEG 7))) ;
MESSAGE 'LA TABLE DE DESCRIPTION DES MATERIAUX POUR LA FATIGUE '
'NE CONVIENT PAS' ;
FINSI ;
FIN BOUCLE1 ;
SI (SEISME) ;
REPETER BOUCLE1 ( NCOUPS ) ;
I = &BOUCLE1 ;
LISTSEI = TABFATI.IND3.I ;
SI (((DIMP EGA 2) ET (NCTORS NEG 6)) OU
((DIMP EGA 3) ET (NCTORS NEG 8))) ;
MESSAGE 'LA TABLE DE DESCRIPTION DU SEISME POUR LA FATIGUE '
'NE CONVIENT PAS' ;
FINSI ;
FIN BOUCLE1 ;
FINSI ;
FINSI ;
FINSI ;
* ======================================================================
* coupes et linearisation des contraintes
* ======================================================================
MESSAGE ' ' ;
MESSAGE '---> phase coupes et linearisation des contraintes' ;
MESSAGE ' ---------------------------------------------' ;
MESSAGE ' ' ;
* ----------------------------------------------------------------------
* boucle sur les etats
* ----------------------------------------------------------------------
REPETER BOUCLE1 ( NETATS ) ;
I = &BOUCLE1 ;
TCE.I = TABLE ;
* ----------------------------------------------------------------------
* boucle sur les coupes
* ----------------------------------------------------------------------
REPETER BOUCLE2 ( NCOUPS ) ;
J = &BOUCLE2 ;
MESSAGE ' ' ;
MESSAGE ' ---> etat ' I ' coupe ' J ;
MESSAGE ' -------------------------' ;
MESSAGE ' ' ;
TABCOUP.J.IND3 TABCOUP.J.IND4
TABETAT.I TABCOUP.J.IND5
TABCOUP.J.IND6 TABCOUP.J.IND7
TABCOUP.J.IND8 TABCOUP.J.IND9;
'FINSI';
FIN BOUCLE2 ;
FIN BOUCLE1 ;
MESSAGE ' ' ;
MESSAGE '---> fin phase coupes et linearisation des contraintes' ;
MESSAGE ' -------------------------------------------------' ;
MESSAGE ' ' ;
* ======================================================================
* variations et fatigue
* ======================================================================
SI ( EXISTE TABGROU ) ;
SI ( NGROUPTM >EG 1 ) ;
MESSAGE ' ' ;
MESSAGE '---> phase variations' ;
MESSAGE ' ----------------' ;
MESSAGE ' ' ;
* ----------------------------------------------------------------------
* variations si TABGROU existe
* ----------------------------------------------------------------------
*modif VARIATI: la procedure VARIATI est supprimee
*et est directement integree ci dessous
*en conservant la notice explicative
*modif effectuees avant l entree dans variati:
* BOUCL01 a 03 remplacent BOUCLE1 a 3
* II JJ KK LL MM NN ont remplace I J K L M N
REPETER BOUCL01 ( NGROUPTM ) ;
II = &BOUCL01 ;
LISTETM = TABGROU.IND1.II ;
LISTETH = TABGROU.IND2.II ;
REPETER BOUCL02 ( NCOUPS ) ;
JJ = &BOUCL02 ;
TVTMG.JJ = TABLE ;
TVTHG.JJ = TABLE ;
LL = 0 ;
REPETER BOUCL03 ( NTRANS ) ;
KK = &BOUCL03 ;
' ---------------------------------------------------';
MESSAGE ' ---> groupe ' II ' coupe ' JJ ' transitoire TM ' KK ;
MESSAGE TIRET;
MESSAGE ' ' ;
ETAT = EXTRAIRE LISTETM KK ;
SI ( ETAT NEG 0 ) ;
LL = LL + 1 ;
TVTMG.JJ.LL = TCE.ETAT.JJ ;
FINSI ;
FIN BOUCL03 ;
NN = 0 ;
REPETER BOUCL03 ( NTRANS ) ;
MM = &BOUCL03 ;
SAUT LIGNE;
MESSAGE ' ---> groupe ' II ' coupe ' JJ ' transitoire TH ' MM ;
MESSAGE TIRET;
SAUT LIGNE;
ETAT = EXTRAIRE LISTETH MM ;
SI ( ETAT NEG 0 ) ;
NN = NN + 1 ;
TVTHG.JJ.NN = TCE.ETAT.JJ ;
FINSI ;
FIN BOUCL03 ;
FIN BOUCL02 ;
*LIST (TVTMG . 1 . 1) ;
*LIST (TVTMG . 1 . 2) ;
*LIST ( TVTHG . 1 . 1);
*LIST ( TVTHG . 1 . 2);
*modif
* SI ( LL NEG KK ) ;
* TVARSG.II = @VARIATI FLEXT TABGROU.ID.II TVTMG TVTHG 'NUL' ;
* SINON ;
* TVARSG.II = @VARIATI FLEXT TABGROU.ID.II TVTMG TVTHG ;
* FINSI ;
*initialisations
MOPT*LOGIQUE = FAUX ;
SI ( LL NEG KK ) ;MOPT*LOGIQUE=VRAI ; FINSI ;
*FLEXT ichange
ETATS = TABGROU.ID.II ;
TABVM = TVTMG ;
TABVT = TVTHG ;
*on garde la notice de variati
*$$$$ @VARIATI
* @VARIATI PROCEDURE 96/10/08 16:00:00
* ----------------------------------------------------------------------
****** PROCEDURE @VARIATI ******
* ----------------------------------------------------------------------
*
* CETTE PROCEDURE PERMET DE CALCULER LA VARIATION MAXIMALE ENTRE
* 2 TORSEURS, SUR LES PEAUX D'UNE COUPE, SUIVANT LE RCCM.
*
* ----------------------------------------------------------------------
*
* LES DONNEES SONT :
* ----> une variable logique indiquant si VRAI que la flexion
* thermique est exclue
* ----> la liste des etats du groupe
* ----> une table a 2 indices contenant :
* - premier indice : un numero de coupe
* - deuxieme indice : un chargement mecanique sous forme
* de table a 6 indices comprenant :
* - 1 : torseur de flexion, paroi
* interieure
* - 2 : torseur de membrane+flexion,
* paroi interieure
* - 3 : torseur des contraintes totales,
* paroi interieure
* - 4 : torseur de flexion, paroi
* exterieure
* - 5 : torseur de membrane+flexion,
* paroi exterieure
* - 6 : torseur des contraintes totales,
* paroi exterieure
* ----> une table a 2 indices contenant :
* - premier indice : un numero de coupe
* - deuxieme indice : un chargement thermique sous forme
* de table a 6 indices comprenant :
* - 1 : torseur de flexion, paroi
* interieure
* - 2 : torseur de membrane+flexion,
* paroi interieure
* - 3 : torseur des contraintes totales,
* paroi interieure
* - 4 : torseur de flexion, paroi
* exterieure
* - 5 : torseur de membrane+flexion,
* paroi exterieure
* - 6 : torseur des contraintes totales,
* paroi exterieure
* ----> un mot eventuel permettant de prendre en compte un chargement
* supplementaire nul
*
* EN SORTIE :
* ----> impression des resultats
* ----> sortie d'une table a 4 indices contenant :
* - premier indice : numero de coupe
* - deuxieme indice : code :
* - 1 : paroi interieure
* - 2 : paroi exterieure
* - troisieme indice : code :
* - 1 : contraintes totales
* - 2 : contraintes membrane+flexion
* - 3 : contraintes membrane+flexion,
* flexion thermique exclue
* - quatrieme indice : 5 sorties :
* - 1 : indice du premier torseur
* - 2 : indice du deuxieme torseur
* - 3 : premier torseur
* - 4 : deuxieme torseur
* - 5 : tresca
*
* ----------------------------------------------------------------------
* PAR Joseph MANNINO
* ----------------------------------------------------------------------
*debut variati
*'DEBPROC' @VARIATI FLEXT*LOGIQUE ETATS*LISTENTI TABVM*TABLE TABVT*TABLE
* MOPT/MOT ;
* ======================================================================
* initialisation
* ======================================================================
*
TAB1 = TABLE ;
TAB2 = TABLE ;
TAB3 = TABLE ;
TABVS = TABLE ;
* ======================================================================
* nombre de coupes
* ======================================================================
MESSAGE 'LES TABLES POUR VARIATIONS NE CONVIENNENT PAS' ;
FINSI ;
* ======================================================================
* creation d'une droite fictive et du modele associe, pour calcul
* du TRESCA
* ======================================================================
SI ( DIMG EGA 2 ) ;
P1 = 0. 0. ;
P2 = 1. 0. ;
SINON ;
P1 = 0. 0. 0. ;
P2 = 1. 0. 0. ;
FINSI ;
DR = P1 D 1 P2 ;
* ======================================================================
* boucle sur les coupes
* ======================================================================
REPETER TCOUP ( NCOUP ) ;
L = &TCOUP ;
$L = CHAINE L/3 ;
TABVS.L = TABLE ;
* ----------------------------------------------------------------------
* boucle sur les parois interieures et exterieures
* m=1 --> paroi interieure
* m=2 --> paroi exterieure
* ----------------------------------------------------------------------
REPETER TPARO ( 2 ) ;
M = &TPARO ;
TABVS.L.M = TABLE ;
* ----------------------------------------------------------------------
* verification des chargements
* ----------------------------------------------------------------------
MESSAGE 'LES TABLES POUR VARIATIONS NE CONVIENNENT PAS' ;
FINSI ;
* ----------------------------------------------------------------------
* extraction des chargements
* ----------------------------------------------------------------------
REPETER TCHAR ( NTORS ) ;
N = &TCHAR ;
TABM = TABVM.L.N ;
TABT = TABVT.L.N ;
SI ( M EGA 1 ) ;
TAB1.N = TABM. 3 ;
TAB2.N = TABM. 2;
TAB3.N = TABT. 1 ;
SINON ;
TAB1.N = TABM. 6 ;
TAB2.N = TABM. 5 ;
TAB3.N = TABT. 4 ;
FINSI ;
FIN TCHAR ;
* ----------------------------------------------------------------------
* on rajoute eventuellement le chargement null
* ----------------------------------------------------------------------
SI MOPT ;
NTORS = NTORS + 1 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
SINON ;
FINSI ;
FINSI ;
* ======================================================================
* on soustrait 2 a 2 les torseurs contenus dans tab et on retient
* la combinaison qui donne le plus grand tresca
* ======================================================================
TREJM1 = 0. ;
TREJM2 = 0. ;
TREJM3 = 0. ;
IS1 = 1 ;
JS1 = 1 ;
IS2 = 1 ;
JS2 = 1 ;
IS3 = 1 ;
JS3 = 1 ;
REPETER BOUCLE1 ( NTORS - 1 ) ;
I = &BOUCLE1 ;
J = I ;
REPETER BOUCLE2 ( NTORS - I ) ;
J = J + 1 ;
TORS1 = TAB1.I - TAB1.J ;
TORS2 = TAB2.I - TAB2.J ;
NFOIS = 2 ;
SI ( EXISTE TAB3 ) ;
TORS3 = ( TAB2.I - TAB3.I ) - ( TAB2.J - TAB3.J ) ;
NFOIS = 3 ;
FINSI ;
REPETER BOUCLE3 ( NFOIS ) ;
K = &BOUCLE3 ;
SI ( K EGA 1 ) ;
S1 = EXTRAIRE TORS1 1 ;
S2 = EXTRAIRE TORS1 2 ;
S3 = EXTRAIRE TORS1 3 ;
S4 = EXTRAIRE TORS1 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S5 = EXTRAIRE TORS1 5 ;
S6 = EXTRAIRE TORS1 6 ;
FINSI ;
FINSI ;
SI ( K EGA 2 ) ;
S1 = EXTRAIRE TORS2 1 ;
S2 = EXTRAIRE TORS2 2 ;
S3 = EXTRAIRE TORS2 3 ;
S4 = EXTRAIRE TORS2 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S5 = EXTRAIRE TORS2 5 ;
S6 = EXTRAIRE TORS2 6 ;
FINSI ;
FINSI ;
SI ( K EGA 3 ) ;
S1 = EXTRAIRE TORS3 1 ;
S2 = EXTRAIRE TORS3 2 ;
S3 = EXTRAIRE TORS3 3 ;
S4 = EXTRAIRE TORS3 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S5 = EXTRAIRE TORS3 5 ;
S6 = EXTRAIRE TORS3 6 ;
FINSI ;
FINSI ;
* ----------------------------------------------------------------------
* creation d'un champ par element fictif constant sur la droite,
* equivalent au torseur
* ----------------------------------------------------------------------
SI ( DIMG EGA 2 ) ;
SI ( EGA MODG 'FOUR' ) ;
'SMRZ' S4 'SMRT' S5 'SMZT' S6 ;
SINON ;
SI ( EGA MODG 'AXIS' ) ;
'SMRZ' S4 ;
SINON ;
'SMXY' S4 ;
FINSI ;
FINSI ;
SINON ;
'SMXY' S4 'SMXZ' S5 'SMYZ' S6 ;
FINSI ;
* ----------------------------------------------------------------------
* calcul du tresca
* ----------------------------------------------------------------------
SI ( K EGA 1 ) ;
SI ( TREJ1 > TREJM1 ) ;
TREJM1 = TREJ1 ;
IS1 = I ;
JS1 = J ;
FINSI ;
FINSI ;
SI ( K EGA 2 ) ;
SI ( TREJ2 > TREJM2 ) ;
TREJM2 = TREJ2 ;
IS2 = I ;
JS2 = J ;
FINSI ;
FINSI ;
SI ( K EGA 3 ) ;
SI ( TREJ3 > TREJM3 ) ;
TREJM3 = TREJ3 ;
IS3 = I ;
JS3 = J ;
FINSI ;
FINSI ;
DETRUIRE CHAM1 ;
DETRUIRE CHAM2 ;
DETRUIRE CHAM3 ;
FIN BOUCLE3 ;
* ----------------------------------------------------------------------
* destruction des objets crees a chaque pas
* ----------------------------------------------------------------------
DETRUIRE TORS1 ;
DETRUIRE TORS2 ;
SI (NFOIS EGA 3 ) ;
DETRUIRE TORS3 ;
FINSI ;
FIN BOUCLE2 ;
FIN BOUCLE1 ;
* ======================================================================
* resultat de la variation
* ======================================================================
REPETER BOUCLE3 ( NFOIS ) ;
K = &BOUCLE3 ;
TABVS.L.M.K = TABLE ;
SI ( K EGA 1 ) ; UY = TABVS.L.M.K;
UY . 1 = IS1 ;
UY . 2 = JS1 ;
UY . 3 = TAB1.IS1 ;
UY . 4 = TAB1.JS1 ;
UY . 5 = TREJM1 ;
VAL11 = EXTRAIRE TAB1.IS1 1 ;
VAL21 = EXTRAIRE TAB1.IS1 2 ;
VAL31 = EXTRAIRE TAB1.IS1 3 ;
VAL41 = EXTRAIRE TAB1.IS1 4 ;
$VALT1 = CHAINE FORMAT '(F9.2)' VAL11 VAL21 VAL31 VAL41 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL51 = EXTRAIRE TAB1.IS1 5 ;
VAL61 = EXTRAIRE TAB1.IS1 6 ;
$VALT1 = CHAINE $VALT1 FORMAT '(F9.2)' VAL61 VAL51;
FINSI ;
VAL12 = EXTRAIRE TAB1.JS1 1 ;
VAL22 = EXTRAIRE TAB1.JS1 2 ;
VAL32 = EXTRAIRE TAB1.JS1 3 ;
VAL42 = EXTRAIRE TAB1.JS1 4 ;
$VALT2 = CHAINE FORMAT '(F9.2)' VAL12 VAL22 VAL32 VAL42 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL52 = EXTRAIRE TAB1.JS1 5 ;
VAL62 = EXTRAIRE TAB1.JS1 6 ;
$VALT2 = CHAINE $VALT2 FORMAT '(F9.2)' VAL62 VAL52;
FINSI ;
IS1E = EXTRAIRE ETATS IS1 ;
JS1E = EXTRAIRE ETATS JS1 ;
$IS1 = CHAINE IS1E/3 ;
$JS1 = CHAINE JS1E/3 ;
$TREJM1 = CHAINE FORMAT '(F9.2)' TREJM1 ;
SAUTER 2 'LIGNE';
SI ( M EGA 1 ) ;
MESSAGE ' COUPE PAROI INTERIEURE' $L ;
SINON ;
MESSAGE ' COUPE PAROI EXTERIEURE' $L ;
FINSI ;
MESSAGE ' -------------------------' ;
SAUTER 'LIGNE';
MESSAGE 'VARIATION CONTRAINTES TOTALES = DELTA(PM+PB+Q+F) : SP';
SAUTER 'LIGNE';
MESSAGE ' ETAT NO' $IS1 ' -->' $VALT1;
MESSAGE ' ETAT NO' $JS1 ' -->' $VALT2;
MESSAGE ' TRESCA' $TREJM1 ' MPA' ;
FINSI ;
SI ( K EGA 2 ) ; UY= TABVS.L.M.K;
UY . 1 = IS2 ;
UY . 2 = JS2 ;
UY . 3 = TAB2.IS2 ;
UY . 4 = TAB2.JS2 ;
UY . 5 = TREJM2 ;
VAL11 = EXTRAIRE TAB2.IS2 1 ;
VAL21 = EXTRAIRE TAB2.IS2 2 ;
VAL31 = EXTRAIRE TAB2.IS2 3 ;
VAL41 = EXTRAIRE TAB2.IS2 4 ;
$VALT1 = CHAINE FORMAT '(F9.2)' VAL11 VAL21 VAL31 VAL41 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL51 = EXTRAIRE TAB2.IS2 5 ;
VAL61 = EXTRAIRE TAB2.IS2 6 ;
$VALT1 = CHAINE $VALT1 FORMAT '(F9.2)' VAL61 VAL51;
FINSI ;
VAL12 = EXTRAIRE TAB2.JS2 1 ;
VAL22 = EXTRAIRE TAB2.JS2 2 ;
VAL32 = EXTRAIRE TAB2.JS2 3 ;
VAL42 = EXTRAIRE TAB2.JS2 4 ;
$VALT2 = CHAINE FORMAT '(F9.2)' VAL12 VAL22 VAL32 VAL42 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL52 = EXTRAIRE TAB2.JS2 5 ;
VAL62 = EXTRAIRE TAB2.JS2 6 ;
$VALT2 = CHAINE $VALT2 FORMAT '(F9.2)' VAL62 VAL52;
FINSI ;
IS2E = EXTRAIRE ETATS IS2 ;
JS2E = EXTRAIRE ETATS JS2 ;
$IS2 = CHAINE IS2E/3 ;
$JS2 = CHAINE JS2E/3 ;
$TREJM2 = CHAINE FORMAT '(F9.2)' TREJM2 ;
SAUTER 'LIGNE';
MESSAGE 'VARIATION CONTRAINTES MEMBRANE+FLEXION = '
'DELTA(PM+PB+Q) : SN' ;
SAUTER 'LIGNE';
MESSAGE ' ETAT NO' $IS2 ' -->' $VALT1;
MESSAGE ' ETAT NO' $JS2 ' -->' $VALT2;
MESSAGE ' TRESCA' $TREJM2 ' MPA' ;
FINSI ;
SI ( K EGA 3 ) ; UY= TABVS.L.M.K;
UY . 1 = IS3 ;
UY . 2 = JS3 ;
UY . 3 = ( TAB2.IS3 - TAB3.IS3 ) ;
UY . 4 = ( TAB2.JS3 - TAB3.JS3 ) ;
UY . 5 = TREJM3 ;
VAL11 = ( EXTRAIRE TAB2.IS3 1 ) - ( EXTRAIRE TAB3.IS3 1 ) ;
VAL21 = ( EXTRAIRE TAB2.IS3 2 ) - ( EXTRAIRE TAB3.IS3 2 ) ;
VAL31 = ( EXTRAIRE TAB2.IS3 3 ) - ( EXTRAIRE TAB3.IS3 3 ) ;
VAL41 = ( EXTRAIRE TAB2.IS3 4 ) - ( EXTRAIRE TAB3.IS3 4 ) ;
$VALT1 = CHAINE FORMAT '(F9.2)' VAL11 VAL21 VAL31 VAL41;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL51 = ( EXTRAIRE TAB2.IS3 5 ) - ( EXTRAIRE TAB3.IS3 5 ) ;
VAL61 = ( EXTRAIRE TAB2.IS3 6 ) - ( EXTRAIRE TAB3.IS3 6 ) ;
$VALT1 = CHAINE $VALT1 FORMAT '(F9.2)' VAL61 VAL51;
FINSI ;
VAL12 = ( EXTRAIRE TAB2.JS3 1 ) - ( EXTRAIRE TAB3.JS3 1 ) ;
VAL22 = ( EXTRAIRE TAB2.JS3 2 ) - ( EXTRAIRE TAB3.JS3 2 ) ;
VAL32 = ( EXTRAIRE TAB2.JS3 3 ) - ( EXTRAIRE TAB3.JS3 3 ) ;
VAL42 = ( EXTRAIRE TAB2.JS3 4 ) - ( EXTRAIRE TAB3.JS3 4 ) ;
$VALT2 = CHAINE FORMAT '(F9.2)' VAL12 VAL22 VAL32 VAL42;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
VAL52 = ( EXTRAIRE TAB2.JS3 5 ) - ( EXTRAIRE TAB3.JS3 5 ) ;
VAL62 = ( EXTRAIRE TAB2.JS3 6 ) - ( EXTRAIRE TAB3.JS3 6 ) ;
$VALT2 = CHAINE $VALT2 FORMAT '(F9.2)' VAL62 VAL52;
FINSI ;
IS3E = EXTRAIRE ETATS IS3 ;
JS3E = EXTRAIRE ETATS JS3 ;
$IS3 = CHAINE IS3E/3 ;
$JS3 = CHAINE JS3E/3 ;
$TREJM3 = CHAINE FORMAT '(F9.2)' TREJM3 ;
SAUTER 'LIGNE';
SI ( FLEXT ) ;
MESSAGE 'VARIATION CONTRAINTES MEMBRANE+FLEXION (FLEXION '
'THERMIQUE EXCLUE) : SN*' ;
SINON ;
MESSAGE 'VARIATION CONTRAINTES MEMBRANE : SN*' ;
FINSI ;
SAUTER 'LIGNE';
MESSAGE ' ETAT NO' $IS3 ' -->' $VALT1;
MESSAGE ' ETAT NO' $JS3 ' -->' $VALT2;
MESSAGE ' TRESCA' $TREJM3 ' MPA' ;
FINSI ;
FIN BOUCLE3 ;
FIN TPARO ;
FIN TCOUP ;
*modifs
*FINPROC TABVS ;
TVARSG.II = TABVS ;
FIN BOUCL01 ;
*
SAUT LIGNE;
MESSAGE '---> fin phase variations' ;
MESSAGE ' --------------------' ;
SAUT LIGNE;
* ----------------------------------------------------------------------
* fatigue si TABFATI existe
* ----------------------------------------------------------------------
SI ( EXISTE TABFATI ) ;
SAUT LIGNE;
MESSAGE '---> phase fatigue' ;
MESSAGE ' -------------' ;
SAUT LIGNE;
REPETER BOUCLE1 ( NGROUPTM ) ;
I = &BOUCLE1 ;
SAUT LIGNE;
MESSAGE ' ---> occurences groupe ' I ;
MESSAGE ' -----------------------' ;
SAUT LIGNE;
TABOCCUR.I = TABFATI.IND1.I ;
FIN BOUCLE1 ;
REPETER BOUCLE1 ( NCOUPS ) ;
I = &BOUCLE1 ;
SAUT LIGNE;
MESSAGE ' ---> donnees materiaux pour coupe ' I ;
MESSAGE ' -----------------------------' ;
SAUT LIGNE;
TABDONF.I = TABLE ;
LISTEMA = TABFATI.IND2.I ;
REPETER BOUCLE2 ( NMATER ) ;
J = &BOUCLE2 ;
TABDONF.I.J = EXTRAIRE LISTEMA J ;
FIN BOUCLE2 ;
FIN BOUCLE1 ;
SI (SEISME) ;
TABDSEI = TABLE ;
REPETER BOUCLE1 ( NCOUPS ) ;
I = &BOUCLE1 ;
SAUT LIGNE;
MESSAGE ' ---> donnees seisme pour coupe ' I ;
MESSAGE ' --------------------------' ;
SAUT LIGNE;
TABDSEI.I = TABLE ;
LISTSEI = TABFATI.IND3.I ;
REPETER BOUCLE2 ( NCTORS ) ;
J = &BOUCLE2 ;
TABDSEI.I.J = EXTRAIRE LISTSEI J ;
FIN BOUCLE2 ;
FIN BOUCLE1 ;
FINSI ;
*modif FATIGUE: la procedure FATIGUE est supprimee
*et est directement integree ci dessous
*en conservant la notice explicative
*modif effectuees avant l entree dans fatigue:
* SI (NON SEISME) ;
* @FATIGUE TVARSG TABOCCUR TABDONF ;
* SINON ;
* @FATIGUE TVARSG TABOCCUR TABDONF TABDSEI ;
* FINSI ;
*initialisations
TABVT= TVARSG ;
TABNT= TABOCCUR ;
TABDF= TABDONF ;
SI ( SEISME ) ;TABDS=TABDSEI ;FINSI ;
*$$$$ @FATIGUE
* @FATIGUE PROCEDURE 96/10/09 16:00:00
* ----------------------------------------------------------------------
****** PROCEDURE @FATIGUE ******
* ----------------------------------------------------------------------
*
* CETTE PROCEDURE PERMET DE FORMER UN FICHIER POUR USE2.
*
* ----------------------------------------------------------------------
*
* LES DONNEES SONT :
* ----> une table composee a chaque indice d'une table pour chaque
* coupe contenant elle meme une table a 4 indices correspondant
* a une variation (ou transitoire dans la terminolagie de USE2;
* l'ensemble des transitoires , avec le nombre d'occurences
* pour chaque transitoire forme un groupe, au sens de USE2.
* Cette table a 4 indices est formee
* par VARIATI et contient :
* - premier indice : numero de coupe
* - deuxieme indice : code :
* - 1 : paroi interieure
* - 2 : paroi exterieure
* - troisieme indice : code :
* - 1 : contraintes totales
* - 2 : contraintes membrane+flexion
* - 3 : contraintes membrane+flexion,
* flexion thermique exclue
* - quatrieme indice : 5 sorties :
* - 1 : indice du premier torseur
* - 2 : indice du deuxieme torseur
* - 3 : premier torseur
* - 4 : deuxieme torseur
* - 5 : tresca
*
* ----> une table donnant pour chaque transitoire le nombre
* d'occurences
* ----> une table composee a chaque indice d'une table a 6 indices
* ou 7 indices correspondant a des donnees de materiaux ou code
* seisme pour USE2, pour chaque coupe.
* Cette table a 6 indices contenant :
* - premier indice : code materiau
* - deuxieme indice : module d'elasticite
* - troisieme indice : facteur de concentration des
* contraintes
* - quatrieme indice : contrainte SM de reference
* - cinquieme indice : parametre intervenant dans le calcul
* du facteur de concentration
* elastoplastique KE
* - sixieme indice : parametre intervenant dans le calcul
* du facteur de concentration
* elastoplastique KE
* - septieme indice : code de seisme, si calcul au seisme :
* . 1 : calcul conservatif mais rapide
* . 2 : calcul realiste mais lent
* ----> une table eventuelle composee a chaque indice d'une table a
* 4 indices ou 6 indices correspondant a des donnees de seisme
* pour USE2, pour chaque coupe.
* Cette table a 4 ou 6 indices contenant les composantes du
* torseur du seisme.
*
* EN SORTIE :
* ----> impression des resultats
*
* ----------------------------------------------------------------------
* PAR Joseph MANNINO
* ----------------------------------------------------------------------
*'DEBPROC' @FATIGUE TABVT*TABLE TABNT*TABLE TABDF*TABLE TABDS/TABLE ;
* ======================================================================
* initialisation
* ======================================================================
* ======================================================================
* nombre de transitoires
* ======================================================================
MESSAGE 'LES TABLES POUR FATIGUE NE CONVIENNENT PAS' ;
FINSI ;
* ======================================================================
* nombre de coupes
* ======================================================================
MESSAGE 'LES TABLES POUR FATIGUE NE CONVIENNENT PAS' ;
FINSI ;
* ======================================================================
* code de revision de USE 2
* ======================================================================
MESSAGE '5.' ;
* ======================================================================
* boucle sur les coupes
* ======================================================================
REPETER TCOUP ( NCOUP ) ;
J = &TCOUP ;
$J = CHAINE J/3 ;
MESSAGE 'LES TABLES POUR FATIGUE NE CONVIENNENT PAS' ;
FINSI ;
UY = TABDF . J;
CAUD = UY . 1 FLOT;
ANT = FLOT NTRAN ;
EMIN = UY . 2 FLOT;
AK = UY . 3 FLOT;
SM = UY . 4 FLOT;
XM = UY . 5 FLOT;
XN = UY . 6 FLOT;
SI (EXISTE UY 7) ;
SEISME = UY . 7 ;
SINON ;
SEISME = 0. ;
FINSI ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
OPT = 3. ;
SINON ;
OPT = 2. ;
FINSI ;
TEST = 1. ;
* ----------------------------------------------------------------------
* boucle sur les parois interieures et exterieures
* k=1 --> paroi interieure
* k=2 --> paroi exterieure
* ----------------------------------------------------------------------
REPETER TPARO ( 2 ) ;
K = &TPARO ;
SI ( K EGA 1 ) ;
MESSAGE 'FACTEUR D"USAGE DANS LA COUPE' $J ' PAROI INTERIEURE' ;
SINON ;
MESSAGE 'FACTEUR D"USAGE DANS LA COUPE' $J ' PAROI EXTERIEURE' ;
FINSI ;
AA = CHAINE FORMAT '(F10.0)' CAUD ANT EMIN FORMAT '(F10.2)' AK
FORMAT '(F10.1)' SM XM XN FORMAT '(F10.0)' SEISME;
MESS AA;
AA = CHAINE FORMAT '(F10.1)' OPT TEST;
MESS AA;
* ----------------------------------------------------------------------
* ecriture du seisme eventuel
* ----------------------------------------------------------------------
SI ((EXISTE TABDS) ET ((SEISME EGA 1.) OU (SEISME EGA 2.))) ;
UY = TABDS.J;
S1 = UY . 1 ;
S2 = UY . 2 ;
S3 = UY . 3 ;
S4 = UY . 4 ;
S5 = UY . 5 ;
S6 = UY . 6 ;
SI (DIMG EGA 3) ;
S7 = UY . 7 ;
S8 = UY . 8 ;
FINSI ;
SI (DIMG EGA 2) ;
AA = CHAINE FORMAT '(F10.2)' S1 S2 S3 S4 S5 S6;
MESS AA;
SINON ;
AA = CHAINE FORMAT '(F10.2)' S1 S2 S3 S4 S5 S6 S7 S8;
MESS AA;
FINSI ;
FINSI ;
* ======================================================================
* boucle sur les transitoires
* ======================================================================
REPETER TTRAN ( NTRAN ) ;
I = &TTRAN ;
MESSAGE 'LES TABLES POUR FATIGUE NE CONVIENNENT PAS' ;
FINSI ;
NOC = TABNT.I FLOT;
$NOC = CHAINE FORMAT '(F10.0)' NOC ;
MESSAGE $NOC ;
UY = TABVT.I.J.K;
TORS1 = UY . 1 . 3 ;
TORS2 = UY . 1 . 4 ;
TORS3 = UY . 2 . 3 ;
TORS4 = UY . 2 . 4;
S11 = EXTRAIRE TORS1 1 ;
S21 = EXTRAIRE TORS1 2 ;
S31 = EXTRAIRE TORS1 3 ;
S41 = EXTRAIRE TORS1 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S51 = EXTRAIRE TORS1 5 ;
S61 = EXTRAIRE TORS1 6 ;
FINSI ;
S12 = EXTRAIRE TORS2 1 ;
S22 = EXTRAIRE TORS2 2 ;
S32 = EXTRAIRE TORS2 3 ;
S42 = EXTRAIRE TORS2 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S52 = EXTRAIRE TORS2 5 ;
S62 = EXTRAIRE TORS2 6 ;
FINSI ;
S13 = EXTRAIRE TORS3 1 ;
S23 = EXTRAIRE TORS3 2 ;
S33 = EXTRAIRE TORS3 3 ;
S43 = EXTRAIRE TORS3 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S53 = EXTRAIRE TORS3 5 ;
S63 = EXTRAIRE TORS3 6 ;
FINSI ;
S14 = EXTRAIRE TORS4 1 ;
S24 = EXTRAIRE TORS4 2 ;
S34 = EXTRAIRE TORS4 3 ;
S44 = EXTRAIRE TORS4 4 ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
S54 = EXTRAIRE TORS4 5 ;
S64 = EXTRAIRE TORS4 6 ;
FINSI ;
SI ( ( DIMG EGA 3 ) OU ( EGA MODG 'FOUR' ) ) ;
AA = CHAINE FORMAT '(F10.2)' S11 S21 S31 S41 S61 S51;
MESS AA;
AA = CHAINE FORMAT '(F10.2)' S12 S22 S32 S42 S62 S52 ;
MESS AA;
AA = CHAINE FORMAT '(F10.2)' S13 S23 S33 S43 S63 S53 ;
MESS AA;
AA = CHAINE FORMAT '(F10.2)' S14 S24 S34 S44 S64 S54 ;
MESS AA;
SINON ;
AA = CHAINE FORMAT '(F10.2)' S11 S21 S31 S41 S12 S22 S32 S42 ;
MESS AA;
AA = CHAINE FORMAT '(F10.2)' S13 S23 S33 S43 S14 S24 S34 S44 ;
MESS AA;
FINSI ;
FIN TTRAN ;
SI ( ( J EGA NCOUP ) ET ( K EGA 2 ) ) ;
MESSAGE '0.' ;
SINON ;
MESSAGE '1.' ;
FINSI ;
FIN TPARO ;
FIN TCOUP ;
*FINPROC ;
SAUT LIGNE;
MESSAGE '---> fin phase fatigue' ;
MESSAGE ' -----------------' ;
SAUT LIGNE;
FINSI ;
FINSI ;
FINSI ;
SAUT LIGNE;
MESSAGE '***** FIN DU CALCUL RCCM *****' ;
MESSAGE '------------------------------' ;
SAUT LIGNE;
FINPROC ;
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales