<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_GAUS_NOISE'><A href='../../html_code/tools/da_gaus_noise.inc.html#DA_GAUS_NOISE' TARGET='top_target'><IMG SRC="../../gif/bar_green.gif" border=0></A>
real function da_gaus_noise(KDUM),2
!---------------------------------------------------------------------
! Purpose: return a normally(gaussian) distributed random variable ctions
! with 0 mean and 1 standard deviation
!
! method :
! ------
!
! input :
! -----
! argument
! kdum : seed for random number generator
! (set to a large negative number on entry)
! common : none
!
! output :
! ------
! argument
! gauss_noise : gaussian random betwen
! common : none
!
! workspace : none
! ---------
! local :
!
! external :
! --------
! unifva
!
! reference :
! ---------
! numerical recipes in fortran. the art of scientific computing.
! second edition. cambridge university press.
! press et. al., 1986.
!
! modifications:
! --------------
! original : 95-01(f. vandenberghe)
! addition : 96-06(a. weaver)
!---------------------------------------------------------------------
implicit none
integer, intent(inout) :: kdum
integer :: niset
real :: gset
save niset,gset
data niset/0/
real zfac,zrsq,zv1,zv2
if (trace_use) call da_trace_entry
("da_gaus_noise")
if (niset.eq.0) then
1000 continue
zv1 = 2.0*da_unifva(kdum) - 1.0
zv2 = 2.0*da_unifva(kdum) - 1.0
zrsq = zv1**2 + zv2**2
if ((zrsq>=1.0).or.(zrsq==0.0)) goto 1000
zfac = sqrt(-2.0*log(zrsq)/zrsq)
gset = zv1*zfac
da_gaus_noise = zv2*zfac
niset = 1
else
da_gaus_noise = gset
niset = 0
end if
if (trace_use) call da_trace_exit
("da_gaus_noise")
end function da_gaus_noise