rand_bande.f [SRC] [CPP] [JOB] [SCAN]
debug



   1 |       subroutine ntir(p,numbande)
   2 | c.......................................................................
   3 | c     anciennement ntir
   4 | c     distribution d'un nombre de paquets a tirer sur les bandes
   5 | c     en fonction d'une probabilite
   6 | c
   7 | c     tirage du numero numbande conformement a la proba discrete p
   8 | c
   9 | c
  10 | c.......................................................................
  11 | c
  12 | c  in :  * probabilites                        ---> p
  13 | c
  14 | c  out : * numero de la bande tiree bande      ---> numbande
  15 | c      : * a t-elle deja ete tiree             ---> test
  16 | c
  17 | c.......................................................................
  18 | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  19 |       IMPLICIT NONE
  20 | c.......................................................................
  21 |       INCLUDE 'gaz.inc'
  22 | c.......................................................................
  23 |       DOUBLE PRECISION p(nbande_mx)
  24 |       INTEGER numbande
  25 | c.......................................................................
  26 |       DOUBLE PRECISION sp(nbande_mx)
  27 | c.......................................................................
  28 |       DOUBLE PRECISION tmp1
  29 |       INTEGER itmp1,itmp2,itmp3,numbande
  30 | c.......................................................................
  31 | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  32 | c construction de la fonction de repartition discrete de p ==> sp
  33 |       sp(1)=p(1)
  34 |       DO ibande=2,nbande
  35 |         sp(ibande)=sp(ibande-1)+p(ibande)
  36 |       ENDDO
  37 | c tirage avec sp pour trouver numbande
  38 | 
  39 |       call rand_uniforme(tmp1)
  40 |       itmp1=0
  41 |       itmp2=nbande+1
  42 | 10000 CONTINUE
  43 |       IF (itmp2-itmp1.GT.1) THEN
  44 |           itmp3=(itmp2+itmp1)/2
  45 |           IF (tmp1.GT.sp(itmp3)) THEN
  46 |             itmp1=itmp3
  47 |           ELSE
  48 |             itmp2=itmp3
  49 |           ENDIF
  50 |       GOTO 10000
  51 |       ENDIF
  52 |       numbande=itmp1+1
  53 |      
  54 | c.......................................................................
  55 |       RETURN
  56 |       END