/*
DFT++ is a density functional package developed by the research group
of Professor Tomas Arias
Copyright 1996-2003 Sohrab Ismail-Beigi
This file is part of DFT++.
DFT++ is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
DFT++ is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DFT++; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Please see the file CREDITS for a list of authors.
For academic users, we request that publications using results obtained with
this software reference
"New algebraic formulation of density functional calculation," by Sohrab Ismail-Beigi
and T.A. Arias, Computer Physics Communications 128:1-2, 1-45 (June 2000).
and, if using the wavelet basis, further reference
"Multiresolution analysis of electronic structure: semicardinal and wavelet bases,"
T.A. Arias, Reviews of Modern Physics 71:1, 267-311 (January 1999).
and
"Robust ab initio calculation of condensed matter: transparent convergence through
semicardinal multiresolution analysis,'' I.P. Daykov, T.A. Arias, and
Torkel D. Engeness, Physical Review Letters, 90:21, 216402 (May 2003).
For your convenience, preprints of the above articles may be obtained from
http://arXiv.org/abs/cond-mat/9909130, 9805262, and 0204411, respectively.
*/
/*
* rnd.c: Sohrab Ismail-Beigi Aug. 1996
*
* A simple set of routines to do some random number stuff.
* They assume the existence of a uniform deviate rnd().
* In the current implimentation, this is done by using the system
* random number generator random(). seed_with_time() seeds this
* generator with the current time() value. gauss(std) returns
* a gaussian random variable (using rnd()) with standard deviation std.
*
* void seed_with_time()
* real gauss()
*
*/
/*
* Tairan Wang Jun, 1999
*
* seed_with_time() is moved to the System class so that
* we can deal with parallel objects and serial objects tranparently.
*/
/* $Id: rnd.cpp,v 1.6.2.2 2003/05/29 18:54:32 ivan Exp $ */
#include <time.h>
#include "header.h"
/* Uses a uniform deviate (double) random number generator rnd()
* to return a gaussian destributed value with standard deviation std */
real gauss(real std)
{
static int iset=0;
static double gset;
real v1,v2,f,w;
if (iset==0) /* See Chapter 7 Section 2 of Numerical Recipies */
{
do {
v1 = 2.0*rnd()-1.0;
v2 = 2.0*rnd()-1.0;
w = v1*v1+v2*v2;
} while (w>=1.0 || w==0.0);
f = sqrt((double)(-2.0*log((double)w)/w));
gset = v2*f*std;
iset = 1;
return v1*f*std;
}
else /* return the second value we computed in the last call */
{
iset = 0;
return gset;
}
}
syntax highlighted by Code2HTML, v. 0.9.1