6 #include "spdeclarations.h" 9 #define PI 3.1415926535897932384626433832795 10 #define THRD 0.3333333333333333333333333333333 14 extern int Distrfunct;
27 extern double *Percentage;
28 extern double *Perc_values;
29 extern int Perc_number;
39 double uniform_distr(
double small,
double large)
44 x= ((double)rand()/RAND_MAX)*large;
56 double distr_2(
double small,
double large,
double Vv)
58 double k3= (small/large)*(small/large)*(small/large);
59 double P= (Vv / (Vv + k3));
61 return ((
double)rand()/RAND_MAX < P) ? small : large;
71 double gaussianBM(
double g_sigma,
double mu)
74 double erg= 0.0, u1= 0.0, u2= 0.0;
77 u1= (double)rand()/RAND_MAX;
78 u2= (double)rand()/RAND_MAX;
80 erg= sqrt(-2*log(u1))*cos(2*PI*u2);
82 erg= fabs(g_sigma*erg+mu);
94 double log_normal(
double g_sigma,
double mu)
98 return exp(gaussianBM(g_sigma, mu));
108 double power(
double small,
double large,
double a)
110 static long seed = 0;
111 double x= 0.0, x0= pow(small, (a+1)), x1= pow(large, (a+1)), p= 0.0,
y= 0.0;
122 y=((double)rand()/RAND_MAX);
124 x= pow(((x1-x0)*
y + x0), 1/(a+1));
126 p=((double)rand()/RAND_MAX);
140 void percentage_dist(
void)
145 for(j= 0; j< Perc_number; j++)
147 *(Percentage+j+1)= *(Percentage+j+1) * (double)No_parts + *(Percentage+j);
148 for(i= (
int)*(Percentage+j); i< *(Percentage+j+1); i++)
149 *(Diam+i)= *(Perc_values+j);
160 void setDistribution(
int number,
double *Diam)
163 printf(
"dist: %d\n", number);
167 for(j= 0; j< No_parts; j++)
175 for(j= 0; j< No_parts; j++)
176 *(Diam+j)= distr_2(Dmin, Dmax, Vv);
180 for(j= 0; j< No_parts; j++)
181 *(Diam+j)= uniform_distr(Dmin, Dmax);
185 for(j= 0; j< No_parts; j++)
186 *(Diam+j)= gaussianBM(GSigma, Mu);
190 for(j= 0; j< No_parts; j++)
191 *(Diam+j)= log_normal(GSigma, Mu);
195 for(j= 0; j< No_parts; j++)
196 *(Diam+j)= power(Dmin, Dmax, Exp);
204 for(j= 0; j< No_parts; j++)
real(dp), dimension(:), allocatable y
state variables