86
87
90
91
92
93 integer, intent(in) :: ng, tile
94 integer, intent(in) :: LBi, UBi, LBj, UBj
95 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
96 integer, intent(in) :: Linp
97
98# ifdef ASSUMED_SHAPE
99# ifdef ADJUST_WSTRESS
100 real(r8), intent(inout) :: ad_sustr(LBi:,LBj:)
101 real(r8), intent(inout) :: ad_svstr(LBi:,LBj:)
102# endif
103# if defined ADJUST_STFLUX && defined SOLVE3D
104 real(r8), intent(inout) :: ad_stflx(LBi:,LBj:,:)
105# endif
106# ifdef ADJUST_WSTRESS
107 real(r8), intent(inout) :: ad_ustr(LBi:,LBj:,:,:)
108 real(r8), intent(inout) :: ad_vstr(LBi:,LBj:,:,:)
109# endif
110# if defined ADJUST_STFLUX && defined SOLVE3D
111 real(r8), intent(inout) :: ad_tflux(LBi:,LBj:,:,:,:)
112# endif
113# else
114# ifdef ADJUST_WSTRESS
115 real(r8), intent(inout) :: ad_sustr(LBi:UBi,LBj:UBj)
116 real(r8), intent(inout) :: ad_svstr(LBi:UBi,LBj:UBj)
117# endif
118# if defined ADJUST_STFLUX && defined SOLVE3D
119 real(r8), intent(inout) :: ad_stflx(LBi:UBi,LBj:UBj,NT(ng))
120# endif
121# ifdef ADJUST_WSTRESS
122 real(r8), intent(inout) :: ad_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
123 real(r8), intent(inout) :: ad_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
124# endif
125# if defined ADJUST_STFLUX && defined SOLVE3D
126 real(r8), intent(inout) :: ad_tflux(LBi:UBi,LBj:UBj, &
127 & Nfrec(ng),2,NT(ng))
128# endif
129# endif
130
131
132
133 integer :: i, it1, it2, j
134# ifdef SOLVE3D
135 integer :: itrc
136# endif
137 real(r8) :: fac, fac1, fac2
138
139# include "set_bounds.h"
140
141
142
143
144
145
146
147 IF (
nfrec(ng).eq.1)
THEN
148 it1=1
149 it2=1
150 fac1=1.0_r8
151 fac2=0.0_r8
152 ELSE
153# ifdef GENERIC_DSTART
155# else
156 it1=max(0,(
iic(ng)-1)/
nsff(ng))+1
157# endif
158 it2=min(it1+1,
nfrec(ng))
161 fac=1.0_r8/(fac1+fac2)
162 fac1=fac*fac1
163 fac2=fac*fac2
164 END IF
165
166# ifdef ADJUST_WSTRESS
167
168
169
170 DO j=jstrr,jendr
171 DO i=istr,iendr
172
173
174
175 ad_ustr(i,j,it1,linp)=ad_ustr(i,j,it1,linp)+ &
176 & fac1*ad_sustr(i,j)
177 ad_ustr(i,j,it2,linp)=ad_ustr(i,j,it2,linp)+ &
178 & fac2*ad_sustr(i,j)
179 ad_sustr(i,j)=0.0_r8
180 END DO
181 END DO
182 DO j=jstr,jendr
183 DO i=istrr,iendr
184
185
186
187 ad_vstr(i,j,it1,linp)=ad_vstr(i,j,it1,linp)+ &
188 & fac1*ad_svstr(i,j)
189 ad_vstr(i,j,it2,linp)=ad_vstr(i,j,it2,linp)+ &
190 & fac2*ad_svstr(i,j)
191 ad_svstr(i,j)=0.0_r8
192 END DO
193 END DO
194# endif
195# if defined ADJUST_STFLUX && defined SOLVE3D
196
197
198
200# ifdef QCORRECTION
201 DO j=jstrr,jendr
202 DO i=istrr,iendr
203
204
205
206
207 ad_tflux(i,j,it1,linp,
itemp)=ad_tflux(i,j,it1,linp,
itemp)+ &
208 & fac1*ad_stflx(i,j,
itemp)
209 ad_tflux(i,j,it2,linp,
itemp)=ad_tflux(i,j,it2,linp,
itemp)+ &
210 & fac2*ad_stflx(i,j,
itemp)
211 END DO
212 END DO
213# else
214 DO j=jstrr,jendr
215 DO i=istrr,iendr
216
217
218
219 ad_tflux(i,j,it1,linp,
itemp)=ad_tflux(i,j,it1,linp,
itemp)+ &
220 & fac1*ad_stflx(i,j,
itemp)
221 ad_tflux(i,j,it2,linp,
itemp)=ad_tflux(i,j,it2,linp,
itemp)+ &
222 & fac2*ad_stflx(i,j,
itemp)
223 ad_stflx(i,j,
itemp)=0.0_r8
224 END DO
225 END DO
226# endif
227 END IF
228
229# ifdef SALINITY
231 DO j=jstrr,jendr
232 DO i=istrr,iendr
233
234
235
236
237 ad_tflux(i,j,it1,linp,
isalt)=ad_tflux(i,j,it1,linp,
isalt)+ &
238 & fac1*ad_stflx(i,j,
isalt)
239 ad_tflux(i,j,it2,linp,
isalt)=ad_tflux(i,j,it2,linp,
isalt)+ &
240 & fac2*ad_stflx(i,j,
isalt)
241 END DO
242 END DO
243 END IF
244# endif
245
248 DO j=jstrr,jendr
249 DO i=istrr,iendr
250
251
252
253 ad_tflux(i,j,it1,linp,itrc)=ad_tflux(i,j,it1,linp,itrc)+ &
254 & fac1*ad_stflx(i,j,itrc)
255 ad_tflux(i,j,it2,linp,itrc)=ad_tflux(i,j,it2,linp,itrc)+ &
256 & fac2*ad_stflx(i,j,itrc)
257 ad_stflx(i,j,itrc)=0.0_r8
258 END DO
259 END DO
260 END IF
261 END DO
262# endif
263
264 RETURN
integer, dimension(:), allocatable nt
integer, dimension(:), allocatable iic
real(dp), dimension(:), allocatable dt
logical, dimension(:,:), allocatable lstflux
integer, dimension(:), allocatable nfrec
real(dp), dimension(:), allocatable time
integer, dimension(:), allocatable nsff
integer, dimension(:), allocatable ntstart
real(dp), dimension(:,:), allocatable sf_time