Changeset 26576


Ignore:
Timestamp:
11/09/21 11:50:43 (3 years ago)
Author:
bulthuis
Message:

BUG: Try to fix bugs on tests

Location:
issm/trunk-jpl
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp

    r26575 r26576  
    66#include "./randomgenerator.h"
    77
    8 #undef M_PI
    9 #define M_PI 3.141592653589793238462643
     8class uniform_distribution
     9{
    1010
     11};
    1112
    12 uniform_distribution_rnd::uniform_distribution_rnd(){/*{{{*/
     13class normal_distribution
     14{
    1315
    14                 a   = 1103515245;       // BSD Formula
    15                 c  = 12345;                                     // BSD Formula
    16                 m = 2147483648;                 // BSD Formula
    17                 _seed = 0;
    18                 lbound = 0.0;
    19                 ubound = 1.0;
    20                 return;
    21 }
    22         /*}}}*/
    23 uniform_distribution_rnd::uniform_distribution_rnd(double lower,double upper){/*{{{*/
    24 
    25                 a   = 1103515245;               // BSD Formula
    26                 c  = 12345;                                     // BSD Formula
    27                 m = 2147483648;                 // BSD Formula
    28                 _seed = 0;
    29                 lbound = lower;
    30                 ubound = upper;
    31                 return;
    32 }
    33         /*}}}*/
    34 uniform_distribution_rnd::~uniform_distribution_rnd(){}
    35 void uniform_distribution_rnd::seed( unsigned int s ) { _seed = s; }
    36 unsigned int uniform_distribution_rnd::get_seed() { return _seed; }
    37 double uniform_distribution_rnd::generator() {
    38                 _seed = ( a * _seed + c ) % m ;
    39                 return (ubound-lbound)*(double) _seed/ m + lbound;
    40 }
    41 
    42 
    43 normal_distribution_rnd::normal_distribution_rnd(){/*{{{*/
    44 
    45                 _seed = 0;
    46                 mean   = 0;
    47                 sdev  = 1.0;
    48                 return;
    49 }
    50 /*}}}*/
    51 normal_distribution_rnd::normal_distribution_rnd(double m,double s){/*{{{*/
    52 
    53                 _seed = 0;
    54                 mean   = m;
    55                 sdev  = s;
    56                 return;
    57 }
    58         /*}}}*/
    59 normal_distribution_rnd::~normal_distribution_rnd(){}
    60 void normal_distribution_rnd::seed( unsigned int s ) { _seed = s; }
    61 double normal_distribution_rnd::generator(){/*{{{*/
    62 
    63                 uniform_distribution_rnd unifdistri;
    64                 unifdistri.seed(_seed);
    65 
    66                 double u1 = unifdistri.generator();
    67                 double u2 = unifdistri.generator();
    68 
    69                 double R = sqrt(-2*log(u1));
    70                 double theta = 2*M_PI*u2;
    71 
    72                 seed(unifdistri.get_seed());
    73 
    74                 return mean + sdev * (R*cos(theta));
    75 
    76         }
    77         /*}}}*/
     16};
  • issm/trunk-jpl/src/c/shared/Random/randomgenerator.h

    r26575 r26576  
    66#define _RANDOMGENERATOR_H_
    77
     8#undef M_PI
     9#define M_PI 3.141592653589793238462643
     10
    811class uniform_distribution_rnd
    912{
    1013
    11     private:
     14  private:
    1215
    13       unsigned int a;       //multiplier of the linear congruential generator
    14       unsigned int c;       //increment of the linear congruential generator
    15       unsigned int m;       // modulo of the linear congruential generator
    16       unsigned int _seed;   // seed value
    17       double lbound;        // lower bound of uniform distribution
    18       double ubound;        // upper bound of uniform distribution
     16    unsigned int a;
     17    unsigned int c;
     18    unsigned int m;
     19    unsigned _seed;
     20    double a1;
     21    double a2;
    1922
    20     public:
     23    int drnd() { return( _seed = ( a * _seed + c ) % m ); }
    2124
    22       /*constructors, destructors: */
    23       uniform_distribution_rnd();
    24       uniform_distribution_rnd(double a_1, double a_2);
    25       ~uniform_distribution_rnd();
     25  public:
    2626
    27       void seed( unsigned int s );
    28       unsigned int get_seed();
    29       double generator();
     27    /*constructors, destructors: */
     28    uniform_distribution_rnd();
     29    uniform_distribution_rnd(double a_1, double a_2);
     30    ~uniform_distribution_rnd();
     31
     32    void seed( unsigned int s ) { _seed = s; }
     33    unsigned int get_seed() { return _seed; }
     34    double rnd() { return (a2-a1)*(double) drnd()/ m + a1; }
    3035
    3136};
     
    3439{
    3540
    36     private:
    37       unsigned int _seed; // seed value
    38       double mean;        // mean value
    39       double sdev;        // standard deviation
     41  private:
     42    unsigned _seed;
     43    double mean;
     44    double sdev;
    4045
    41     public:
    42 
    43       /*constructors, destructors: */
    44       normal_distribution_rnd();
    45       normal_distribution_rnd(double m,double s);
    46       ~normal_distribution_rnd();
    47 
    48       void seed( unsigned int s );
    49       double generator();
     46  public:
     47    normal_distribution_rnd() : _seed( 0 ), mean( 0), sdev(1.0) {}
     48    normal_distribution_rnd(double m,double s) : _seed( 0 ), mean( m ), sdev(s) {}
     49    void seed( unsigned int s ) { _seed = s; }
     50    double rnd();
    5051
    5152};
  • issm/trunk-jpl/src/c/solutionsequences/solutionsequence_sampling.cpp

    r26575 r26576  
    1818
    1919        /*Define seed*/
    20         normal_distribution_rnd distribution;
     20        //normal_distribution_rnd distribution;
    2121        if(seed<0){
    2222                std::random_device rd;
     
    2929                seed = seed + 783728*my_rank; // change default seed for parallel simulations (by considering an arbitrary shif based on the rank number)
    3030        }
    31         distribution.seed(seed);
     31        //distribution.seed(seed);
    3232
    3333        int        *local_indices = NULL;
     
    3838        ppf->GetLocalSize(&M);
    3939        for(int i=0;i<M;i++){
    40                 rdnumber = distribution.generator();
     40                rdnumber = 1.0;//distribution.rnd();
    4141                ppf->SetValue(local_indices[i],rdnumber,INS_VAL);
    4242        }
Note: See TracChangeset for help on using the changeset viewer.