Télécharger @solvmec.procedur

Retour à la liste

Numérotation des lignes :

  1. * @SOLVMEC PROCEDUR FD218221 21/05/07 21:15:01 11001
  2. ************************************************************************
  3. * Procedure minimaliste de solveur implicite en mecanique *
  4. * - comportements lineaires et non lineaires (appel a COMP) *
  5. * - chargements en forces ou deplacements imposes *
  6. * - hypothese petits deplacements *
  7. * et grands deplacements en lagrangien reactualise *
  8. * - acceleration de convergence (appel a ACT3) *
  9. ************************************************************************
  10.  
  11. DEBP @SOLVMEC t*'TABLE' ;
  12.  
  13. ************************************************************************
  14. * Partie 1 : initialisations diverses *
  15. ************************************************************************
  16. * nombre max d'iteration de minimisation du residu (sur un pas de temps)
  17. nmaxit = 1000 ;
  18.  
  19. * objets fournis par l'utilisateur
  20. mod = t . 'MODELE' ;
  21. mat = t . 'CARACTERISTIQUES' ;
  22. blo = t . 'BLOCAGES_MECANIQUES' ;
  23. cha = t . 'CHARGEMENT' ;
  24. ltc = t . 'TEMPS_CALCULES' ;
  25.  
  26. * lecture des options
  27. igrdepl = FAUX ;
  28. SI (EXIS t 'GRANDS_DEPLACEMENTS') ;
  29. igrdepl = t . 'GRANDS_DEPLACEMENTS' ;
  30. FINSI ;
  31. iaccconv = FAUX ;
  32. SI (EXIS t 'ACCELERATION_CONVERGENCE') ;
  33. iaccconv = t . 'ACCELERATION_CONVERGENCE' ;
  34. FINSI ;
  35.  
  36. * initialisations des champs solution a tps = 0
  37. tps0 = 0. ;
  38. u0 = CHAN 'CHPO' (ZERO mod 'DEPLACEM') mod ;
  39. fr0 = REAC u0 blo ;
  40. eps0 = ZERO mod 'DEFORMAT' ;
  41. epi0 = ZERO mod 'DEFINELA' ;
  42. sig0 = ZERO mod 'CONTRAIN' ;
  43. fi0 = BSIG sig0 mod ;
  44. vi0 = ZERO mod 'VARINTER' ;
  45. SI (EXIS cha 'MECA') ;
  46. fex0 = TIRE cha tps0 'MECA' ;
  47. SINON ;
  48. fex0 = VIDE 'CHPOINT'/'DISCRET' ;
  49. FINSI ;
  50. SI (EXIS cha 'DIMP') ;
  51. flx0 = TIRE cha tps0 'DIMP' ;
  52. SINON ;
  53. flx0 = VIDE 'CHPOINT'/'DISCRET' ;
  54. FINSI ;
  55.  
  56. * initialisation des indices de sortie de la table
  57. t . 'TEMPS' = TABL ;
  58. t . 'TEMPS' . 0 = tps0 ;
  59. t . 'DEPLACEMENTS' = TABL ;
  60. t . 'DEPLACEMENTS' . 0 = u0 ;
  61. t . 'REACTIONS' = TABL ;
  62. t . 'REACTIONS' . 0 = fr0 ;
  63. t . 'CONTRAINTES' = TABL ;
  64. t . 'CONTRAINTES' . 0 = sig0 ;
  65. t . 'VARIABLES_INTERNES' = TABL ;
  66. t . 'VARIABLES_INTERNES' . 0 = vi0 ;
  67.  
  68. * [grands deplacements] configuration initiale
  69. SI igrdepl ;
  70. conf_ini = FORM ;
  71. FINSI ;
  72.  
  73. * [petits deplacements] calcul de la rigidite elastique initiale
  74. SI (NON igrdepl) ;
  75. k = RIGI mod mat ;
  76. k = k ET blo ;
  77. FINSI ;
  78.  
  79.  
  80. ************************************************************************
  81. * Partie 2 : debut de la boucle sur les pas de temps *
  82. ************************************************************************
  83. ntc = DIME ltc ;
  84. i = 0 ;
  85. REPE btemps ntc ;
  86. iconv = FAUX ;
  87. * instant de calcul, fin du pas de temps
  88. tps1 = EXTR ltc &btemps ;
  89. SI ((ABS tps1) < 1.E-15) ;
  90. ITER btemps ;
  91. FINSI ;
  92.  
  93. * interpolation du second membre a la fin du pas de temps
  94. * forces imposees (composantes FX, FY, FZ, ...)
  95. SI (EXIS cha 'MECA') ;
  96. fex1 = TIRE cha tps1 'MECA' ;
  97. SINON ;
  98. fex1 = VIDE 'CHPOINT'/'DISCRET' ;
  99. FINSI ;
  100. * deplacements imposes (composante FLX)
  101. SI (EXIS cha 'DIMP') ;
  102. flx1 = TIRE cha tps1 'DIMP' ;
  103. SINON ;
  104. flx1 = VIDE 'CHPOINT'/'DISCRET' ;
  105. FINSI ;
  106.  
  107. * initialisation du residu (avec les FLX des deplacements imposes)
  108. * et norme de convergence
  109. resi0 = fex1 + fr0 - fi0 + flx1 - flx0 ;
  110. fref = MAXI 'ABS' (fex1 + fr0) ;
  111. SI (fref < 1.E-12) ;
  112. fref = 1. ;
  113. FINSI ;
  114.  
  115. * [acceleration] initialisation de la correction
  116. SI iaccconv ;
  117. cor1 = 0. ;
  118. FINSI ;
  119.  
  120. * affichages
  121. MESS '----- Resolution a l''instant :' tps1 ' (' &btemps ' /' ' ' ntc ') -----' ;
  122. MESS ' Effort de reference =' fref ;
  123. MESS ' Iter. Residu' ;
  124.  
  125. * [grands deplacements] passage sur la configuration debut de pas et
  126. * calcul de la rigidite elastique
  127. SI igrdepl ;
  128. conf_0 = FORM u0 ;
  129. k = (RIGI mod mat) ET (KSIG mod sig0) ;
  130. k = k ET blo ;
  131. FINSI ;
  132.  
  133.  
  134. ************************************************************************
  135. * Partie 3 : debut de la boucle de minimisation du residu *
  136. ************************************************************************
  137. u00 = u0 * 1. ;
  138. REPE bminim nmaxit ;
  139. * correction de l'increment de deplacements correspondant au residu
  140. * et a la raideur elastique
  141. ddu = RESO k resi0 ;
  142.  
  143. * deplacement a la fin du pas de temps et increment
  144. u1 = u0 + ddu ;
  145. du = u1 - u00 ;
  146.  
  147. * reactions a la fin du pas de temps
  148. fr1 = REAC blo u1 ;
  149.  
  150. * increment et deformation totale a la fin du pas de temps
  151. * [petits deplacements] on utilise la deformation lineaire
  152. * [grands deplacements] on utilise la deformation quadratique
  153. SI igrdepl ;
  154. deps = EPSI mod du 'QUAD' ;
  155. SINON ;
  156. deps = EPSI mod du 'LINE' ;
  157. FINSI ;
  158. eps1 = eps0 + deps ;
  159.  
  160. * application de la loi de comportment pour l'increment de deformation sur le pas de temps
  161. etat_0 = (ADET 'NOUV' mod 'TEMP' tps0) ET eps0 ET mat ET sig0 ET vi0 ET epi0 ;
  162. etat_1 = (ADET 'NOUV' mod 'TEMP' tps1) ET eps1 ET mat ;
  163. ch1 = COMP mod etat_0 etat_1 ;
  164.  
  165. * contraintes, deformations, variables internes a la fin du pas de temps
  166. sig1 = CHAN (EXCO ch1 (EXTR mod 'CONT') 'NOID') 'TYPE' 'CONTRAINTES' ;
  167. eps1 = CHAN (EXCO ch1 (EXTR mod 'DEFO') 'NOID') 'TYPE' 'DEFORMATIONS' ;
  168. epi1 = CHAN (EXCO ch1 (EXTR mod 'DEIN') 'NOID') 'TYPE' 'DEFORMATIONS INELASTIQUES' ;
  169. vi1 = CHAN (EXCO ch1 (EXTR mod 'VARI') 'NOID') 'TYPE' 'VARIABLES INTERNES' ;
  170.  
  171. * [grands deplacements] transport des contraintes sur la configuration fin de pas
  172. SI igrdepl ;
  173. sig1 = PICA mod sig1 du ;
  174. FINSI ;
  175.  
  176. * forces interieures a la fin du pas de temps
  177. * [grands deplacements] l'integration est faite sur la configuration fin de pas
  178. SI igrdepl ;
  179. conf_1 = FORM du ;
  180. FINSI ;
  181. fi1 = BSIG mod sig1 ;
  182. * [grands deplacements] retour a la configuration debut de pas
  183. SI igrdepl ;
  184. FORM conf_0 ;
  185. FINSI ;
  186.  
  187. * nouveau residu et sa norme
  188. resi1 = fex1 + fr1 - fi1 ;
  189. crit1 = (MAXI 'ABS' resi1) / fref ;
  190.  
  191. * affichages
  192. logmess = FAUX ;
  193. SI ((&bminim < 11) OU ((&bminim < 101) ET (EGA (@MOD &bminim 10) 0))
  194. OU ((&bminim < 1001) ET (EGA (@MOD &bminim 100) 0))) ;
  195. logmess = VRAI ;
  196. MESS &bminim'/'2 crit1'/'10 ;
  197. FINSI ;
  198.  
  199. * test de convergence
  200. SI (crit1 < 1.E-4) ;
  201. iconv = VRAI ;
  202. SI (NON logmess) ;
  203. MESS &bminim'/'2 crit1'/'10 ;
  204. FINSI ;
  205. MESS ' Convergence atteinte !' ;
  206. MESS ' ' ;
  207. QUIT bminim ;
  208. FINSI ;
  209.  
  210. * [acceleration de convergence] a partir des 4 derniers residus et
  211. * seulement toutes les 4 iterations
  212. SI iaccconv ;
  213. cor1p = cor1 ;
  214. cor1 = 0. ;
  215. acfp1 = resi1 ;
  216. acfep1 = acfp1 - cor1p ;
  217. SI ((&bminim MULT 4) ET (&bminim > 3)) ;
  218. MESS ' Acceleration' ;
  219. cor1 = ACT3 acfep3 acfep2 acfep1 acfp4 acfp3 acfp2 acfp1 ;
  220. resi1 = resi1 - cor1 ;
  221. FINSI ;
  222. acfp4 = acfp3 ;
  223. acfp3 = acfp2 ;
  224. acfp2 = acfp1 ;
  225. acfep3 = acfep2 ;
  226. acfep2 = acfep1 ;
  227. FINSI ;
  228.  
  229. * preparation de la prochaine iteration de minimisation
  230. resi0 = resi1 ;
  231. u0 = u1 ;
  232. FIN bminim ;
  233. ************************************************************************
  234.  
  235. * [grands deplacements] remise en configuration initiale
  236. SI igrdepl ;
  237. FORM conf_ini ;
  238. FINSI ;
  239.  
  240. * si convergence : preparation du prochain pas de temps
  241. SI iconv ;
  242. tps0 = tps1 ;
  243. u1 = EXCO u1 (EXTR mod 'DEPL') ;
  244. u0 = u1 ;
  245. fr0 = fr1 ;
  246. fi0 = fi1 ;
  247. sig0 = sig1 ;
  248. flx0 = flx1 ;
  249. eps0 = eps1 ;
  250. epi0 = epi1 ;
  251. vi0 = vi1 ;
  252. * remplissage de la table avec les resultats
  253. i = i + 1 ;
  254. t . 'TEMPS' . i = tps1 ;
  255. t . 'DEPLACEMENTS' . i = u1 ;
  256. t . 'REACTIONS' . i = fr1 ;
  257. t . 'CONTRAINTES' . i = sig1 ;
  258. t . 'VARIABLES_INTERNES' . i = vi1 ;
  259. * si non convergence : sortie en erreur
  260. SINON ;
  261. MESS '***** NOMBRE MAXI D''ITERATIONS ATTEINT *****' ;
  262. MESS '***** NON CONVERGENCE ***** !' ;
  263. ERRE 'Echec du calcul, on quitte la procedure' ;
  264. FINSI ;
  265. FIN btemps ;
  266. ************************************************************************
  267.  
  268. FINP ;
  269.  

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