Télécharger @PRCA1.procedur

Retour à la liste

Numérotation des lignes :

  1. * @PRCA1 PROCEDUR MB234859 17/09/26 21:15:03 9567
  2. ***********************************************************************
  3. *
  4. * CETTE PROCEDURE A ETE MISE GRACIEUSEMENT A DISPOSITION DES
  5. * UTILISATEURS PAR LE LTDS - Ecole Centrale Lyon (S. Fouvry et S.Garcin)
  6. *
  7. ***********************************************************************
  8. * PROCEDURE DE CALCUL @PRCA1
  9. *
  10. * Extrait les donnees nodales CArea, CShear, CPress, CSlip
  11. *
  12. * Premiere partie :
  13. * a. Determination de CAREA et des vecteurs normaux et tangentiels
  14. * b. Determination de la pression de contact et du cisaillement
  15. * c. Determination du nombre de noeud en contact, en glissement...
  16. *
  17. * Seconde partie :
  18. * a. Quelques initialisations
  19. * b. Determination des plus proches voisins
  20. * c. Determination du glissement relatif
  21. *
  22. * Entrees :
  23. * T1 : Table de PASAPAS
  24. * ID_BU : Entier donnant le numero de la BOITE D'USURE a considerer
  25. *
  26. * Sortie :
  27. * T1 : Table de PASAPAS avec les booleens mis a jour
  28. *
  29. * Appelee par @EVN_MNG
  30. *
  31. ***********************************************************************
  32. DEBP @PRCA1 T1*'TABLE' ID_BU*'ENTIER';
  33.  
  34. * Booleen d'activation (VRAI) des traces :
  35. * OPVecDir : Vecteurs Directeurs normaux et tangents sur maillage de la boite
  36. * OPVNrmTg : Vecteurs Reactions normale et tangentielle (et totale) sur maill
  37. * OPProcVo : Proches voisins gauche et droit de chaque noeud de SUR_APPL
  38. * OPCntEvo : Evolution donnees de contact : CPress , CShear, DCSlip , EnDisIn
  39. * OPDistFn : des Fonctions Distances pour chaque pour de SUR_APPL avec SUR_VO
  40. * OPPRSASV : des Points Repositionnes spatialement (CX + UX) de la Surface
  41. * d'Application et de la Surface Voisine pour visualiser l'evolution de l'
  42. * d'interaction de contact avec l'application de l'usure
  43. OPVecDir = FAUX ;
  44. OPVNrmTg = FAUX ;
  45. OPProcVo = FAUX ;
  46. OPCntEvo = FAUX ;
  47. OPDistFn = FAUX ;
  48. OPPRSASV = FAUX ;
  49. *
  50. TT = T1 . 'TEMPS' ;
  51. Inc = (DIME TT) - 1 ;
  52. TpsEst = T1.'ESTIMATION'.'TEMPS' ;
  53.  
  54. * Indice de table pour stocker les resultats
  55. SI (TpsEst <EG 1.e-10) ;
  56. Inc = 0 ;
  57. FINSI ;
  58.  
  59. * Configuration initiale
  60. * CONF0 = 'FORM' ;
  61. CONF0 = WTAB.'FOR0' ;
  62. TT = T1.'ESTIMATION'.'TEMPS' ;
  63. TU = T1.'ESTIMATION'.'DEPLACEMENTS' ;
  64. RE = T1.'ESTIMATION'.'REACTIONS' ;
  65. TS = T1.'ESTIMATION'.'CONTRAINTES' ;
  66.  
  67. BOITE_US = T1.'BOITES_USURES'. ID_BU ;
  68. VOL_REPA = BOITE_US.'VOLUME_REPARTITION' ;
  69. SUR_APPL = BOITE_US.'SURFACE_APPLICATION' ;
  70. SUR_APPU = BOITE_US.'SURFACE_APPUI' ;
  71. PT_REF_U = BOITE_US.'POINT_O_U' ;
  72. T_INI_US = BOITE_US.'T_INI_US' ;
  73. VEC_APPL = BOITE_US.'DIRECTION_APPLICATION' ;
  74. MuContac = BOITE_US.'COEFFICIENT_FROTTEMENT' ;
  75.  
  76. *----------------------------------------------------------------------*
  77. * *
  78. * PARTIE 1.a : Calcul pour le maillage SUR_APPL de *
  79. * *
  80. * CHPVNORM (VECTEUR_NORMAL) : CHPOINT de vecteur normal *
  81. * CHPVTANG (VECTEUR_TANGENT) : CHPOINT de vecteur tangent *
  82. * CHPLongE (AIRE_DE_CONTACT_NODALE): CHPOINT de longueur des elts *
  83. * *
  84. *----------------------------------------------------------------------*
  85. * Initialisation de variables
  86. CHPLongE = MANU 'CHPO' SUR_APPL 1 'LE' 0. ;
  87. CHPVNorm = MANU 'CHPO' SUR_APPL 2 'VX' 0. 'VY' 0. ;
  88. CHPVTang = MANU 'CHPO' SUR_APPL 2 'VX' 0. 'VY' 0. ;
  89.  
  90. SUR_SEG2 = CHAN 'SEG2' SUR_APPL ;
  91. NBEL_APL = (NBEL SUR_SEG2) ;
  92. *
  93. * On se place dans la configuration deformee
  94. 'FORM' TU ;
  95. *
  96. REPE BCL NBEL_APL ;
  97.  
  98. * Isolement du &BCLieme element du maillage traite
  99. EL_bb = SUR_SEG2 ELEM &BCL ;
  100. *
  101. * Extraction du point 1 du SEG2 et de ses coordonnees
  102. PT1 = EL_bb POIN 1 ;
  103. XP1 = 'COOR' 1 PT1 ;
  104. YP1 = 'COOR' 2 PT1 ;
  105. *
  106. * Extraction du point 2 du SEG2 et de ses coordonnees
  107. PT2 = EL_bb POIN 2 ;
  108. XP2 = 'COOR' 1 PT2 ;
  109. YP2 = 'COOR' 2 PT2 ;
  110. *
  111. * Vecteur directeur de l'element
  112. X12 = XP2 - XP1 ; Y12 = YP2 - YP1 ;
  113. *
  114. * Longueur de l'element (SEG2)
  115. LongElem = ((X12*X12) + (Y12*Y12)) ** (0.5) ;
  116. *
  117. * Normalisation
  118. X12 = X12 / LongElem ; Y12 = Y12 / LongElem ;
  119. *
  120. * Construction du Vecteur normal de l'element
  121. XN = -1.* Y12 ; YN = 1.* X12 ;
  122. *
  123. * Cumul CHPOINT de vecteur normal et de vecteur tangent:
  124. * Cas 1 : Element BORD Gauche : Concerne uniquement le PT1
  125. * Cas 3 : Element BORD Droit : Concerne uniquement le PT2
  126. SI (EGA &BCL 1) ;
  127. CHPVN1 = MANU 'CHPO' PT1 2 'VX' XN 'VY' YN ;
  128. CHPVNorm = CHPVNorm + CHPVN1 ;
  129. CHPVT1 = MANU 'CHPO' PT1 2 'VX' X12 'VY' Y12 ;
  130. CHPVTang = CHPVTang + CHPVT1 ;
  131. FINSI ;
  132. SI (EGA &BCL NBEL_APL) ;
  133. CHPVN2 = MANU 'CHPO' PT2 2 'VX' XN 'VY' YN ;
  134. CHPVNorm = CHPVNorm + CHPVN2 ;
  135. CHPVT2 = MANU 'CHPO' PT2 2 'VX' X12 'VY' Y12 ;
  136. CHPVTang = CHPVTang + CHPVT2 ;
  137. FINSI ;
  138.  
  139. * Cas 2 : PT2 sauf dernier (-> encadres) : calcul du vecteur
  140. * normal et tangent a cheval sur 3 noeuds a assigner au PT2
  141. SI (&BCL NEG NBEL_APL) ;
  142.  
  143. EL_bbp1 = SUR_SEG2 ELEM (&BCL + 1) ;
  144. * PT1p1 est le même noeud que PT2 ..!
  145. PT2p1 = EL_bbp1 POIN 2 ;
  146.  
  147. XP2p1 = (COOR 1 PT2p1);
  148. YP2p1 = (COOR 2 PT2p1);
  149. X12p1 = XP2p1 - XP1 ; Y12p1 = YP2p1 - YP1 ;
  150. LElm12p1 = ((X12p1 * X12p1) + (Y12p1 * Y12p1)) ** (0.5) ;
  151. X12p1 = X12p1 / LElm12p1 ; Y12p1 = Y12p1 / LElm12p1 ;
  152. * Vecteur normal a 1/2p1
  153. XN12p1 = -1. * Y12p1 ; YN12p1 = 1. * X12p1 ;
  154.  
  155. CHPVN2 = MANU 'CHPO' PT2 2 'VX' XN12p1 'VY' YN12p1 ;
  156. CHPVNorm = CHPVNorm + CHPVN2 ;
  157. CHPVT2 = MANU 'CHPO' PT2 2 'VX' X12p1 'VY' Y12p1 ;
  158. CHPVTang = CHPVTang + CHPVT2 ;
  159. FINSI ;
  160. *
  161. * Cumul CHPOINT de longueur des elements (correspond a CAREA)
  162. * (Ici pas de notion de points encadres)
  163. CHZ1 = MANU 'CHPO' (PT1 ET PT2) 1 'LE' (LongElem/2.) ;
  164. CHPLongE = CHPLongE + CHZ1 ;
  165. *
  166. FIN BCL ;
  167.  
  168. *----------------------------------------------------------------------*
  169. * *
  170. * PARTIE 1.b : Calcul pour le maillage SUR_APPL de *
  171. * *
  172. * CPRESS (PRESSION_DE_CONTACT) : CHPOINT de pression de contact *
  173. * CSHEAR (CISAILLEMENT_DE_CONTACT) : CHPOINT de cisaillement *
  174. * VCShear (VECTEUR_CISAILLEMENT) : CHPOINT de vecteur cisaillement*
  175. * VCPress (VECTEUR_PRESSION) : CHPOINT de vecteur pression *
  176. * *
  177. *----------------------------------------------------------------------*
  178. LF = MOTS 'FX' 'FY' ; LV = MOTS 'VX' 'VY' ;
  179. LE = MOTS 'LE' 'LE' ; LS = MOTS 'SCAL' ;
  180.  
  181. VFTOTAL = MANU 'CHPO' SUR_APPL 2 'FX' 0. 'FY' 0. 'NATURE' 'DISCRET' ;
  182.  
  183. * Reduction des reactions sur le maillage SUR_APPL
  184. VFTOT_tp = REDU RE SUR_APPL ;
  185. VFTOTAL = VFTOTAL + VFTOT_tp ;
  186. VFNORMAL = (CHPVNorm * VFTOTAL LV LF LF) * CHPVNorm LF LV LF ;
  187. VFTANGEN = (CHPVTang * VFTOTAL LV LF LF) * CHPVTang LF LV LF ;
  188. Smoins1 = MANU 'CHPO' SUR_APPL 1 'SCAL' -1.;
  189. Vmoins1 = MANU 'CHPO' SUR_APPL 2 'VX' -1. 'VY' -1. ;
  190. VCPress = VFNORMAL / CHPLongE LF LE LF ;
  191. VCShear = VFTANGEN / CHPLongE LF LE LF ;
  192.  
  193. * La pression de contact est definie comme l'inverse de la projection du
  194. * vecteur de reaction suivant le vecteur normal. En effet, la normale
  195. * pointe vers l'exterieur de la surface, et la force de reaction normale
  196. * pointe vers l'interieur. La pression etant definie positive pour un
  197. * etat compressif (cas d'un contact charge), un facteur -1 scalaire est
  198. * necessaire.
  199. CPress = (PSCA CHPVNorm VCPress LV LF) * Smoins1 LS LS LS ;
  200. CShear = PSCA CHPVTang VCShear LV LF ;
  201.  
  202. * Creation des evolutions du profil de pression et de cisaillement le
  203. * long de SUR_APPL
  204. EvCPress = EVOL 'BLEU' 'CHPO' CPress SUR_APPL ;
  205. EvCShear = EVOL 'ROUG' 'CHPO' CShear SUR_APPL ;
  206. EvCPress = EXTR EvCPress 'COUR' 1 ;
  207. EvCShear = EXTR EvCShear 'COUR' 1 ;
  208. EvCPress = CHAN EvCPress 'LEGE' 'Pressure' ;
  209. EvCShear = CHAN EvCShear 'LEGE' 'Shear' ;
  210.  
  211. * Verification sur le signe de la pression de contact (Cpress > 0)
  212. * Si elle ne l'est pas, on retourne tout ..!
  213. YesWellO = VRAI ;
  214. NbNegPre = MASQ CPress 'INFERIEUR' 'SOMME' -1.E-10 ;
  215. NbNegPre = 0 ;
  216. SI (NbNegPre NEG 0) ; YesWellO = FAUX ;
  217. CPress = -1. * CPress ;
  218. CShear = -1. * CShear ;
  219. VFNORMAL = VFNORMAL * Vmoins1 LV LV LV ;
  220. VFTANGEN = VFTANGEN * Vmoins1 LV LV LV ;
  221. VCPress = VCPress * Vmoins1 LV LV LV ;
  222. VCShear = VCShear * Vmoins1 LV LV LV ;
  223.  
  224. MESS 'DEFAUT D ORIENTATION D UNE SURFACE DE CONTACT DETECTEE '
  225. MESS 'DANS LA BOITE D USURE NUMERO ' ID_BU ;
  226. MESS 'PROCEDURE DE RENVERSEMENT DES DONNEES VECTORIELLES EXCUTEE.';
  227. FINSI ;
  228.  
  229. * ContStat : Indicateur de contact : 0 si non contact, 1 si contact
  230. ContStat = MASQ CPress 'SUPERIEUR' 1.e-10 ;
  231. CpresMax = MAXI (EXTR CPress 'VALE') ;
  232.  
  233. * Traces pour verification/visaulisation
  234. SI OPVecDir ;
  235. FCTA = 0.01 ;
  236. VVNorm = VECT CHPVNorm FCTA (MOTS 'VX' 'VY') 'BLEU' ;
  237. VVTang = VECT CHPVTang FCTA (MOTS 'VX' 'VY') 'ROUG' ;
  238. TRAC (VOL_REPA) (VVNorm 'ET' VVTang ) ;
  239. FINSI ;
  240.  
  241. SI OPVNrmTg ;
  242. VVFNORM = VECT VFNORMAL FCTA 'FORCES' 'ROUG' ;
  243. VVFTANG = VECT VFTANGEN FCTA 'FORCES' 'VERT' ;
  244. VVFTOT = VECT VFTOTAL FCTA 'FORCES' 'JAUN' ;
  245. TRAC (VOL_REPA) (VVFNORM ET VVFTANG ET VVFTOT);
  246. FINSI ;
  247.  
  248. *----------------------------------------------------------------------*
  249. * *
  250. * PARTIE 1.c : Calcul pour le maillage SUR_APPL de *
  251. * *
  252. * NbNECont : nombre de noeud en contact *
  253. * NbNEGlis : nombre de noeud en glissement *
  254. * ContStat (STATUT_DE_CONTACT) : indique si contact ou non *
  255. * GlisStat (STATUT_DE_GLISSEMENT) : indique si glissement ou non *
  256. * *
  257. *----------------------------------------------------------------------*
  258. NbNECont = MASQ CPress 'SUPERIEUR' 'SOMME' 1.E-10 ;
  259. RCShCPr = (REDU (ABS CShear) ContStat) / (REDU CPress ContStat)
  260. LS LS LS ;
  261. NbNEGlis = MASQ RCShCPr 'EGSUPE' 'SOMME' (0.95 * MuContac) ;
  262. TauxGlis = (FLOT NbNEGlis) / (FLOT NbNECont) ;
  263.  
  264. MESS 'NbNECont = ' NbNECont ' NbNEGlis = ' NbNEGlis
  265. 'Taux de glissement = ' TauxGlis ;
  266.  
  267. * GlisStat : Indicateur de glissement : 0 si non glissement, 1 sinon
  268. GlisStat = MANU 'CHPO' SUR_APPL 1 'SCAL' 0.0 'NATURE' 'DISCRET' ;
  269. GlStaTmp = MASQ RCShCPr 'EGSUPE' (0.985 * MuContac) ;
  270. GlisStat = GlisStat + GlStaTmp ;
  271.  
  272. * Determination du comportement en glissement du contact en general :
  273. * Il sera utilise pour preciser la methode de calcul du glissement pour
  274. * les noeuds sujets a une mise en contact ou un relachement de contact.
  275. SI (TauxGlis >EG 0.999) ;
  276. GlisGene = VRAI ;
  277. SINON ;
  278. GlisGene = FAUX ;
  279. FINSI ;
  280.  
  281. * Initialisation des tables si elles n'existent pas
  282. BOITE_US = @ChCoTaE BOITE_US ID_BU;
  283.  
  284. * Stockage des resultats dans la boite d usure
  285. BOITE_US.'CISAILLEMENT_DE_CONTACT'. Inc = CShear ;
  286. BOITE_US.'PRESSION_DE_CONTACT'. Inc = CPress ;
  287. BOITE_US.'STATUT_DE_CONTACT'. Inc = ContStat ;
  288. BOITE_US.'STATUT_DE_GLISSEMENT'. Inc = GlisStat ;
  289. BOITE_US.'AIRE_DE_CONTACT_NODALE'. Inc = CHPLongE ;
  290. BOITE_US.'VECTEUR_PRESSION'. Inc = -1. * VCPress ;
  291. BOITE_US.'VECTEUR_CISAILLEMENT'. Inc = VCShear ;
  292. BOITE_US.'VECTEUR_TOTAL'. Inc = (VCShear - VCPress) ;
  293. BOITE_US.'VECTEUR_NORMAL'. Inc = CHPVNorm ;
  294. BOITE_US.'VECTEUR_TANGENTIEL'. Inc = CHPVTang ;
  295. BOITE_US.'EVO_PRESSION_CONTACT'. Inc = EvCPress ;
  296. BOITE_US.'EVO_CISAILLEMENT_CONTACT'. Inc = EvCShear ;
  297.  
  298. *----------------------------------------------------------------------*
  299. * *
  300. * PARTIE 2.a : Quelques initialisations *
  301. * *
  302. *----------------------------------------------------------------------*
  303. SUR_VOIS = BOITE_US.'SURFACE_VOISINE' ;
  304.  
  305. X_PtsSA = 'COOR' 1 SUR_APPL ;
  306. Y_PtsSA = 'COOR' 2 SUR_APPL ;
  307. X_PtsSV = 'COOR' 1 SUR_VOIS ;
  308. Y_PtsSV = 'COOR' 2 SUR_VOIS ;
  309.  
  310. SI OPPRSASV ;
  311. PTS_APPL = POIN (EXTR (X_PtsSA) 'VALE') (EXTR (Y_PtsSA) 'VALE') ;
  312. PTS_VOIS = POIN (EXTR (X_PtsSV) 'VALE') (EXTR (Y_PtsSV) 'VALE') ;
  313. PTS_VOIS = PTS_VOIS COUL 'ROUG' ;
  314. TRAC (PTS_APPL ET PTS_VOIS) ;
  315. FINSI ;
  316. *
  317. PRVOGAUC = TABL ; PRVODROI = TABL ;
  318. STRCNTST = TABL ; STRCNFCE = TABL ; STREVOCS = TABL ;
  319. TauxPSVG = TABL ; TauxPSVD = TABL ;
  320.  
  321. DCSlip = MANU 'CHPO' SUR_APPL 1 'SL' 0. 'NATURE' 'DISCRET' ;
  322.  
  323. NCNECC = BOITE_US . 'NCNECC' ;
  324. * IdIniVCu : indicateur valant 0 (initialise) ou 1 (cumul)
  325. IdIniVCu = BOITE_US.'INDICATEUR_INITIALISATION_VAR_CUMUL' ;
  326. SI (IdIniVCu EGA 0) ;
  327. BOITE_US.'INDICATEUR_INITIALISATION_VAR_CUMUL' = 1 ;
  328. EnDisCyc = MANU 'CHPO' SUR_APPL 1 'ED' 0. 'NATURE' 'DISCRET' ;
  329. EnDisTot = MANU 'CHPO' SUR_APPL 1 'ED' 0. 'NATURE' 'DISCRET' ;
  330. SINON ;
  331. SI (EXIS (BOITE_US.'ENERGIE_DISSIPEE_SUR_CYCLE') NCNECC) ;
  332. EnDisCyc = BOITE_US.'ENERGIE_DISSIPEE_SUR_CYCLE'. NCNECC ;
  333. SINON ;
  334. EnDisCyc = MANU 'CHPO' SUR_APPL 1 'ED' 0. 'NATURE' 'DISCRET' ;
  335. FINSI ;
  336.  
  337. EnDisTot = BOITE_US.'ENERGIE_DISSIPEE_TOTALE' ;
  338. PrcCShea = BOITE_US.'CISAILLEMENT_DE_CONTACT'. (Inc-1) ;
  339. PrcDPPBC = BOITE_US.'DIST_PLUS_PROCHE_BORD_DE_CONTACT'. (Inc-1) ;
  340. FINSI ;
  341.  
  342. EnDisInc = MANU 'CHPO' SUR_APPL 1 'ED' 0.0 'NATURE' 'DISCRET' ;
  343.  
  344. * Initialisation des chpo de distance aux bords de contact ;
  345. DistBCDr = MANU 'CHPO' SUR_APPL 1 'L' 0. 'NATURE' 'DISCRET' ;
  346. DistBCGa = MANU 'CHPO' SUR_APPL 1 'L' 0. 'NATURE' 'DISCRET' ;
  347. DistPPBC = MANU 'CHPO' SUR_APPL 1 'SCAL' 0. 'NATURE' 'DISCRET' ;
  348.  
  349. * Boucle sur les noeuds du maillage SUR_APPL
  350. REPE BSN (NBNO SUR_SEG2) ;
  351. *----------------------------------------------------------------------*
  352. * *
  353. * PARTIE 2.b : Determination pour les noeuds de SUR_APPL *
  354. * des plus proches voisins appartenant a SUR_VOIS *
  355. * (PROCHE_VOISIN_GAUCHE) et (PROCHE_VOISIN_DROITE) *
  356. * *
  357. *----------------------------------------------------------------------*
  358. PT_ii = SUR_SEG2 POIN &BSN ;
  359. X_ii = 'COOR' 1 PT_ii ; Y_ii = 'COOR' 2 PT_ii ;
  360. X_iiSV = X_PtsSV - X_ii ; Y_iiSV = Y_PtsSV - Y_ii ;
  361. X_iiSA = X_PtsSA - X_ii ; Y_iiSA = Y_PtsSA - Y_ii ;
  362. PtsSVOIS = EXTR X_iiSV 'MAIL' ; PtsSAPPL = EXTR X_iiSA 'MAIL' ;
  363. X_iiSV = EXTR X_iiSV 'VALE' ; X_iiSA = EXTR X_iiSA 'VALE' ;
  364. Y_iiSV = EXTR Y_iiSV 'VALE' ; Y_iiSA = EXTR Y_iiSA 'VALE' ;
  365. XY_iiSV = MANU 'CHPO' PtsSVOIS 2 'VX' X_iiSV 'VY' Y_iiSV ;
  366. XY_iiSA = MANU 'CHPO' PtsSAPPL 2 'VX' X_iiSA 'VY' Y_iiSA ;
  367. VTANG_ii = REDU CHPVTang PT_ii ;
  368. VXTANGii = MAXI(EXTR (EXCO VTANG_ii 'VX') 'VALE') ;
  369. VYTANGii = MAXI(EXTR (EXCO VTANG_ii 'VY') 'VALE') ;
  370. CHPVT_ii = MANU 'CHPO' PtsSVOIS 2 'VX' VXTANGii 'VY' VYTANGii ;
  371. CHPAT_ii = MANU 'CHPO' PtsSAPPL 2 'VX' VXTANGii 'VY' VYTANGii ;
  372. DistiiSV = PSCA XY_iiSV CHPVT_ii LV LV ;
  373. DistiiSA = PSCA XY_iiSA CHPAT_ii LV LV ;
  374. PPEA = 1.e-14 ; COMM 'Le Plus Petit Ecart Admis' ;
  375. OuiPSVDr = MASQ DistiiSV 'SUPERIEUR' PPEA ;
  376. OuiPSVGa = MASQ DistiiSV 'INFERIEUR' (-1.*PPEA) ;
  377. OuiPSADr = MASQ DistiiSA 'SUPERIEUR' PPEA ;
  378. OuiPSAGa = MASQ DistiiSA 'INFERIEUR' (-1.*PPEA) ;
  379.  
  380. * Cas d'un point confondu avec le point a tester => On ajoute ce point
  381. * a la selection de points a droite
  382. OuiPSVEg = MASQ (ABS DistiiSV) 'EGINFE' 'SOMME' PPEA ;
  383.  
  384. * Creation des evolutions .. but de visualisation uniquement
  385. SI OPDistFn ;
  386. EvPSVDr = EVOL 'BLEU' 'CHPO' OuiPSVDr SUR_VOIS;
  387. EvPSVDr = CHAN EvPSVDr 'LEGE' 'Voisins a droite' ;
  388. EvPSVGa = EVOL 'VERT' 'CHPO' OuiPSVGa SUR_VOIS;
  389. EvPSVGa = CHAN EvPSVGa 'LEGE' 'Voisins a gauche' ;
  390. DESS (EvPSVDr ET EvPSVGa) 'LEGE' ;
  391. FINSI ;
  392.  
  393. * Recuperation des points de la surface voisine detectes a droite ou
  394. * a gauche, et identification des maillages vides.
  395. UniPSVDr = REDU DistiiSV OuiPSVDr ;
  396. UniPSVGa = REDU DistiiSV OuiPSVGa ;
  397.  
  398. UniPSADr = MANU 'CHPO' PtsSAPPL 1 'SCAL' 0. 'NATURE' 'DISCRET' ;
  399. UniPSAGa = MANU 'CHPO' PtsSAPPL 1 'SCAL' 0. 'NATURE' 'DISCRET' ;
  400. UniPSADr = UniPSADr + (REDU DistiiSA OuiPSADr) ;
  401. UniPSAGa = UniPSAGa + (REDU DistiiSA OuiPSAGa) ;
  402. UPSAECDr = REDU UniPSADr ContStat ;
  403. UPSAECGa = REDU UniPSAGa ContStat ;
  404.  
  405. * Section pour verification visuelle DESS
  406. SI OPDistFn ;
  407. EvTmp1 = EVOL 'ROUG' 'CHPO' UPSAECDr SUR_APPL ;
  408. EvTmp2 = EVOL 'BLEU' 'CHPO' UPSAECGa SUR_APPL ;
  409. EvTmp1 = CHAN EvTmp1 'LEGE' 'dist bord Droit' ;
  410. EvTmp2 = CHAN EvTmp2 'LEGE' 'dist bord Gauche';
  411. DESS (EvTmp1 ET EvTmp2) 'LEGE' ;
  412. FINSI ;
  413.  
  414. * UPSAECDr/Ga : Uniquement les Points de la Surface d'Application En Contact Dro
  415.  
  416. * Premiere identification des plus proches voisins de chaque cote.
  417. MinPSVDr = MINI (EXTR UniPSVDr 'VALE') ;
  418. MinPSVGa = MINI (EXTR (ABS UniPSVGa) 'VALE') ;
  419.  
  420. * Identification des points tjr en contact les plus eloignes == Bords de conta
  421. BCPosSV = MAXI (EXTR UPSAECDr 'VALE') ;
  422. BCNegSV = MINI (EXTR UPSAECGa 'VALE') ;
  423.  
  424. * Calcul du Plus Proche Bord de Contact en evaluant les deux precedentes
  425. * donnees DistBCDr et DistBCGa pour creer DistPPBC, un chpo qui vaut 0.0
  426. * en dehors du contact ou pour les noeuds en bord de contact, et qui est
  427. * non nul positif pour ceux pleinement dans le contact.
  428. SI (NON (((ABS BCPosSV) <EG PPEA) OU ((ABS BCNegSV) <EG PPEA))) ;
  429. DPPBCPTi = MINI (PROG (ABS BCPosSV) (ABS BCNegSV) ) ;
  430. DistPPBC = DistPPBC + (MANU 'CHPO' PT_ii 1 'SCAL' DPPBCPTi) ;
  431. SINON ;
  432. DPPBCPTi = 0. ;
  433. FINSI ;
  434.  
  435. * Verification de la presence des voisins gauche et droit
  436. SI (MinPSVDr < PPEA) ;
  437. ProchDro = VIDE 'MAILLAGE' ;
  438. VPrchDro = ProchDro ;
  439. MinDisDr = 1.e10 ;
  440. PSVDrDef = FAUX ;
  441. SINON ;
  442. PSV_D = EXTR UniPSVDr 'MAIL' ;
  443. DisUPSVD = REDU DistiiSV OuiPSVDr ;
  444. MinDisDr = MINI ( ABS (EXTR DisUPSVD 'VALE')) ;
  445. MinDisDr = MINI (EXTR DisUPSVD 'VALE');
  446. PVMDisDr = MASQ (DisUPSVD - MinDisDr) 'INFERIEUR' PPEA ;
  447. PVMDisDr = MASQ (DisUPSVD - MinDisDr) 'SUPERIEUR' (-1*PPEA) ;
  448. PVMDisDr = REDU PVMDisDr PVMDisDr ;
  449. ProchDro = POIN (EXTR PVMDisDr 'MAIL') 1 ;
  450. VPrchDro = 'COUL' (ProchDro ET ProchDro) 'BLEU' ;
  451. PSVDrDef = VRAI ;
  452. FINSI ;
  453.  
  454. SI (MinPSVGa < PPEA) ;
  455. ProchGau = VIDE 'MAILLAGE' ;
  456. VPrchGau = ProchGau ;
  457. MinDisGa = 1.e10 ;
  458. PSVGaDef = FAUX ;
  459. SINON ;
  460. PSV_G = EXTR UniPSVGa 'MAIL' ;
  461. DisUPSVG = REDU DistiiSV OuiPSVGa ;
  462. MinDisGa = MINI ( ABS (EXTR DisUPSVG 'VALE')) ;
  463. MinDisGa = MAXI (EXTR DisUPSVG 'VALE');
  464. PVMDisGa = MASQ (DisUPSVG - MinDisGa) 'EGALE' 0.0 ;
  465. PVMDisGa = REDU PVMDisGa PVMDisGa ;
  466. ProchGau = POIN (EXTR PVMDisGa 'MAIL') 1 ;
  467. VPrchGau = (ProchGau ET ProchGau) COUL 'ROUG' ;
  468. PSVGaDef = VRAI ;
  469. FINSI ;
  470.  
  471. * + ecrasement du point le plus eloigne si presence d'un point confondu
  472. SI (NEG 0 OuiPSVEg) ;
  473. CHPOConf = MASQ (ABS DistiiSV) 'EGINFE' PPEA ;
  474. CHPOConf = REDU CHPOConf CHPOConf ;
  475. PT_Confo = (EXTR CHPOConf 'MAIL') POIN 1 ;
  476.  
  477. SI (MinDisGa > MinDisDr);
  478. ProchGau = PT_Confo ;
  479. MinDisGa = MINI (ABS (EXTR (REDU DistiiSV ProchGau) 'VALE')) ;
  480. PSVGaDef = VRAI ;
  481. SINON ;
  482. ProchDro = PT_Confo ;
  483. MinDisDr = MINI (EXTR (REDU DistiiSV ProchDro) 'VALE') ;
  484. PSVGaDef = VRAI ;
  485. FINSI ;
  486. FINSI ;
  487.  
  488. * On a determine pour le point PT_ii ses plus proches voisins de droite
  489. * et de gauche sur la surface SUR_VOIS
  490.  
  491. * Determination de la distance au bord de contact :
  492. * - Isolement des points en contact (ContStat = 1) a gauche et a droite
  493. * - Recuperation du maxi
  494.  
  495. * Trace de verification des plus proches voisins detectes
  496. SI OPProcVo ;
  497. PROCHES = (VPrchDro ET VPrchGau) ;
  498. TRAC (PT_ii ET SUR_APPL ET SUR_VOIS ET PROCHES ) ;
  499. FINSI ;
  500.  
  501. * Configuration du point PT_ii
  502. SI (PSVDrDef ET PSVGaDef) ;
  503. ConfigCE = 'Encadre' ;
  504. SINON ; SI PSVDrDef ;
  505. ConfigCE = 'Droit_uniquement' ;
  506. SINON ; SI PSVGaDef ;
  507. ConfigCE = 'Gauche_uniquement' ;
  508. SINON ;
  509. ConfigCE = 'Erreur : Aucun voisin detecte' ;
  510. FINSI ; FINSI ; FINSI ;
  511.  
  512. * Etablissement de l'etat du noeud : Contact ou Non contact
  513. CntStaPi = MAXI (EXTR (REDU ContStat PT_ii) 'VALE') ;
  514. SI (CntStaPi >EG 1.e-10) ;
  515. CntStaPi = 'Contact' ;
  516. SINON ;
  517. CntStaPi = 'Non_contact' ;
  518. FINSI ;
  519.  
  520. * Si environnement NON ENCADRE et CONTACT => PROBLEME
  521. SI ((EGA CntStaPi 'Contact') ET (NEG ConfigCE 'Encadre')) ;
  522. MESS 'PROBLEME AU NIVEAU DU CONTACT : ON A DETECTE UN NOEUD DE ';
  523. MESS 'LA BOITE D USURE N ' ID_BU ' EN CONTACT ET NON ENCRADRE ';
  524. MESS 'PAR LA SURFACE VOISINE.' ;
  525. MSG_ER = 'Conflit def. charg. / surf. appli. us.' ;
  526. ERRE MSG_ER ;
  527. FINSI ;
  528.  
  529. * Etablissement de l'evolution de la configuration de contact entre
  530. * l'increment precedent (PrcCnSt) et celui ci (CntStaPi).
  531. * Etats possibles :
  532. * - Vierge : le noeud n'a jamais etait en contact
  533. * - Mise_en_contact : le noeud passe d'une configuration
  534. * depuis le debut de la phase d'usure
  535. * de non contact a contact
  536. * - Contact_persistant : le contact persiste entre les deux
  537. * increments
  538. * - Relachement_de_contact : le contact cesse entre les deux
  539. * increments
  540. * - Non_contact_persistant : le noeud reste dans une configuration
  541. * de non contact
  542. SI (IdIniVCu NEG 0);
  543. PrcCnSt = BOITE_US.'INDICATEUR_CONTACT_NODAL'. (Inc-1) . &BSN ;
  544. SI (EGA PrcCnSt 'Contact') ;
  545. SI (EGA CntStaPi 'Contact') ;
  546. EvCnStPi = 'Contact_persistant' ;
  547. SINON ;
  548. EvCnStPi = 'Relachement_de_contact' ;
  549. FINSI ;
  550. SINON ;
  551. SI (EGA CntStaPi 'Contact') ;
  552. EvCnStPi = 'Mise_en_contact' ;
  553. SINON ;
  554. EvCnStPi = 'Non_contact_persistant' ;
  555. FINSI ;
  556. FINSI ;
  557. SINON ;
  558. SI (EGA CntStaPi 'Contact' );
  559. EvCnStPi = 'Mise_en_contact' ;
  560. SINON ;
  561. EvCnStPi = 'Vierge' ;
  562. FINSI ;
  563. FINSI ;
  564.  
  565. *----------------------------------------------------------------------*
  566. * *
  567. * Partie2.c : Calcul pour le point PT_ii du glissement eventuel *
  568. * DSlip_Pi *
  569. * *
  570. *----------------------------------------------------------------------*
  571. SI (EGA EvCnStPi 'Contact_persistant') ;
  572. PrcTauxG = BOITE_US.'TAUX_VOISIN_GAUCHE'. (Inc-1)!. <ópaj style="color: #000000; font-weight: bold;">&BSN ;
  573. PrcTauxD = BOITE_US.'TAUX_VOISIN_DROIT'. (Inc-1) . &BSN ;
  574. PrcPVG = BOITE_US.'PROCHE_VOISIN_GAUCHE'. (Inc-1) . &BSN ;
  575. PrcPVD = BOITE_US.'PROCHE_VOISIN_DROIT'. (Inc-1) . &BSN ;
  576. XPrcPVG = 'COOR' 1 PrcPVG ; YPrcPVG = 'COOR' 2 PrcPVG ;
  577. XPrcPVD = 'COOR' 1 PrcPVD ; YPrcPVD = 'COOR' 2 PrcPVD ;
  578.  
  579. * Estimation de la position spatiale du plus proche voisin virtuel precedent
  580. * a partir des positions spatiales des precedents plus proches voisins
  581. * gauche et droite et des taux de contributions precedents.
  582.  
  583. XPrcPVV = (PrcTauxG * XPrcPVG) + (PrcTauxD * XPrcPVD) ;
  584. YPrcPVV = (PrcTauxG * YPrcPVG) + (PrcTauxD * YPrcPVD) ;
  585. VXPiPPVV = XPrcPVV - X_ii ;
  586. VYPiPPVV = YPrcPVV - Y_ii ;
  587.  
  588. VT_ii = MANU 'CHPO' PT_ii 2 'VX' (-1.*VXTANGii)
  589. 'VY' (-1.*VYTANGii) ;
  590.  
  591. VPiPPVV = MANU 'CHPO' PT_ii 2 'VX' VXPiPPVV 'VY' VYPiPPVV ;
  592.  
  593. * Valeur du glissement au point PT_ii
  594. DSlip_Pi = MAXI (EXTR (PSCA VPiPPVV VT_ii LV LV) 'VALE') ;
  595.  
  596. CHPiiDSl = MANU 'CHPO' PT_ii 1 'SL' DSlip_Pi 'NATURE' 'DISCRET' ;
  597. DCSlip = DCSlip + CHPiiDSl ;
  598. FINSI ;
  599.  
  600. * Evaluation du "taux de contribution" des points voisins gauche et
  601. * droit dans le cas d'un contact encadre.
  602. SI (EGA ConfigCE 'Encadre') ;
  603. DistTota = (ABS MinDisDr) + (ABS MinDisGa) ;
  604. TauxGauc = 1. - (( ABS MinDisGa ) / DistTota) ;
  605. TauxDroi = 1. - (( ABS MinDisDr ) / DistTota) ;
  606. FINSI ;
  607.  
  608. * Ecriture des resultats dans les tables dedies ;
  609. STRCNTST. &BSN = CntStaPi ; STRCNFCE. &BSN = ConfigCE ;
  610. PRVODROI. &BSN = ProchDro ; PRVOGAUC. &BSN = ProchGau ;
  611.  
  612. SI OPProcVo ;
  613. ProchVoi = (ProchDro ET ProchGau) ;
  614. ProchVoi = ProchVoi COUL 'ORAN' ;
  615. TRAC (ProchVoi ET PT_ii) ;
  616. FINSI ;
  617.  
  618. STREVOCS. &BSN = EvCnStPi ; TauxPSVG. &BSN = TauxGauc ;
  619. TauxPSVD. &BSN = TauxDroi ;
  620.  
  621. *----------------------------------------------------------------------*
  622. * *
  623. * Partie2.d : Calcul pour le point PT_ii de l'energie dissipee sur *
  624. * le pas de temps EnDisPTi *
  625. * *
  626. *----------------------------------------------------------------------*
  627. SI (IdIniVCu 'NEG' 0) ;
  628. * Valeur du cisaillement sur le pas de temps concerne au noeud PT_ii
  629. CShearPi = MAXI (EXTR (REDU CShear PT_ii) 'VALE') ;
  630. * Valeur du cisaillement au pas de temps precedent au noeud PT_ii
  631. PrcCShPi = MAXI (EXTR (REDU PrcCShea PT_ii) 'VALE') ;
  632. PrcDBCPi = MAXI (EXTR (REDU PrcDPPBC PT_ii) 'VALE') ;
  633. EnDisPTi = 0.0 ;
  634. * Calcul de l'energie disspee
  635. SI (EGA EvCnStPi 'Contact_persistant') ;
  636. EnDisPTi = ABS ( DSlip_Pi * ((CShearPi + PrcCShPi) / 2.) ) ;
  637. FINSI ;
  638. *
  639. SI GlisGene ;
  640. CorCSlPi = 0.0 ;
  641. SI (EGA EvCnStPi 'Mise_en_contact') ;
  642. EnDisPTi = ABS ( (CShearPi / 2.) * DPPBCPTi ) ;
  643. CorCSlPi = DPPBCPTi ;
  644. SINON ; SI (EGA EvCnStPi 'Relachement_de_contact') ;
  645. EnDisPTi = ABS ( (PrcCShPi / 2.) * PrcDBCPi ) ;
  646. CorCSlPi = PrcDBCPi ;
  647. FINSI ; FINSI ;
  648. DCSlip = DCSlip +
  649. (MANU 'CHPO' PT_ii 1 'SL' CorCSlPi 'NATURE' 'DISCRET') ;
  650. FINSI ;
  651. EnDisInc = EnDisInc +
  652. (MANU 'CHPO' PT_ii 1 'ED' EnDisPTi 'NATURE' 'DISCRET') ;
  653. FINSI ;
  654.  
  655. FIN BSN ;
  656. * Fin de la boucle sur les noeuds de SUR_APPL
  657.  
  658. * Evolution donnant le profil de glissement le long de SUR_APPL
  659. EvDCSlip = EVOL 'VERT' 'CHPO' DCSlip SUR_APPL ;
  660. EvDCSlip = EXTR EvDCSlip 'COUR' 1 ;
  661. EvDCSlip = CHAN EvDCSlip 'LEGE' 'Glissement' ;
  662.  
  663. * Evolution donnant le profil de l'energie dissipee sur le pas de temps
  664. * le long de SUR_APPL
  665. EvDltEnD = EVOL 'JAUN' 'CHPO' EnDisInc SUR_APPL ;
  666. EvDltEnD = EXTR EvDltEnD 'COUR' 1 ;
  667. EvDltEnD = CHAN EvDltEnD 'LEGE' 'Energie dis. Inc.' ;
  668.  
  669. * Evolution donnant le profil de l'energie dissipee sur le cycle
  670. * le long de SUR_APPL
  671. EnDisCyc = EnDisCyc + EnDisInc ;
  672. EvEnDCyc = EVOL 'BLAN' 'CHPO' EnDisCyc SUR_APPL ;
  673. EvEnDCyc = EXTR EvEnDCyc 'COUR' 1 ;
  674. EvEnDCyc = CHAN EvEnDCyc 'LEGE' 'Energie dis. Cyc.' ;
  675.  
  676. * Evolution donnant le profil de l'energie dissipee sur l'ensemble des
  677. * cycles le long de SUR_APPL
  678. EnDisTot = EnDisTot + EnDisInc ;
  679. EvEnDTot = EVOL 'GRIS' 'CHPO' (EnDisTot) SUR_APPL ;
  680. EvEnDTot = EXTR EvEnDTot 'COUR' 1 ;
  681. EvEnDTot = CHAN EvEnDTot 'LEGE' 'Energie dis. Tot.' ;
  682.  
  683. SI OPCntEvo ;
  684. DESS (EvCPress ET EvCShear ET (500000. * EvDCSlip)
  685. ET (100. * EvDltEnD) ET (100. * EvEnDCyc)
  686. ET (50. * EvEnDTot )) 'LEGE' 'NCLK' ;
  687. FINSI ;
  688.  
  689. * Stockage des resultats *
  690. BOITE_US.'PROCHE_VOISIN_GAUCHE'. Inc = PRVOGAUC ;
  691. BOITE_US.'PROCHE_VOISIN_DROIT'. Inc = PRVODROI ;
  692. BOITE_US.'TAUX_VOISIN_GAUCHE'. Inc = TauxPSVG ;
  693. BOITE_US.'TAUX_VOISIN_DROIT'. Inc = TauxPSVD ;
  694. BOITE_US.'INDICATEUR_CONTACT_NODAL'. Inc = STRCNTST ;
  695. BOITE_US.'CONFIGURATION_ENVIRONNANTE'. Inc = STRCNFCE ;
  696. BOITE_US.'EVOLUTION_CONTACT'. Inc = STREVOCS ;
  697. BOITE_US.'ENERGIE_DISSIPEE_SUR_INCREMENT'. Inc = EnDisInc ;
  698. BOITE_US.'ENERGIE_DISSIPEE_SUR_CYCLE'. NCNECC = EnDisCyc ;
  699. BOITE_US.'ENERGIE_DISSIPEE_TOTALE' = EnDisTot ;
  700. BOITE_US.'DIST_PLUS_PROCHE_BORD_DE_CONTACT'. Inc = DistPPBC ;
  701. BOITE_US.'EVO_GLISSEMENT_CONTACT'. Inc = EvDCSlip ;
  702. BOITE_US.'EVO_ENERGIE_DISSIPEE_INCR'. Inc = EvDltEnD ;
  703. BOITE_US.'EVO_ENERGIE_DISSIPEE_CYCLE'. NCNECC = EvEnDCyc ;
  704. BOITE_US.'EVO_ENERGIE_DISSIPEE_TOTALE' = EvEnDTot ;
  705.  
  706. T1.'BOITES_USURES'. ID_BU = BOITE_US ;
  707.  
  708. * On se replace dans la configuration initiale
  709. 'FORM' CONF0 ;
  710.  
  711. FINP T1 ;
  712.  
  713.  

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