Download ordshi.eso

Back to the list

   1 : C ORDSHI    SOURCE    BP208322  11/06/06    21:15:01     6994           
   2 : c      
   3 :       subroutine ordshi(idist,imoshi,frshif)
   4 : c
   5 : **********************************************************************  
   6 : c                               ORDSHI  
   7 : c
   8 : c fonction : tri des modes contenus dans idist en fonction de 
   9 : c            imoshi = nombre de modes de frequence inferieur a frshif Hz 
  10 : c            (fourni par DIAGN1 dans le cas Hermitien) 
  11 : c
  12 : c creation : bp 13.12.2010
  13 : c
  14 : **********************************************************************  
  15 : c 
  16 :       IMPLICIT INTEGER (I-N)
  17 :       IMPLICIT REAL*8(A-H,O-Z)
  18 : c
  19 : c     idist = reunion des ipsolu des differents cycles 
  20 : c             (actif et *mod en entrée) 
  21 :       segment idist
  22 :         integer  iexis(jg),ipomod(jg),immode(jg),ipve(jg),imil,ienc
  23 :         integer  ialter
  24 :         real*8   dist(jg),frequ(jg),shifin,dismin
  25 :       endsegment
  26 : c      
  27 :       REAL*8  FRSHIF 
  28 : c
  29 :         jg=iexis(/1)
  30 :         
  31 : c      -on regarde les numeros de modes < imoshi 
  32 :         if(imoshi.eq.0) goto 19
  33 :         iou = min(imoshi,jg)
  34 :         iou = iou + 1
  35 :  10     iou = iou - 1
  36 :         if(iou.eq.0) goto 19
  37 :         if(iexis(iou).eq.0) goto 10
  38 :         if(frequ(iou).le.frshif) goto 19
  39 : c       on a décelé une incohérence qu il faut corriger
  40 : c         write(6,*) 'incoherence 1 pour iou=',iou
  41 :         jou = imoshi
  42 :  11     jou = jou + 1
  43 :         if (jou.gt.jg) then
  44 :           jg=jou
  45 :           segadj,idist
  46 :         endif
  47 :         if(iexis(jou).ne.0) goto 11
  48 : c       jou est libre : on décale tout, libérant ainsi imoshi+1
  49 :         if ((jou-1).ge.(imoshi+1)) then 
  50 :           do jj=jou-1,imoshi+1,-1
  51 :              iexis(jj+1) = iexis(jj)
  52 :              frequ(jj+1) = frequ(jj)
  53 :              dist (jj+1) = dist (jj)
  54 :              ipve (jj+1) = ipve (jj)
  55 :              ipomod(jj+1)= ipomod(jj)
  56 :              immode(jj+1)= immode(jj)        
  57 :           enddo
  58 :         endif 
  59 : c       et on insere iou en imoshi+1  
  60 :         iexis(imoshi+1) = iexis(iou)
  61 :         frequ(imoshi+1) = frequ(iou)
  62 :         dist (imoshi+1) = dist (iou)
  63 :         ipve (imoshi+1) = ipve (iou)
  64 :         ipomod(imoshi+1)= ipomod(iou)
  65 :         immode(imoshi+1)= immode(iou)        
  66 :         iexis(iou) = 0 
  67 :         frequ(iou) = 0.D0 
  68 : c       on boucle
  69 :         goto 10        
  70 : c       jusqu'a la fin
  71 :  19     continue
  72 :  
  73 : c      -on regarde les numeros de modes > imoshi 
  74 :         iou = imoshi
  75 :  20     iou = iou + 1
  76 :         if(iou.gt.jg) goto 29
  77 :         if(iexis(iou).eq.0) goto 20
  78 :         if(frequ(iou).gt.frshif) goto 29
  79 : c       on a décelé une incohérence qu il faut corriger        
  80 : c         write(6,*) 'incoherence 2 pour iou=',iou
  81 :         jou = imoshi + 1
  82 :  21     jou = jou - 1
  83 :         if (jou.le.0) then
  84 :           write(6,*) 'ERREUR de positionnement dans ordshi (strate)' 
  85 :           write(6,*) 'iexis=',(iexis(iio),iio=1,jg)
  86 :           write(6,*) 'frequ=',(frequ(iio),iio=1,jg)
  86 :           call erreur(6)
  87 :           return
  88 :         endif
  89 :         if(iexis(jou).ne.0) goto 21
  90 : c       jou est libre : on décale tout, libérant ainsi imoshi
  91 :         if (jou.lt.imoshi) then 
  92 :           do jj=jou+1,imoshi
  93 :              iexis(jj-1) = iexis(jj)
  94 :              frequ(jj-1) = frequ(jj)
  95 :              dist (jj-1) = dist (jj)
  96 :              ipve (jj-1) = ipve (jj)
  97 :              ipomod(jj-1)= ipomod(jj)
  98 :              immode(jj-1)= immode(jj)        
  99 :           enddo
 100 :         endif 
 101 : c       et on insere iou en imoshi  
 102 :         iexis(imoshi) = iexis(iou)
 103 :         frequ(imoshi) = frequ(iou)
 104 :         dist (imoshi) = dist (iou)
 105 :         ipve (imoshi) = ipve (iou)
 106 :         ipomod(imoshi)= ipomod(iou)
 107 :         immode(imoshi)= immode(iou)        
 108 :         iexis(iou) = 0 
 109 :         frequ(iou) = 0.D0 
 110 : c       on boucle
 111 :         goto 20        
 112 : c       jusqu'a la fin
 113 :  29     continue
 114 : 
 115 : c
 116 :       return
 117 :       
 118 :       end
 119 :       
 120 :  
 121 :  
 122 :  
 123 :  

© Cast3M 2003 - All rights reserved.
Disclaimer