1 : * DYNAMIC PROCEDUR JC220346 12/09/12 21:15:07 7501 2 : *--------------------------------------------------------------------- 3 : * PROCEDURE DYNAMIC VERSION DU 22/02/88 4 : *--------------------------------------------------------------------- 5 : * CETTE PROCEDURE EFFECTUE UN CALCUL DYNAMIQUE PAS A PAS 6 : * 7 : * EN ENTREE : 8 : * --------- 9 : * ETAB TABLE CONTENANT : 10 : * INDICE 'DEPL' : LE DEPLACEMENT INITIAL 11 : * INDICE 'VITE' : LA VITESSE INITIALE 12 : * INDICE 'CHAR' : LE CHARGEMENT 13 : * INDICE 'RIGI' : LA RIGIDITE 14 : * INDICE 'MASS' : LA MASSE 15 : * INDICE 'AMOR' : L'AMORTISSEMENT 16 : * INDICE 'FREQ' : LA FREQUENCE DE COUPURE 17 : * INDICE 'INST' : LES INSTANTS DE SORTIE 18 : * INDICE 'DEBU' : LE TEMPS INITIAL 19 : * ( 0. PAR DEFAUT ) 20 : * INDICE 'SAUV' : LOGIQUE EGAL VRAI SI ON VEUT 21 : * GARDER LES RESULTATS 22 : * INDICE 'SORT' : Geométrie sur laquelle on veut 23 : * les résultats (par défaut sur 24 : * toute la structure) 25 : * EN SORTIE : 26 : * --------- 27 : * STAB TABLE CONTENANT AUTANT DE TABLES QUE D'INSTANTS 28 : * DE SORTIE 29 : * INDICE N : NUMERO DE L'INSTANT 30 : * 31 : * LA TABLE STAB N CONTIENT : 32 : * INDICE 'TEMP' : L'INSTANT 33 : * INDICE 'DEPL' : LE DEPLACEMENT 34 : * INDICE 'VITE' : LA VITESSE 35 : * 36 : *--------------------------------------------------------------------- 37 : * 38 : DEBPROC DYNAMIC ETAB*'TABLE' ; 39 : * 40 : *---------------------------------------------------------------------- 41 : * ON COMMENCE PAR TESTER SI NEWMARK EXISTE TOUJOURS | 42 : *------------------------------------------------------ 43 : * ZNEW = 'TYPE' NEWMARK ; 44 : * 'SI' ( 'NEG' ZNEW 'PROCEDUR' ) ; 45 : * 'MESS' ' *********** ERREUR ********** ' ; 46 : * 'MESS' ' LA PROCEDURE NEWMARK A ETE ECRASEE ' ; 47 : * 'MESS' ' ********************************** ' ; 48 : * 'ERREUR' ' ARRET DE LA PROCEDURE DYNAMIC ' ; 49 : * 'FINSI'; 50 : *------------------------------ 51 : * ON RECUPERE L'INFORMATION 52 : *------------------------------ 53 : ECONOM=FAUX; 54 : ISAUV=FAUX; 55 : 'SI' ('EXIS' ETAB 'ECON'); ECONOM=ETAB.'ECON';'FINSI'; 56 : 'SI' ('EXIS' ETAB 'SAUV'); ISAUV=ETAB .'SAUV'; 'FINSI'; 57 : 58 : U0 = 'COPIER' ( ETAB.'DEPL' ) 'GEOM' ; 59 : V0 = 'COPIER' ( ETAB.'VITE' ) 'GEOM' ; 60 : CHA= ETAB.'CHAR' ; 61 : K = ETAB.'RIGI' ; 62 : M = ETAB.'MASS' ; 63 : TSORT = 'ORDONNER' ( ETAB.'INST' ) ; 64 : FCOUP = ETAB.'FREQ' ; 65 : IAMOR = 'EXISTE' ETAB 'AMOR' ; 66 : IRED= 'EXISTE' ETAB 'SORT'; 67 : 'SI' IRED ; AZ= 'TYPE' ETAB.'SORT'; 68 : 'SI' ( NEG AZ 'MAILLAGE' ); 69 : 'MESS' 'L INDICE SORT DOIT CONTENIR UN MAILLAGE'; 70 : 'QUITTER' DYNAMIC; 71 : 'FINSI'; 72 : 'FINSI'; 73 : 'SI' IAMOR ; 74 : C = ETAB.'AMOR' ; 75 : *MODIF 20/02/92 NADINE POUR OTER LES MULTIPLICATEURS DE LA MATRICE 76 : *D'AMORTISSEMENT. 77 : C = 'EXTR' C 'RIGI' 'NOMU' ; 78 : 'FINSI' ; 79 : 'SI' ( 'EXISTE' ETAB 'DEBU' ) ; 80 : T0 = ETAB.'DEBU' ; 81 : 'SINON' ; 82 : T0 = 0. ; 83 : 'FINSI' ; 84 : *------------------------------------------------------------- 85 : * CALCUL DU PAS DE TEMPS A PARTIR DE LA FREQUENCE DE COUPURE 86 : *------------------------------------------------------------- 87 : SCA = 0.25 ; 88 : 'SI' ( FCOUP 'EGA' 0. ) ; 89 : 'ERREUR' ' LA FREQUENCE DE COUPURE EST NULLE ' ; 90 : 'SINON' ; 91 : DT = SCA / FCOUP ; 92 : 'FINSI' ; 93 : 'MESS' ' PAS DE TEMPS UTILISE DANS LE CALCUL ' DT ; 94 : * 95 : *----------------------------------------------------- 96 : * ON RECUPERE LES INSTANTS DE SORTIE DES RESULTATS 97 : *----------------------------------------------------- 98 : TMAX = 'MAXI' TSORT ; 99 : * 100 : ITEM = 0 ; 101 : 'REPETER' ETEM0 ; 102 : ITEM=ITEM + 1 ; 103 : T = 'EXTRAI' TSORT ITEM ; 104 : 'SI' ( T '>EG' T0 ) ; 105 : 'QUITTER' ETEM0 ; 106 : 'FINSI' ; 107 : 'FIN' ETEM0 ; 108 : * 109 : *-------------------------------------------- 110 : * INITIALISATION DES TABLES DE RESULTATS 111 : *-------------------------------------------- 112 : STAB = TABLE ; etab.'RESULTATS'=STAB; 113 : 114 : * 115 : * STAB EST UNE TABLE DE TABLES INDICEE PAR LE NUMERO DU CAS SORTI 116 : * 117 : ISTOC = 0 ; 118 : * 119 : * STOCKAGE DE L'INSTANT INITIAL SI DEMANDE 120 : * 121 : 'SI' ( T 'EGA' T0 ) ; 122 : 'MESS' ' SORTIE D UN RESULTAT POUR LE TEMPS ' T ; 123 : STN = 'TABLE' ; 124 : ISTOC = 1 ; 125 : STAB.ISTOC = 'TABLE' STN ; 126 : STN.'TEMP' = T0 ; 127 : STN.'DEPL' = ETAB.'DEPL' ; 128 : STN.'VITE' = ETAB.'VITE' ; 129 : ITEM=ITEM + 1 ; 130 : T = 'EXTRAI' TSORT ITEM ; 131 : 'FINSI' ; 132 : * 133 : F0 = 'TIRER' CHA T0 ; 134 : * 135 : *-------------------------------- 136 : * FABRICATION DE L'OPERATEUR 137 : *-------------------------------- 138 : DT2 = DT * DT ; 139 : SCA1 = 4. / DT2 ; 140 : MM = SCA1 * M ; 141 : 'SI' IAMOR ; 142 : SCA2 = 2. / DT ; 143 : CC = SCA2 * C ; 144 : OPER = K 'ET' MM 'ET' CC ; 145 : 'DETR' CC ; 146 : 'SINON'; 147 : OPER = K 'ET' MM ; 148 : 'FINSI' ; 149 : 'DETR' MM ; 150 : * 151 : *----------------------------------- 152 : * BOUCLE SUR LES PAS DE TEMPS 153 : *----------------------------------- 154 : IPAS=0 ; 155 : 'REPETER' ETIPAS ; 156 : IPAS = IPAS + 1 ; 157 : 'MESS' ' PAS NUMERO ' IPAS ; 158 : T1 = T0 + DT ; 159 : F1 = 'TIRER' CHA T1 ; 160 : * 161 : *-------------------------------------------- 162 : * APPEL A LA PROCEDURE DE CALCUL D'UN PAS 163 : *-------------------------------------------- 164 : * 165 : U1 V1 = NEWMARK U0 V0 OPER K M F0 F1 DT ; 166 : * 167 : *-------------------------------------- 168 : * ARCHIVAGE DES RESULTATS SI BESOIN 169 : *-------------------------------------- 170 : 'REPETER' ETEMP ; 171 : 'SI' ( T > T0 ) ; 172 : 'SI' ( T '<EG' T1 ) ; 173 : ISTOC = ISTOC + 1 ; 174 : STN = 'TABLE' ; 175 : STAB.ISTOC = 'TABLE' STN ; 176 : STN.'TEMP' = T ; 177 : 'MESS' ' SORTIE D UN RESULTAT POUR LE TEMPS ' T ; 178 : * 179 : * ON INTERPOLE LE RESULTAT 180 : * 181 : TAU = ( T - T0 ) / DT ; 182 : TAU2 = TAU ** 2 ; 183 : UMTAU = 1. - TAU ; 184 : UMTAU2 = 1. - TAU2 ; 185 : TAUMT = ( T - T0 ) * UMTAU ; 186 : UX0 = 'ENLEVER' U0 'LX' ; 187 : UX1 = 'ENLEVER' U1 'LX' ; 188 : ULX0 = 'EXCO' 'LX' U0 'NOID' 'LX' ; 189 : ULX1 = 'EXCO' 'LX' U1 'NOID' 'LX' ; 190 : UX2 = 'COLI' UX1 TAU2 UX0 UMTAU2 V0 TAUMT ; 191 : 'DETR' UX0 ; 'DETR' UX1 ; 192 : ULX2 = 'COLI' ULX1 TAU ULX0 UMTAU ; 193 : 'DETR' ULX0 ; 'DETR' ULX1 ; 194 : XDEP= UX2 + ULX2 ; 'DETR' UX2 ; 195 : XVIT= 'COLI' V0 UMTAU V1 TAU ; 196 : 'SI' IRED ; 197 : XDEP= ('REDU' XDEP ETAB.'SORT') + ULX2; 198 : XVIT= 'REDU' XVIT ETAB.'SORT'; 199 : 'FINSI'; 200 : 'DETR' ULX2 ; 201 : STN.'DEPL' = XDEP ; 202 : STN.'VITE' = XVIT ; 203 : 204 : *------------------------------ 205 : * SAUVETAGE incrementale des résultas 206 : *----------------------------- 207 : 'SI' ISAUV ; 208 : etab.'OPER'=OPER; 209 : 'SAUVER' 'MUET' ETAB ; 210 : * on fantomise les resultats sauvés 211 : 'SI' ECONOM; 212 : 'FANTOM' stn 'DEPL'; 213 : 'FANTOM' stn 'VITE'; 214 : 'FINSI'; 215 : 'FINSI' ; 216 : 217 : *------------------------------------------- 218 : * RECHERCHE DU NOUVEAU TEMPS DE SORTIE 219 : *------------------------------------------- 220 : 'SI' ( T '>EG' TMAX ) ; 221 : 222 : 'QUITTER' ETIPAS ; 223 : 'SINON' ; 224 : ITEM = ITEM + 1 ; 225 : T = 'EXTRAI' TSORT ITEM ; 226 : 'FINSI' ; 227 : 'SINON'; 228 : 'QUITTER' ETEMP; 229 : 'FINSI'; 230 : 'FINSI'; 231 : 'FIN' ETEMP ; 232 : 233 : 'DETR' U0 ; 234 : 'DETR' V0 ; 235 : 'DETR' F0 ; 236 : T0 = T1 ; 237 : U0 = U1 ; 238 : V0 = V1 ; 239 : F0 = F1 ; 240 : 'FIN' ETIPAS ; 241 : *---------------------------------------------------------------------- 242 : * SORTIE DE LA PROCEDURE 243 : *---------------------------------------------------------------------- 244 : 'FINPROC' STAB ; 245 : *---------------------------------------------------------------------- 246 : 247 : 248 : 249 : 250 : 251 :
© Cast3M 2003 - All rights reserved.
Disclaimer