Index: /issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp	(revision 26576)
+++ /issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp	(revision 26577)
@@ -6,11 +6,72 @@
 #include "./randomgenerator.h"
 
-class uniform_distribution
-{
+#undef M_PI
+#define M_PI 3.141592653589793238462643
 
-};
 
-class normal_distribution
-{
+uniform_distribution_rnd::uniform_distribution_rnd(){/*{{{*/
 
-};
+		a   = 1103515245; 	// BSD Formula
+		c  = 12345;					// BSD Formula
+		m = 2147483648;			// BSD Formula
+		_seed = 0;
+		lbound = 0.0;
+		ubound = 1.0;
+		return;
+}
+	/*}}}*/
+uniform_distribution_rnd::uniform_distribution_rnd(double lower,double upper){/*{{{*/
+
+		a   = 1103515245;		// BSD Formula
+		c  = 12345;					// BSD Formula
+		m = 2147483648;			// BSD Formula
+		_seed = 0;
+		lbound = lower;
+		ubound = upper;
+		return;
+}
+	/*}}}*/
+uniform_distribution_rnd::~uniform_distribution_rnd(){}
+void uniform_distribution_rnd::seed( unsigned int s ) { _seed = s; }
+unsigned int uniform_distribution_rnd::get_seed() { return _seed; }
+double uniform_distribution_rnd::generator() {
+		_seed = ( a * _seed + c ) % m ;
+		return (ubound-lbound)*(double) _seed/ m + lbound;
+}
+
+
+normal_distribution_rnd::normal_distribution_rnd(){/*{{{*/
+
+		_seed = 0;
+		mean   = 0;
+		sdev  = 1.0;
+		return;
+}
+/*}}}*/
+normal_distribution_rnd::normal_distribution_rnd(double m,double s){/*{{{*/
+
+		_seed = 0;
+		mean   = m;
+		sdev  = s;
+		return;
+}
+	/*}}}*/
+normal_distribution_rnd::~normal_distribution_rnd(){}
+void normal_distribution_rnd::seed( unsigned int s ) { _seed = s; }
+double normal_distribution_rnd::generator(){/*{{{*/
+
+		uniform_distribution_rnd unifdistri;
+		unifdistri.seed(_seed);
+
+		double u1 = unifdistri.generator();
+		double u2 = unifdistri.generator();
+
+		double R = sqrt(-2*log(u1));
+		double theta = 2*M_PI*u2;
+
+		seed(unifdistri.get_seed());
+
+		return mean + sdev * (R*cos(theta));
+
+	}
+	/*}}}*/
Index: /issm/trunk-jpl/src/c/shared/Random/randomgenerator.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Random/randomgenerator.h	(revision 26576)
+++ /issm/trunk-jpl/src/c/shared/Random/randomgenerator.h	(revision 26577)
@@ -12,25 +12,23 @@
 {
 
-  private:
+    private:
 
-    unsigned int a;
-    unsigned int c;
-    unsigned int m;
-    unsigned _seed;
-    double a1;
-    double a2;
+      unsigned int a;       //multiplier of the linear congruential generator
+      unsigned int c;       //increment of the linear congruential generator
+      unsigned int m;       // modulo of the linear congruential generator
+      unsigned int _seed;   // seed value
+      double lbound;        // lower bound of uniform distribution
+      double ubound;        // upper bound of uniform distribution
 
-    int drnd() { return( _seed = ( a * _seed + c ) % m ); }
+    public:
 
-  public:
+      /*constructors, destructors: */
+      uniform_distribution_rnd();
+      uniform_distribution_rnd(double a_1, double a_2);
+      ~uniform_distribution_rnd();
 
-    /*constructors, destructors: */
-    uniform_distribution_rnd();
-    uniform_distribution_rnd(double a_1, double a_2);
-    ~uniform_distribution_rnd();
-
-    void seed( unsigned int s ) { _seed = s; }
-    unsigned int get_seed() { return _seed; }
-    double rnd() { return (a2-a1)*(double) drnd()/ m + a1; }
+      void seed( unsigned int s );
+      unsigned int get_seed();
+      double generator();
 
 };
@@ -39,14 +37,18 @@
 {
 
-  private:
-    unsigned _seed;
-    double mean;
-    double sdev;
+    private:
+      unsigned int _seed; // seed value
+      double mean;        // mean value
+      double sdev;        // standard deviation
 
-  public:
-    normal_distribution_rnd() : _seed( 0 ), mean( 0), sdev(1.0) {}
-    normal_distribution_rnd(double m,double s) : _seed( 0 ), mean( m ), sdev(s) {}
-    void seed( unsigned int s ) { _seed = s; }
-    double rnd();
+    public:
+
+      /*constructors, destructors: */
+      normal_distribution_rnd();
+      normal_distribution_rnd(double m,double s);
+      ~normal_distribution_rnd();
+
+      void seed( unsigned int s );
+      double generator();
 
 };
