Télécharger usinib.procedur

Retour à la liste

Numérotation des lignes :

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

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