Télécharger pas_resu.procedur

Retour à la liste

Numérotation des lignes :

  1. * PAS_RESU PROCEDUR MB234859 24/02/26 21:15:03 11849
  2. 'DEBP' PAS_RESU TEMP0*'FLOTTANT' IAUTO*'ENTIER' PRECED*'TABLE' ;
  3.  
  4. WTAB = PRECED.'WTABLE';
  5. *
  6. * Recuperation de la table 'ESTIMATION' des champs en fin de pas :
  7. estim = PRECED.'ESTIMATION' ;
  8. *
  9. * Remplissage de la table de 'CONTINUATION' a partir de 'ESTIMATION'
  10. conti= PRECED.'CONTINUATION';
  11. *
  12. 'SI' ('NEG' estim.'TEMPS' TEMP0 ('VALE' 'PREC'));
  13. 'MESS' 'Temps differents dans PAS_RESU ?' ;
  14. estim.'TEMPS' = TEMP0 ;
  15. 'FINS';
  16.  
  17. * Transfert des indices de la table "estim" dans "conti"
  18. DIM1 = 'DIME' estim ;
  19. INDEX1 = 'INDE' estim ;
  20.  
  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. ************************************************************************
  33. *************** Sauvegarde eventuelle des resultats ********************
  34. ************************************************************************
  35. *La sauvegarde n'est faite que si on a eu convergence des calculs :
  36. ISAUV = FAUX;
  37. 'SI' WTAB.'CONV' ;
  38. ISAUV ='DANS' WTAB.'IPRESU' TEMP0 ;
  39.  
  40. 'SI' ('MULT' IAUTO WTAB.'NAURES' ) ;
  41. ISAUV = VRAI ;
  42. 'FINSI' ;
  43. 'FINSI' ;
  44.  
  45. 'SI' ISAUV ;
  46. NSOR = WTAB.'NSOR' + 1 ;
  47. WTAB.'NSOR' = NSOR ;
  48.  
  49. * Cas particuliers de 'DEFIN' et 'DEFTO'
  50. TABSAUV = WTAB.'TABSAUV' ;
  51. 'SI' ('NON' TABSAUV.'DEFTO');
  52. 'SI' ('EXIS' estim 'DEFORMATIONS');
  53. estim ='ENLE' estim 'DEFORMATIONS';
  54. 'FINS';
  55. 'FINSI' ;
  56.  
  57. 'SI' ('NON' TABSAUV.'DEFIN') ;
  58. 'SI' ('EXIS' estim 'DEFORMATIONS_INELASTIQUES');
  59. estim ='ENLE' estim 'DEFORMATIONS_INELASTIQUES';
  60. 'FINS';
  61. 'FINSI' ;
  62. 'SI' ('EXIS' estim 'DFGRAD') ;
  63. estim ='ENLE' estim 'DFGRAD';
  64. 'FINSI' ;
  65.  
  66. * Transfert des indices de la table "estim" dans PRECED
  67. DIM1 ='DIME' estim;
  68. INDEX1='INDE' estim;
  69.  
  70. 'REPE' SURi DIM1 ;
  71. ii = &SURi;
  72. TYP1 ='TYPE' INDEX1.ii;
  73. 'SI' ('NEG' TYP1 'MOT');
  74. MOT_tmp = INDEX1.ii ;
  75. OBJi = estim.MOT_tmp ;
  76.  
  77. 'SINO';
  78. MOT_tmp ='MOT' INDEX1.ii;
  79. OBJi = estim.MOT_tmp ;
  80. 'SI' ('EGA' TYP1 'TABL');
  81. 'SI' ('EXIS' estim.MOT_tmp 'SOUSTYPE');
  82. 'SI' ('EGA' estim.MOT_tmp.'SOUSTYPE' 'ESCLAVE');
  83. ERRE 21;
  84. OBJi ='ETG' estim.MOT_tmp ;
  85. 'FINS';
  86. 'FINS';
  87. 'FINS';
  88. 'FINS';
  89. 'SI'('NON' ('EXIS' PRECED MOT_tmp));
  90. PRECED.MOT_tmp ='TABL' ;
  91. 'FINS';
  92. PRECED.MOT_tmp.NSOR = estim.MOT_tmp ;
  93. 'FIN' SURi;
  94.  
  95. *-----------------------------------------------------------------------
  96. *--- 1- Sauvegarde incrementale sous certaines conditions
  97. *--- 2- Fantomisation (option 'ECONOMIQUE'=VRAI de PASAPAS) pour liberer la memoire
  98. *-----------------------------------------------------------------------
  99. 'SI' WTAB.'ISAUVEGL';
  100. ltpssauv = WTAB.'ISAUVEGA' ;
  101. 'SI' ('DANS' ltpssauv TEMP0) ;
  102. EPOQ1 ='DATE' 'EPOCH' ;
  103. 'SI' ('NON' ('EXIS' WTAB ('MOT' 'EPOQUE'))) ;
  104. WTAB.'EPOQUE' = EPOQ1 ;
  105. 'FINS' ;
  106.  
  107. * Sauvegarde : Dernier pas OU toutes les 300 secondes OU si DATE ne marche pas
  108. * Fantomisation si on sauvegarde effectivement !
  109. 'SI' ( ('EGA' TEMP0 ('EXTR' ltpssauv ('DIME' ltpssauv)))
  110. 'OU' ((EPOQ1 '-' WTAB.'EPOQUE') '>EG' 300.D0)
  111. 'OU' ((EPOQ1 '-' WTAB.'EPOQUE') '<EG' ('VALE' 'PREC'))) ;
  112.  
  113. 'SAUV' 'MUET' PRECED ;
  114. WTAB.'EPOQUE' ='DATE' 'EPOCH' ;
  115.  
  116. 'SI' WTAB.'LECONOMI';
  117. NFFSOR = NSOR '-' WTAB.'NFSOR' '-' 1 ;
  118. 'SI' ( NFFSOR '>' 0) ;
  119.  
  120. * Boucle sur les instants SAUVES depuis la derniere fantomisation
  121. 'REPE' DETRES NFFSOR ;
  122. NSORM2 = WTAB.'NFSOR' - 1 + &DETRES ;
  123. 'SI' (NSORM2 '<' 0) ;
  124. 'ITER' DETRES ;
  125. 'FINSI' ;
  126.  
  127. * Boucle sur les indices a fantomiser
  128. 'REPE' SURi DIM1 ;
  129. ii = &SURi;
  130. TYP1 ='TYPE' INDEX1.ii;
  131. 'SI' ('NEG' TYP1 'MOT');
  132. MOT_tmp = INDEX1.ii ;
  133. 'SINO';
  134. MOT_tmp ='MOT' INDEX1.ii;
  135. 'FINS';
  136. 'FANTOM' PRECED.MOT_tmp NSORM2 ;
  137. 'FIN' SURi;
  138. 'FIN' DETRES ;
  139. WTAB.'NFSOR'= WTAB.'NFSOR' + NFFSOR ;
  140. 'FINSI' ;
  141. 'FINS' ;
  142. 'FINSI';
  143. 'FINSI';
  144. 'FINSI';
  145. 'FINSI' ;
  146. 'FINP' ISAUV ;
  147.  
  148.  

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