added amorphous pressure ~1/r^2
[physik/morpheus.git] / random.c
1 /*
2  * random.c - functions to get random values
3  *
4  */
5
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <unistd.h>
9
10 #include "defines.h"
11
12 /* global and extern variables */
13 extern u32 sum_z_cells;
14 extern int random_fd;
15
16 /* return random integer between 0 - max-1 */
17 u32 rand_get(u32 max) 
18 {
19  u32 rand_int;
20  if(read(random_fd,&rand_int,4)!=4)
21  {
22   puts("failed reading 4 bytes of random data");
23   return -23;
24  }
25  /* cells numbered 0...max-1 */
26  return((u32)(rand_int*(max*1.0/URAND_MAX)));
27 }
28
29 /* get z value (linear growth of probability with depths) */
30 u32 rand_get_lgp(int slope_nel,int start_nel)
31 {
32  int z;
33  u32 i;
34  z=rand_get(sum_z_cells)+1; /* +1 as rand_get returns values 0...max-1 */
35  for(i=1;;i++) {
36   z-=(start_nel+i*slope_nel);
37   if(z<=0) break;
38  }
39  return(i-1); /* return values 0...z_cell-1 */
40 }
41
42