Télécharger ordon1.eso

Retour à la liste

Numérotation des lignes :

ordon1
  1. C ORDON1 SOURCE CB215821 25/06/16 21:15:03 12285
  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) RETURN
  95. *
  96. *
  97. * ===========================
  98. * TRI PAR FUSION (MERGE SORT)
  99. * ===========================
  100. *
  101. IF (LLIST.GT.100) THEN
  102. JG = (LLIST+1)/2
  103. SEGINI,MLREE2
  104. *
  105. IF (IORDRE.EQ.0) THEN
  106. IF (ABSOLU) THEN
  107. CALL ORDM11(PROG(1),LLIST,MLREE2.PROG(1),CROISS)
  108. ELSE
  109. CALL ORDM01(PROG(1),LLIST,MLREE2.PROG(1),CROISS)
  110. END IF
  111. ELSE
  112. SEGINI,MLENT3
  113. IF (ABSOLU) THEN
  114. CALL ORDM13(PROG(1),MLENT1.LECT(1),LLIST,
  115. & MLREE2.PROG(1),MLENT3.LECT(1),CROISS)
  116. ELSE
  117. CALL ORDM03(PROG(1),MLENT1.LECT(1),LLIST,
  118. & MLREE2.PROG(1),MLENT3.LECT(1),CROISS)
  119. END IF
  120. SEGSUP,MLENT3
  121. ENDIF
  122. *
  123. SEGSUP,MLREE2
  124. *
  125. *
  126. * =================
  127. * TRI PAR INSERTION
  128. * =================
  129. *
  130. ELSE
  131. IF (IORDRE.EQ.0) THEN
  132. IF (ABSOLU) THEN
  133. CALL ORDO11(PROG(1),LLIST,CROISS)
  134. ELSE
  135. CALL ORDO01(PROG(1),LLIST,CROISS)
  136. END IF
  137. ELSE
  138. IF (ABSOLU) THEN
  139. CALL ORDO13(PROG(1),LLIST,CROISS,MLENT1.LECT(1))
  140. ELSE
  141. CALL ORDO03(PROG(1),LLIST,CROISS,MLENT1.LECT(1))
  142. END IF
  143. ENDIF
  144. ENDIF
  145. *
  146. *
  147. *
  148. IF(IPSAUV.NE.0) THEN
  149. ICOLAC = IPSAUV
  150. SEGACT ICOLAC
  151. ILISSE=ILISSG
  152. SEGACT ILISSE*MOD
  153. CALL TYPFIL('LISTREEL',ICO)
  154. ITLACC = KCOLA(ICO)
  155. SEGACT ITLACC*MOD
  156. CALL AJOUN0(ITLACC,MLREEL,ILISSE,iun)
  157. SEGDES ICOLAC,ILISSE
  158. ENDIF
  159. C Suppression des piles d'objets communiques
  160. if(piComm.gt.0) then
  161. piles=piComm
  162. segact piles
  163. call typfil('LISTREEL',ico)
  164. do ipile=1,piles.proc(/1)
  165. jcolac= piles.proc(ipile)
  166. if(jcolac.ne.0) then
  167. segact jcolac
  168. jlisse=jcolac.ilissg
  169. segact jlisse*mod
  170. jtlacc=jcolac.kcola(ico)
  171. segact jtlacc*mod
  172. call ajoun0(jtlacc,MLREEL,jlisse,iun)
  173. segdes jtlacc
  174. segdes jlisse
  175. segdes jcolac
  176. endif
  177. enddo
  178. segdes piles
  179. endif
  180. RETURN
  181. *
  182. END
  183. *
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  

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