25 real(
dp),
dimension(:, :),
allocatable :: dataobs
26 logical,
dimension(:, :),
allocatable :: maskobs
28 integer(i4) :: timestepinput
29 character(256) :: varname
34 real(
dp),
dimension(:, :),
allocatable :: datasim
35 integer(i4) :: averagetimestep
37 integer(i4) :: averagecounter
40 procedure :: init => optidata_sim_init
41 procedure :: destroy => optidata_sim_destroy
42 procedure :: increment_counter => optidata_sim_increment_counter
43 procedure :: add => optidata_sim_add
44 procedure :: average => optidata_sim_average
45 procedure :: average_per_timestep => optidata_sim_average_per_timestep
46 procedure :: average_add => optidata_sim_average_add
51 subroutine optidata_sim_init(this, optidataObs)
53 type(
optidata),
intent(in) :: optidataobs
55 allocate(this%dataSim(
size(optidataobs%dataObs, dim = 1),
size(optidataobs%dataObs, dim = 2)))
56 this%dataSim(:, :) = 0.0_dp
57 this%averageTimestep = 1
58 this%averageCounter = 0
59 end subroutine optidata_sim_init
61 subroutine optidata_sim_destroy(this)
64 deallocate(this%dataSim)
65 end subroutine optidata_sim_destroy
67 subroutine optidata_sim_increment_counter(this, timeStepInput, is_new_day, is_new_month, is_new_year)
69 integer(i4),
intent(in) :: timestepinput
70 logical,
intent(in) :: is_new_day
71 logical,
intent(in) :: is_new_month
72 logical,
intent(in) :: is_new_year
74 select case(timestepinput)
77 this%averageTimestep = this%averageTimestep + 1
80 if (is_new_month)
then
81 this%averageTimestep = this%averageTimestep + 1
85 this%averageTimestep = this%averageTimestep + 1
89 end subroutine optidata_sim_increment_counter
91 subroutine optidata_sim_add(this, data_sim)
93 real(
dp),
dimension(:),
intent(in) :: data_sim
95 this%dataSim(:, this%averageTimestep) = &
96 this%dataSim(:, this%averageTimestep) + data_sim(:)
97 end subroutine optidata_sim_add
99 subroutine optidata_sim_average(this)
102 this%dataSim(:, this%averageTimestep) = &
103 this%dataSim(:, this%averageTimestep) / real(this%averageCounter,
dp)
104 this%averageTimestep = this%averageTimestep + 1
105 this%averageCounter = 0
106 end subroutine optidata_sim_average
108 subroutine optidata_sim_average_per_timestep(this, timeStepInput, is_new_day, is_new_month, is_new_year)
110 integer(i4),
intent(in) :: timestepinput
111 logical,
intent(in) :: is_new_day
112 logical,
intent(in) :: is_new_month
113 logical,
intent(in) :: is_new_year
115 select case(timestepinput)
121 if (is_new_month)
then
125 if (is_new_year)
then
129 end subroutine optidata_sim_average_per_timestep
131 subroutine optidata_sim_average_add(this, data_sim)
133 real(
dp),
dimension(:),
intent(in) :: data_sim
135 call this%add(data_sim(:))
136 this%averageCounter = this%averageCounter + 1
137 end subroutine optidata_sim_average_add
Define number representations.
integer, parameter i4
4 Byte Integer Kind
integer, parameter dp
Double Precision Real Kind.
Type definitions for optimization routines.
type for simulated optional data
optional data, such as sm, neutrons, et, tws