* WAAM PROCEDUR SP204843 24/03/15 21:15:10 11871 *-------------------------- Initialisations ---------------------------* * Lecture des options : * icas1 = 1 / 2 pour MAIL / VISU * Si 0 in fine : erreur. icas1 = 0 ; *----------------------------------------------------------------------* * Option MAIL *----------------------------------------------------------------------* si (ega mot1 'MAIL') ; icas1 = 1 ; *----------------- Lecture des arguments de l'option ------------------* imot1 = faux ; imot2 = faux ; imot3 = faux ; imot4 = faux ; repe b1 4 ; * Arguments option MAIL : si (ega moti1 'PAS') ; imot1 = vrai ; si (npas1 ega 0) ; fins ; sino ; npas1 = 1 ; fins ; fins ; si (ega moti1 'LARG') ; imot2 = vrai ; fins ; imot3 = vrai ; fins ; * Arguments option TEMP : imot4 = vrai ; dtca1 = -1. ; fins ; * argu dtca2/'FLOTTANT' ; * si (non (exis dtca2)) ; * dtca2 = -1. ; * fins ; fins ; fin b1 ; si (non imot1) ; fins ; si (non imot2) ; larg1 = tab1.largeur_de_passe ; sino ; fins ; fins ; si (non imot3) ; sino ; N1 = 1 ; fins ; dens1 = pas1 / (flot N1) ; fins ; *------------------- MAILLAGE des passes de soudage -------------------* fins ; * Definition d'une tolerance geometrique : tol1 = 1.e-4 * dens1 ; * Maillage d'une section de cordon : * Initialisattion sorties (MAIL) : tab2 = table ; ttps1 = table ; tmai1 = table ; indi1 = 0 ; * On parcourt la trajectoire : mtraj1 = tab1.trajectoire ; idebui1 = vrai ; ibouci1 = faux ; * Boucle sur elements de la trajectoire : repe b1 nb1 ; * Lecture ieme element de la trajectoire : imaili1 = ega mcouli1 'ROUG' ; idepli1 = ega mcouli1 'VERT' ; * * Segment VERT : deplacement si idepli1 ; idebui1 = vrai ; ibouci1 = faux ; iter b1 ; fins ; * * Segment ROUGE : maillage si imaili1 ; * Si debut nouvelle passe : si idebui1 ; * Identification de la passe : npassi1 = 0 ; mailpss1 = (tab1.passes.&bp1).maillage ; si ((Pi1 ega pps1) et (Pi2 ega pps2)) ; tpassi1 = tab1.passes.&bp1 ; npassi1 = &bp1 ; quit bp1 ; fins ; fin bp1 ; si (npassi1 ega 0) ; fins ; * Hauteur de cordon : debi1 = tpassi1 . debit ; vite1 = tpassi1 . vitesse ; haut1 = debi1 / vite1 / larg1 ; * Maillage : * si1 : maillage section courante : * vnsi1 : normale a la section vnsi1 = 1 0 0 ; * Positionnement extremite initiale (Pi1 au centre de l'arete superieure) : Pmsup1 = 0 (0.5*larg1) haut1 ; * Initialisation section extremite finale : vnsi2 = vnsi1 ; angl2 = 0. ; * * Orientation sections de maillage : * Par defaut, selon vni1 : vnsmai1 = vni1 ; vnsmai2 = vnsmai1 ; * Detection suite segments rouges et boucle : si (&b1 neg nb1) ; isuiti1 = ega mcoulip1 'ROUG' ; si isuiti1 ; idebui1 = faux ; elfini1 = elip1 ; nb2 = nb1 - (&b1 + 1) ; i2 = &b1 + 2 ; * Rq : si nb2 = 0, le bloc n'est pas execute repe b2 nb2 ; si (neg mcoul2 'ROUG') ; quit b2 ; fins ; elfini1 = eli2 ; i2 = i2 + 1 ; fin b2 ; si ibouci1 ; * On definit la normale a la section de maillage (SMA) : fins ; fins ; fins ; * Orientation de si1 selon vnsmai1 : *list vnsmai1 ; list vnsi1 ; *trac (0 -0 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ; * Si sinus non nul a tol1 pres, on oriente la section : si (lvnnz1 neg 0. (tol1 / dens1)) ; angl1 = asin lvnnz1 ; *list vnsi1 ; list vnsmai1 ; list angl1 ; angl1 = 180. - angl1 ; *mess ' on prend (180.-angl1)' ; fins ; vnsi1 = vnsmai1 ; vnsi2 = vnsi1 ; angl2 = 0. ; sino ; vnsi1 = vnsmai1 ; vnsi2 = vnsi1 ; angl2 = 0. ; fins ; fins ; *list vnsi1 ; list angl1 ; titr 'Debut de passe, apres orientation de si1' ; *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2) ; * Si boucle, on garde la section de maillage du debut : si ibouci1 ; sfini1 = si1 ; vnfini1 = vnsmai1 ; fins ; sino ; * On a deja si1 correctement orientee. * On doit orienter si2. * Par defaut, orientation de si1 : vnsi2 = vnsi1 ; angl2 = 0. ; vnsmai2 = vnsi2 ; * Si fin d'une boucle, orientation si2 connue : si (ibouci1 et (pi2 ega pfini1)) ; vnsmai2 = vnfini1 ; sino ; si (&b1 neg nb1) ; isuiti1 = ega mcoulip1 'ROUG' ; si isuiti1 ; fins ; fins ; fins ; * Fin "Si idebui1 / sinon" : fins ; * * Orientation de si2 selon vnsmai2 : *list vnsmai2 ; list vnsi2 ; *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) titr 'Avant orientation si2' ; * Si sinus non nul a tol1 pres, on oriente la section : si (lvnnz1 neg 0. (tol1 / dens1)) ; angl2 = asin lvnnz1 ; *mess ' on prend (180.-angl2)' ; saut 1 lign ; angl2 = 180. - angl2 ; fins ; sino ; * Pas sur que ça serve a quelque chose... vnsi2 = vnsmai2 ; angl2 = 180. ; fins ; fins ; titr 'En cours de passe, apres orientation de si2' ; *trac (0 0 100) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et pi1 et pi2 et (pi1 droi 1 (pi1 plus (0.01*vnsi1))) et (pi2 droi 1 (pi2 plus (0.01*vnsi2)))) ; *si (ibouci1 et (pi2 ega pfini1)) ; *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ; *fins ; *---- Maillage du segment : si (leli1 <EG llpas1) ; fins ; * Boucle sur les pas de discretisation : * pasi1 : pas de discretisation courant * nei1 : nb maillages pour ce pas de discretisation du segment * pami1 : pas de maillage courant * nei2 : nbel crees par pas de maillage repe bp1 npas1 ; si (&bp1 neg npas1) ; nei1 = 1 ; pami1 = pasi1 ; sino ; llmi1 = leli1 - llpas1 ; nei1 = llmi1 / pasi1 + 0.5 ; *mess 'nei1=' nei1 ; pami1 = llmi1 / (flot nei1) ; fins ; vtrani1 = pami1 * vni1 ; nei2 = enti (ltrani1 / dens1 + 0.5) ; *mess 'nei2=' nei2 ; itouri1 = (abs angl2) > 0. ; *list itouri1 ; *list angl2 ; angli2 = angl2 / (flot nei1) ; vnsi22 = vnsi1 ; si22 = si1 ; dti2 = ltrani1 / vite1 ; repe b2 nei1 ; si itouri1 ; sino ; fins ; si1 = si22 ; pi1 = pi22 ; mail2 = mail2 et maili2 ; tmai1 . indi1 = mail2 ; ttps1 . indi1 = tpsi2 ; tpsi2 = tpsi2 + dti2 ; indi1 = indi1 + 1 ; fin b2 ; fin bp1 ; *trac (5 -2 3) (mtraj1 et mail2 et (si1 coul rose) et (si2 coul turq) et (si22 coul oran) et pi1 et pi2) ; vnsi1 = vnsi2 ; vnsmai1 = vnsmai2 ; * Fin si imail1 (segment rouge) ; sino ; fins ; * Fin boucle segments trajectoire fin b1 ; * elim mail2 tol1 ; * Enregistrement des sorties : tab2.maillage = mail2 ; tab2.evolution_maillage = table ; tab2.evolution_maillage.temps = ttps1 ; tab2.evolution_maillage.maillage = tmai1 ; *-------------------------- Sous-option TEMP --------------------------* si imot4 ; * Valeurs par defaut dtca1 : si (dtca1 < 0.) ; dtca1 = pas1 / (tab1.vitesse_de_soudage) / pi / 3. ; fins ; * si (dtca2 < 0.) ; * dtca2 = dtca1 ; * fins ; * Redecoupage de la liste des temps de l'evolution de la puissance thermique : evqt1 = tab1.evolution_puissance ; tol3 = 0.001 * tab1.temps_de_coupure ; * Gestion des evenements : Si ieve1 ; ie1 = &beve1 ; lteve1 = lteve1 et tab1.evenements.ie1.temps ; fin beve1 ; *list lteve1 ; *list lieve1 ; *list lpeve1 ; sino ; fins ; * Sous-decoupage de l'historique de puissance : * Gestion evenements : si (peve0 neg 0) ; sino ; neve1 = -1 ; fins ; idtev1 = neve0 ega neve1 ; si idtev1 ; dtev1 = tev1 - t0 ; *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ; fins ; sino ; idtev1 = faux ; fins ; * Boucle sur les piquets de temps : repe b1 (nb1 - 1) ; ip1 = &b1 + 1 ; dt1 = t1 - t0 ; si (&b1 ega 1) ; dt0 = dt1 ; fins ; * Avec evements : si idtev1 ; si (dt1 <EG dtca1) ; si (dtev1 <EG dtca1) ; si (dt1 ega dtev1 tol3) ; sino ; si (dt1 < dtev1) ; t1 = tev1 ; sino ; fins ; fins ; sino ; si ((q0 > tol2) ou (q1 > tol2)) ; sino ; fins ; t1 = tev1 ; fins ; sino ; si (dt1 ega dtev1 tol3) ; si ((q0 > tol2) ou (q1 > tol2)) ; sino ; fins ; sino ; si (dtev1 < dt1) ; si (dtev1 < dtca1) ; sino ; si ((q0 > tol2) ou (q1 > tol2)) ; *mess '############ Ici 1' ; sino ; fins ; fins ; sino ; si ((q0 > tol2) ou (q1 > tol2)) ; *mess '############ Ici 2' ; sino ; fins ; t1 = tev1 ; fins ; fins ; fins ; * Pas d'evenement : sino ; si (dt1 <EG dtca1) ; sino ; si ((q0 > tol2) ou (q1 > tol2)) ; sino ; fins ; fins ; fins ; t0 = t1 ; q0 = q1 ; * Gestion evenement suivant : peve0 = peve1 ; si (peve0 neg 0) ; sino ; neve1 = -1 ; fins ; idtev1 = neve0 ega neve1 ; si idtev1 ; dtev1 = tev1 - t0 ; *mess (chai 'Even. = ' neve0 ', dtev1 =' dtev1) ; fins ; sino ; idtev1 = faux ; fins ; fin b1 ; * Verification si liste temps calcules bien ordonnee : fins ; tab2.temps_calcules = ltca1 ; * Sorties si evenements : si ieve1 ; tab2.temps_evenements = lteve1 ; tab2.index_evenements = lieve1 ; fins ; * Fin sous-option TEMP : fins ; resp tab2 ; * Fin option MAILLAGE : fins ; *----------------------------------------------------------------------* * Option VISU * *----------------------------------------------------------------------* si (ega mot1 'VISU') ; icas1 = 2 ; * * Lecture MOT CACH / FACE : sino ; fins ; * Lecture maillage complementaire a afficher : fins ; mail1 = tab1.maillage ; tmai1 = tab1.evolution_maillage.maillage ; i1 = 0 ; maili1 = tmai1.i1 ; maili1 = maili1 et mail2 ; def0 = def0 et defi1 ; i1 = i1 + 1 ; fin b2 ; trac cle1 anim def0 ; * Fin option VISU : fins ; *----------------------------------------------------------------------* * FIN * *----------------------------------------------------------------------* * * MOT1 n'est pas un des mots-cles des options de la procedure : si (icas1 ega 0) ; fins ; FINP ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales