C component for trapping
This commit is contained in:
parent
a5c0bf0b97
commit
65c92bcfc1
15
build.gradle
15
build.gradle
@ -1,4 +1,5 @@
|
|||||||
apply plugin: 'java'
|
apply plugin: 'java'
|
||||||
|
apply plugin: 'c'
|
||||||
apply plugin: 'idea'
|
apply plugin: 'idea'
|
||||||
apply plugin: 'application'
|
apply plugin: 'application'
|
||||||
|
|
||||||
@ -38,3 +39,17 @@ task runTrap(type: JavaExec) {
|
|||||||
// arguments to pass to the application
|
// arguments to pass to the application
|
||||||
args 'D:\\Work\\Numass\\trapping\\trap.out'
|
args 'D:\\Work\\Numass\\trapping\\trap.out'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// native component
|
||||||
|
|
||||||
|
model {
|
||||||
|
components {
|
||||||
|
scatter(NativeLibrarySpec)
|
||||||
|
}
|
||||||
|
toolChains {
|
||||||
|
gcc(Gcc) {
|
||||||
|
// Uncomment to use a GCC install that is not in the PATH
|
||||||
|
// path "/usr/bin/gcc"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,4 +1,4 @@
|
|||||||
#Tue Jun 14 13:15:55 MSK 2016
|
#Sun Jul 10 21:27:58 MSK 2016
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
184
src/scatter/c/random.c
Normal file
184
src/scatter/c/random.c
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
* random.c
|
||||||
|
*
|
||||||
|
* written by Sebastian Voecking <seb.voeck@uni-muenster.de>
|
||||||
|
*
|
||||||
|
* For details see random.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "random.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static int method = RANDOM_STDLIB;
|
||||||
|
|
||||||
|
static int rand_seed=-1; // for random calculation
|
||||||
|
static double get_random_1_cw();
|
||||||
|
static void subrn(double* u, int len);
|
||||||
|
static double random_james();
|
||||||
|
|
||||||
|
void random_set_method(RandomMethode meth)
|
||||||
|
{
|
||||||
|
method = meth;
|
||||||
|
}
|
||||||
|
|
||||||
|
double random_get()
|
||||||
|
{
|
||||||
|
switch(method) {
|
||||||
|
case RANDOM_STDLIB:
|
||||||
|
return ((double)rand())/RAND_MAX;
|
||||||
|
case RANDOM_CW:
|
||||||
|
return get_random_1_cw();
|
||||||
|
case RANDOM_JAMES:
|
||||||
|
return random_james();
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void random_seed(int seed)
|
||||||
|
{
|
||||||
|
switch(method) {
|
||||||
|
case RANDOM_STDLIB:
|
||||||
|
srand(seed);
|
||||||
|
break;
|
||||||
|
case RANDOM_CW:
|
||||||
|
rand_seed = seed;
|
||||||
|
break;
|
||||||
|
case RANDOM_JAMES:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double get_random_1_cw()
|
||||||
|
// function gives a random value between 0 and 1.
|
||||||
|
// NO imput value needed.
|
||||||
|
// numerical rec. version provided by Ch. Weinheimer
|
||||||
|
{
|
||||||
|
#define IA 16807
|
||||||
|
#define IM 2147483647
|
||||||
|
#define AM (1./IM)
|
||||||
|
#define IQ 127773
|
||||||
|
#define IR 2836
|
||||||
|
#define NTAB 32
|
||||||
|
#define NDIV (1+(IM-1)/NTAB)
|
||||||
|
#define RNMX (1.-1.2e-7)
|
||||||
|
|
||||||
|
int j, k;
|
||||||
|
static int iy=0, iv[NTAB];
|
||||||
|
double temp;
|
||||||
|
|
||||||
|
if (rand_seed<=0 || !iy){
|
||||||
|
if (-rand_seed<1) rand_seed=1;
|
||||||
|
else rand_seed=-rand_seed;
|
||||||
|
for (j=NTAB+7; j>=0; j--){
|
||||||
|
k=rand_seed/IQ;
|
||||||
|
rand_seed=IA*(rand_seed-k*IQ)-IR*k;
|
||||||
|
if (rand_seed<0) rand_seed+=IM;
|
||||||
|
if (j<NTAB) iv[j]=rand_seed;
|
||||||
|
}
|
||||||
|
iy=iv[0];
|
||||||
|
}
|
||||||
|
k=rand_seed/IQ;
|
||||||
|
rand_seed=IA*(rand_seed-k*IQ)-IR*k;
|
||||||
|
if (rand_seed<0) rand_seed+=IM;
|
||||||
|
j=iy/NDIV;
|
||||||
|
iy=iv[j];
|
||||||
|
iv[j]=rand_seed;
|
||||||
|
if ((temp=AM*iy)>RNMX) return RNMX;
|
||||||
|
else return temp;
|
||||||
|
|
||||||
|
#undef IA
|
||||||
|
#undef IM
|
||||||
|
#undef AM
|
||||||
|
#undef IQ
|
||||||
|
#undef IR
|
||||||
|
#undef NTAB
|
||||||
|
#undef NDIV
|
||||||
|
#undef RNMX
|
||||||
|
}
|
||||||
|
|
||||||
|
void subrn(double *u,int len)
|
||||||
|
{
|
||||||
|
// This subroutine computes random numbers u[1],...,u[len]
|
||||||
|
// in the (0,1) interval. It uses the 0<IJKLRANDOM<900000000
|
||||||
|
// integer as initialization seed.
|
||||||
|
// In the calling program the dimension
|
||||||
|
// of the u[] vector should be larger than len (the u[0] value is
|
||||||
|
// not used).
|
||||||
|
// For each IJKLRANDOM
|
||||||
|
// numbers the program computes completely independent random number
|
||||||
|
// sequences (see: F. James, Comp. Phys. Comm. 60 (1990) 329, sec. 3.3).
|
||||||
|
//
|
||||||
|
// remark by T. Thuemmler:
|
||||||
|
// same random numbers appear each time one restarts the whole program
|
||||||
|
//
|
||||||
|
static long IJKLRANDOM=100;
|
||||||
|
static int iff=0;
|
||||||
|
static long ijkl,ij,kl,i,j,k,l,ii,jj,m,i97,j97,ivec;
|
||||||
|
static float s,t,uu[98],c,cd,cm,uni;
|
||||||
|
if(iff==0)
|
||||||
|
{ ijkl=IJKLRANDOM;
|
||||||
|
if(ijkl<1 || ijkl>=900000000) ijkl=1;
|
||||||
|
ij=ijkl/30082;
|
||||||
|
kl=ijkl-30082*ij;
|
||||||
|
i=((ij/177)%177)+2;
|
||||||
|
j=(ij%177)+2;
|
||||||
|
k=((kl/169)%178)+1;
|
||||||
|
l=kl%169;
|
||||||
|
for(ii=1;ii<=97;ii++)
|
||||||
|
{ s=0; t=0.5;
|
||||||
|
for(jj=1;jj<=24;jj++)
|
||||||
|
{ m=(((i*j)%179)*k)%179;
|
||||||
|
i=j; j=k; k=m;
|
||||||
|
l=(53*l+1)%169;
|
||||||
|
if((l*m)%64 >= 32) s=s+t;
|
||||||
|
t=0.5*t;
|
||||||
|
}
|
||||||
|
uu[ii]=s;
|
||||||
|
}
|
||||||
|
c=362436./16777216.;
|
||||||
|
cd=7654321./16777216.;
|
||||||
|
cm=16777213./16777216.;
|
||||||
|
i97=97;
|
||||||
|
j97=33;
|
||||||
|
iff=1;
|
||||||
|
}
|
||||||
|
for(ivec=1;ivec<=len;ivec++)
|
||||||
|
{ uni=uu[i97]-uu[j97];
|
||||||
|
if(uni<0.) uni=uni+1.;
|
||||||
|
uu[i97]=uni;
|
||||||
|
i97=i97-1;
|
||||||
|
if(i97==0) i97=97;
|
||||||
|
j97=j97-1;
|
||||||
|
if(j97==0) j97=97;
|
||||||
|
c=c-cd;
|
||||||
|
if(c<0.) c=c+cm;
|
||||||
|
uni=uni-c;
|
||||||
|
if(uni<0.) uni=uni+1.;
|
||||||
|
if(uni==0.)
|
||||||
|
{ uni=uu[j97]*0.59604644775391e-07;
|
||||||
|
if(uni==0.) uni=0.35527136788005e-14;
|
||||||
|
}
|
||||||
|
u[ivec]=uni;
|
||||||
|
}
|
||||||
|
|
||||||
|
// cout << endl<< "random: " << u[1] << endl << flush;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
double random_james()
|
||||||
|
{
|
||||||
|
// This function computes 1 random number in the (0,1) interval,
|
||||||
|
// using the subrn subroutine.
|
||||||
|
double u[2];
|
||||||
|
subrn(u,1);
|
||||||
|
return u[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
1094
src/scatter/c/scatter.c
Normal file
1094
src/scatter/c/scatter.c
Normal file
File diff suppressed because it is too large
Load Diff
15
src/scatter/headers/constants.h
Normal file
15
src/scatter/headers/constants.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
* constants.h
|
||||||
|
*
|
||||||
|
* written by Sebastian Voecking <seb.voeck@uni-muenster.de>
|
||||||
|
*
|
||||||
|
* Constants which are used through out the scatter package
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define C 299792458. /* velocity of light in SI units */
|
||||||
|
#define CHARGEUNIT 1.602177e-19 /* electron charge (in SI, without sign) */
|
||||||
|
#define BOLTZMANN 1.380658e-23 /* Boltzmann constant */
|
||||||
|
#define ELECTRON_MASS 9.109389e-31 /* Electron mass */
|
||||||
|
|
||||||
|
|
33
src/scatter/headers/random.h
Normal file
33
src/scatter/headers/random.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/*
|
||||||
|
* random.h
|
||||||
|
*
|
||||||
|
* written by Sebastian Vц╤cking <seb.voeck@uni-muenster.de>
|
||||||
|
*
|
||||||
|
* The random module is a frontend for different random generators.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The different generators
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
RANDOM_STDLIB, /* standard c random generator (the default one)*/
|
||||||
|
RANDOM_CW,
|
||||||
|
RANDOM_JAMES
|
||||||
|
} RandomMethode;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Selects a generator
|
||||||
|
*/
|
||||||
|
void random_set_method(RandomMethode method);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a number between 0 and 1 generated with the selected generator.
|
||||||
|
*/
|
||||||
|
double random_get();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Seeds the random generator if it supports it.
|
||||||
|
*/
|
||||||
|
void random_seed(int seed);
|
Loading…
Reference in New Issue
Block a user