Télécharger pas_resu.procedur

Retour à la liste

Numérotation des lignes :

  1. * PAS_RESU PROCEDUR MB234859 24/11/04 21:15:04 12064
  2. 'DEBP' PAS_RESU IAUTO*'ENTIER' PRECED*'TABLE' ;
  3. ************************************************************************
  4. * Procedure qui se charge de :
  5. * - transferer le contenu de la table ESTIMATION (champs solutions en
  6. * fin de pas) dans la table CONTINUATION.
  7. * - conserver les resultats dans la table PRECED lorsque le temps
  8. * calcule fait partie de la liste des temps sauves
  9. * - sauvegarder la table PRECED lorsque le temps calcule fait partie
  10. * de la liste des temps sauvegardes. Une sauvegarde incrementale est
  11. * realisee lorsque l'option ECONOMIQUE est choisie.
  12. ************************************************************************
  13. WTAB = PRECED.'WTABLE';
  14. estim = PRECED.'ESTIMATION' ;
  15. conti = PRECED.'CONTINUATION';
  16. *----------------------------------------------------------------------
  17. * Transferer le contenu de ESTIMATION dans CONTINUATION
  18. *----------------------------------------------------------------------
  19. DIM1 = 'DIME' estim ;
  20. INDEX1 = 'INDE' estim ;
  21. 'REPE' SURi DIM1 ;
  22. ii = &SURi;
  23. TYP1 = 'TYPE' INDEX1.ii;
  24. 'SI' ('NEG' TYP1 'MOT');
  25. MOT_tmp = INDEX1.ii ;
  26. 'SINO';
  27. MOT_tmp ='MOT' INDEX1.ii;
  28. 'FINS';
  29. conti.MOT_tmp = estim.MOT_tmp ;
  30. 'FIN' SURi;
  31.  
  32. TEMP0 = conti.'TEMPS' ;
  33. *----------------------------------------------------------------------
  34. * Sauver les resultats de calculs
  35. *----------------------------------------------------------------------
  36. * La sauvegarde n'est faite que si on a eu convergence des calculs
  37. ISAUV = FAUX;
  38. 'SI' WTAB.'CONV' ;
  39. ISAUV = 'DANS' WTAB.'IPRESU' TEMP0 ;
  40.  
  41. 'SI' ('MULT' IAUTO WTAB.'NAURES' ) ;
  42. ISAUV = VRAI ;
  43. 'FINSI' ;
  44. 'FINSI' ;
  45.  
  46. 'SI' ISAUV ;
  47. NSOR = WTAB.'NSOR' + 1 ;
  48. WTAB.'NSOR' = NSOR ;
  49. TABSAUV = WTAB.'TABSAUV' ;
  50.  
  51. DIM1 = 'DIME' conti ;
  52. INDEX1 = 'INDE' conti ;
  53. * Transfert des indices de la table "conti" dans PRECED
  54. 'REPE' SURi DIM1 ;
  55. ii = &SURi;
  56. TYP1 = 'TYPE' INDEX1.ii;
  57. 'SI' ('NEG' TYP1 'MOT');
  58. MOT_tmp = INDEX1.ii ;
  59. OBJi = conti.MOT_tmp ;
  60. 'SINO';
  61. MOT_tmp = 'MOT' INDEX1.ii;
  62. *
  63. 'SI' ('EGA' MOT_tmp 'DEFORMATIONS');
  64. 'SI' ('NON' TABSAUV.'DEFTO');
  65. 'ITER' SURi ;
  66. 'FINS';
  67. 'FINSI' ;
  68. *
  69. 'SI' ('EGA' MOT_tmp 'DEFORMATIONS_INELASTIQUES');
  70. 'SI' ('NON' TABSAUV.'DEFIN') ;
  71. 'ITER' SURi ;
  72. 'FINS';
  73. 'FINSI' ;
  74. *
  75. 'SI' ('EGA' MOT_tmp 'DEFORMATIONS_APPORT');
  76. 'SI' ('NON' TABSAUV.'DEFAP') ;
  77. 'ITER' SURi ;
  78. 'FINS';
  79. 'FINSI' ;
  80.  
  81. 'SI' ('EGA' MOT_tmp 'VITESSES_FLUIDE_0') ;
  82. 'ITER' SURi ;
  83. 'FINSI' ;
  84. *
  85. OBJi = conti.MOT_tmp ;
  86. 'SI' ('EGA' TYP1 'TABL');
  87. 'SI' ('EXIS' conti.MOT_tmp 'SOUSTYPE');
  88. 'SI' ('EGA' conti.MOT_tmp.'SOUSTYPE' 'ESCLAVE');
  89. ERRE 21;
  90. OBJi ='ETG' conti.MOT_tmp ;
  91. 'FINS';
  92. 'FINS';
  93. 'FINS';
  94. 'FINS';
  95. *
  96. 'SI'('NON' ('EXIS' PRECED MOT_tmp));
  97. PRECED.MOT_tmp = 'TABL' ;
  98. 'FINS';
  99. *
  100. * Sauvegarder les contraintes/deformations sur la conf. courante
  101. 'SI' (('EGA' MOT_tmp 'CONTRAINTES') 'OU' ('EGA' MOT_tmp 'DEFORMATIONS')) ;
  102. chmz = conti.MOT_tmp ;
  103. 'SI' WTAB.'GRANDS_DEPLACEMENTS' ;
  104. 'FORM' WTAB.'GE0_DEB' ;
  105. zdep = -1. '*' conti.'DEPLACEMENTS' ;
  106. chmz = 'CAPI' WTAB.'HYPOTHESE_DEFORMATIONS' chmz WTAB.'MO_TOT' zdep ;
  107. 'FORM' WTAB.'FOR0' ;
  108. 'FINSI' ;
  109. PRECED.MOT_tmp. NSOR = chmz ;
  110. 'SINON' ;
  111. PRECED.MOT_tmp. NSOR = conti.MOT_tmp ;
  112. 'FINSI' ;
  113. *
  114. 'FIN' SURi;
  115. *-----------------------------------------------------------------------
  116. * Sauvegarder la table de resultats
  117. *-----------------------------------------------------------------------
  118. 'SI' WTAB.'ISAUVEGL';
  119. ltpssauv = WTAB.'ISAUVEGA' ;
  120. 'SI' ('DANS' ltpssauv TEMP0) ;
  121. EPOQ1 ='DATE' 'EPOCH' ;
  122. * Sauvegarde : Dernier pas OU toutes les 300 secondes OU si DATE ne marche pas
  123. 'SI' ( ('EGA' TEMP0 ('EXTR' ltpssauv ('DIME' ltpssauv)))
  124. 'OU' ((EPOQ1 '-' WTAB.'EPOQUE') '>EG' 300.D0)
  125. 'OU' (EPOQ1 'EGA' 0)) ;
  126.  
  127. 'SAUV' 'MUET' PRECED ;
  128. WTAB.'EPOQUE' = EPOQ1 ;
  129. *
  130. * Fantomisation (option 'ECONOMIQUE'=VRAI de PASAPAS) pour liberer la memoire
  131. 'SI' WTAB.'LECONOMI';
  132. NFFSOR = NSOR '-' WTAB.'NFSOR' '-' 1 ;
  133. 'SI' ( NFFSOR '>' 0) ;
  134.  
  135. * Boucle sur les instants SAUVES depuis la derniere fantomisation
  136. 'REPE' DETRES NFFSOR ;
  137. NSORM2 = WTAB.'NFSOR' - 1 + &DETRES ;
  138. 'SI' (NSORM2 '<' 0) ;
  139. 'ITER' DETRES ;
  140. 'FINSI' ;
  141.  
  142. * Boucle sur les indices a fantomiser
  143. 'REPE' SURi DIM1 ;
  144. ii = &SURi;
  145. TYP1 = 'TYPE' INDEX1.ii;
  146. 'SI' ('NEG' TYP1 'MOT');
  147. MOT_tmp = INDEX1.ii ;
  148. 'SINO';
  149. MOT_tmp = 'MOT' INDEX1.ii;
  150. 'FINS';
  151. 'FANTOM' PRECED.MOT_tmp NSORM2 ;
  152. 'FIN' SURi;
  153. 'FIN' DETRES ;
  154. WTAB.'NFSOR' = WTAB.'NFSOR' + NFFSOR ;
  155. 'FINSI' ;
  156. 'FINS' ;
  157. 'FINSI';
  158. 'FINSI';
  159. 'FINSI';
  160. 'FINSI' ;
  161. 'FINP' ISAUV ;
  162.  
  163.  

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