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