Télécharger usinib.procedur

Retour à la liste

Numérotation des lignes :

  1. * USINIB PROCEDUR MB234859 24/10/30 21:15:07 12059
  2. ***********************************************************************
  3. * PROCEDURE USINIB
  4. *
  5. * Procedure appelee en debut de calcul et qui verifie certaines des
  6. * informations transmises.
  7. * La table INFOS est creee et renseignee. Elle contient les informations
  8. * communes aux zones d'usure.
  9. * La table POST contiendra les resultats de calcul a conserver.
  10. *
  11. * Entrees :
  12. * T1 : Table de PASAPAS
  13. *
  14. * Appelee par USURE
  15. *
  16. ***********************************************************************
  17. 'DEBP' USINIB T1*'TABLE' ;
  18. *
  19. * Indicateur a mettre a VRAI pour quitter PASAPAS
  20. T1.'ARRET' = FAUX ;
  21. BOITE_US = T1.'BOITES_USURE' ;
  22. *-----------------------------------------------------------------------
  23. * - VERIFICATIONS ET REMPLISSAGE DE 'INFOS'
  24. *-----------------------------------------------------------------------
  25. * Nombre de surface a user
  26. IBUSUR = 'INDE' BOITE_US ;
  27. NBBOX = 0 ;
  28. 'REPE' BI ('DIME' IBUSUR) ;
  29. INDZ = IBUSUR. &BI ;
  30. OBJZ = BOITE_US. INDZ ;
  31. 'SI' ('EGA' ('TYPE' INDZ) 'ENTIER') ;
  32. 'SI' ('EXIS' OBJZ 'SURFACE_APPLICATION') ;
  33. NBBOX = NBBOX '+' 1;
  34. 'FINSI' ;
  35. 'FINSI' ;
  36. 'FIN' BI ;
  37. 'SI' ('EGA' NBBOX 0) ;
  38. 'MESS' 'Aucune zone usee n est definie' ;
  39. 'ERRE' 21 ;
  40. 'FINSI' ;
  41. BOITE_US.'INFOS' = 'TABLE' ;
  42. BOITE_US.'INFOS'.'N_BOITES' = NBBOX ;
  43. * --------------------------------------------------------------------
  44. * Compteur cycle, increment par cycle
  45. NbIncCy = 'ENTI' BOITE_US.'DONNEES'.'INCREMENTS_CYCLE' ;
  46. Periode = BOITE_US.'DONNEES'.'PERIODE' ;
  47. NCyctot = BOITE_US.'DONNEES'.'NB_CYCLES' ;
  48. BOITE_US.'INFOS'.'INDICE_CYCLE_ACTUEL' = 1 ;
  49. BOITE_US.'INFOS'.'NB_INCREMENTS_PAR_CYCLE' = NbIncCy ;
  50. BOITE_US.'INFOS'.'NB_CYCLES_RESTANTS' = NCyctot ;
  51. * --------------------------------------------------------------------
  52. * Dimension, trace
  53. BOITE_US.'INFOS'.'ITRID' = 'EGA' ('VALE' 'DIME') 3 ;
  54. BOITE_US.'INFOS'.'UNSURT' = 1. '/' Periode ;
  55. BOITE_US.'INFOS'.'TRACE_DEBUG' = FAUX ;
  56. * --------------------------------------------------------------------
  57. * Noms de composantes et listes de valeurs (pour USCALC)
  58. MODEME = 'EXTR' T1.'MODELE' 'FORM' 'MECANIQUE' ;
  59. LCOMPF = 'EXTR' MODEME 'FORC' ;
  60. BOITE_US.'INFOS'.'LFORCE' = LCOMPF ;
  61. BOITE_US.'INFOS'.'LDEPLA' = 'EXTR' MODEME 'DEPL' ;
  62. BOITE_US.'INFOS'.'LVALE0' = 'PROG' ('DIME' LCOMPF) '*' 0. ;
  63. BOITE_US.'INFOS'.'LVALE1' = 'PROG' ('DIME' LCOMPF) '*' 1. ;
  64. BOITE_US.'INFOS'.'LSCAL' = 'MOTS' ('DIME' LCOMPF) '*' 'SCAL' ;
  65. * --------------------------------------------------------------------
  66. * Informations sur le chargement en deplacement impose
  67. CGDEPI = 'EXTR' TAB1.'CHARGEMENT' 'DIMP' ;
  68. CHDEPI = 'EXTR' CGDEPI 'CHAM' ;
  69. EVDEPI = 'EXTR' CGDEPI 'EVOL' ;
  70. xEVDEP = 'EXTR' EVDEPI 'ABSC' ;
  71. yEVDEP = 'EXTR' EVDEPI 'ORDO' ;
  72. * --- Instant de debut du chargement
  73. * -> il s'agit du point precedent la premiere valeur non nulle
  74. MASQUZ = 'MASQ' yEVDEP 'DIFFERENT' 0. ;
  75. POSIT0 = ('POSI' 1. 'DANS' MASQUZ) '-' 1 ;
  76. TDEDEP = 'EXTR' xEVDEP POSIT0 ;
  77. BOITE_US.'INFOS'.'T_DEBUT_DEPI' = TDEDEP ;
  78. * --- Valeur du deplacement impose
  79. ORDMAX = 'MAXI' yEVDEP ;
  80. FLXVAL = 'EXTR' ('EXTR' CHDEPI 'VALE') 1 ;
  81. BOITE_US.'INFOS'.'DEPLA_IMPOSE' = ORDMAX '*' FLXVAL ;
  82. * --- Composante concernee
  83. MDEP = 'EXTR' CHDEPI 'MAIL' ;
  84. MBLO = 'EXTR' TAB1.'BLOCAGES_MECANIQUES' 'MAIL' ;
  85. ELTR = MBLO 'ELEM' 'CONTENANT' (MDEP 'POIN' 1) ;
  86. RIGD = 'REDU' TAB1.'BLOCAGES_MECANIQUES' ELTR ;
  87. BOITE_US.'INFOS'.'COMP_DEPI' = 'EXTR' ('EXTR' RIGD 'COMP') 2 ;
  88. BOITE_US.'INFOS'.'PTSZ_DEPI' = ('EXTR' RIGD 'MAIL' 'NOMU') 'POIN' 1 ;
  89. * --------------------------------------------------------------------
  90. * Le facteur de saut de cycle doit etre strictement positif
  91. xACCE = 1. ;
  92. 'SI' ('EXIS' BOITE_US.'DONNEES' 'ACCELERATION') ;
  93. 'SI' ('>EG' BOITE_US.'DONNEES'.'ACCELERATION' 0.) ;
  94. xACCE = BOITE_US.'DONNEES'.'ACCELERATION' ;
  95. 'FINSI' ;
  96. 'FINSI' ;
  97. BOITE_US.'INFOS'.'ACCELERATION' = xACCE ;
  98. * --------------------------------------------------------------------
  99. * Nb de cycles avant estimation du facteur de saut de cycle variable
  100. nCycini = 10 ;
  101. 'SI' ('EXIS' BOITE_US.'DONNEES' 'DN_CYCLES_INIT') ;
  102. nCyctmp = 'ENTI' BOITE_US.'DONNEES'.'DN_CYCLES_INIT' ;
  103. 'SI' ('>' nCyctmp 1) ;
  104. nCycini = nCyctmp ;
  105. 'FINSI' ;
  106. 'FINSI' ;
  107. BOITE_US.'INFOS'.'DN_CYCLES_INIT' = nCycini ;
  108. * --------------------------------------------------------------------
  109. * Faut-il construire la liste des pas de temps au cours du calcul
  110. Tdebus = BOITE_US.'DONNEES'.'T_DEBUT_USURE' ;
  111. Tfinal = (NCyctot '*' Periode '/' xACCE) '+' Tdebus ;
  112. iTfin = 'MASQ' T1.'TEMPS_CALCULES' 'EGSUPE' 'SOMM' Tfinal ;
  113. BOITE_US.'INFOS'.'CALCUL_PAS' = 'EGA' iTfin 0 ;
  114. *
  115. * Verifications et infos necessaires au recalcul des pas de temps
  116. 'SI' BOITE_US.'INFOS'.'CALCUL_PAS' ;
  117. *
  118. * Verification qu'il y a un nombre pair d'increments a calculer
  119. 'SI' ('NEG' (@MOD NbIncCy 2) 0) ;
  120. 'MESS' 'INCREMENTS_CYCLE doit etre un nombre pair' ;
  121. 'ERRE' 21 ;
  122. 'FINSI' ;
  123. *
  124. * Coherence entre T_DEBUT_USURE et T_DEBUT_DEPI
  125. Tdebdep = BOITE_US.'INFOS'.'T_DEBUT_DEPI' ;
  126. Woffset = Tdebus '-' Tdebdep ;
  127. 'SI' ('<' Woffset 0.) ;
  128. 'MESS' 'Incoherence entre T_DEBUT_USURE et T_DEBUT_DEPI' ;
  129. 'MESS' 'Il faut que T_DEBUT_USURE >= T_DEBUT_DEPI' ;
  130. 'ERRE' 21 ;
  131. 'FINSI' ;
  132. *
  133. * T_DEBUT_USURE multiple de PERIODE
  134. 'SI' ('NEG' (@MOD Woffset Periode) 0.) ;
  135. 'MESS' 'Incoherence entre T_DEBUT_USURE et PERIODE' ;
  136. 'MESS' 'Il faut que (T_DEBUT_USURE - T_DEBUT_DEPI) = n[PERIODE]' ;
  137. 'ERRE' 21 ;
  138. 'FINSI' ;
  139. BOITE_US.'INFOS'.'PRE_USURE' = 'ENTI' (Woffset '/' Periode) ;
  140. *
  141. * Informations pour construire le CHAR DIMP en cours de calcul
  142. * -> evol temporelle du deplacement entre 0 et T
  143. MASQUZ = 'MASQ' xEVDEP 'EGSUPE' (Tdedep '+' Periode) ;
  144. POSITF = 'POSI' 1. 'DANS' MASQUZ ;
  145. LEXTR = 'LECT' POSIT0 'PAS' 1 POSITF ;
  146. BOITE_US.'INFOS'.'TEMPS_DEPI' = ('EXTR' xEVDEP LEXTR) '-' Tdebdep ;
  147. BOITE_US.'INFOS'.'COEFF_DEPI' = 'EXTR' yEVDEP LEXTR ;
  148. BOITE_US.'INFOS'.'CHPT_DEPI' = CHDEPI ;
  149. BOITE_US.'INFOS'.'CHGMTS' = 'ENLE' TAB1.'CHARGEMENT' 'DIMP' ;
  150. 'FINSI' ;
  151. * --------------------------------------------------------------------
  152. * Effectuer des sauvegardes intermediaires
  153. BOITE_US.'INFOS'.'SAUV_CYCLE' = FAUX ;
  154. 'SI' ('EXIS' BOITE_US.'DONNEES' 'SAUV_AUTO') ;
  155. BOITE_US.'INFOS'.'SAUV_CYCLE' = BOITE_US.'DONNEES'.'SAUV_AUTO' ;
  156. *
  157. * Si sauvegarde, utiliser l'option ECONOMIQUE de PASAPAS
  158. 'SI' BOITE_US.'INFOS'.'SAUV_CYCLE' ;
  159. T1.'WTABLE'.'LECONOMI' = VRAI ;
  160. 'FINSI' ;
  161. 'FINSI' ;
  162. * --------------------------------------------------------------------
  163. * Indices et temps des cycles
  164. BOITE_US.'POST' = 'TABLE' ;
  165. BOITE_US.'POST'.'INDICES_CYCLE' = 'TABLE' ;
  166. BOITE_US.'POST'.'CYCLES_CALCULES' = 'PROG' ;
  167. BOITE_US.'POST'.'CYCLES_REELS' = 'PROG' ;
  168. BOITE_US.'POST'.'FACTEUR_ACCELERATION' = 'TABLE' 'ESCLAVE' ;
  169. * --------------------------------------------------------------------
  170. * Schema de resolution pour le profil d'usure
  171. BOITE_US.'INFOS'.'SCH_EXPL' = VRAI ;
  172. BOITE_US.'INFOS'.'SCH_CONV' = FAUX ;
  173. 'SI' ('EXIS' BOITE_US.'DONNEES' 'SCHEMA') ;
  174. LSCHEMA = 'MOTS' 'EXPLICITE' 'IMPLICITE' ;
  175. MSCHEMA = 'CHAN' 'MAJU' BOITE_US.'DONNEES'.'SCHEMA' ;
  176. ITYPSCH = 'POSI' MSCHEMA 'DANS' LSCHEMA ;
  177. 'SI' ('EGA' ITYPSCH 2) ;
  178. BOITE_US.'INFOS'.'SCH_EXPL' = FAUX ;
  179. BOITE_US.'INFOS'.'ITERATION_NEWTON' = 1;
  180. BOITE_US.'INFOS'.'CRITERE_CONV' = 0.;
  181. BOITE_US.'INFOS'.'RELAX_COMPTEUR' = 1;
  182. BOITE_US.'INFOS'.'RELAX_EXPOSANT' = 0;
  183. BOITE_US.'POST' .'NITER_CONV_NEWTON' = 'TABLE' 'ESCLAVE' ;
  184. 'SINON' ;
  185. 'SI' ('EGA' ITYPSCH 0) ;
  186. 'MESS' 'Indice SCHEMA : choix entre IMPLICITE et EXPLICITE';
  187. 'ERRE' 21 ;
  188. 'FINSI' ;
  189. 'FINSI' ;
  190. 'FINSI' ;
  191. *-----------------------------------------------------------------------
  192. * - INFORMATIONS PROPRES A CHAQUE SURFACE D'USURE
  193. *-----------------------------------------------------------------------
  194. Ldl0 = 'PROG' ;
  195. 'REPE' BU BOITE_US.'INFOS'.'N_BOITES' ;
  196. *
  197. SUR_APPL = BOITE_US. &BU .'SURFACE_APPLICATION' ;
  198. Ldl0 = Ldl0 'ET' ('MINI' ('MESU' SUR_APPL 'DENS')) ;
  199. CZERO = 'MANU' 'CHPO' SUR_APPL 1 'SCAL' 0. 'NATURE' 'DISCRET' ;
  200. BOITE_US. &BU .'CZERO' = CZERO;
  201. * --------------------------------------------------------------------
  202. * Indices renseignes dans USCALC
  203. BOITE_US. &BU .'DENS_ENER_DISS_TOTALE' = 'CHAN' 'COMP' CZERO 'ED';
  204. BOITE_US. &BU .'DELTAS' = 'PROG' ;
  205. BOITE_US. &BU .'FORCES_TANGENTIELLES' = 'PROG' ;
  206. BOITE_US. &BU .'CYCLE_DE_FRETTING' = 'TABLE' ;
  207. * --------------------------------------------------------------------
  208. * Indices renseignes dans USPOST
  209. BOITE_US. &BU .'PRESSION_MAX_CYCLE' = 'PROG' ;
  210. BOITE_US. &BU .'CISAILLEMENT_MAX_CYCLE' = 'PROG' ;
  211. BOITE_US. &BU .'DELTA_G' = 'PROG' ;
  212. BOITE_US. &BU .'DELTA_T' = 'PROG' ;
  213. BOITE_US. &BU .'ENERGIE_DISSIPEE_CYCLE' = 'PROG' ;
  214. BOITE_US. &BU .'ENERGIE_DISSIPEE_TOTALE' = 'PROG' 0. ;
  215. BOITE_US. &BU .'VOLUME_USE_CYCLE' = 'PROG' ;
  216. BOITE_US. &BU .'VOLUME_USE_TOTAL' = 'PROG' 0. ;
  217. BOITE_US. &BU .'PROF_USEE_MAX_CYCLE' = 'PROG' ;
  218. BOITE_US. &BU .'PROF_USEE_MAX_TOTALE' = 'PROG' ;
  219. BOITE_US. &BU .'LARGEUR_CONTACT_CYCLE' = 'PROG' ;
  220. BOITE_US. &BU .'PRESSION_MOYENNE_CYCLE' = 'TABLE' ;
  221. BOITE_US. &BU .'CISAILLEMENT_MOYEN_CYCLE' = 'TABLE' ;
  222. BOITE_US. &BU .'GLISSEMENT_CYCLE' = 'TABLE' ;
  223. *
  224. * Modele utilise pour les calculs avec INTG
  225. BOITE_US. &BU .'MODINTG' = 'MODE' SUR_APPL 'MECANIQUE' 'ELASTIQUE' ;
  226. * --------------------------------------------------------------------
  227. * Informations utilisees dans USDEPL
  228. 'SI' BOITE_US.'INFOS'.'ITRID' ;
  229. TATMP = 'PART' 'SEPA' ('CONT' SUR_APPL) 'ANGL' 10. ;
  230. MESHZ = TATMP. 1 ;
  231. 'SINON' ;
  232. MESHZ = SUR_APPL 'POIN' 'INIT' ;
  233. 'FINSI' ;
  234. BOITE_US. &BU .'MAIL_PSIP' = MESHZ ;
  235. *
  236. * Direction suivant laquelle appliquer l'usure
  237. MODREPA = 'REDU' T1.'MODELE' BOITE_US. &BU .'VOLUME_REPARTITION';
  238. CHVNINT = 'PRES' 'MASS' SUR_APPL MODREPA 1. ;
  239. LCOMPF = BOITE_US.'INFOS'.'LFORCE' ;
  240. NORVINT = 'PSCA' CHVNINT CHVNINT LCOMPF LCOMPF ;
  241. NORVINT = NORVINT '**' 0.5 ;
  242. CHVNINT = CHVNINT '/' NORVINT ;
  243. CHVNINT = 'CHAN' 'ATTRIBUT' CHVNINT 'NATURE' 'DISCRET' ;
  244. BOITE_US. &BU .'VNORM_INTE' = CHVNINT ;
  245. *
  246. * Direction(s) tangentielle(s) pour le cycle d'usure
  247. * VTANGENT n'est pas utilise mais on le conserve pour le moment
  248. 'SI' BOITE_US.'INFOS'.'ITRID' ;
  249. CHPTTMP = 'MANU' 'CHPO' SUR_APPL LCOMPF ('PROG' 0. 0. 1.) ;
  250. CHVTGT1 = 'PVEC' CHVNINT CHPTTMP LCOMPF LCOMPF LCOMPF ;
  251. NORVTG1 = 'PSCA' CHVTGT1 CHVTGT1 LCOMPF LCOMPF ;
  252. NORMAXI = ('MAXI' NORVTG1) '**' 0.5 ;
  253. NORMINI = ('MINI' NORVTG1) '**' 0.5 ;
  254. 'SI' (('&lt;EG' NORMAXI 1.E-6) 'OU' ('&lt;EG' NORMINI 1.E-6)) ;
  255. CHPTTMP = 'MANU' 'CHPO' SUR_APPL LCOMPF ('PROG' 0. 1. 0.) ;
  256. CHVTGT1 = 'PVEC' CHVNINT CHPTTMP LCOMPF LCOMPF LCOMPF ;
  257. NORVTG1 = 'PSCA' CHVTGT1 CHVTGT1 LCOMPF LCOMPF ;
  258. 'FINSI' ;
  259. NORVTG1 = NORVTG1 '**' 0.5 ;
  260. CHVTGT1 = CHVTGT1 '/' NORVTG1 ;
  261. CHVTGT1 = 'CHAN' 'ATTRIBUT' CHVTGT1 'NATURE' 'DISCRET' ;
  262. CHVTGT2 = 'PVEC' CHVNINT CHVTGT1 LCOMPF LCOMPF LCOMPF ;
  263. NORVTG2 = 'PSCA' CHVTGT2 CHVTGT2 LCOMPF LCOMPF ;
  264. NORVTG2 = NORVTG2 '**' 0.5 ;
  265. CHVTGT2 = CHVTGT2 '/' NORVTG2 ;
  266. CHVTGT2 = 'CHAN' 'ATTRIBUT' CHVTGT2 'NATURE' 'DISCRET' ;
  267. BOITE_US. &BU .'VTANGEN1' = CHVTGT1 ;
  268. BOITE_US. &BU .'VTANGEN2' = CHVTGT2 ;
  269. 'SINON' ;
  270. CHTANGT = 'PVEC' CHVNINT LCOMPF LCOMPF ;
  271. BOITE_US. &BU .'VTANGENT' = CHTANGT ;
  272. 'FINSI' ;
  273. *
  274. * Direction pour calculer la reaction tangentielle
  275. LCOMPU = BOITE_US.'INFOS'.'LDEPLA' ;
  276. POSIND = 'POSI' BOITE_US.'INFOS'.'COMP_DEPI' 'DANS' LCOMPU ;
  277. LVALEU = 'PROG' ('DIME' LCMPF) 0. ;
  278. 'REMP' LVALEU POSIND 1. ;
  279. CHREACT = 'MANU' 'CHPO' SUR_APPL LCOMPF LVALEU ;
  280. BOITE_US. &BU .'DIRE_REACTION' = CHREACT ;
  281. * --------------------------------------------------------------------
  282. * Indices renseignes dans USEXPL ou USIMPL
  283. BOITE_US. &BU .'EVO_USURE_TOT' = 'TABLE' ;
  284. BOITE_US. &BU .'USURE_TOT' = 'TABLE';
  285. BOITE_US. &BU .'USURE_TOT'. 0 = CZERO ;
  286. BOITE_US. &BU .'INC_USURE' = 'TABLE';
  287. BOITE_US. &BU .'INC_USURE'. 0 = CZERO ;
  288. 'SI' ('NON' BOITE_US.'INFOS'.'SCH_EXPL') ;
  289. BOITE_US. &BU .'VIT_USURE_K' = 'TABLE';
  290. BOITE_US. &BU .'INC_USURE_K' = 'TABLE';
  291. BOITE_US. &BU .'USURE_TOT_K' = 'TABLE';
  292. BOITE_US. &BU .'USURE_TOT_K'. 1 = CZERO ;
  293. 'FINSI' ;
  294. 'FIN' BU ;
  295. *-----------------------------------------------------------------------
  296. * Elargissement de la zone usee souhaitee en saut de cycle variable
  297. dltal0 = 'MINI' Ldl0 ;
  298. 'SI' ('EXIS' BOITE_US.'DONNEES' 'DELTA_L0') ;
  299. 'SI' ('>EG' BOITE_US.'DONNEES'.'DELTA_L0' 0) ;
  300. dltal0 = BOITE_US.'DONNEES'.'DELTA_L0' ;
  301. 'FINSI' ;
  302. 'FINSI' ;
  303. BOITE_US.'INFOS'.'DELTA_L0' = dltal0 ;
  304. * --------------------------------------------------------------------
  305. 'FINP' ;
  306.  
  307.  
  308.  

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