Télécharger topv6.eso

Retour à la liste

Numérotation des lignes :

topv6
  1. C TOPV6 SOURCE GOUNAND 26/01/09 21:16:04 12442
  2. SUBROUTINE TOPV6(TRAVL,QTOL,ISTRID,ICBES)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : TOPV6
  7. C DESCRIPTION :
  8. *
  9. * Calcul des meilleurs candidats par maximum lexical
  10. *
  11. C
  12. C
  13. C
  14. C LANGAGE : ESOPE
  15. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  16. C mél : gounand@semt2.smts.cea.fr
  17. C***********************************************************************
  18. C VERSION : v1, 09/11/2017, version initiale
  19. C HISTORIQUE : v1, 09/11/2017, création
  20. C HISTORIQUE :
  21. C HISTORIQUE :
  22. C***********************************************************************
  23. -INC PPARAM
  24. -INC CCOPTIO
  25. -INC CCREEL
  26. -INC TMATOP1
  27. POINTEUR TRAVK.TRAVJ
  28. -INC SMLENTI
  29. POINTEUR LIDXCA.MLENTI
  30. POINTEUR LOKVOL.MLENTI
  31. POINTEUR LNQUAL.MLENTI
  32. POINTEUR LINDI.MLENTI
  33. POINTEUR LINDJ.MLENTI
  34. -INC SMLREEL
  35. POINTEUR LQUALS.MLREEL
  36. * POINTEUR LMAXQL.MLREEL
  37. *
  38. * Executable statements
  39. *
  40. * WRITE(IOIMP,*) 'coucou topv6'
  41. *
  42. LIDXCA=TRAVL.IDXCA
  43. LOKVOL=TRAVL.OKVOL
  44. LQUALS=TRAVL.QUALS
  45. LNQUAL=TRAVL.NQUAL
  46. LINDI=TRAVL.INDI
  47. LINDJ=TRAVL.INDJ
  48. * LMAXQL=TRAVL.MAXQL
  49. *
  50. * Calcule la liste des indices des meilleurs candidats dans ITVOL
  51. * cf. procedure MAXLEXI
  52. * Il est sans doute possible
  53. * de n'avoir que ILIND
  54. *
  55. IINDIC=1
  56. *
  57. NINDI=0
  58. DO IVOCOU=1,NVOCOU
  59. NINDI=NINDI+1
  60. LINDI.LECT(NINDI)=IVOCOU
  61. * LMAXQL.PROG(NINDI)=-1.D0
  62. ENDDO
  63. *
  64. 10 CONTINUE
  65. XMAX2=-1.D0
  66. *
  67. NINDJ=0
  68. *
  69. DO IQ=1,NINDI
  70. II=LINDI.LECT(IQ)
  71. ICAND=LOKVOL.LECT(II)
  72. IF (IINDIC.GT.(LNQUAL.LECT(ICAND))*ISTRID) THEN
  73. NINDJ=NINDJ+1
  74. LINDJ.LECT(NINDJ)=II
  75. ELSE
  76. IELDEB=LIDXCA.LECT(ICAND)
  77. IELDE2=(IELDEB-1)*ISTRID+1
  78. * XMAX2=LMAXQL.PROG(IINDIC)
  79. XQUAL=LQUALS.PROG(IELDE2+IINDIC-1)
  80. XMAX2=MAX(XMAX2,XQUAL)
  81. * write(ioimp,*) 'II,ICAND,XQUAL=',II,ICAND,XQUAL
  82. * XMAX2=MAX(XMAX2,LQUALS.PROG(IELDEB+IINDIC-1))
  83. * LMAXQL.PROG(IINDIC)=XMAX2
  84. ENDIF
  85. ENDDO
  86. *
  87. * WRITE(IOIMP,*) 'IINDIC,XMAX2=',IINDIC,XMAX2
  88. *
  89. IF (NINDJ.GT.0) THEN
  90. DO IINDJ=1,NINDJ
  91. LINDI.LECT(IINDJ)=LINDJ.LECT(IINDJ)
  92. ENDDO
  93. NINDI=NINDJ
  94. *
  95. GOTO 20
  96. ELSE
  97. DO IQ=1,NINDI
  98. II=LINDI.LECT(IQ)
  99. ICAND=LOKVOL.LECT(II)
  100. IELDEB=LIDXCA.LECT(ICAND)
  101. IELDE2=(IELDEB-1)*ISTRID+1
  102. XQUAL=LQUALS.PROG(IELDE2+IINDIC-1)
  103. * IF (ABS(XMAX-XQUAL).LE.XZPREC) THEN
  104. * Il faut faire tres attention à ce critère
  105. * XMAX2=LMAXQL.PROG(IINDIC)
  106. XPREC=MAX(XZPREC*1.D2,XMAX2*QTOL)
  107. IF (ABS(XMAX2-XQUAL).LE.XPREC) THEN
  108. NINDJ=NINDJ+1
  109. LINDJ.LECT(NINDJ)=II
  110. ENDIF
  111. ENDDO
  112. *
  113. DO IINDJ=1,NINDJ
  114. LINDI.LECT(IINDJ)=LINDJ.LECT(IINDJ)
  115. ENDDO
  116. NINDI=NINDJ
  117. *
  118. IF (NINDI.EQ.1) GOTO 20
  119. ENDIF
  120. *
  121. IINDIC=IINDIC+1
  122. GOTO 10
  123. 20 CONTINUE
  124. *
  125. ICBES=LOKVOL.LECT(LINDI.LECT(1))
  126. RETURN
  127. *
  128. *
  129. *
  130. 9999 CONTINUE
  131. MOTERR(1:8)='TOPV6 '
  132. * 349 2
  133. *Problème non prévu dans le s.p. %m1:8 contactez votre assistance
  134. CALL ERREUR(349)
  135. RETURN
  136. *
  137. * End of subroutine TOPV6
  138. *
  139. END
  140.  
  141.  

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