Télécharger ordon1.eso

Retour à la liste

Numérotation des lignes :

ordon1
  1. C ORDON1 SOURCE PV 21/01/21 21:15:29 10862
  2. SUBROUTINE ORDON1 (IPLIST,CROISS,ABSOLU,IORDRE)
  3. ************************************************************************
  4. *
  5. * O R D O N 1
  6. * -----------
  7. *
  8. * FONCTION:
  9. * ---------
  10. *
  11. * RANGER EN ORDRE CROISSANT OU DECROISSANT UN 'LISTREEL'.
  12. *
  13. * MODE D'APPEL:
  14. * -------------
  15. *
  16. * CALL ORDON1 (IPLIST,CROISS,ABSOLU)
  17. *
  18. * PARAMETRES: (E)=ENTREE (S)=SORTIE
  19. * -----------
  20. *
  21. * IPLIST ENTIER (E) POINTEUR SUR LA LISTE A ORDONNER.
  22. * (S) MEME POINTEUR, LISTE REORDONNEE.
  23. * CROISS LOGIQUE (E) INDIQUE PAR "VRAI" OU "FAUX" SI ON ORDONNE
  24. * CROISSANT OU NON.
  25. * ABSOLU LOGIQUE (E) INDIQUE PAR "VRAI" OU "FAUX" SI ON ORDONNE
  26. * EN CONSIDERANT LES VALEURS ABSOLUES OU LES
  27. * VRAIES VALEURS.
  28. * IORDRE ENTIER (E) SI NON NUL, INDIQUE QUE L'ON SOUHAITE
  29. * RENVOYER LE NOUVEL ORDRE DE LA LISTE
  30. * (S) POINTEUR VERS UN LISTENTI CONTENANT LE
  31. * NOUVEL ORDRE DES ELEMENTS
  32. *
  33. * SOUS-PROGRAMMES APPELES:
  34. * ------------------------
  35. *
  36. * TRI PAR FUSION TRI PAR INSERTION
  37. *
  38. * | IORDRE=0 | IORDRE#0 | | IORDRE=0 | IORDRE#0 |
  39. * --------+----------+----------+ --------+----------+----------+
  40. * ABSO=F | ORDM01 | ORDM03 | ABSO=F | ORDO01 | ORDO03 |
  41. * --------+----------+----------+ --------+----------+----------+
  42. * ABSO=V | ORDM11 | ORDM13 | ABSO=V | ORDO11 | ORDO13 |
  43. * --------+----------+----------+ --------+----------+----------+
  44. *
  45. *
  46. * AUTEUR, DATE DE CREATION:
  47. * -------------------------
  48. *
  49. * PASCAL MANIGOT 19 MARS 1985
  50. *
  51. * OPTION "ABSOLU" AJOUTEE LE 23 AVRIL 1985 (P. MANIGOT)
  52. *
  53. * OPTION "IORDRE" AJOUTEE LE 10 DEC 2014 (JCARDO)
  54. *
  55. * LANGAGE:
  56. * --------
  57. *
  58. * ESOPE + FORTRAN77
  59. *
  60. ************************************************************************
  61. *
  62. IMPLICIT INTEGER(I-N)
  63. LOGICAL CROISS,ABSOLU
  64. integer ICO, IPILE, IPLIST, LLIST
  65.  
  66. -INC PPARAM
  67. -INC CCOPTIO
  68. -INC COCOLL
  69. -INC SMLREEL
  70. -INC SMLENTI
  71. -INC TMCOLAC
  72.  
  73. pointeur piles.LISPIL
  74. pointeur jcolac.ICOLAC
  75. pointeur jlisse.ILISSE
  76. pointeur jtlacc.ITLACC
  77. *
  78. iun=1
  79. *
  80. MLREEL = IPLIST
  81. SEGACT,MLREEL
  82. LLIST = PROG(/1)
  83. *
  84. * Preparation de la liste donnant le nouvel ordre de MLREEL
  85. IF (IORDRE.NE.0) THEN
  86. JG = LLIST
  87. SEGINI,MLENT1
  88. IORDRE=MLENT1
  89. DO I=1,LLIST
  90. MLENT1.LECT(I)=I
  91. ENDDO
  92. ENDIF
  93. *
  94. IF (LLIST.LE.1) THEN
  95. SEGDES,MLREEL
  96. IF (IORDRE.NE.0) SEGDES,MLENT1
  97. RETURN
  98. END IF
  99. *
  100. *
  101. * ===========================
  102. * TRI PAR FUSION (MERGE SORT)
  103. * ===========================
  104. *
  105. IF (LLIST.GT.100) THEN
  106. JG = (LLIST+1)/2
  107. SEGINI,MLREE2
  108. *
  109. IF (IORDRE.EQ.0) THEN
  110. IF (ABSOLU) THEN
  111. CALL ORDM11(PROG(1),LLIST,MLREE2.PROG(1),CROISS)
  112. ELSE
  113. CALL ORDM01(PROG(1),LLIST,MLREE2.PROG(1),CROISS)
  114. END IF
  115. ELSE
  116. SEGINI,MLENT3
  117. IF (ABSOLU) THEN
  118. CALL ORDM13(PROG(1),MLENT1.LECT(1),LLIST,
  119. & MLREE2.PROG(1),MLENT3.LECT(1),CROISS)
  120. ELSE
  121. CALL ORDM03(PROG(1),MLENT1.LECT(1),LLIST,
  122. & MLREE2.PROG(1),MLENT3.LECT(1),CROISS)
  123. END IF
  124. SEGSUP,MLENT3
  125. SEGDES,MLENT1
  126. ENDIF
  127. *
  128. SEGSUP,MLREE2
  129. *
  130. *
  131. * =================
  132. * TRI PAR INSERTION
  133. * =================
  134. *
  135. ELSE
  136. IF (IORDRE.EQ.0) THEN
  137. IF (ABSOLU) THEN
  138. CALL ORDO11(PROG(1),LLIST,CROISS)
  139. ELSE
  140. CALL ORDO01(PROG(1),LLIST,CROISS)
  141. END IF
  142. ELSE
  143. IF (ABSOLU) THEN
  144. CALL ORDO13(PROG(1),LLIST,CROISS,MLENT1.LECT(1))
  145. ELSE
  146. CALL ORDO03(PROG(1),LLIST,CROISS,MLENT1.LECT(1))
  147. END IF
  148. SEGDES,MLENT1
  149. ENDIF
  150. ENDIF
  151. *
  152. *
  153. SEGDES,MLREEL
  154. *
  155. IF(IPSAUV.NE.0) THEN
  156. ICOLAC = IPSAUV
  157. SEGACT ICOLAC
  158. ILISSE=ILISSG
  159. SEGACT ILISSE*MOD
  160. CALL TYPFIL('LISTREEL',ICO)
  161. ITLACC = KCOLA(ICO)
  162. SEGACT ITLACC*MOD
  163. CALL AJOUN0(ITLACC,MLREEL,ILISSE,iun)
  164. SEGDES ICOLAC,ILISSE
  165. ENDIF
  166. C Suppression des piles d'objets communiques
  167. if(piComm.gt.0) then
  168. piles=piComm
  169. segact piles
  170. call typfil('LISTREEL',ico)
  171. do ipile=1,piles.proc(/1)
  172. jcolac= piles.proc(ipile)
  173. if(jcolac.ne.0) then
  174. segact jcolac
  175. jlisse=jcolac.ilissg
  176. segact jlisse*mod
  177. jtlacc=jcolac.kcola(ico)
  178. segact jtlacc*mod
  179. call ajoun0(jtlacc,MLREEL,jlisse,iun)
  180. segdes jtlacc
  181. segdes jlisse
  182. segdes jcolac
  183. endif
  184. enddo
  185. segdes piles
  186. endif
  187. RETURN
  188. *
  189. END
  190. *
  191.  
  192.  
  193.  
  194.  
  195.  

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