4
5
6
7
8
9
10
11
12# ifdef WEAK_CONSTRAINT
13# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
14 defined tl_r4dvar
15
16
17
18
19# else
20
21
22
23
24# endif
25
26
27
28
29
30
31# else
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55# endif
56
57
58
63
64 implicit none
65
66
67
68 integer, intent(in) :: ng, model
69
70
71
72 integer :: NSUB, iobs, ivar
73
74 real(r8) :: cff, cff1
75
76 real(r8), dimension(0:NobsVar(ng)) :: my_ObsCost
77# if defined DATALESS_LOOPS && \
78 (defined r4dvar || defined r4dvar_ana_sensitivity || \
79 defined tl_r4dvar)
80 real(r8), dimension(0:NobsVar(ng)) :: my_ObsCost1
81# endif
82
83
84
85
86
87# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
88 defined tl_r4dvar
89
90
91
92 IF (model.eq.
irpm)
THEN
94 my_obscost(ivar)=0.0_r8
95# ifdef DATALESS_LOOPS
96 my_obscost1(ivar)=0.0_r8
97# endif
98 END DO
101 IF ((ivar.gt.0).and.(
obsscale(iobs).gt.0.0_r8).and. &
102 & (
obserr(iobs).ne.0.0_r8))
THEN
105# ifdef DATALESS_LOOPS
108# endif
109 my_obscost(0)=my_obscost(0)+cff
110 my_obscost(ivar)=my_obscost(ivar)+cff
111# ifdef DATALESS_LOOPS
112 my_obscost1(0)=my_obscost1(0)+cff1
113 my_obscost1(ivar)=my_obscost1(ivar)+cff1
114# endif
115 END IF
116 END DO
117 END IF
118
119# elif defined RBL4DVAR || defined RBL4DVAR_ANA_SENSITIVITY || \
120 defined sp4dvar || defined tl_rbl4dvar
121
122
123
124 IF (model.eq.
inlm)
THEN
126 my_obscost(ivar)=0.0_r8
127 END DO
130 IF ((ivar.gt.0).and.(
obsscale(iobs).gt.0.0_r8).and. &
131 & (
obserr(iobs).ne.0.0_r8))
THEN
134 my_obscost(0)=my_obscost(0)+cff
135 my_obscost(ivar)=my_obscost(ivar)+cff
136 END IF
137 END DO
138 END IF
139# else
140
141
142
143 IF (model.eq.
itlm)
THEN
145 my_obscost(ivar)=0.0_r8
146 END DO
149 IF ((ivar.gt.0).and.(
obsscale(iobs).gt.0.0_r8))
THEN
152 my_obscost(0)=my_obscost(0)+cff
153 my_obscost(ivar)=my_obscost(ivar)+cff
154 END IF
155 END DO
156
157
158
159 ELSE IF (model.eq.
inlm)
THEN
161 my_obscost(ivar)=0.0_r8
162 END DO
165 IF ((ivar.gt.0).and.(
obsscale(iobs).gt.0.0_r8))
THEN
168 my_obscost(0)=my_obscost(0)+cff
169 my_obscost(ivar)=my_obscost(ivar)+cff
170 END IF
171 END DO
172 END IF
173# endif
174
175
176
177
178
179
180
181# ifdef DISTRIBUTE
182 nsub=1
183# else
185# endif
186
190# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
191 defined tl_r4dvar
192 IF (model.eq.
irpm)
THEN
194 fourdvar(ng)%DataPenalty(ivar)=my_obscost(ivar)+ &
196# ifdef DATALESS_LOOPS
197 fourdvar(ng)%NLPenalty(ivar)=my_obscost1(ivar)+ &
199# endif
200 END DO
201 END IF
202# elif defined RBL4DVAR || defined RBL4DVAR_ANA_SENSITIVITY || \
203 defined sp4dvar || defined tl_rbl4dvar
204 IF (model.eq.
inlm)
THEN
206 fourdvar(ng)%NLPenalty(ivar)=my_obscost(ivar)+ &
208 END DO
209 END IF
210# else
211 IF (model.eq.
itlm)
THEN
214 & my_obscost(ivar)
215 END DO
216 ELSE IF (model.eq.
inlm)
THEN
219 & my_obscost(ivar)
220 END DO
221 END IF
222# endif
223 END IF
224
225
226# ifndef WEAK_CONSTRAINT
227
228
229
230
231 IF ((
nrun.eq.1).and.(model.eq.
itlm))
THEN
234 END DO
235 END IF
236
237
238
239 IF ((
inner.eq.0).and.(model.eq.
itlm))
THEN
241 END IF
242# endif
243
244 RETURN
type(t_fourdvar), dimension(:), allocatable fourdvar
integer, dimension(:), allocatable obstype2state
integer, dimension(:), allocatable nobs
integer, dimension(:), allocatable nobsvar
real(r8), dimension(:), allocatable obsval
real(r8), dimension(:), allocatable obsscale
real(r8), dimension(:), allocatable obserr
integer, dimension(:), allocatable obstype
real(r8), dimension(:), allocatable nlmodval
integer, dimension(:), allocatable nstrobs
integer, dimension(:), allocatable nendobs
integer, dimension(:), allocatable ntilex
integer, dimension(:), allocatable ntilee