Télécharger pas_resu.procedur

Retour à la liste

Numérotation des lignes :

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

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