Télécharger ordon2.eso

Retour à la liste

Numérotation des lignes :

ordon2
  1. C ORDON2 SOURCE PV 21/01/21 21:15:30 10862
  2. SUBROUTINE ORDON2 (IPLIST,CROISS,ABSOLU,IORDRE)
  3. ************************************************************************
  4. *
  5. * O R D O N 2
  6. * -----------
  7. *
  8. * FONCTION:
  9. * ---------
  10. *
  11. * RANGER EN ORDRE CROISSANT OU DECROISSANT UN 'LISTENTI'.
  12. *
  13. * MODE D'APPEL:
  14. * -------------
  15. *
  16. * CALL ORDON2 (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 | ORDM02 | ORDM04 | ABSO=F | ORDO04 | ORDO04 |
  41. * --------+----------+----------+ --------+----------+----------+
  42. * ABSO=V | ORDM12 | ORDM14 | ABSO=V | ORDO14 | ORDO14 |
  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 SMLENTI
  70. -INC TMCOLAC
  71.  
  72. pointeur piles.LISPIL
  73. pointeur jcolac.ICOLAC
  74. pointeur jlisse.ILISSE
  75. pointeur jtlacc.ITLACC
  76. *
  77. iun=1
  78. *
  79. MLENTI = IPLIST
  80. SEGACT,MLENTI
  81. LLIST = LECT(/1)
  82. *
  83. * Preparation de la liste donnant le nouvel ordre de MLENTI
  84. IF (IORDRE.NE.0) THEN
  85. JG = LLIST
  86. SEGINI,MLENT1
  87. IORDRE=MLENT1
  88. DO I=1,LLIST
  89. MLENT1.LECT(I)=I
  90. ENDDO
  91. ENDIF
  92. *
  93. IF (LLIST.LE.1) THEN
  94. SEGDES,MLENTI
  95. IF (IORDRE.NE.0) SEGDES,MLENT1
  96. RETURN
  97. END IF
  98. *
  99. *
  100. * ===========================
  101. * TRI PAR FUSION (MERGE SORT)
  102. * ===========================
  103. *
  104. IF (LLIST.GT.100) THEN
  105. JG = (LLIST+1)/2
  106. SEGINI,MLENT2
  107. *
  108. IF (IORDRE.EQ.0) THEN
  109. IF (ABSOLU) THEN
  110. CALL ORDM12(LECT(1),LLIST,MLENT2.LECT(1),CROISS)
  111. ELSE
  112. CALL ORDM02(LECT(1),LLIST,MLENT2.LECT(1),CROISS)
  113. END IF
  114. ELSE
  115. SEGINI,MLENT3
  116. IF (ABSOLU) THEN
  117. CALL ORDM14(LECT(1),MLENT1.LECT(1),LLIST,
  118. & MLENT2.LECT(1),MLENT3.LECT(1),CROISS)
  119. ELSE
  120. CALL ORDM04(LECT(1),MLENT1.LECT(1),LLIST,
  121. & MLENT2.LECT(1),MLENT3.LECT(1),CROISS)
  122. END IF
  123. SEGSUP,MLENT3
  124. SEGDES,MLENT1
  125. ENDIF
  126. *
  127. SEGSUP,MLENT2
  128. *
  129. *
  130. * =================
  131. * TRI PAR INSERTION
  132. * =================
  133. *
  134. ELSE
  135. IF (IORDRE.EQ.0) THEN
  136. IF (ABSOLU) THEN
  137. CALL ORDO12(LECT(1),LLIST,CROISS)
  138. ELSE
  139. CALL ORDO02(LECT(1),LLIST,CROISS)
  140. END IF
  141. ELSE
  142. IF (ABSOLU) THEN
  143. CALL ORDO14(LECT(1),LLIST,CROISS,MLENT1.LECT(1))
  144. ELSE
  145. CALL ORDO04(LECT(1),LLIST,CROISS,MLENT1.LECT(1))
  146. END IF
  147. SEGDES,MLENT1
  148. ENDIF
  149. ENDIF
  150. *
  151. *
  152. SEGDES,MLENTI
  153. IF(IPSAUV.NE.0) THEN
  154. ICOLAC = IPSAUV
  155. SEGACT ICOLAC
  156. ILISSE=ILISSG
  157. SEGACT ILISSE*MOD
  158. CALL TYPFIL('LISTENTI',ICO)
  159. ITLACC = KCOLA(ICO)
  160. SEGACT ITLACC*MOD
  161. CALL AJOUN0(ITLACC,MLENTI,ILISSE,iun)
  162. SEGDES ICOLAC,ILISSE
  163. ENDIF
  164. C Suppression des piles d'objets communiques
  165. if(piComm.gt.0) then
  166. piles=piComm
  167. segact piles
  168. call typfil('LISTENTI',ico)
  169. do ipile=1,piles.proc(/1)
  170. jcolac= piles.proc(ipile)
  171. if(jcolac.ne.0) then
  172. segact jcolac
  173. jlisse=jcolac.ilissg
  174. segact jlisse*mod
  175. jtlacc=jcolac.kcola(ico)
  176. segact jtlacc*mod
  177. call ajoun0(jtlacc,MLENTI,jlisse,iun)
  178. segdes jtlacc
  179. segdes jlisse
  180. segdes jcolac
  181. endif
  182. enddo
  183. segdes piles
  184. endif
  185. *
  186. RETURN
  187. *
  188. END
  189.  
  190.  
  191.  
  192.  
  193.  

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