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