/* 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 #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; } }