Télécharger ecdife.eso

Retour à la liste

Numérotation des lignes :

ecdife
  1. C ECDIFE SOURCE PV 22/04/15 13:20:08 11344
  2. SUBROUTINE ECDIFE(NBAND,LMAX,ITAB,IFORM)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5.  
  6. -INC PPARAM
  7. -INC CCOPTIO
  8. -INC CCFXDR
  9. external LONG
  10. DIMENSION ITAB(*)
  11. dimension itabc(lmax+1)
  12. logical compr
  13.  
  14. IF (LMAX.EQ.0) RETURN
  15. DIMATT=DIMATT+LMAX+1
  16. dimato=dimatt
  17. IF( DIMATT.GT.DIMFIC) THEN
  18. DIMATT=LMAX
  19. ll = long (NOMSAU)
  20. iprefi=iprefi+1
  21. if(iprefi.eq.1) THEN
  22. NOMSAU(ll+1:ll+2)='_1'
  23. ll=ll+2
  24. elseif(iprefi.lt.10) then
  25. write(NOMSAU(ll:ll),fmt='(I1)')iprefi
  26. elseif(iprefi.lt.100) then
  27. if(iprefi.eq.10)ll = ll + 1
  28. write(NOMSAU(ll-1:ll),fmt='(I2)')iprefi
  29. elseif(iprefi.lt.1000) then
  30. if(iprefi.eq.100) ll = ll + 1
  31. write(NOMSAU(ll-2:ll),fmt='(I3)')iprefi
  32. elseif(iprefi.lt.10000) then
  33. if(iprefi.eq.1000) ll = ll + 1
  34. write(NOMSAU(ll-3:ll),fmt='(I4)')iprefi
  35. else
  36. call erreur (945)
  37. return
  38. * call erreur (1003)
  39. endif
  40. if (iform.ne.2) close (unit=nband)
  41. if (iform.eq.2) ios=IXDRCLOSE( ixdrw,.true.)
  42.  
  43. if(iform.eq.1) then
  44. OPEN (UNIT=NBAND,STATUS='UNKNOWN',FILE=NOMSAU(1:ll),
  45. # IOSTAT=IOS,ERR=2000,FORM='FORMATTED')
  46. elseif (iform.eq.0) then
  47. OPEN (UNIT=NBAND,STATUS='UNKNOWN',FILE=NOMSAU(1:ll),
  48. # IOSTAT=IOS,ERR=2000,FORM='UNFORMATTED')
  49. elseif (iform.eq.2) then
  50. ios= initxdr(NOMSAU(1:ll),'w',.TRUE.)
  51. endif
  52. write(ioimp,*) 'ecdife : Ouverture du fichier : ',NOMSAU(1:ll)
  53. * write(ioimp,*) ' dimfic , dimatold , dimatt ',dimfic,dimato,dimatt
  54. endif
  55. lmaxl=lmax
  56. * compression des donnees
  57. if (lmax.eq.0) goto 10
  58.  
  59. i=1
  60. icp=1
  61. ic=2
  62. compr=.false.
  63. itabc(1)=-1
  64. itabc(2)=itab(1)
  65.  
  66. 1954 continue
  67. i=i+1
  68. if (i.gt.lmax) goto 1955
  69.  
  70. if (itab(i).eq.itabc(ic)) then
  71. * on stocke le nb de terme identique suivi de la valeur
  72. if (compr) then
  73. itabc(ic-1)=itabc(ic-1)+1
  74. else
  75. if (i.lt.lmax.and.itab(i+1).eq.itab(i)) then
  76. compr=.true.
  77. itabc(icp)=itabc(icp)+1
  78. itabc(ic+1)=itabc(ic)
  79. if (itabc(icp).ge.0) then
  80. * 0 valeurs differentes avant. On efface le marqueur
  81. ic=ic-1
  82. endif
  83. itabc(ic)=2
  84. ic=ic+1
  85. else
  86. * au moins 3 valeurs identiques pour comprimer
  87. itabc(icp)=itabc(icp)-1
  88. ic=ic+1
  89. itabc(ic)=itab(i)
  90. endif
  91. endif
  92. else
  93. * on stocke le nb de terme different suivi des valeurs
  94. if (compr) then
  95. compr=.false.
  96. icp=ic+1
  97. itabc(icp)=-1
  98. ic=icp+1
  99. itabc(ic)=itab(i)
  100. else
  101. itabc(icp)=itabc(icp)-1
  102. ic=ic+1
  103. itabc(ic)=itab(i)
  104. endif
  105. endif
  106. goto 1954
  107.  
  108. 1955 continue
  109. if (ionive.ge.20) then
  110. DIMATT = DIMATT - LMAX+IC
  111. IF (IFORM.EQ.1)then
  112. write (nband,8000) ic
  113. WRITE(NBAND,8000) (ITABc(I),I=1,ic)
  114. endif
  115. IF (IFORM.EQ.0)then
  116. write (nband) ic
  117. WRITE(NBAND) (ITABC(I),I=1,ic)
  118. endif
  119. IF (iform.eq.2) then
  120. ios=IXDRINT ( ixdrw, ic)
  121. ios=IXDRIMAT( ixdrw, ic,itabc(1))
  122. endif
  123. else
  124. lmaxl=lmax
  125. IF (IFORM.EQ.1)WRITE(NBAND,8000) (ITAB(I),I=1,lmaxl)
  126. IF (IFORM.EQ.0)WRITE(NBAND) (ITAB(I),I=1,lmaxl)
  127. IF (iform.eq.2) ios=IXDRIMAT( ixdrw, lmaxl,itab(1))
  128. endif
  129. 10 continue
  130. 8000 FORMAT(10I8)
  131. 8001 FORMAT(16I5)
  132. RETURN
  133. 2000 continue
  134. MOTERR=NOMSAU(1:ll)
  135. INTERR(1)=IOS
  136. CALL ERREUR(424)
  137. RETURN
  138. END
  139.  
  140.  
  141.  
  142.  

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