* fichier : vari-youn-1.dgibi
**************************************************************
*
* C'est un k-test dont le but est de tester le fonctionnement
* de PASAPAS avec la variation des données matérielles.
*
* Il s'agit d'une barre en traction simple. Son module de Young
* dépend linéairement du déplacement u de son extrémité :
*
* E = E_0 + E_1 * u
*
* Pour résoudre ce problème, on remet à jour le chargement
* dans la procédure PERSO1. Étant donné que PERSO1 est appelé
* une fois par incrément (dans PASAPAS) et non pour chaque
* incrément d'incrément (dans INCREME) la précision dépend
* du nombre de pas.
*
* Voici les résultats obtenus avec la version de développement
* (avril '96) :
*
* Nombre d'itérations | Erreur maxi en déplacement
* ------------------------------------------------
* 1 | 0.40500
* ------------------------------------------------
* 2 | 0.33509
* ------------------------------------------------
* 5 | 0.25095
* ------------------------------------------------
* 10 | 0.19571
* ------------------------------------------------
* 20 | 0.14850
* ------------------------------------------------
* 50 | 9.83953E-02
* ------------------------------------------------
* 100 | 6.91983E-02
* ------------------------------------------------
* 200 | 4.67212E-02
* ------------------------------------------------
* 500 | 2.58769E-02
* ------------------------------------------------
* 1000 | 1.56041E-02
* ------------------------------------------------
* 2000 | 8.94707E-03
* ------------------------------------------------
* 5000 | 4.01039E-03
* ------------------------------------------------
*
* Cette solution peut être comparéee avec une solution
* analytique et (si l'utilisateur le désire, voir la variable
* calc_nl) avec un calcul itératif utilisant la méthode de
* substitution.
*
**************************************************************
*** Options ...
opti dime 2 mode plan defo elem seg2 echo 1 ;
graph = faux ;
calc_nl = faux ;
*** Paramètres ...
L = 10. ;
H = 1. ;
S = H * 1. ;
E_0 = 2.E+11 ;
* E_1 = (2.0 * E_0) / (0.01 * L) ;
E_1 = (-0.5 * E_0) / (0.1 * L) ;
* F = 1.E+10 ;
F = 9.9E+9 ;
nbdiv = 1 ;
*** Critère d'existence de la solution ...
delta = (E_0 * E_0) + (4 * E_1 * F * L / S) ;
deltan = delta / (E_0 * E_0) ;
mess 'Delta "normalisé" vaut ' deltan ;
si(deltan < 0) ;
mess 'Pas de soltution envisageable !!!' ;
opti donn 5 ;
finsi ;
*** Points ...
dens (L / nbdiv) ;
p1 = 0 0 ;
p2 = 0 H ;
*** Ligne ...
li1 = p1 d 1 p2 ;
*** Surface ...
opti elem qua4 ;
vectx = L 0 ;
su1 = li1 tran nbdiv vectx ;
pu = su1 poin proc vectx ;
titr 'Le maillage du modele' ;
si(graph) ;
trac su1 ;
finsi ;
*** Modèle ...
listdepl = prog (-0.1 * L) (0.1 * L) ;
listyoun = prog ;
lon = dime listdepl ;
repeter surdpl lon ;
valdep = extr listdepl &surdpl ;
valyou = E_0 + (E_1 * valdep) ;
listyoun = listyoun et (prog valyou) ;
fin surdpl ;
titr 'Module de Young (deplacement)' ;
evyou = evol manu LDPL listdepl YOUN listyoun ;
si(graph) ;
dess evyou ;
finsi ;
mo1 = mode su1 mecanique elastique ;
ma1 = mate mo1 NU 0.0 YOUN evyou ;
*** Préparation de la table pour PASAPAS ...
tabnl = table ;
* tabnl . GRANDS_DEPLACEMENTS = vrai ;
tabnl . MODELE = mo1 ;
tabnl . CARACTERISTIQUES = ma1 ;
cl1 = (bloq ux li1) et (bloq uy p1) ;
tabnl . BLOCAGES_MECANIQUES = cl1 ;
ldpl0 = manu CHML mo1 LDPL 0.0 STRESSES ;
evconst = evol manu 't' (prog 0. 1000.)
'f(t)' (prog 1. 1.) ;
chavar0 = char LDPL ldpl0 evconst ;
fobid = forc fx F (cote 3 su1) ;
lr1 = prog 0. 1. ;
lr2 = prog 0. 1. ;
evbid = evol manu 't' lr1 'f(t)' lr2 ;
chabid = char fobid evbid MECA ;
tabnl . CHARGEMENT = chavar0 et chabid ;
tabnl . CHAR0 = chabid ;
tabnl . PROCEDURE_PERSO1 = vrai ;
debp perso1 tabnl*table ;
depact = tabnl . 'ESTIMATION'.'DEPLACEMENTS' ;
ledepl = extr depact UX pu ;
ldepl1 = manu CHML mo1 LDPL ledepl STRESSES ;
chavar = char LDPL ldepl1 evconst ;
tabnl . 'WTABLE'.CHARGEMENT = (tabnl . CHAR0) et chavar ;
tabnl . 'WTABLE'.CHARGEMENT_I = (tabnl . CHAR0) et chavar ;
finp ;
nb_dt = 5 ;
dt = 1.0 / nb_dt ;
tabnl . TEMPS_CALCULES = prog 0. PAS dt 1. ;
*** Le calcul ...
pasapas tabnl ;
*** Petit post-traitement ...
listt = prog ;
listux = prog ;
listuxt = prog ;
listuxs = prog ;
listfx = prog ;
nbpas = dime (tabnl . TEMPS) ;
repeter surpas nbpas ;
lindice = &surpas - 1 ;
listt = listt et (prog (tabnl . TEMPS . lindice)) ;
laforc = F * (tabnl . TEMPS . lindice) ;
listfx = listfx et (prog laforc) ;
uxbid = racp (-1*laforc*L/S) E_0 E_1 ;
uxbid = uxbid extr 1;
listuxt = listuxt et (prog uxbid) ;
depact = tabnl . DEPLACEMENTS . lindice ;
ledepl = extr depact UX pu ;
listux = listux et (prog ledepl) ;
chtit = chai 'Contrainte XX fournie par PASAPAS,'
' temps ' (tabnl . TEMPS . lindice) ;
titr chtit ;
* trac (exco smxx (tabnl . CONTRAINTES . lindice)) mo1 ;
*------------- calcul nonlin à la main -------------------------------------
si(calc_nl) ;
critconv = 1. ;
* omega = 0.7 ;
omega = 1.2 ;
mate0 = mate mo1 YOUN E_0 NU 0.0 ;
rigin = rigi mo1 mate0 ;
forc0 = forc fx laforc (cote 3 su1) ;
residu = 1.0 * forc0 ;
deptot = manu chpo su1 2 UX 0 UY 0 nature DIFFUS ;
mess 'On va chercher la soln pour F = ' laforc ;
repeter tanqrnn ;
depln = reso (rigin et cl1) residu ;
deptot = deptot + (omega * depln) ;
deptst = extr deptot ux pu ;
* mess 'deptot au bout = ' deptst ;
E_n = E_0 + (E_1 * deptst) ;
maten = mate mo1 YOUN E_n NU 0.0 ;
rigin = rigi mo1 maten ;
residu = forc0 - ((rigin * deptot) - (reac cl1 deptot)) ;
normres = (xtx residu) ** 0.5 ;
mess 'Itération ' &tanqrnn ', ||résidu|| = ' normres ;
si(normres < critconv) ;
mess ' => Convergence, déplt obtenu = ' deptst ;
quit tanqrnn ;
finsi ;
fin tanqrnn ;
listuxs = listuxs et (prog deptst) ;
sitst = sigm mo1 maten deptot ;
chtit = chai 'Contrainte XX fournie par ma méthode,'
' temps ' (tabnl . TEMPS . lindice) ;
titr chtit ;
* trac (exco smxx sitst) mo1 ;
finsi;
*---------------------------------------------------------------------------
fin surpas ;
titr 'La deformee' ;
defo0 = defo su1 depact 0.0 ;
defo1 = defo su1 depact ROUG ;
si(graph) ;
trac (defo0 et defo1) ;
finsi ;
titr 'Courbe de traction provenant de PASAPAS' ;
courbetr = evol manu 'FX' listfx 'UX' listux ;
si(graph) ;
dess courbetr ;
finsi ;
titr 'Courbes de traction PASAPAS + théorique' ;
courbteo = evol ROUG manu 'FX' listfx 'UX' listuxt ;
si(graph) ;
dess (courbetr et courbteo) ;
finsi ;
si(calc_nl) ;
titr 'Courbe obtenue par calc nonlin a la main' ;
courbs = evol BLEU manu 'FX' listfx 'UX' listuxs ;
si(graph) ;
dess (courbetr et courbteo et courbs) ;
finsi ;
finsi ;
*** Vérification de la précision du calcul ...
chtit = chai 'Difference entre le depl. fourni par PASAPAS'
' et le depl. analytique' ;
titr chtit ;
ladiff = courbetr - courbteo ;
ladiff = evol manu (extr ladiff ABSC) (abs (extr ladiff ORDO)) ;
si(graph) ;
dess ladiff ;
finsi ;
precis = maxi (extr ladiff ORDO) ;
mess 'Écart maxi = ' precis ;
listpas = prog 1 2 5 10 20 50 100 200 500 1000 2000 5000 ;
listprec = prog 0.40500 0.33509 0.25095 0.19571 0.14850
9.83953E-02 6.91983E-02 4.67212E-02 2.58769E-02 1.56041E-02
8.94707E-03 4.01039E-03 ;
titr 'Precision en fonction du nombre de pas' ;
evprec = evol manu 'nb_pas' listpas 'prec' listprec ;
si(graph) ;
dess evprec LOGX ;
finsi ;
prec_att = ipol nb_dt listpas listprec ;
mess 'Valeur attendue de la précision = ' prec_att ;
* On se donne 10% de tolérance ...
si(precis > (1.1 * prec_att)) ;
erre 5 ;
finsi ;
*** Bye ...
fin ;
© Cast3M 2003 - All rights reserved.
Disclaimer