* @SOLVMEC PROCEDUR FD218221 21/05/07 21:15:01 11001 ************************************************************************ * Procedure minimaliste de solveur implicite en mecanique * * - comportements lineaires et non lineaires (appel a COMP) * * - chargements en forces ou deplacements imposes * * - hypothese petits deplacements * * et grands deplacements en lagrangien reactualise * * - acceleration de convergence (appel a ACT3) * ************************************************************************ ************************************************************************ * Partie 1 : initialisations diverses * ************************************************************************ * nombre max d'iteration de minimisation du residu (sur un pas de temps) nmaxit = 1000 ; * objets fournis par l'utilisateur mod = t . 'MODELE' ; mat = t . 'CARACTERISTIQUES' ; blo = t . 'BLOCAGES_MECANIQUES' ; cha = t . 'CHARGEMENT' ; ltc = t . 'TEMPS_CALCULES' ; * lecture des options igrdepl = FAUX ; igrdepl = t . 'GRANDS_DEPLACEMENTS' ; FINSI ; iaccconv = FAUX ; iaccconv = t . 'ACCELERATION_CONVERGENCE' ; FINSI ; * initialisations des champs solution a tps = 0 tps0 = 0. ; SINON ; FINSI ; SINON ; FINSI ; * initialisation des indices de sortie de la table t . 'TEMPS' . 0 = tps0 ; t . 'DEPLACEMENTS' . 0 = u0 ; t . 'REACTIONS' . 0 = fr0 ; t . 'CONTRAINTES' . 0 = sig0 ; t . 'VARIABLES_INTERNES' . 0 = vi0 ; * [grands deplacements] configuration initiale SI igrdepl ; FINSI ; * [petits deplacements] calcul de la rigidite elastique initiale SI (NON igrdepl) ; k = k ET blo ; FINSI ; ************************************************************************ * Partie 2 : debut de la boucle sur les pas de temps * ************************************************************************ i = 0 ; REPE btemps ntc ; iconv = FAUX ; * instant de calcul, fin du pas de temps SI ((ABS tps1) < 1.E-15) ; ITER btemps ; FINSI ; * interpolation du second membre a la fin du pas de temps * forces imposees (composantes FX, FY, FZ, ...) SINON ; FINSI ; * deplacements imposes (composante FLX) SINON ; FINSI ; * initialisation du residu (avec les FLX des deplacements imposes) * et norme de convergence resi0 = fex1 + fr0 - fi0 + flx1 - flx0 ; SI (fref < 1.E-12) ; fref = 1. ; FINSI ; * [acceleration] initialisation de la correction SI iaccconv ; cor1 = 0. ; FINSI ; * affichages * [grands deplacements] passage sur la configuration debut de pas et * calcul de la rigidite elastique SI igrdepl ; k = k ET blo ; FINSI ; ************************************************************************ * Partie 3 : debut de la boucle de minimisation du residu * ************************************************************************ u00 = u0 * 1. ; REPE bminim nmaxit ; * correction de l'increment de deplacements correspondant au residu * et a la raideur elastique * deplacement a la fin du pas de temps et increment u1 = u0 + ddu ; du = u1 - u00 ; * reactions a la fin du pas de temps * increment et deformation totale a la fin du pas de temps * [petits deplacements] on utilise la deformation lineaire * [grands deplacements] on utilise la deformation quadratique SI igrdepl ; SINON ; FINSI ; eps1 = eps0 + deps ; * application de la loi de comportment pour l'increment de deformation sur le pas de temps * contraintes, deformations, variables internes a la fin du pas de temps * [grands deplacements] transport des contraintes sur la configuration fin de pas SI igrdepl ; FINSI ; * forces interieures a la fin du pas de temps * [grands deplacements] l'integration est faite sur la configuration fin de pas SI igrdepl ; FINSI ; * [grands deplacements] retour a la configuration debut de pas SI igrdepl ; FORM conf_0 ; FINSI ; * nouveau residu et sa norme resi1 = fex1 + fr1 - fi1 ; * affichages logmess = FAUX ; logmess = VRAI ; FINSI ; * test de convergence SI (crit1 < 1.E-4) ; iconv = VRAI ; SI (NON logmess) ; FINSI ; MESS ' Convergence atteinte !' ; MESS ' ' ; QUIT bminim ; FINSI ; * [acceleration de convergence] a partir des 4 derniers residus et * seulement toutes les 4 iterations SI iaccconv ; cor1p = cor1 ; cor1 = 0. ; acfp1 = resi1 ; acfep1 = acfp1 - cor1p ; MESS ' Acceleration' ; resi1 = resi1 - cor1 ; FINSI ; acfp4 = acfp3 ; acfp3 = acfp2 ; acfp2 = acfp1 ; acfep3 = acfep2 ; acfep2 = acfep1 ; FINSI ; * preparation de la prochaine iteration de minimisation resi0 = resi1 ; u0 = u1 ; FIN bminim ; ************************************************************************ * [grands deplacements] remise en configuration initiale SI igrdepl ; FORM conf_ini ; FINSI ; * si convergence : preparation du prochain pas de temps SI iconv ; tps0 = tps1 ; u0 = u1 ; fr0 = fr1 ; fi0 = fi1 ; sig0 = sig1 ; flx0 = flx1 ; eps0 = eps1 ; epi0 = epi1 ; vi0 = vi1 ; * remplissage de la table avec les resultats i = i + 1 ; t . 'TEMPS' . i = tps1 ; t . 'DEPLACEMENTS' . i = u1 ; t . 'REACTIONS' . i = fr1 ; t . 'CONTRAINTES' . i = sig1 ; t . 'VARIABLES_INTERNES' . i = vi1 ; * si non convergence : sortie en erreur SINON ; ERRE 'Echec du calcul, on quitte la procedure' ; FINSI ; FIN btemps ; ************************************************************************ FINP ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales