Télécharger drexus.procedur

Retour à la liste

Numérotation des lignes :

  1. * DREXUS PROCEDUR CB215821 15/07/10 21:15:08 8571
  2. 'DEBPROC' DREXUS ETAB*'TABLE' ;
  3. *
  4. *----------------------------------------------------------------------------
  5. *
  6. * PROCEDURE DREXUS :
  7. *
  8. * CALCUL DYNAMIQUE PAS A PAS AVEC UN ALGORITHME EXPLICITE
  9. *
  10. * EN ENTREE :
  11. * ---------
  12. *
  13. * ETAB TABLE CONTENANT :
  14. *
  15. * ETAB.'VITESSE_INITIALE' : vitesse initiale (champoint)
  16. * ETAB.'CHARGEMENT' : chargement
  17. * ETAB.'LIAISONS' : liaisons (rigidite)
  18. * ETAB.'IMPACT' : données pour l'impact (table)
  19. * ETAB.'MODELE' : objet modele de la structure
  20. * ETAB.'CARACTERISTIQUES' : caractéristiques associées au modele
  21. * ETAB.'PAS_TEMPS' : pas de temps (flottant)
  22. * ETAB.'COEFF_STABILITE' : coeff multi pdt (pas automatique) (flottant)
  23. * ETAB.'NPASMAX' : nbre de pas de temps maximal (entier)
  24. * ETAB.'TEMPS_SORTIE' : liste des temps à stocker (listenti)
  25. * ETAB.'FREQUENCE_SORTIE' : fréquence de sortie (entier)
  26. * ETAB.'TEMPS_INITIAL' : temps initial (flottant) (0. par defaut)
  27. * ETAB.'GRANDES_DEFORMATIONS' : prise en compte des gdes def. (logique)
  28. * ETAB.'FREQ_MENAGE' : fréquence de menage (entier) (=50 p. def)
  29. * ETAB.'AMORTISSEMENT' : matrice d'amortissement
  30. *
  31. * EN SORTIE :
  32. * ---------
  33. *
  34. * INDICE N : numero de l'enregistrement
  35. *
  36. * ETAB.'NPAS'.N : no du pas (entier)
  37. * ETAB.'TEMPS'.N : temps (reel)
  38. * ETAB.'DEPLACEMENTS'.N : deplacement (champoint)
  39. * ETAB.'VITESSES'.N : vitesse (champoint)
  40. * ETAB.'ACCELERATIONS'.N : accelerations (champoint)
  41. * ETAB.'FORCES_EXTERIEURES'.N : forces exterieures (champoint)
  42. * ETAB.'CONTRAINTES'.N : contraintes (chamelem)
  43. * ETAB.'VARIABLES_INTERNES'.N : variables d'ecrouissage (chamelem)
  44. *
  45. *----------------------------------------------------------------------------
  46. *
  47. *-- presentation
  48. *
  49. 'SAUT' 1 lignes ;
  50. 'MESS' ' D. R. E. X. U. S.' ;
  51. 'MESS' ' ' ;
  52. 'MESS' ' Dynamique Rapide Explicite , algorithme pleXUS ' ;
  53. 'MESS' ' ' ;
  54. 'MESS' ' _____________________________________________ ' ;
  55. 'MESS' ' _________ Mens Agitat Molem __________ ' ;
  56. 'MESS' ' _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ' ;
  57. 'SAUT' 1 lignes ;
  58. 'MESS' ' Options du calcul : ' ;
  59. 'MESS' ' ' ;
  60. *
  61. *----------------------------------------------------------------------------
  62. * VERIFICATIONS DES ENTREES
  63. *----------------------------------------------------------------------------
  64. *
  65. *-- verification du modèle de comportement
  66. *
  67. 'SI' ('NON' ('EXISTE' ETAB 'MODELE')) ;
  68. 'ERREUR' 'Il manque la donnée du modèle.' ;
  69. 'SINON' ;
  70. MO_TOT = ETAB.'MODELE' ;
  71. TYP1 = 'TYPE' MO_TOT ;
  72. 'SI' ('NEG' TYP1 'MMODEL ') ;
  73. 'ERREUR' 'Le type du modèle est incorrect' ;
  74. 'FINSI' ;
  75. 'FINSI' ;
  76. *
  77. *-- non-linearités matériaux : plasticité
  78. *
  79. 'SI' ('EXISTE' MO_TOT 'MATE' 'PLASTIQUE') ;
  80. PPLAS = VRAI ;
  81. 'MESS' ' - Matériau : loi de comportement plastique' ;
  82. 'SINON' ;
  83. PPLAS = FAUX ;
  84. 'MESS' ' - Matériau : loi de comportement élastique' ;
  85. 'FINSI' ;
  86. *
  87. *-- non-linearités géométriques : grandes déformations
  88. *
  89. 'SI' ( 'EXISTE' ETAB 'GRANDES_DEFORMATIONS' ) ;
  90. CANLGEO = ETAB . 'GRANDES_DEFORMATIONS' ;
  91. 'SINON' ;
  92. CANLGEO = FAUX ;
  93. 'MESS' ' - Hypothèse des petits déplacements' ;
  94. 'FINSI' ;
  95. 'SI' CANLGEO ;
  96. 'MESS' ' - Grandes déformations modélisées' ;
  97. 'FINSI' ;
  98. *
  99. *-- y a t'il de l'amortissement
  100. *
  101. CAMOR = FAUX ;
  102. 'SI' ('EXISTE' ETAB 'AMORTISSEMENT') ;
  103. 'MESS' ' - Prise en compte de l amortissement' ;
  104. KAMOR = ETAB . 'AMORTISSEMENT';
  105. CAMOR = VRAI ;
  106. 'FINSI' ;
  107. *
  108. *-- verification des caractéristiques matériaux
  109. *
  110. 'SI' ('NON' ('EXISTE' ETAB 'CARACTERISTIQUES')) ;
  111. 'ERREUR' 'Il manque la donnée du materiau.' ;
  112. 'SINON' ;
  113. MA = ETAB.'CARACTERISTIQUES' ;
  114. TYP1 = 'TYPE' MA ;
  115. 'SI' ('NEG' TYP1 'MCHAML ') ;
  116. 'ERREUR' 'Le type du champ de materiau est incorrect' ;
  117. 'FINSI' ;
  118. MA_TOT = 'REDU' MA MO_TOT ;
  119. 'FINSI' ;
  120. *
  121. *-- définition du temps initial
  122. *
  123. 'SI' ( 'EXISTE' ETAB 'TEMPS_INITIAL' ) ;
  124. T_INIT = ETAB. 'TEMPS_INITIAL' ;
  125. 'SINON' ;
  126. T_INIT = 0. ;
  127. 'FINSI' ;
  128. 'MESS' ' - Temps initial : ' T_INIT ;
  129. *
  130. *-- définition des impacts
  131. 'SI' ('EXISTE' ETAB 'IMPACT') ;
  132. T_IMPA = ETAB.'IMPACT' ;
  133. 'SI' ('EXISTE' T_IMPA 'NEZ') ;
  134. 'MESS' ' - Impact : point-ligne ' ;
  135. 'SI' ('NON' ('EXISTE' T_IMPA 'MASSE')) ;
  136. 'ERREUR' 'Entrez la masse du projectile' ;
  137. 'FINSI' ;
  138. 'SINON' ;
  139. 'MESS' ' - Impact : ligne-ligne ' ;
  140. 'FINSI' ;
  141. 'FINSI' ;
  142.  
  143. *
  144. *
  145. *----------------------------------------------------------------------------
  146. * INITIALISATIONS
  147. *----------------------------------------------------------------------------
  148. *
  149. *-- configuration initiale
  150. *
  151. CATOUCH = FAUX ;
  152. G_ZERO = 'FORM';
  153. *
  154. *-- calcul de la matrice masse
  155. *
  156. T_MAS = 'LUMP' MO_TOT MA_TOT ;
  157. MAIL1 = 'EXTR' MO_TOT 'MAIL' ;
  158. 'SI' ('EXISTE' ETAB 'IMPACT') ;
  159. 'SI' ('EXISTE' T_IMPA 'NEZ') ;
  160. PROJ = ETAB.'IMPACT' . 'ESCLAVE' ;
  161. MAIL1 = MAIL1 'ET' PROJ ;
  162. MASS_P = MASS DEPL ETAB.'IMPACT' . 'MASSE' PROJ;
  163. T_MAS = T_MAS 'ET' MASS_P ;
  164. 'FINSI' ;
  165. 'FINSI' ;
  166. CHP1 = 'MANU' 'CHPO' MAIL1 9
  167. 'UX' 1. 'UY' 1. 'UZ' 1. 'UR' 1. 'UT' 1.
  168. 'RX' 1. 'RY' 1. 'RZ' 1. 'RT' 1. ;
  169. CHPMAS = CHP1 '*' T_MAS ;
  170. CHPM1 = 'NOMC' CHPMAS
  171. ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT')
  172. ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT')
  173. 'NATU' 'DISCRET' ;
  174. CHPM_T = 'INVE' CHPM1 ;
  175. *
  176. *-- creation des chamelems de contrainte
  177. *
  178. 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ;
  179. IDIM = 'DIME' ETAB.'TEMPS' ;
  180. SIGMA_T = 'COPIER' (ETAB.'CONTRAINTES' . (IDIM-1)) ;
  181. SINON ;
  182. SIGMA_T = 'ZERO' MO_TOT 'CONTRAIN' ;
  183. 'FINSI' ;
  184. 'SI' (PPLAS) ;
  185. 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ;
  186. IDIM = 'DIME' ETAB.'TEMPS' ;
  187. D_INELAS = 'COPIER' ( ETAB . 'DEFORMATIONS_INELASTIQUES'
  188. .( IDIM - 1 ) );
  189. VARI_T = 'COPIER' (ETAB.'VARIABLES_INTERNES' . (IDIM-1)) ;
  190. SINON ;
  191. D_INELAS = 'ZERO' MO_TOT 'DEFORMAT' ;
  192. VARI_T = 'ZERO' MO_TOT 'VARINTER' ;
  193. 'FINSI' ;
  194. 'FINSI' ;
  195. *
  196. *-- champoints de deplacement et vitesse au pas initial
  197. *
  198. 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ;
  199. IDIM = 'DIME' ETAB.'TEMPS' ;
  200. DEPLA_T = 'COPIER' (ETAB.'DEPLACEMENTS' . (IDIM-1)) ;
  201. VITES_T = 'COPIER' (ETAB.'VITESSES' . (IDIM-1)) ;
  202. SINON ;
  203. CHPZERO1 = 'ZERO' MO_TOT 'DEPLACEM' ;
  204. DEPLA_T = 'CHANGER' 'CHPO' MO_TOT CHPZERO1 ;
  205. 'SI' ( 'EXISTE' ETAB 'VITESSE_INITIALE' ) ;
  206. VITES_T = 'COPIER' (ETAB.'VITESSE_INITIALE') ;
  207. 'SINON';
  208. VITES_T = 'CHANGER' 'CHPO' MO_TOT CHPZERO1 ;
  209. 'FINSI' ;
  210. 'MESS' ' - Vitesse initiale : ' ('MAXI' VITES_T) ;
  211. 'FINSI' ;
  212. *
  213. *-- conditions d'impact
  214. *
  215. 'SI' ('EXISTE' ETAB 'IMPACT') ;
  216. P_MAIT = ETAB . 'IMPACT' . 'MAITRE' ;
  217. P_ESCL = ETAB . 'IMPACT' . 'ESCLAVE' ;
  218. CONT_T = 'IMPO' 'IMPA' 'MAIT' P_MAIT 'ESCL' P_ESCL ;
  219. 'FINSI' ;
  220. *
  221. *-- calcul de la matrice de liaisons
  222. *
  223. 'SI' ( 'EXISTE' ETAB 'LIAISONS' ) ;
  224. C_LIAI = ETAB.'LIAISONS' ;
  225. MAIL2 = 'EXTR' C_LIAI 'MAIL' 'MULT' ;
  226. C_TOT = C_LIAI ;
  227. H0 = 'CMCT' C_TOT CHPM_T ;
  228. CABLOC = VRAI ;
  229. H = H0 ;
  230. 'SINON' ;
  231. CABLOC = FAUX ;
  232. 'MESS' ' - Pas de conditions aux limites' ;
  233. 'FINSI' ;
  234. *
  235. *-- champoint forces exterieures au pas initial
  236. *
  237. AUX1 = 'ZERO' MO_TOT 'FORCES ' ;
  238. CHFORC1 = 'CHANGER' 'CHPO' MO_TOT AUX1 ;
  239. FINT_T = 'COPIER' CHFORC1 ;
  240. 'SI' ('EXISTE' ETAB 'CHARGEMENT') ;
  241. FEXT1 = 'TIRER' ETAB.'CHARGEMENT' T_INIT ;
  242. 'SI' CABLOC ;
  243. GAMASL = '*'
  244. CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT')
  245. FEXT1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT')
  246. ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT');
  247. CGAMASL = (-1) '*' (C_LIAI '*' GAMASL) ;
  248. SECM_L = CGAMASL ;
  249. 'MESS' ' ' ;
  250. 'MESS' ' - Matrice de liaison initiale :' ;
  251. LAMBDA = 'RESOU' H0 SECM_L ;
  252. FEXT2 = 'REAC' C_TOT LAMBDA ;
  253. FEXT_T = FEXT1 + FEXT2 ;
  254. 'MESS' ' ' ;
  255. 'SINON' ;
  256. FEXT_T = FEXT1 ;
  257. 'FINSI' ;
  258. 'SINON' ;
  259. FEXT_T = 'COPIER' CHFORC1 ;
  260. 'FINSI' ;
  261. *
  262. *-- calcul de l'acceleration au pas initial
  263. *
  264. 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ;
  265. IDIM = 'DIME' ETAB.'TEMPS' ;
  266. ACCE_T = 'COPIER' (ETAB.'ACCELERATIONS'. (IDIM-1)) ;
  267. SINON ;
  268. ACCE_T = '*'
  269. CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT')
  270. FEXT_T ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT')
  271. ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT');
  272. 'FINSI' ;
  273. *
  274. *-- determination du pas de temps initial dt1
  275. *
  276. 'SI' ( 'EXISTE' ETAB 'PAS_TEMPS' ) ;
  277. DTAUTO = FAUX ;
  278. DT1_T = ETAB.'PAS_TEMPS' ;
  279. 'MESS' ' - Pas de temps fixé : ' DT1_T ;
  280. 'SINON' ;
  281. DTAUTO = VRAI ;
  282. 'SI' ( 'EXISTE' ETAB 'COEFF_STABILITE' ) ;
  283. CSTA = ETAB . 'COEFF_STABILITE' ;
  284. 'SINON' ;
  285. CSTA = 0.5 ;
  286. 'FINSI' ;
  287. DT1_T = CSTA '*' ('MINI' ('CFL' MO_TOT MA_TOT)) ;
  288. 'MESS' ' - Pas de temps automatique : ' DT1_T ;
  289. 'FINSI' ;
  290. *
  291. *-- determination du nombre de pas de temps maximum
  292. *
  293. 'SI' ( 'EXISTE' ETAB 'NPASMAX' ) ;
  294. NMAX1 = 'ENTIER' ( ETAB.'NPASMAX') ;
  295. 'SINON' ;
  296. NMAX1 = 10000000 ;
  297. 'FINSI' ;
  298. 'MESS' ' - Nombre maximum de pas : ' nmax1 ;
  299. *
  300. *-- determination du nombre de sauvegardes
  301. *
  302. 'SI' ( 'EXISTE' ETAB 'FREQUENCE_SORTIE' ) ;
  303. FSORT = ETAB . 'FREQUENCE_SORTIE' ;
  304. MESS ' - Fréquence d enregistrement des résultats : ' FSORT ;
  305. STEMP1 = ('PROG' 0 'PAS' FSORT NMAX1) '*' DT1_T ;
  306. 'SINON';
  307. 'SI' ( 'EXISTE' ETAB 'TEMPS_SORTIE' ) ;
  308. STEMP1 = ETAB . 'TEMPS_SORTIE';
  309. 'SINON';
  310. 'ERREUR' 'Definissez le temps ou la frequence de sortie' ;
  311. 'FINSI' ;
  312. 'FINSI' ;
  313. STEMP1 = 'ORDONNER' STEMP1 ;
  314. T_MAX = 'MAXI' STEMP1 ;
  315. MESS ' - Temps final : ' T_MAX ;
  316. ITEM = 0 ;
  317. 'REPETER' ETEM0 ;
  318. ITEM = ITEM + 1 ;
  319. T_SORT = 'EXTRAI' STEMP1 ITEM ;
  320. 'SI' ( T_SORT '>EG' T_INIT ) ;
  321. 'QUITTER' ETEM0 ;
  322. 'FINSI' ;
  323. 'FIN' ETEM0 ;
  324. *
  325. *- frequence pour le menage
  326. *
  327. JPAS = 0 ;
  328. FREQ_M = 50 ;
  329. 'SI' ( 'EXISTE' ETAB 'FREQ_MENAGE' ) ;
  330. FREQ_M = 'ENTIER' ( ETAB . 'FREQ_MENAGE' ) ;
  331. 'SI' ( FREQ_M 'EGA' 0 ) ;
  332. FREQ_M = 50 ;
  333. 'FINSI' ;
  334. 'FINSI' ;
  335. 'MESS' ' - Fréquence de ménage : ' FREQ_M 'pas' ;
  336. *
  337. *-- initialisation de la table de sortie
  338. *
  339. IPAS = 0 ;
  340. 'SAUT' 1 lignes ;
  341. 'MESS' '==== Début des calculs de la procédure DREXUS ====' ;
  342. 'SAUT' 1 lignes ;
  343. 'SI' ( 'EXISTE' ETAB 'DEPLACEMENTS' ) ;
  344. ISTOC = ('DIME' ETAB.'DEPLACEMENTS') - 1 ;
  345. 'SINON' ;
  346. ETAB.'NPAS' = 'TABLE' ;
  347. ETAB.'TEMPS' = 'TABLE' ;
  348. ETAB.'DEPLACEMENTS' = 'TABLE' ;
  349. ETAB.'VITESSES' = 'TABLE' ;
  350. ETAB.'ACCELERATIONS' = 'TABLE' ;
  351. ETAB.'FORCES_EXTERIEURES' = 'TABLE' ;
  352. ETAB.'CONTRAINTES' = 'TABLE' ;
  353. ETAB.'VARIABLES_INTERNES' = 'TABLE' ;
  354. ETAB.'DEFORMATIONS_INELASTIQUES' = 'TABLE' ;
  355. ISTOC = 0 ;
  356. 'SI' ( T_SORT 'EGA' T_INIT ) ;
  357. 'MESS' 'Enregistrement des résultats pour le temps'
  358. T_INIT 'pas n°' IPAS ;
  359. ETAB.'NPAS' . ISTOC = 0 ;
  360. ETAB.'TEMPS' . ISTOC = T_SORT;
  361. ETAB.'DEPLACEMENTS'. ISTOC = 'COPIER' DEPLA_T ;
  362. ETAB.'VITESSES' . ISTOC = 'COPIER' VITES_T ;
  363. ETAB.'ACCELERATIONS' . ISTOC = 'COPIER' ACCE_T ;
  364. ETAB.'FORCES_EXTERIEURES' . ISTOC = 'COPIER' FEXT_T ;
  365. ETAB.'CONTRAINTES' . ISTOC = 'COPIER' SIGMA_T ;
  366. 'SI' (PPLAS) ;
  367. ETAB.'VARIABLES_INTERNES' . ISTOC = 'COPIER' VARI_T ;
  368. ETAB.'DEFORMATIONS_INELASTIQUES'. ISTOC = 'COPIER' D_INELAS ;
  369. 'FINSI' ;
  370. ITEM=ITEM + 1 ;
  371. T_SORT = 'EXTRAI' STEMP1 ITEM ;
  372. 'FINSI' ;
  373. 'FINSI' ;
  374. *
  375. *-- définition du temps zero
  376. *
  377. T_0 = T_INIT ;
  378. *
  379. *----------------------------------------------------------------------------
  380. * BOUCLE SUR LES PAS DE TEMPS
  381. *----------------------------------------------------------------------------
  382. *
  383. 'REPETER' ETIPAS NMAX1 ;
  384. IPAS = IPAS + 1 ;
  385. T_1 = T_0 + DT1_T ;
  386. *
  387. *-- vitesse au pas n+1/2
  388. *
  389. DT1_DEMI = 0.5 * DT1_T ;
  390. V_DEMI = 'COLI' VITES_T 1.D0 ACCE_T DT1_DEMI ;
  391. *
  392. *-- deplacement au pas n+1
  393. *
  394. DU1 = DT1_T * V_DEMI ;
  395. DEPLA_T1 = DEPLA_T + DU1 ;
  396. 'DETR' DEPLA_T ;
  397. DEPLA_T = DEPLA_T1 ;
  398. *
  399. *-- calcul des forces internes au pas n+1
  400. *
  401. ZPREK = 1E-3;
  402. *
  403. * traitement des grandes déformations
  404. 'SI' CANLGEO ;
  405. ZDEP_1 = 0.5D0 * DU1 ;
  406. ZSIG0 = PICA MO_TOT SIGMA_T ZDEP_1 ;
  407. 'SI' PPLAS ;
  408. ZEPS0 = D_INELAS ;
  409. ZVAR0 = VARI_T ;
  410. * ici il faudra faire le transport des variables internes
  411. * et eventuellement des déformations plastiques
  412. 'FINSI'
  413. *
  414. * on calcule la deformation au demi pas de temps
  415. * il faut pour les poutres ,les tuyaux, les tuyaux fissures
  416. * et les linespring mettre à jour le matériau
  417. 'FORM' ZDEP_1 ;
  418. DEPST = 'EPSI' MO_TOT DU1 MA_TOT ;
  419. *
  420. 'SINON' ;
  421. *
  422. * en petits déplacements
  423. ZSIG0 = SIGMA_T;
  424. DEPST = 'EPSI' MO_TOT DU1 MA_TOT ;
  425. 'SI' PPLAS ;
  426. ZVAR0 = VARI_T ;
  427. ZEPS0 = D_INELAS ;
  428. 'FINSI' ;
  429. 'FINSI' ;
  430. *
  431. * calcul des contraintes
  432. 'SI' PPLAS ;
  433. SIGMA_T1 ZVARF ZDEPSPL = 'ECOULE' MO_TOT ZSIG0 ZVAR0
  434. DEPST MA_TOT ETAB ZPREK 'NOID' ;
  435.  
  436. SIGMA_T0 = SIGMA_T ;
  437. SIGMA_T = SIGMA_T1 ;
  438. *
  439. * l'ecoulement se passe mal
  440. 'SI' ('NON' ETAB.'SUCCES') ;
  441. 'ERREUR' 'Pas de convergence dans l écoulement' ;
  442. 'FINSI' ;
  443. *
  444. 'SINON' ;
  445. DSIGT = 'ELAS' DEPST MO_TOT MA_TOT ;
  446. SIGMA_T1 = ZSIG0 + DSIGT ;
  447. SIGMA_T0 = SIGMA_T ;
  448. SIGMA_T = SIGMA_T1 ;
  449. 'DETR' DSIGT ;
  450. 'FINSI' ;
  451.  
  452. *
  453. * transport des contraintes vers la configuration n+1
  454. 'SI' CANLGEO ;
  455. ZSIGF05 = SIGMA_T ;
  456. SIGMA_T = PICA MO_TOT ZSIGF05 ZDEP_1 ;
  457. * ici il faudra faire le transport des variables internes
  458. * et eventuellement des déformations plastiques
  459. *
  460. * passage à la configuration n+1
  461. 'FORM' ZDEP_1 ;
  462. 'DETR' ZDEP_1;
  463. 'FINSI' ;
  464. *
  465. * on determine les forces internes
  466. 'SI' CAMOR ;
  467. FINT_T1 = 'BSIGMA' MO_TOT SIGMA_T MA_TOT ;
  468. FINT_T2 = KAMOR '*' V_DEMI ;
  469. FINT_T = FINT_T1 + FINT_T2 ;
  470. 'DETR' FINT_T1 ; 'DETR' FINT_T2 ;
  471. 'SINON' ;
  472. 'DETR' FINT_T ;
  473. FINT_T = 'BSIGMA' MO_TOT SIGMA_T MA_TOT ;
  474. 'FINSI' ;
  475.  
  476. *
  477. 'SI' PPLAS ;
  478. * 'DETR' VARI_T ;
  479. VARI_T = ZVARF;
  480. D_INELAS = ZEPS0 + ZDEPSPL ;
  481. * 'DETR' ZEPS0 ;
  482. * 'DETR' ZDEPSPL;
  483. 'FINSI';
  484. *
  485. *-- calcul du pas de temps suivant dt2
  486. 'SI' DTAUTO ;
  487. 'SI' ('NON' CANLGEO) ;
  488. 'FORM' DU1 ;
  489. 'FINSI' ;
  490. DT2_T = CSTA '*' ('MINI' ('CFL' MO_TOT MA_TOT)) ;
  491. 'SINON' ;
  492. DT2_T = DT1_T ;
  493. 'FINSI' ;
  494. *
  495. *-- calcul des forces exterieures au pas n+1
  496. *
  497. * forces exterieures imposées
  498. 'SI' ('EXISTE' ETAB 'CHARGEMENT' ) ;
  499. FEXT1 = 'TIRER' ETAB.'CHARGEMENT' T_1 ;
  500. 'SINON';
  501. FEXT1 = CHFORC1;
  502. 'FINSI';
  503. *
  504. * conditions d'impact au pas n+1
  505. 'SI' ('EXISTE' ETAB 'IMPACT') ;
  506. 'SI' ('ET' ('NON' CANLGEO) ('NON' DTAUTO));
  507. 'FORM' DU1 ;
  508. 'FINSI' ;
  509. 'SI' ('EXISTE' T_IMPA 'NEZ') ;
  510. FNEZ = ETAB.'IMPACT' . 'NEZ' ;
  511. LAR = ETAB.'IMPACT' . 'LARGEUR' ;
  512. VEC = ETAB.'IMPACT' . 'VECTEUR' ;
  513. 'SI' ('EGA' FNEZ 'CONE') ;
  514. ALP = ETAB.'IMPACT' . 'ANGLE' ;
  515. C_IMP = 'IMPO' 'IMPA' CONT_T FNEZ LAR 'ANGL' ALP 'VECT' VEC;
  516. 'SINON' ;
  517. C_IMP = 'IMPO' 'IMPA' CONT_T FNEZ LAR 'VECT' VEC ;
  518. 'FINSI' ;
  519. 'SINON' ;
  520. C_IMP = 'IMPO' 'IMPA' CONT_T ;
  521. 'FINSI' ;
  522. CATOUCH = 'EXISTE' C_IMP ;
  523. 'SI' CATOUCH ;
  524. DT_I = 2. '/' ( DT1_T '+' DT2_T ) ;
  525. SECM_I = DT_I '*' (C_IMP '*' V_DEMI) ;
  526. SECM_I = 'CHANGER' 'ATTRIBUT' SECM_I 'NATURE' 'DIFFUS' ;
  527. 'FINSI' ;
  528. 'FINSI' ;
  529. *
  530. * matrice de liaison au pas n+1
  531. 'SI' ('ET' CABLOC CATOUCH ) ;
  532. C_TOT = C_LIAI 'ET' C_IMP ;
  533. H = 'CMCT' C_TOT CHPM_T ;
  534. 'SINON' ;
  535. 'SI' CABLOC ;
  536. C_TOT = C_LIAI ;
  537. H = H0 ;
  538. 'FINSI' ;
  539. 'SI' CATOUCH ;
  540. C_TOT = C_IMP ;
  541. H = 'CMCT' C_TOT CHPM_T ;
  542. 'FINSI' ;
  543. 'FINSI' ;
  544. *
  545. * multiplicateurs de Lagrange au pas n+1
  546. 'SI' ('OU' CABLOC CATOUCH ) ;
  547. AUX1 = FEXT1 - FINT_T ;
  548. GAMASL = '*'
  549. CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT')
  550. AUX1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT')
  551. ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT');
  552. CGAMASL = C_TOT '*' GAMASL ;
  553. 'SI' CATOUCH ;
  554. SECM_T = CGAMASL '+' SECM_I ;
  555. 'SINON' ;
  556. SECM_T = CGAMASL ;
  557. 'FINSI' ;
  558. LAMBDA = 'RESOU' H SECM_T ;
  559. *
  560. * rupture de contact
  561. 'SI' CATOUCH ;
  562. 'SI' CABLOC ;
  563. LAMB_L = 'REDU' LAMBDA MAIL2 ;
  564. LAMB_I = LAMBDA '-' LAMB_L ;
  565. 'SINON';
  566. LAMB_I = LAMBDA ;
  567. 'FINSI' ;
  568. AUX2 = LAMB_I 'MASQUE' 'SUPERIEUR' 0. ;
  569. LAMB_I = '*' LAMB_I ('MOTS' 'LX') AUX2 ('MOTS' 'LX')
  570. ('MOTS' 'LX') ;
  571. 'SI' CABLOC ;
  572. LAMBDA = LAMB_I '+' LAMB_L ;
  573. 'SINON';
  574. LAMBDA = LAMB_I ;
  575. 'FINSI' ;
  576. 'FINSI' ;
  577. *
  578. FEXT2 = 'REAC' C_TOT LAMBDA ;
  579. 'SINON';
  580. FEXT2 = CHFORC1;
  581. 'FINSI' ;
  582. *
  583. * assemblage des forces exterieures au pas n+1
  584. FEXT_T = FEXT1 '+' FEXT2 ;
  585. *
  586. *-- acceleration au pas n+1
  587. *
  588. AUX1 = FEXT_T - FINT_T ;
  589. 'DETR' ACCE_T ;
  590. ACCE_T = '*'
  591. CHPM_T ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT')
  592. AUX1 ('MOTS' 'FX' 'FY' 'FZ' 'FR' 'FT' 'MX' 'MY' 'MZ' 'MT')
  593. ('MOTS' 'UX' 'UY' 'UZ' 'UR' 'UT' 'RX' 'RY' 'RZ' 'RT');
  594. *
  595. *-- vitesse au pas n+1
  596. *
  597. VITES_T1 = 'COLI' V_DEMI 1.D0 ACCE_T DT1_DEMI;
  598. 'DETR' VITES_T ;
  599. VITES_T = VITES_T1 ;
  600. 'DETR' V_DEMI ;
  601. *
  602. *-- enregistrement de l'instant courant
  603. *
  604. 'SI' ( T_SORT '<EG' T_1 ) ;
  605. 'MESS' 'Enregistrement des résultats pour le temps'
  606. T_1 'pas n°' IPAS ;
  607. ISTOC = ISTOC + 1 ;
  608. ETAB.'NPAS' . ISTOC = IPAS;
  609. ETAB.'TEMPS' . ISTOC = T_1;
  610. ETAB.'DEPLACEMENTS' . ISTOC = 'COPIER' DEPLA_T ;
  611. ETAB.'VITESSES' . ISTOC = 'COPIER' VITES_T ;
  612. ETAB.'ACCELERATIONS' . ISTOC = 'COPIER' ACCE_T ;
  613. ETAB.'FORCES_EXTERIEURES' . ISTOC = 'COPIER' FEXT_T ;
  614. ETAB.'CONTRAINTES' . ISTOC = 'COPIER' SIGMA_T ;
  615. 'SI' (PPLAS);
  616. ETAB.'DEFORMATIONS_INELASTIQUES' . ISTOC = 'COPIER' D_INELAS;
  617. ETAB.'VARIABLES_INTERNES' . ISTOC = 'COPIER' VARI_T ;
  618. 'FINSI';
  619. *
  620. 'REPETER' ETEMP;
  621. 'SI' ( T_SORT '>EG' T_MAX) ;
  622. QUITTER ETEMP;
  623. 'FINSI';
  624. ITEM=ITEM + 1 ;
  625. T_SORT = 'EXTRAI' STEMP1 ITEM ;
  626. 'SI' ( T_SORT '>' T_1) ;
  627. QUITTER ETEMP;
  628. 'FINSI';
  629. 'FIN' ETEMP;
  630. 'FINSI' ;
  631. *
  632. *-- test sur le nombre de pas
  633. *
  634. 'SI' (IPAS '>EG' NMAX1) ;
  635. 'QUITTER' ETIPAS ;
  636. 'FINSI' ;
  637. *
  638. *-- test sur le temps
  639. *
  640. 'SI' ( T_1 '>EG' T_MAX ) ;
  641. 'QUITTER' ETIPAS ;
  642. 'FINSI' ;
  643. *
  644. *-- actualisation du temps
  645. T_0 = T_1 ;
  646. DT1_T = DT2_T ;
  647. *
  648. *-- menage
  649. *
  650. JPAS = JPAS + 1 ;
  651. 'SI' ( JPAS 'EGA' FREQ_M ) ;
  652. JPAS = 0 ;
  653. * TABTPS = TEMP 'NOEC';
  654. * MESS IPAS TABTPS.'TEMPS_CPU'.'INITIAL';
  655. 'MENAGE' 'GOON' ;
  656. 'FINSI' ;
  657. 'SI' CANLGEO ;
  658. 'DETR' ZSIGF05 ;
  659. 'FINSI' ;
  660. 'DETR' DU1 ;
  661. * 'DETR' SIGMA_T0 ;
  662. * 'DETR' DEPST ;
  663. *
  664. 'FIN' ETIPAS ;
  665. *
  666. *----------------------------------------------------------------------------
  667. * FIN DE LA BOUCLE SUR LES PAS DE TEMPS
  668. *----------------------------------------------------------------------------
  669. *
  670. *-- on se remet dans la configuration initiale
  671. *
  672. 'FORM' G_ZERO ;
  673. *
  674. 'FINPROC' ETAB ;
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales