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(in) :: tl_ustr(LBi:,LBj:,:,:)
101 real(r8), intent(in) :: tl_vstr(LBi:,LBj:,:,:)
102# endif
103# if defined ADJUST_STFLUX && defined SOLVE3D
104 real(r8), intent(inout) :: tl_tflux(LBi:,LBj:,:,:,:)
105# endif
106# ifdef ADJUST_WSTRESS
107 real(r8), intent(inout) :: tl_sustr(LBi:,LBj:)
108 real(r8), intent(inout) :: tl_svstr(LBi:,LBj:)
109# endif
110# if defined ADJUST_STFLUX && defined SOLVE3D
111 real(r8), intent(inout) :: tl_stflx(LBi:,LBj:,:)
112# endif
113# else
114# ifdef ADJUST_WSTRESS
115 real(r8), intent(in) :: tl_ustr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
116 real(r8), intent(in) :: tl_vstr(LBi:UBi,LBj:UBj,Nfrec(ng),2)
117# endif
118# if defined ADJUST_STFLUX && defined SOLVE3D
119 real(r8), intent(in) :: tl_tflux(LBi:UBi,LBj:UBj, &
120 & Nfrec(ng),2,NT(ng))
121# endif
122# ifdef ADJUST_WSTRESS
123 real(r8), intent(inout) :: tl_sustr(LBi:UBi,LBj:UBj)
124 real(r8), intent(inout) :: tl_svstr(LBi:UBi,LBj:UBj)
125# endif
126# if defined ADJUST_STFLUX && defined SOLVE3D
127 real(r8), intent(inout) :: tl_stflx(LBi:UBi,LBj:UBj,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
171 DO j=jstrr,jendr
172 DO i=istr,iendr
173 tl_sustr(i,j)=fac1*tl_ustr(i,j,it1,linp)+ &
174 & fac2*tl_ustr(i,j,it2,linp)
175 END DO
176 END DO
177 DO j=jstr,jendr
178 DO i=istrr,iendr
179 tl_svstr(i,j)=fac1*tl_vstr(i,j,it1,linp)+ &
180 & fac2*tl_vstr(i,j,it2,linp)
181 END DO
182 END DO
183# endif
184# if defined ADJUST_STFLUX && defined SOLVE3D
185
186
187
188
190# ifdef QCORRECTION
191 DO j=jstrr,jendr
192 DO i=istrr,iendr
194 & fac1*tl_tflux(i,j,it1,linp,
itemp)+ &
195 & fac2*tl_tflux(i,j,it2,linp,
itemp)
196 END DO
197 END DO
198# else
199 DO j=jstrr,jendr
200 DO i=istrr,iendr
201 tl_stflx(i,j,
itemp)=fac1*tl_tflux(i,j,it1,linp,
itemp)+ &
202 & fac2*tl_tflux(i,j,it2,linp,
itemp)
203 END DO
204 END DO
205# endif
206 END IF
207
208# ifdef SALINITY
210 DO j=jstrr,jendr
211 DO i=istrr,iendr
213 & fac1*tl_tflux(i,j,it1,linp,
isalt)+ &
214 & fac2*tl_tflux(i,j,it2,linp,
isalt)
215 END DO
216 END DO
217 END IF
218# endif
219
222 DO j=jstrr,jendr
223 DO i=istrr,iendr
224 tl_stflx(i,j,itrc)=fac1*tl_tflux(i,j,it1,linp,itrc)+ &
225 & fac2*tl_tflux(i,j,it2,linp,itrc)
226 END DO
227 END DO
228 END IF
229 END DO
230# endif
231
232 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