[Dart-dev] [6929] DART/trunk/random_seq/test_random_gsl.f90: update this to do more tests.
nancy at ucar.edu
nancy at ucar.edu
Fri Apr 25 08:23:41 MDT 2014
Revision: 6929
Author: nancy
Date: 2014-04-25 08:23:41 -0600 (Fri, 25 Apr 2014)
Log Message:
-----------
update this to do more tests.
Modified Paths:
--------------
DART/trunk/random_seq/test_random_gsl.f90
-------------- next part --------------
Modified: DART/trunk/random_seq/test_random_gsl.f90
===================================================================
--- DART/trunk/random_seq/test_random_gsl.f90 2014-04-25 14:21:17 UTC (rev 6928)
+++ DART/trunk/random_seq/test_random_gsl.f90 2014-04-25 14:23:41 UTC (rev 6929)
@@ -6,8 +6,11 @@
program test_random_gsl
-use types_mod, only : r4, r8, digits12
-use utilities_mod, only : register_module, error_handler, E_ERR, E_MSG, &
+! test the gaussian distribution random number generator routine
+! with different means, standard deviations, and iterations.
+
+use types_mod, only : r8
+use utilities_mod, only : register_module, &
initialize_utilities, finalize_utilities
use random_seq_mod, only : random_seq_type, init_random_seq, random_gaussian
@@ -20,65 +23,57 @@
character(len=128), parameter :: revdate = "$Date$"
type (random_seq_type) :: r
-integer :: i, n
+integer :: i, j, n
+real(r8) :: r1, sqdist, mean_sqdist
+real(r8) :: mean, sd
-double precision :: dpr1, dpdist, dpmean_dist
-real(r8) :: r8r1, r8dist, r8mean_dist
-real(r4) :: r4r1, r4dist, r4mean_dist
-real(digits12) :: d12r1, d12dist, d12mean_dist
+type t_inputs
+ real(r8) :: m
+ real(r8) :: stddev
+ integer :: nreps
+end type
-call initialize_utilities('test_random')
-call register_module(source,revision,revdate)
-write(*, *) 'double precision is ', kind(dpr1)
-write(*, *) 'digits12 is defined to be ', digits12
-write(*, *) 'r8 is defined to be ', r8
-write(*, *) 'r4 is defined to be ', r4
+! to add more tests or change the parameters, specify a test count
+! and update the sets of (mean, stddev, repeatcount) here:
-n = 10000000
+integer, parameter :: ntests = 10
+type(t_inputs) :: t(ntests) = (/ &
+ t_inputs(0.0_r8, 1.0_r8, 1000), &
+ t_inputs(0.0_r8, 1.0_r8, 1000000), &
+ t_inputs(0.0_r8, 1.0_r8, 100000000), &
+ t_inputs(1.0_r8, 5.0_r8, 100000000), &
+ t_inputs(1.0_r8, 5.0_r8, 10000), &
+ t_inputs(6.0_r8, 1.0_r8, 100000000), &
+ t_inputs(6.0_r8, 8.0_r8, 10000), &
+ t_inputs(6.0_r8, 8.0_r8, 1000000), &
+ t_inputs(6.0_r8, 8.0_r8, 100000000), &
+ t_inputs(0.0_r8, 8.0_r8, 100000000) /)
-call init_random_seq(r, -5)
-d12mean_dist = 0.0
-do i = 1, n
- d12r1 = random_gaussian(r, 0.0_r8, 1.0_r8)
- d12dist = abs(d12r1)
- d12mean_dist = d12mean_dist + d12dist
-end do
-write(*, *) 'digits12 sd is ', d12mean_dist / n
+call initialize_utilities('test_random')
+call register_module(source,revision,revdate)
+do j=1, ntests
-call init_random_seq(r, -5)
-dpmean_dist = 0.0
-do i = 1, n
- dpr1 = random_gaussian(r, 0.0_r8, 1.0_r8)
- dpdist = dabs(dpr1)
- dpmean_dist = dpmean_dist + dpdist
-end do
-write(*, *) 'double precision sd is ', dpmean_dist / n
+ call init_random_seq(r, 5)
+ mean = t(j)%m
+ sd = t(j)%stddev
+ n = t(j)%nreps
-call init_random_seq(r, -5)
-r8mean_dist = 0.0_r8
-do i = 1, n
- r8r1 = random_gaussian(r, 0.0_r8, 1.0_r8)
- r8dist = abs(r8r1)
- r8mean_dist = r8mean_dist + r8dist
-end do
-write(*, *) 'r8 sd is ', r8mean_dist / n
+ mean_sqdist = 0.0_r8
+ do i = 1, n
+ r1 = random_gaussian(r, mean, sd)
+ sqdist = (mean-r1)**2
+ mean_sqdist = mean_sqdist + sqdist
+ end do
+ write(*, *) 'input mean, sd, n = ', mean, sd, n
+ write(*, *) 'resulting var is ', sqrt(mean_sqdist / n)
+
+enddo
-call init_random_seq(r, -5)
-r4mean_dist = 0.0_r4
-do i = 1, n
- r4r1 = random_gaussian(r, 0.0_r8, 1.0_r8)
- r4dist = abs(r4r1)
- r4mean_dist = r4mean_dist + r4dist
-end do
-write(*, *) 'r4 sd is ', r4mean_dist / n
-
-call error_handler(E_MSG, 'test_random_gsl', 'Finished successfully.',&
- source,revision,revdate)
call finalize_utilities()
end program test_random_gsl
More information about the Dart-dev
mailing list