da_set_randomcv.inc
References to this file elsewhere.
1 subroutine da_set_randomcv(cv_size, rcv)
2
3 !---------------------------------------------------------------------------
4 ! Purpose: Allocate components of control variable.
5 !
6 ! Method: Allocate component in turn.
7 !---------------------------------------------------------------------------
8
9 implicit none
10
11 integer, intent(in) :: cv_size
12 real, intent(inout) :: rcv(1:cv_size) ! Control variable structure.
13
14 integer :: i
15 real :: mean_cv, rms_cv, std_dev_cv
16 real :: sum_cv, sum_cv2
17
18 if (trace_use) call da_trace_entry("da_set_randomcv")
19
20 ! [1] Initialize random number generator and scalars:
21
22 call da_random_seed
23
24 sum_cv = 0.0
25 sum_cv2 = 0.0
26
27 ! [2] Calculate random numbers with Gaussian distribution:
28
29 do i = 1, cv_size
30 call da_gauss_noise(rcv(i))
31
32 sum_cv = sum_cv + rcv(i)
33 sum_cv2 = sum_cv2 + rcv(i) * rcv(i)
34 end do
35
36 mean_cv = sum_cv / real(cv_size)
37 rms_cv = sqrt(sum_cv2 / real(cv_size))
38 std_dev_cv = sqrt(rms_cv * rms_cv - mean_cv * mean_cv)
39
40 write(unit=stdout)
41 write(unit=stdout,fmt='(a)')' Gaussian (Normal) noise statistics:'
42 write(unit=stdout,fmt='(a,f15.5)')' Mean = ',mean_cv
43 write(unit=stdout,fmt='(a,f15.5)')' RMS = ', rms_cv
44 write(unit=stdout,fmt='(a,f15.5)')' STD DEV = ', std_dev_cv
45
46 if (trace_use) call da_trace_exit("da_set_randomcv")
47
48 end subroutine da_set_randomcv
49
50