$$$$ IMAGES * IMAGES PROCEDUR VALETA 95/01/06 21:29:15 1416 DEBP IMAGES TABA*'TABLE'; *------------------------------------------------- * D'apres une idee originale de l'ISPRA, cette procédure * permet d'obtenir lors d'un calcul pas a pas : * - les deformees a differents instants de calculs * supperposees ou non avec la structure non deformee * - le champ de contraintes sur la deformee a differents * instants de calculs * - le champ de temperatures sur la structure non deformee * dans le cas d'un calcul thermique pur et a differents * instants de calculs. * - le champ de temperatures sur la structure deformee dans * le cas d'un calcul couple thermique/mecanique a differents * instants de calculs . * * Commentaire : * _____________ * * En entrée, TAB1 sert à définir les options et les paramètres du calcul. * Les indices de l'objet TAB1 sont des mots (a écrire en toutes lettres) * dont voici la liste : * * TABLACAST : table sortie de PASAPAS * * MAILLAGE : maillage * * TYPE : type de trace que l'on desire obtenir * = DDEFORMEE pour obtenir le trace des deformees * = DCONTRAINTES pour obtenir le trace du champ de contraintes * sur la deformee * = DTEMPERATURES pour obtenir le trace du champ de temperatures * sur la deformee dans le cas d'un calcul couple thermique/ * mecanique, sur la structure non deformee dans le cas d'un * calcul thermique pur * * LISTEMP : liste des temps a visualiser * * SIGCOMP : pour le trace du champ de contraintes, type de contraintes * que l'on desire visualiser sur la deformee * = SIGVMIS pour visualiser les contraintes de VON MISES * = nom de la composante du champ de contraintes * * DEFO_SUPP : pour le trace des deformees * = VRAI si l'on desire supperposer la deformee avec la structure * non deformee * = FAUX si l'on desire uniquement la deformee * * TITRE : titre du dessin * * OEIL : oeil pour un trace 3D * * COULEUR : couleur de la deformee (rouge par defaut) * * AMPLD : amplitude de la deformee (donnee facultative) * * * * En sortie on obtient un postscript. * * * Remarques : * ___________ * * Pour une presentation plus claire il est preferable de se limiter * a 6 dessins par page. * * * *--------------------------------------------------------------------- coefelim = 0.001; ngra = dime taba.'LISTEMP'; &dime = 'VALEUR' DIME; si (existe taba 'MAILLAGE'); objt = taba.'MAILLAGE'; sinon; objt = extr (taba.'TABLECAST'.'MODELE') mail; finsi; moj = taba.'TABLECAST'.'MODELE'; idefo = faux; icont = faux; itemp = faux; ither = faux; ********************************************** * tests sur les données ********************************************** si (existe taba 'OEIL'); oeil = taba.'OEIL'; finsi; si (existe taba 'TABLECAST' 'DEPLACEMENTS'); * calcul thermo-mecanique ither = faux; sinon; * calcul thermique pur ither = vrai; finsi; * ********* determination du coefficient d'amplitude * si ither; ampld = 0; sinon; si (existe taba 'AMPLD'); ampld = taba.'AMPLD'; depmax = table; k = 1; repeter bou1 ngra; tj = taba.'TABLECAST'.'DEPLACEMENTS'; notps = extr taba.'LISTEMP' k; notps = enti notps; uj = tj.notps; uuj = redu uj objt; ujmax = maxi uuj 'ABS'; depmax.k = ujmax; si (k > 1); si ((depmax.(k - 1)) > depmax.k); edge = (depmax.(k - 1))/(ampld); sinon; edge = (depmax.k)/(ampld); finsi; sinon; edge = (depmax.k)/(ampld); finsi; k = k + 1; fin bou1; sinon; k = 1; tampld = table; depmax = table; si (&dime ega 2); ch1 ch2 = coor objt; 1max = maxi ch1; 1min = mini ch1; 2max = maxi ch2; 2min = mini ch1; dif1 = 1max - 1min; dif2 = 2max - 2min; sinon; ch1 ch2 ch3 = coor objt; 1max = maxi ch1; 1min = mini ch1; 2max = maxi ch2; 2min = mini ch2; 3max = maxi ch3; 3min = mini ch3; dif1 = 1max - 1min; dif2 = 2max - 2min; dif3 = 3max - 3min; finsi; si (dif1 >eg dif2); lmax = dif1; sinon; lmax = dif2; finsi; si (&dime ega 3); si (lmax >eg dif3); lmax = lmax; sinon; lmax = dif3; finsi; finsi; repeter bou1 ngra; tj = taba.'TABLECAST'.'DEPLACEMENTS'; notps = extr taba.'LISTEMP' k; notps = enti notps; uj = tj.notps; uuj = redu uj objt; ujmax = maxi uuj 'ABS'; depmax.k = ujmax; si (ega ujmax 0); tampld.k = 0; sinon; tampld.k = lmax/(10*ujmax); finsi; si (k > 1); si ((tampld.(k - 1)) > tampld.k); ampld = tampld.(k - 1); sinon ; ampld = tampld.k; finsi; si ((depmax.(k - 1)) > depmax.k); edge = (depmax.(k - 1))/(ampld); sinon; edge = (depmax.k)/(ampld); finsi; sinon; ampld = tampld.k; edge = (depmax.k)/(ampld); finsi; k = k + 1; fin bou1; finsi; si (edge < 0.1); EDGE = EDGE * 10; finsi; finsi; si (exist taba 'COULEUR'); color = taba.'COULEUR'; sinon; color = rouge; finsi; si (exist taba 'TYPE'); si (ega (taba.'TYPE') 'DDEFORMEE'); idefo = vrai; finsi; si (ega (taba.'TYPE') 'DCONTRAINTES'); icont = vrai; finsi; si (ega (taba.'TYPE') 'DTEMPERATURE'); itemp = vrai; finsi; sinon; mess 'IL MANQUE LE TYPE DE TRACE DESIRE'; quitter images; finsi; ********************************************** * determination des dimensions maxi * des objets (lx ly lz) ********************************************** lx = 0.0 ;ly = 0.0; si (ega &dime 3); lz = 0.0; finsi; *--- cas de la thermique pure si ither; edge = 10; si (ega &dime 2); xj yj = coor objt; sinon; xj yj zj = coor objt; finsi; xjmin = mini xj; xjmax = maxi xj; yjmin = mini yj; yjmax = maxi yj; lxj = (xjmax - xjmin) * (1.0 + edge); lyj = (yjmax - yjmin) * (1.0 + edge); si (> lxj lx); lx = lxj; finsi; si (> lyj ly); ly = lyj; finsi; si (ega &dime 3); zjmin = mini zj; zjmax = maxi zj; lzj = (zjmax - zjmin) * (1.0 + edge); si (> lzj lz); lz = lzj; finsi; finsi; *--- cas de la thermo-mecanique sinon; *--------------------------------------------------- * Boucle 1 sur toutes les deformees pour determiner * les lx ly lz maximum *--------------------------------------------------- j=0; repe loop1 ngra; j=j + 1; tj = taba.'TABLECAST'.'DEPLACEMENTS'; notps = extr taba.'LISTEMP' j; notps = enti notps; uj = tj.notps; uuj = redu uj objt; dj = objt plus (ampld * uuj); si (ega &dime 2); xj yj = coor dj; sinon; xj yj zj = coor dj; finsi; xjmin = mini xj; xjmax = maxi xj; yjmin = mini yj; yjmax = maxi yj; lxj = (xjmax - xjmin) * (1.0 + edge); lyj = (yjmax - yjmin) * (1.0 + edge); si (> lxj lx); lx = lxj; finsi; si (> lyj ly); ly = lyj; finsi; si (ega &dime 3); zjmin = mini zj; zjmax = maxi zj; lzj = (zjmax - zjmin) * (1.0 + edge); si (> lzj lz); lz = lzj; finsi; finsi; fin loop1; finsi; *--- *--- cas 3D ----- si (ega &dime 3); * Determination de t1 et t2 vecteurs orthogonaux * unitaires perpendiculaires au plan normal au * vecteur indiquant l'angle de vue n = oeil plus (0 0 0); no = norm n; n = n / no; xn yn zn = coor n; si ((ega xn 0.0) et (ega yn 0.0)); si (> zn 0.0); * n=+k, t1=i, t2=j t1=1 0 0; t2=0 1 0; sinon; * n=-k, t1=i, t2=-j t1=1 0 0; t2=0 -1 0; finsi; sinon; * n not along z, * t1=(k x n)/||k x n|| t1=(0 0 1) pvec n; no=norm t1; t1=t1 / no; * t2=n x t1 t2=n pvec t1; finsi; * stockage des huit faces du cube (lx ly lz) dans une table pp = table 'POINT'; pp.1 = 0 0 0; pp.2 = lx 0 0; pp.3 = lx ly 0; pp.4 = 0 ly 0; pp.5 = 0 0 lz; pp.6 = lx 0 lz; pp.7 = lx ly lz; pp.8 = 0 ly lz; * Situation de ces huit points dans l'espace (t1,t2) et * recherche des coordonnees maximales et minimales * Pour un point P donne sa situation dans le plan t1,t2 est * nu = (p . n) n * ro = p - nu * tau1 = ro . t1 * tau2 = ro . t2 * p1=pp.1; xp1 yp1 zp1 = coor p1; t1min = xp1; t1max = xp1; t2min = yp1; t2max = yp1; j=1; repe loop 7; j = j + 1; pj = pp.j; nu = (pj psca n) * n; ro = pj moin nu; tau1 = ro psca t1; tau2 = ro psca t2; si (< tau1 t1min); t1min = tau1; finsi; si (< tau2 t2min); t2min = tau2; finsi; si (> tau1 t1max); t1max = tau1; finsi; si (> tau2 t2max); t2max = tau2; finsi; fin loop; * lx=t1max - t1min; ly=t2max - t2min; finsi; *--- fin du cas 3D finsi; *--- fin de la determination du type de calcul ********************************************** * calcul du nombre de lignes et de colonnes ********************************************** cover = lx * ly * ngra; effm = 0.0; * ir = 0; repe loop1 ngra; ir = ir + 1; * ic = 0; repe loop2 ngra; ic = ic + 1; si ( >eg (ir * ic) ngra); quit loop2; finsi; fin loop2; * lxt = ic * lx; lyt = ir * ly; lm = lxt; si ( > lyt lm); lm = lyt; finsi; cadr = lm * lm; effi = cover / cadr; si ( >eg effi effm); nrow = ir; ncol = ic; effm = effi; sinon; quit loop1; finsi; fin loop1; *************************************************** * Boucle 2 (lignes & colonnes) sur tous les objets * afin de les placer (seulement pour les deformees) *************************************************** j=0; jr=0; repe loopr nrow; jr=jr + 1; ty=(1 - jr) * ly; jc=0; repe loopc ncol; jc=jc + 1; j=j + 1; si (> j ngra); quit loopc; finsi; tx=(jc - 1) * lx; *--- cas 3D si (ega &dime 3); * * transformation des deplacements tx,ty (dans le repere * t1,t2) en dx,dy,dz (dans le repere global) * dis = (tx * t1) plus (ty * t2); * finsi; *--- fin du cas 3D notps = extr taba.'LISTEMP' j; notps = enti notps; si ither; uuj = manu chpo objt 1 'SCAL' 0.; sinon; tj = taba.'TABLECAST'.'DEPLACEMENTS'; uj = tj.notps; uuj = redu uj objt; finsi; si (idefo et (non ither)); dj = objt plus (ampld * uuj); dj = dj coul color; si (ega &dime 3); depl dj 'PLUS' dis; sinon; depl dj 'PLUS' (tx ty); finsi; si (ega j 1); dd = dj; sinon; dd = dd et dj; finsi; finsi; si (icont et (non ither)); ejj = taba.'TABLECAST'.'CONTRAINTES'; ej = ejj.notps; * determination du type de contraintes a calculer si (existe taba 'SIGCOMP'); si (ega (taba.'SIGCOMP') 'SIGVMIS'); pj = vmis ej moj ; sinon; pj = exco ej (taba.'SIGCOMP'); finsi; sinon; mess 'IL MANQUE LE NOM DE LA CONTRAINTE A TRACER'; finsi; pj = chang chpo pj moj; pj = redu pj objt; si (&dime ega 2); vect1 = (tx ty); objt1 = objt plus vect1; pj1 = pj plus vect1; uuj1 = uuj plus vect1; objt2 = extr pj1 mail; objt3 = extr uuj1 mail; elim objt1 objt2 coefelim; elim objt3 objt2 coefelim; form (ampld * uuj1); sinon; objt1 = objt plus dis; pj1 = pj plus dis; uuj1 = uuj plus dis; objt2 = extr pj1 mail; objt3 = extr uuj1 mail; elim objt1 objt2 coefelim; elim objt3 objt2 coefelim; form (ampld * uuj1); finsi; si (ega j 1); dd = objt1; pp = pj1; sinon; dd = dd et objt1; pp = pp et pj1; finsi; finsi; si itemp; ejj = taba.'TABLECAST'.'TEMPERATURES'; ej = ejj.notps; pj = redu ej objt; si (&dime ega 2); vect1 = (tx ty); objt1 = objt plus vect1; pj1 = pj plus vect1; uuj1 = uuj plus vect1; objt2 = extr pj1 mail; objt3 = extr uuj1 mail; elim objt1 objt2 coefelim; elim objt3 objt2 coefelim; form (ampld * uuj1); sinon; objt1 = objt plus dis; pj1 = pj plus dis; uuj1 = uuj plus dis; objt2 = extr pj1 mail; objt3 = extr uuj1 mail; elim objt1 objt2 coefelim; elim objt3 objt2 coefelim; form (ampld * uuj1); finsi; si (ega j 1); dd = objt1; pp = pj1; sinon; dd = dd et objt1; pp = pp et pj1; finsi; finsi; fin loopc; fin loopr; * *--- cas du trace de la deformee supperposee avec la * geometrie initiale si idefo; * * Boucle 3 (lignes & colonnes) sur tous les objets * afin de les placer (deformee et geometrie initiale * supperposees) * j=0; jr=0; repe loopr2 nrow; jr = jr + 1; ty = (1 - jr) * ly; jc = 0; repe loopc2 ncol; jc=jc + 1; j=j + 1; si (> j ngra); quit loopc2; finsi; tx=(jc - 1) * lx; si (ega &dime 3); dis = (tx * t1) plus (ty * t2); finsi; tj = taba.'TABLECAST'.'DEPLACEMENTS'; notps = extr taba.'LISTEMP' j; notps = enti notps; uj = tj.notps; uuj = redu uj objt; dj = objt plus (ampld * uuj); dj = dj coul color; d0 = objt; si (ega &dime 2); depl dj 'PLUS' (tx ty); sinon; depl dj 'PLUS' dis; finsi; si (ega j 1); d0 = d0 coul 'BLAN'; si (ega &dime 3); ddi = dj et (d0 plus dis); sinon; ddi = dj et (d0 plus (tx ty)); finsi; sinon; si (ega &dime 3); d0 = d0 coul 'BLAN'; ddi = ddi et (d0 plus dis) et dj; sinon; d0 = d0 coul 'BLAN'; ddi = ddi et (d0 plus (tx ty)) et dj; finsi; finsi; fin loopc2; fin loopr2; finsi; *--- fin du cas de supperposition ********************************************** * trace du dessin desire ********************************************** si idefo; titre (taba.'TITRE') 'amplification = ' ampld; si (&dime ega 2); si (ega (taba.'DEFO_SUPP') VRAI); trac ddi ; sinon; trac dd ; finsi; sinon; si (ega (taba.'DEFO_SUPP') VRAI); trac cach ddi ; sinon; trac cach dd ; finsi; finsi; finsi; si icont; titre (taba.'TITRE') 'amplification = ' ampld; si (&dime ega 2); trac dd pp ; sinon; trac dd pp cach oeil; finsi; finsi; si itemp ; titre (taba.'TITRE') ; trac dd pp ; finsi; FINPROC ;