Télécharger dynamic.procedur

Retour à la liste

Numérotation des lignes :

  1. * DYNAMIC PROCEDUR JC220346 17/02/16 21:15:02 9313
  2. * ======================================================================
  3. * CALCUL DE LA REPONSE DYNAMIQUE PAR INTEGRATION TEMPORELLE
  4. * (SCHEMA DE NEWMARK OU HHT OU ALPHA-GENERALISE)
  5. * ======================================================================
  6. * Creation : ???, 1988 ???
  7. * Refonte : Benoit Prabel, 23/07/2015
  8. * Modifications : JCARDO 15/02/2017 => post-traitement tableur + VTK
  9. * ======================================================================
  10. DEBP DYNAMIC ETAB*'TABLE' ;
  11.  
  12. IECHO = VALE 'ECHO' ;
  13.  
  14. * +-----------------------------------------------------------------+
  15. * | |
  16. * | L E C T U R E D E S P A R A M E T R E S |
  17. * | |
  18. * +-----------------------------------------------------------------+
  19.  
  20. * ================
  21. * OPTIONS INTERNES
  22. * ================
  23.  
  24. KMENAG = VRAI ;
  25.  
  26.  
  27. * ===================================================
  28. * PARAMETRES DE L'ALGORITHME D'INTEGRATION TEMPORELLE
  29. * ===================================================
  30.  
  31. SI ((EXIS ETAB 'ALPHA_F') ET (EXIS ETAB 'RHO_INF')) ;
  32. MESS 'Veuillez fournir 1 seul parametre parmi :' ;
  33. MESS ' ALPHA_F => algorithme HHT ' ;
  34. MESS ' RHO_INF => algorithme alpha-generalise' ;
  35. ERRE 21 ;
  36. FINS ;
  37.  
  38. * => Newmark acceleration moyenne (IALGO = 0)
  39. IALGO = 0 ;
  40. ALPHAM = 0. ;
  41. ALPHAF = 0. ;
  42.  
  43. * => HHT (IALGO = 1)
  44. SI (EXIS ETAB 'ALPHA_F') ;
  45. ALPHAF = ETAB.'ALPHA_F' ;
  46. SI (IECHO >EG 0) ;
  47. MESS 'ALGO = HHT (ALPHA_F=' ALPHAF ')' ;
  48. FINS ;
  49. IALGO = 1 ;
  50. FINS ;
  51.  
  52. * => alpha-generalise (IALGO = 2)
  53. SI (EXIS ETAB 'RHO_INF') ;
  54. RHOINF = ETAB . 'RHO_INF' ;
  55. ALPHAM = ((2.*RHOINF) - 1.) / (1.+RHOINF) ;
  56. ALPHAF = RHOINF / (1.+RHOINF) ;
  57. SI (IECHO >EG 0) ;
  58. MESS 'ALGO = alpha-generalise (ALPHA_M=' ALPHAM
  59. ' & ALPHA_F=' ALPHAF ')' ;
  60. FINS ;
  61. IALGO = 2 ;
  62. FINS ;
  63.  
  64.  
  65. * ====================
  66. * CONDITIONS INITIALES
  67. * ====================
  68.  
  69. U0 = ETAB.'DEPL' ;
  70. V0 = ETAB.'VITE' ;
  71.  
  72.  
  73. * =======================
  74. * MATRICES ET CHARGEMENTS
  75. * =======================
  76.  
  77. * Matrices et chargements constants
  78. K = ETAB.'RIGI' ;
  79. M = ETAB.'MASS' ;
  80. KAMOR = EXIS ETAB 'AMOR' ;
  81. SI KAMOR ;
  82. C = EXTR (ETAB.'AMOR') 'RIGI' 'NOMU' ;
  83. SI (IECHO >EG 0) ;
  84. MESS 'Presence d une matrice d amortissement' ;
  85. FINS ;
  86. FINS ;
  87. CHAR1 = ETAB.'CHAR' ;
  88.  
  89. * Matrices et chargements "utilisateur" via la procedure CHARMECA
  90. KCHARM = FAUX ;
  91. SI (EXIS ETAB 'CHARMECA') ;
  92. KCHARM = ETAB.'CHARMECA' ;
  93. FINS ;
  94.  
  95.  
  96. * ====================================
  97. * APPEL A VITEUNIL POUR LES CONTACTS ?
  98. * ====================================
  99.  
  100. SI (EXIS ETAB 'VITEUNIL') ;
  101. KVITUN = ETAB.'VITEUNIL' ;
  102. SINON ;
  103. KVITUN = (EGA IALGO 0) ;
  104. FINS ;
  105.  
  106. SI (KVITUN ET (NEG IALGO 0)) ;
  107. MESS 'VITEUNIL compatible uniquement avec le schema de Newmark '
  108. 'acceleration moyenne' ;
  109. ERRE 21 ;
  110. FINS ;
  111.  
  112.  
  113. * ====================
  114. * PARAMETRES TEMPORELS
  115. * ====================
  116.  
  117. * Nouvelle syntaxe :
  118. SI (EXIS ETAB 'TEMPS_CALCULES') ;
  119. TPROG = ETAB.'TEMPS_CALCULES' ;
  120.  
  121. SI ((MINI ((ENLE TPROG 1) - (ENLE TPROG (DIME TPROG)))) <EG 0.) ;
  122. MESS 'La liste des TEMPS_CALCULES doit etre strictement '
  123. 'croissante !' ;
  124. ERRE 21 ;
  125. FINS ;
  126.  
  127. * Ancienne syntaxe : on avertit et on traduit
  128. SINON ; SI (EXIS ETAB 'FREQ') ;
  129. MESS '!!! SYNTAXE BIENTOT OSBOLETE : CONSULTEZ LA NOTICE !!!' ;
  130. MESS '!!! (LE CALCUL SE POURSUIT MALGRE TOUT...) !!!' ;
  131. DTFREQ = 0.25 / ETAB.'FREQ' ;
  132. SI (EXIS ETAB 'DEBU') ;
  133. T0 = ETAB.'DEBU' ;
  134. SINON ;
  135. T0 = 0. ;
  136. FINS ;
  137.  
  138. TSORT = ORDO ETAB.'INST' ;
  139. ETAB.'TEMPS_SAUVES' = TSORT ;
  140.  
  141. TFIN = DTFREQ * (ENTI 'SUPERIEUR' (MAXI TSORT / DTFREQ)) ;
  142. TPROG = PROG T0 PAS DTFREQ TFIN ;
  143. ETAB.'TEMPS_CALCULES' = TPROG ;
  144.  
  145. SINON ;
  146. MESS 'Liste des TEMPS_CALCULES absente de la table !' ;
  147. ERRE 21 ;
  148. FINS ; FINS ;
  149.  
  150. NPAS = DIME TPROG ;
  151.  
  152.  
  153. * ========================
  154. * PARAMETRES DE SAUVEGARDE
  155. * ========================
  156.  
  157. IGIB = 0 ;
  158. ICSV = 0 ;
  159. IVTK = 0 ;
  160.  
  161.  
  162. * SAUVEGARDE VTK
  163. * --------------
  164.  
  165. * Instants de sauvegarde
  166. SI (EXIS ETAB 'PAS_SAUVES_VTK') ;
  167. SI (EGA (TYPE ETAB.'PAS_SAUVES_VTK') 'ENTIER') ;
  168. IPASVTK = ETAB.'PAS_SAUVES_VTK' ;
  169. SINON ;
  170. SI (EGA (ETAB.'PAS_SAUVES_VTK') 'TOUS') ;
  171. IPASVTK = 1 ;
  172. SINON ; SI (EGA (ETAB.'PAS_SAUVES_VTK') 'FINAL') ;
  173. IPASVTK = NPAS ;
  174. SINON ;
  175. MESS 'PAS_SAUVES_VTK est de type incorrect !' ;
  176. ERRE 21 ;
  177. FINS ; FINS ;
  178. FINS ;
  179. IVTK = 1 ;
  180. SINON ; SI (EXIS ETAB 'TEMPS_SAUVES_VTK') ;
  181. SI (NEG (TYPE ETAB.'TEMPS_SAUVES_VTK') 'LISTREEL') ;
  182. MESS 'TEMPS_SAUVES_VTK doit etre de type LISTREEL !' ;
  183. ERRE 21 ;
  184. FINS ;
  185. IVTK = 2 ;
  186. FINS ; FINS ;
  187.  
  188. * Emplacement de sauvegarde
  189. SI (EXIS ETAB 'FICHIER_VTK') ;
  190. FICVTK = ETAB.'FICHIER_VTK' ;
  191. SINON ;
  192. FICVTK = 'DYNAMIC' ;
  193. FINS ;
  194.  
  195. * Liste des maillages a sauvegarder
  196. SI (IVTK > 0) ;
  197. SI (EXIS ETAB 'MAILLAGE_VTK') ;
  198. MAIVTK = ETAB.'MAILLAGE_VTK' ;
  199. SINON ;
  200. MESS 'L indice MAILLAGE_VTK est obligatoire !' ;
  201. ERRE 21 ;
  202. FINS ;
  203. FINS ;
  204.  
  205.  
  206. * SAUVEGARDE CSV (TABLEUR)
  207. * ------------------------
  208.  
  209. * Instants de sauvegarde
  210. SI (EXIS ETAB 'PAS_SAUVES_CSV') ;
  211. SI (EGA (TYPE ETAB.'PAS_SAUVES_CSV') 'ENTIER') ;
  212. IPASCSV = ETAB.'PAS_SAUVES_CSV' ;
  213. SINON ;
  214. SI (EGA (ETAB.'PAS_SAUVES_CSV') 'TOUS') ;
  215. IPASCSV = 1 ;
  216. SINON ; SI (EGA (ETAB.'PAS_SAUVES_CSV') 'FINAL') ;
  217. IPASCSV = NPAS ;
  218. SINON ;
  219. MESS 'PAS_SAUVES_CSV est de type incorrect !' ;
  220. ERRE 21 ;
  221. FINS ; FINS ;
  222. FINS ;
  223. ICSV = 1 ;
  224. SINON ; SI (EXIS ETAB 'TEMPS_SAUVES_CSV') ;
  225. SI (NEG (TYPE ETAB.'TEMPS_SAUVES_CSV') 'LISTREEL') ;
  226. MESS 'TEMPS_SAUVES_CSV doit etre de type LISTREEL !' ;
  227. ERRE 21 ;
  228. FINS ;
  229. ICSV = 2 ;
  230. FINS ; FINS ;
  231.  
  232. * Emplacement de sauvegarde (eventuellement a la fin du calcul)
  233. SI (EXIS ETAB 'FICHIER_CSV') ;
  234. KFICCSV = VRAI ;
  235. FICCSV = ETAB.'FICHIER_CSV' ;
  236. SINON ;
  237. KFICCSV = FAUX ;
  238. FINS ;
  239.  
  240. * Liste des noeuds et composantes a sauvegarder
  241. SI (ICSV > 0) ;
  242. SI (EXIS ETAB 'MAILLAGE_CSV') ;
  243. MAICSV = CHAN 'POI1' ETAB.'MAILLAGE_CSV' ;
  244. NELCSV = NBEL MAICSV ;
  245. SI (NELCSV EGA 0) ;
  246. MESS 'Le maillage MAILLAGE_CSV est vide !' ;
  247. ERRE 21 ;
  248. FINS ;
  249. SINON ;
  250. MESS 'L indice MAILLAGE_CSV est obligatoire !' ;
  251. ERRE 21 ;
  252. FINS ;
  253.  
  254. KLISCO = FAUX ;
  255. SI (EXIS ETAB 'COMPOSANTES_CSV') ;
  256. LISCO = ETAB.'COMPOSANTES_CSV' ;
  257. KLISCO = VRAI ;
  258. SI ((DIME LISCO) EGA 0) ;
  259. MESS 'La liste COMPOSANTES_CSV est vide !' ;
  260. ERRE 21 ;
  261. FINS ;
  262. FINS ;
  263. FINS ;
  264.  
  265.  
  266. * SAUVEGARDE GIBIANE
  267. * ------------------
  268.  
  269. * Instants de sauvegarde
  270. SI (EXIS ETAB 'PAS_SAUVES') ;
  271. SI (EGA (TYPE ETAB.'PAS_SAUVES') 'ENTIER') ;
  272. IPASGIB = ETAB.'PAS_SAUVES' ;
  273. SINON ;
  274. SI (EGA (ETAB.'PAS_SAUVES') 'TOUS') ;
  275. IPASGIB = 1 ;
  276. SINON ; SI (EGA (ETAB.'PAS_SAUVES') 'FINAL') ;
  277. IPASGIB = NPAS ;
  278. SINON ;
  279. MESS 'PAS_SAUVES est de type incorrect !' ;
  280. ERRE 21 ;
  281. FINS ; FINS ;
  282. FINS ;
  283. IGIB = 1 ;
  284. SINON ; SI (EXIS ETAB 'TEMPS_SAUVES') ;
  285. SI (NEG (TYPE ETAB.'TEMPS_SAUVES') 'LISTREEL') ;
  286. MESS 'TEMPS_SAUVES doit etre de type LISTREEL !' ;
  287. ERRE 21 ;
  288. FINS ;
  289. IGIB = 2 ;
  290. SINON ;
  291. IPASGIB = 4 ;
  292. IGIB = 1 ;
  293. FINS ; FINS ;
  294.  
  295. * Sauvegarde incrementale ?
  296. * (appel a "SAUV MUET ETAB" => ecriture sur disque)
  297. KINCR = FAUX ;
  298. SI (EXIS ETAB 'SAUV') ;
  299. KINCR = ETAB.'SAUV' ;
  300. SI (KINCR ET (IECHO >EG 0)) ;
  301. MESS 'SAUVegarde incrementale activee' ;
  302. FINS ;
  303. FINS ;
  304.  
  305. * Fantomisation des resultats au fur et a mesure du calcul
  306. KECON = FAUX ;
  307. SI (EXIS ETAB 'ECON') ;
  308. KECON = ETAB.'ECON' ;
  309. FINS ;
  310.  
  311. * Restriction de la geometrie a sauvegarder
  312. KMAIGIB = EXIS ETAB 'MAILLAGE_SAUVE' ;
  313. SI KMAIGIB ;
  314. MAIGIB = ETAB.'MAILLAGE_SAUVE' ;
  315. FINS ;
  316.  
  317.  
  318.  
  319. * +-----------------------------------------------------------------+
  320. * | |
  321. * | I N I T I A L I S A T I O N S |
  322. * | |
  323. * +-----------------------------------------------------------------+
  324.  
  325. * ===================================================
  326. * PARAMETRES DE L'ALGORITHME D'INTEGRATION TEMPORELLE
  327. * ===================================================
  328.  
  329. ALPHA = ALPHAF - ALPHAM ;
  330. GAMMA = 0.5 + ALPHA ;
  331. BETA = 0.25 * ((1.+ALPHA)**2) ;
  332. 1MAF = 1. - ALPHAF ;
  333. 1MAM = 1. - ALPHAM ;
  334. GAMBET = GAMMA / BETA ;
  335. SI (IECHO >EG 0) ;
  336. MESS (CHAI 'Calcul avec GAMMA=' GAMMA ' BETA=' BETA
  337. ' (GAMMA/BETA=' GAMBET ')') ;
  338. FINS ;
  339.  
  340.  
  341. * ====================
  342. * PARAMETRES TEMPORELS
  343. * ====================
  344.  
  345. IPAS = 1 ;
  346. T0 = EXTR TPROG IPAS ;
  347. DT0 = 0. ;
  348. CHACHA = CHAI 'PAS #' IPAS ' TEMPS' T0 ;
  349.  
  350.  
  351. * ===================
  352. * SYSTEME D'EQUATIONS
  353. * ===================
  354.  
  355. OPER = VIDE 'RIGIDITE' ;
  356. F0 = TIRE CHAR1 T0 ;
  357.  
  358.  
  359. * =====================================================
  360. * ACCELERATION INITIALE A0 (NOUVEAUX SCHEMAS TEMPORELS)
  361. * =====================================================
  362.  
  363. SI (EXIS ETAB 'ACCE') ;
  364. A0 = ETAB.'ACCE' ;
  365. SINON ;
  366. K0 = K ;
  367. F2ND = (F0 ENLE 'FLX') - (K * U0) ;
  368. SI KAMOR ;
  369. F2ND = F2ND - (C * V0) ;
  370. FINS ;
  371. SI KCHARM ;
  372. TCHAR = CHARMECA WTAB ;
  373. KCHAF = EXIS TCHAR 'ADDI_SECOND' ;
  374. SI KCHAF ;
  375. F2ND = F2ND + TCHAR.'ADDI_SECOND' ;
  376. FINS ;
  377. KCHAK = EXIS TCHAR 'ADDI_MATRICE' ;
  378. SI KCHAK ;
  379. K0 = K0 ET TCHAR.'ADDI_MATRICE' ;
  380. FINS ;
  381. FINS ;
  382. FREAC0 = REAC K0 U0 ;
  383. F2ND = F2ND + FREAC0 ;
  384. * (1.*M) POUR EVITER PB HORODATAGE SI REUTILISATION DE M PLUS TARD
  385. A0 = RESO (1.*M) F2ND ;
  386. FINS ;
  387.  
  388.  
  389. * ===================
  390. * TABLES DE RESULTATS
  391. * ===================
  392.  
  393. INDVTK = 0 ;
  394. INDCSV = 0 ;
  395. INDGIB = 0 ;
  396.  
  397. * SAUVEGARDE VTK
  398. * --------------
  399. SI (IVTK > 0) ;
  400. SI (IVTK EGA 1) ;
  401. KVTK = VRAI ;
  402. SINON ;
  403. KVTK = DANS ETAB.'TEMPS_SAUVES_VTK' T0 ;
  404. FINS ;
  405.  
  406. SI KVTK ;
  407. INDVTK = INDVTK + 1 ;
  408. OPTI 'SORT' FICVTK ;
  409. SORT 'VTK' MAIVTK U0 'DEPL' V0 'VITE' 'TEMP' T0 ;
  410. CHACHA = CHAI CHACHA ' => VTK #' INDVTK ;
  411. FINS ;
  412. FINS ;
  413.  
  414. * SAUVEGARDE CSV
  415. * --------------
  416. SI (ICSV > 0) ;
  417.  
  418. * Initialisation de la table TABCSV
  419. TABCSV = TABL ;
  420. ETAB.'RESULTATS_CSV' = TABCSV ;
  421. TABCSV.'TEMPS' = PROG ;
  422. LCOCSV = MOTS ;
  423. LPOCSV = LECT ;
  424.  
  425. * Titres de colonnes et initialisation des LISTREEL
  426. CHPO1 = REDU (CHPO 'UNIFORME' 0. K) MAICSV ;
  427. REPE I1 NELCSV ;
  428. POIN1 = MAICSV POIN &I1 ;
  429. COMP1 = EXTR (REDU CHPO1 POIN1) 'COMP' ;
  430. SI KLISCO ;
  431. COMP1 = COMP1 SAUF (COMP1 SAUF LISCO) ;
  432. FINS ;
  433. NCO1 = DIME COMP1 ;
  434. SI (NCO1 EGA 0) ;
  435. ITER I1 ;
  436. FINS ;
  437. LPOCSV = LPOCSV ET (LECT NCO1*&I1) ;
  438. REPE I2 NCO1 ;
  439. CHA1 = EXTR COMP1 &I2 ;
  440. REPE I3 4 ;
  441. J3 = 5 - &I3 ;
  442. SI (NEG (EXTR CHA1 J3 J3) ' ') ;
  443. CHA1 = EXTR CHA1 1 J3 ;
  444. QUIT I3 ;
  445. FINS ;
  446. FIN I3 ;
  447. LCOCSV = LCOCSV ET CHA1 ;
  448. NOM1 = CHAI 'DEPL_' CHA1 '_' &I1 ;
  449. NOM2 = CHAI 'VITE_' CHA1 '_' &I1 ;
  450. TABCSV.NOM1 = PROG ;
  451. TABCSV.NOM2 = PROG ;
  452. FIN I2 ;
  453. FIN I1 ;
  454. _TABCSV = INDE TABCSV ;
  455. NBCSV = ((DIME TABCSV) - 1) / 2 ;
  456.  
  457. * Garder l'instant initial ?
  458. SI (ICSV EGA 1) ;
  459. KCSV = VRAI ;
  460. SINON ;
  461. KCSV = DANS ETAB.'TEMPS_SAUVES_CSV' T0 ;
  462. FINS ;
  463.  
  464. SI KCSV ;
  465. INDCSV = INDCSV + 1 ;
  466. TABCSV.'TEMPS' = TABCSV.'TEMPS' ET T0 ;
  467. REPE I1 NBCSV ;
  468. COMP1 = EXTR LCOCSV &I1 ;
  469. POIN1 = MAICSV POIN (EXTR LPOCSV &I1) ;
  470. X1 = EXTR U0 'VALE' COMP1 POIN1 'NOID' ;
  471. X2 = EXTR V0 'VALE' COMP1 POIN1 'NOID' ;
  472. K1 = 2*&I1 ;
  473. K2 = K1 + 1 ;
  474. MOT1 = MOT _TABCSV.K1 ;
  475. MOT2 = MOT _TABCSV.K2 ;
  476. TABCSV.MOT1 = TABCSV.MOT1 ET X1 ;
  477. TABCSV.MOT2 = TABCSV.MOT2 ET X2 ;
  478. FIN I1 ;
  479. CHACHA = CHAI CHACHA ' => CSV #' INDCSV ;
  480. FINS ;
  481. FINS ;
  482.  
  483. * SAUVEGARDE GIBIANE
  484. * ------------------
  485. SI (IGIB > 0) ;
  486.  
  487. * Initialisation de la table STAB (indicee par INDGIB)
  488. STAB = TABL ;
  489. ETAB.'RESULTATS' = STAB ;
  490.  
  491. * Garder l'instant initial ?
  492. SI (EGA IGIB 1) ;
  493. KGIB = VRAI ;
  494. SINON ;
  495. KGIB = DANS ETAB.'TEMPS_SAUVES' T0 ;
  496. FINS ;
  497.  
  498. SI (KGIB OU (EGA IPAS NPAS)) ;
  499. * (on force la sauvegarde si dernier pas)
  500. INDGIB = INDGIB + 1 ;
  501. STN = TABL ;
  502. STAB.INDGIB = STN ;
  503. STN.'TEMP' = T0 ;
  504. SI KMAIGIB ;
  505. STN.'DEPL' = REDU U0 MAIGIB ;
  506. STN.'VITE' = REDU V0 MAIGIB ;
  507. SINON ;
  508. STN.'DEPL' = U0 ;
  509. STN.'VITE' = V0 ;
  510. FINS ;
  511. CHACHA = CHAI CHACHA ' => GIBI #' INDGIB ;
  512. FINS ;
  513. FINS ;
  514.  
  515.  
  516. * =======================
  517. * TABLE DE CALCUL INTERNE
  518. * =======================
  519.  
  520. WTAB = TABL ;
  521.  
  522. * On transmet a WTAB la table de PARAmetres utilisateurs si elle existe
  523. SI (EXIS ETAB 'PARA') ;
  524. WTAB.'PARA' = ETAB.'PARA' ;
  525. FINS ;
  526. WTAB.'TEMP' = T0 ;
  527. WTAB.'DEPL' = U0 ;
  528. WTAB.'VITE' = V0 ;
  529.  
  530.  
  531.  
  532.  
  533. * +-----------------------------------------------------------------+
  534. * | |
  535. * | B O U C L E S U R L E S P A S D E T E M P S |
  536. * | |
  537. * +-----------------------------------------------------------------+
  538.  
  539.  
  540. * AFFICHAGE DU MESSAGE D'INFORMATION POUR L'ETAT INITIAL
  541. MESS CHACHA ;
  542.  
  543. REPE BPAS (NPAS - 1) ;
  544. IPAS = IPAS + 1 ;
  545.  
  546. * ===========================
  547. * PREPARATION DU PAS DE TEMPS
  548. * ===========================
  549.  
  550. * PARAMETRES TEMPORELS
  551. * --------------------
  552. T1 = EXTR TPROG IPAS ;
  553. DT = T1 - T0 ;
  554. DT2 = DT ** 2 ;
  555. CHACHA = CHAI 'PAS #' IPAS ' TEMPS' T1 ;
  556.  
  557. * QUELQUES CONSTANTES
  558. * -------------------
  559. XM = 1. / (BETA*DT2) ;
  560. XC = GAMMA / (BETA*DT) ;
  561.  
  562. * WTAB AVEC U_N ET T_N+1
  563. WTAB.'TEMP' = T1 ;
  564. WTAB.'DEPL' = U0 ;
  565. WTAB.'VITE' = V0 ;
  566. * WTAB.'ACCE' = A0 ;
  567.  
  568. * PROCEDURE "UTILISATEUR" (CHARMECA)
  569. * ----------------------------------
  570. KCHAF = FAUX ;
  571. KCHAK = FAUX ;
  572. KCHAFNL = FAUX ;
  573. KCHAKNL = FAUX ;
  574. KCHACNL = FAUX ;
  575. SI KCHARM ;
  576. TCHAR = CHARMECA WTAB ;
  577.  
  578. * Indices destines a l'ajout de relations (mult. de Lagrange)
  579. * entre deplacements
  580. KCHAF = EXIS TCHAR 'ADDI_SECOND' ;
  581. SI KCHAF ;
  582. FCHAR1 = TCHAR.'ADDI_SECOND' ;
  583. FINS ;
  584. KCHAK = EXIS TCHAR 'ADDI_MATRICE' ;
  585. SI KCHAK ;
  586. KCHAR1 = TCHAR.'ADDI_MATRICE' ;
  587. FINS ;
  588.  
  589. * Indices destines aux autres comportements non lineaires
  590. KCHAFNL = EXIS TCHAR 'ADDI_FNL' ;
  591. SI KCHAFNL ;
  592. FNL0 = TCHAR.'ADDI_FNL' ;
  593. FINS ;
  594. KCHAKNL = EXIS TCHAR 'ADDI_KNL' ;
  595. SI KCHAKNL ;
  596. KNL1 = TCHAR.'ADDI_KNL' ;
  597. FINS ;
  598. KCHACNL = EXIS TCHAR 'ADDI_CNL' ;
  599. SI KCHACNL ;
  600. CNL1 = TCHAR.'ADDI_CNL' ;
  601. FINS ;
  602. FINS ;
  603.  
  604. * CALCUL DU SECOND MEMBRE
  605. * -----------------------
  606. F1 = TIRE CHAR1 T1 ;
  607. * (aucune difference entre ADDI_SECOND et ADDI_FNL si ce n'est
  608. * l'affichage dans CHACHA)
  609. SI KCHAF ;
  610. F1 = F1 + FCHAR1 ;
  611. CHACHA = CHAI CHACHA ' +FLX' ;
  612. FINS ;
  613. SI KCHAFNL ;
  614. F1 = F1 + FNL0 ;
  615. CHACHA = CHAI CHACHA ' +FNL' ;
  616. FINS ;
  617. FEXT1 = (1MAF*(F1 ENLE 'FLX')) + (ALPHAF*(F0 ENLE 'FLX'))
  618. + (EXCO 'FLX' F1 'NOID' 'FLX') ;
  619.  
  620. * ANCIEN SCHEMA => COMPATIBLE AVEC VITEUNIL
  621. SI KVITUN ;
  622. * SI (EGA IALGO 0) ;
  623. K1 = 'EXTRAI' K 'RIGI' 'NOMU' ;
  624. K2 = 'EXTRAI' K 'RIGI' 'MULT' ;
  625. MAICO = EXTR K 'MAIL' 'UNIL' ;
  626. A1PRED = COLI V0 (1MAM / (BETA*DT)) ;
  627. FA = M * A1PRED ;
  628. FB = K1 * (2. * (U0 - (EXCO 'LX' U0 'NOID' 'LX'))) ;
  629. SI ((NBEL MAICO) > 0) ;
  630. U0PRED = U0 - (REDU U0 MAICO) ;
  631. SINON ;
  632. U0PRED = U0 ;
  633. FINS ;
  634. FG = K2 * U0PRED ;
  635. F2ND = FEXT1 + (F0 ENLE 'FLX') - FB + FA - FG ;
  636.  
  637. * SYNTAXE ADAPTEE AU HHT ET ALPHA-GEN (MAIS NON COMPATIBLE AVEC
  638. * RELATIONS UNILATERALES ET VITEUNIL)
  639. SINON ;
  640. A1PRED = COLI V0 ( 1MAM / (BETA*DT) )
  641. A0 ( (1MAM * 0.5 / BETA) - 1. ) ;
  642. V1PRED = COLI V0 ( (1MAF * GAMBET) - 1. )
  643. A0 ( 1MAF * DT * ((0.5*GAMBET) - 1.) ) ;
  644. U0PRED = ENLE U0 'LX' ;
  645. F2ND = FEXT1 - (K * (U0PRED)) + (M * A1PRED) ;
  646. SI KAMOR ;
  647. F2ND = F2ND + (C * V1PRED) ;
  648. FINS ;
  649. SI KCHACNL ;
  650. F2ND = F2ND + (CNL1 * (V1PRED + V0)) ;
  651. FINS ;
  652. * 2nd membre complet = Fext_n+1 - Fint_n + Famor_n + M*(4/dt*V_n+A_n)
  653.  
  654. FINS ;
  655.  
  656. * ON RECALCULE L'OPERATEUR...
  657. * ...SI LE PAS DE TEMPS CHANGE OU SI UNE MATRICE CHANGE
  658. * -----------------------------------------------------
  659. SI ((DT NEG DT0) OU KCHAK) ;
  660. SI (KMENAG) ;
  661. DETR OPER ;
  662. FINS ;
  663. OPER = (1MAF * K) ET ((1MAM * XM) * M) ;
  664. SI KAMOR ;
  665. OPER = OPER ET ((1MAF * XC) * C) ;
  666. FINS ;
  667. SI KCHAK ;
  668. OPER = OPER ET KCHAR1 ;
  669. CHACHA = CHAI CHACHA ' +[LX]' ;
  670. FINS ;
  671. SI KCHAKNL ;
  672. OPER = OPER ET (1MAF * KNL1) ;
  673. CHACHA = CHAI CHACHA ' +[KNL]' ;
  674. FINS ;
  675. SI KCHACNL ;
  676. OPER = OPER ET ((1MAF * XC) * CNL1) ;
  677. CHACHA = CHAI CHACHA ' +[CNL]' ;
  678. FINS ;
  679. FINS ;
  680.  
  681.  
  682. * ======================
  683. * CALCUL DU PAS DE TEMPS
  684. * ======================
  685.  
  686. * RESOLUTION DU SYSTEME LINEAIRE
  687. DU = RESO OPER F2ND ;
  688.  
  689. * MISE A JOUR DES VARIABLES AU TEMPS N+1
  690. * U1 = U0 + DU ;
  691. * A priori inutile d'enlever les LX, mais histoire d'etre sur...
  692. U1 = (ENLE U0 'LX') + DU ;
  693. DU1 = ENLE DU 'LX' ;
  694. V1 = COLI DU1 XC V0 (1. - GAMBET) A0 (DT*(1. - (0.5*GAMBET))) ;
  695. A1 = COLI DU1 XM V0 (-1./(BETA*DT)) A0 (1. - (0.5/BETA)) ;
  696.  
  697. * * Calcul du Residu (a n+1 ou avec les alphas pour NL?)
  698. * * rem : inutile en lineaire
  699. * * K*U1 contient deja les reactions
  700. * Res1 = F1 - (K * U1) - (M * A1);
  701. * MaxRes1 = MAXI Res1 'ABS' 'SANS' (mots 'FLX');
  702. * chacha = chai chacha ' max(R)=' MaxRes1;
  703. *
  704. * * Calcul de l'energie (a n+1)
  705. * Wmeca1 = 0.5 * (XTMX K (U1 enle LX) + (XTMX M V1)) ;
  706. * chacha = chai chacha ' Wmeca=' FORMAT '(F8.1)' Wmeca1 ;
  707.  
  708. * CORRECTION DES VITESSES (SEULEMENT POUR NEWMARK ACC. MOY.)
  709. SI KVITUN ;
  710.  
  711. * Eventuelle mise a jour de l'indicateur de presence de relations
  712. * unilaterales
  713. SI (KCHAK OU (IPAS <EG 2)) ;
  714. MTA = EXTR OPER 'CONTACT' ;
  715. KCONTA = ((DIME MTA) > 0) ;
  716. FINS ;
  717.  
  718. SI KCONTA ;
  719. TBID = TABL ;
  720. V1 = VITEUNIL OPER M V1 DU U0 DT F2ND TBID ;
  721. SI (EXIS TBID 'RATE_VITEUNIL') ;
  722. MESS 'Erreur fatale dans VITEUNIL' ;
  723. ERRE 5 ;
  724. FINS ;
  725. FINS ;
  726. FINS ;
  727.  
  728.  
  729. * ==========================
  730. * SAUVEGARDE DU PAS DE TEMPS
  731. * ==========================
  732.  
  733. * SAUVEGARDE VTK
  734. * --------------
  735. SI (IVTK > 0) ;
  736. SI (IVTK EGA 1) ;
  737. KVTK = MULT (IPAS - 1) IPASVTK ;
  738. SINON ;
  739. KVTK = DANS ETAB.'TEMPS_SAUVES_VTK' T1 ;
  740. FINS ;
  741.  
  742. SI KVTK ;
  743. INDVTK = INDVTK + 1 ;
  744. OPTI 'SORT' FICVTK ;
  745. SORT 'VTK' MAIVTK U1 'DEPL' V1 'VITE' 'TEMP' T1 ;
  746. CHACHA = CHAI CHACHA ' => VTK #' INDVTK ;
  747. FINS ;
  748. FINS ;
  749.  
  750. * SAUVEGARDE CSV
  751. * --------------
  752. SI (ICSV > 0) ;
  753. SI (ICSV EGA 1) ;
  754. KCSV = MULT (IPAS - 1) IPASCSV ;
  755. SINON ;
  756. KCSV = DANS ETAB.'TEMPS_SAUVES_CSV' T1 ;
  757. FINS ;
  758.  
  759. SI KCSV ;
  760. INDCSV = INDCSV + 1 ;
  761. TABCSV.'TEMPS' = TABCSV.'TEMPS' ET T1 ;
  762. REPE I1 NBCSV ;
  763. COMP1 = EXTR LCOCSV &I1 ;
  764. POIN1 = MAICSV POIN (EXTR LPOCSV &I1) ;
  765. X1 = EXTR U1 'VALE' COMP1 POIN1 'NOID' ;
  766. X2 = EXTR V1 'VALE' COMP1 POIN1 'NOID' ;
  767. K1 = 2*&I1 ;
  768. K2 = K1 + 1 ;
  769. MOT1 = MOT _TABCSV.K1 ;
  770. MOT2 = MOT _TABCSV.K2 ;
  771. TABCSV.MOT1 = TABCSV.MOT1 ET X1 ;
  772. TABCSV.MOT2 = TABCSV.MOT2 ET X2 ;
  773. FIN I1 ;
  774. CHACHA = CHAI CHACHA ' => CSV #' INDCSV ;
  775. FINS ;
  776.  
  777. SI ((EGA IPAS NPAS) ET KFICCSV) ;
  778. OPTI 'SORT' FICCSV ;
  779. SORT 'EXCE' TABCSV ;
  780. FINS ;
  781. FINS ;
  782.  
  783. * SAUVEGARDE GIBIANE
  784. * ------------------
  785. SI (IGIB > 0) ;
  786. SI (IGIB EGA 1) ;
  787. KGIB = MULT (IPAS - 1) IPASGIB ;
  788. SINON ;
  789. KGIB = DANS ETAB.'TEMPS_SAUVES' T1 ;
  790. FINS ;
  791.  
  792. SI (KGIB OU (EGA IPAS NPAS)) ;
  793. * (on force la sauvegarde si dernier pas)
  794. INDGIB = INDGIB + 1 ;
  795. STN = TABL ;
  796. STAB.INDGIB = STN ;
  797. STN.'TEMP' = T1 ;
  798. SI KMAIGIB ;
  799. STN.'DEPL' = REDU U1 MAIGIB ;
  800. STN.'VITE' = REDU V1 MAIGIB ;
  801. SINON ;
  802. STN.'DEPL' = U1 ;
  803. STN.'VITE' = V1 ;
  804. FINS ;
  805. CHACHA = CHAI CHACHA ' => GIBI #' INDGIB ;
  806.  
  807. * Ecriture incrementale sur disque dur
  808. SI KINCR ;
  809.  
  810. * (Il est necessaire de sauver aussi OPER)
  811. ETAB.'OPER' = OPER ;
  812. SAUV 'MUET' ETAB ;
  813.  
  814. * Fantomisation des resultats sauves precedemment
  815. * (attention : on a encore besoin de ceux en cours pour le
  816. * prochain pas)
  817. SI (KECON ET (EXIS STAB (INDGIB - 1))) ;
  818. FANT (STAB.(INDGIB - 1)) 'DEPL' ;
  819. FANT (STAB.(INDGIB - 1)) 'VITE' ;
  820. FINS ;
  821. FINS ;
  822. FINS ;
  823. FINS ;
  824.  
  825.  
  826. * ===============================
  827. * PASSAGE AU PAS DE TEMPS SUIVANT
  828. * ===============================
  829.  
  830. * AFFICHAGE DU MESSAGE D'INFORMATION DU PAS DE TEMPS COURANT
  831. MESS CHACHA ;
  832.  
  833. T0 = T1 ;
  834. DT0 = DT ;
  835. * U0 = U1 ENLE 'LX' ;
  836. U0 = U1 ;
  837. V0 = V1 ;
  838. DETR A0 ;
  839. A0 = A1 ;
  840. DETR F0 ;
  841. F0 = F1 ;
  842. SI (KMENAG) ;
  843. DETR A1PRED ;
  844. DETR DU ;
  845. FINS ;
  846.  
  847. FIN BPAS ;
  848.  
  849.  
  850. * Sauvegarde de la derniere acceleration (pour reprise eventuelle)
  851. STN.'ACCE' = A1 ;
  852.  
  853. FINP STAB ;
  854.  
  855.  

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