103 & LBi, UBi, LBj, UBj, &
104 & IminS, ImaxS, JminS, JmaxS, &
110 & angler, CosAngler, SinAngler, &
111#if defined TIDE_GENERATING_FORCES
112 & Cos2Lat, SinLat2, latr, &
120#if defined DIFF_GRID || defined DIFF_3DCOEF || \
121 defined VISC_GRID || defined VISC_3DCOEF
124#if defined DIFF_3DCOEF
127#if defined VISC_3DCOEF
130 & om_p, om_r, om_u, om_v, &
131 & on_p, on_r, on_u, on_v, &
133 & pnom_p, pnom_r, pnom_u, pnom_v, &
134 & pmon_p, pmon_r, pmon_u, pmon_v)
164 integer,
intent(in) :: ng, tile, model
165 integer,
intent(in) :: LBi, UBi, LBj, UBj
166 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
167 integer,
intent(in) :: nstp, nnew
170 real(r8),
intent(in) :: f(LBi:,LBj:)
171 real(r8),
intent(in) :: pm(LBi:,LBj:)
172 real(r8),
intent(in) :: pn(LBi:,LBj:)
173# if defined TIDE_GENERATING_FORCES
174 real(r8),
intent(in) :: latr(LBi:,LBj:)
176 real(r8),
intent(inout) :: h(LBi:,LBj:)
178 real(r8),
intent(inout) :: pmask(LBi:,LBj:)
179 real(r8),
intent(inout) :: rmask(LBi:,LBj:)
181 real(r8),
intent(inout) :: angler(LBi:,LBj:)
184 real(r8),
intent(in) :: zice(LBi:,LBj:)
187#if defined DIFF_GRID || defined DIFF_3DCOEF || \
188 defined visc_grid || defined visc_3dcoef
189 real(r8),
intent(out) :: grdscl(LBi:,LBj:)
191# if defined DIFF_3DCOEF
192 real(r8),
intent(out) :: Hdiffusion(LBi:,LBj:)
194# if defined VISC_3DCOEF
195 real(r8),
intent(out) :: Hviscosity(LBi:,LBj:)
197 real(r8),
intent(out) :: om_p(LBi:,LBj:)
198 real(r8),
intent(out) :: om_r(LBi:,LBj:)
199 real(r8),
intent(out) :: om_u(LBi:,LBj:)
200 real(r8),
intent(out) :: om_v(LBi:,LBj:)
201 real(r8),
intent(out) :: on_p(LBi:,LBj:)
202 real(r8),
intent(out) :: on_r(LBi:,LBj:)
203 real(r8),
intent(out) :: on_u(LBi:,LBj:)
204 real(r8),
intent(out) :: on_v(LBi:,LBj:)
205 real(r8),
intent(out) :: fomn(LBi:,LBj:)
206 real(r8),
intent(out) :: omn(LBi:,LBj:)
207 real(r8),
intent(out) :: pnom_p(LBi:,LBj:)
208 real(r8),
intent(out) :: pnom_r(LBi:,LBj:)
209 real(r8),
intent(out) :: pnom_u(LBi:,LBj:)
210 real(r8),
intent(out) :: pnom_v(LBi:,LBj:)
211 real(r8),
intent(out) :: pmon_p(LBi:,LBj:)
212 real(r8),
intent(out) :: pmon_r(LBi:,LBj:)
213 real(r8),
intent(out) :: pmon_u(LBi:,LBj:)
214 real(r8),
intent(out) :: pmon_v(LBi:,LBj:)
215 real(r8),
intent(out) :: CosAngler(LBi:,LBj:)
216 real(r8),
intent(out) :: SinAngler(LBi:,LBj:)
217# if defined TIDE_GENERATING_FORCES
218 real(r8),
intent(out) :: Cos2Lat(LBi:,LBj:)
219 real(r8),
intent(out) :: SinLat2(LBi:,LBj:)
222 real(r8),
intent(out) :: Hz(LBi:,LBj:,:)
223 real(r8),
intent(out) :: z_r(LBi:,LBj:,:)
224 real(r8),
intent(out) :: z_w(LBi:,LBj:,0:)
227 real(r8),
intent(in) :: f(LBi:UBi,LBj:UBj)
228 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
229 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
230# if defined TIDE_GENERATING_FORCES
231 real(r8),
intent(in) :: latr(LBi:UBi,LBj:UBj)
233 real(r8),
intent(inout) :: h(LBi:UBi,LBj:UBj)
235 real(r8),
intent(inout) :: pmask(LBi:UBi,LBj:UBj)
236 real(r8),
intent(inout) :: rmask(LBi:UBi,LBj:UBj)
238 real(r8),
intent(inout) :: angler(LBi:UBi,LBj:UBj)
241 real(r8),
intent(in) :: zice(LBi:UBi,LBj:UBj)
244#if defined DIFF_GRID || defined DIFF_3DCOEF || \
245 defined visc_grid || defined visc_3dcoef
246 real(r8),
intent(out) :: grdscl(LBi:UBi,LBj:UBj)
248# if defined DIFF_3DCOEF
249 real(r8),
intent(out) :: Hdiffusion(LBi:UBi,LBj:UBj)
251# if defined VISC_3DCOEF
252 real(r8),
intent(out) :: Hviscosity(LBi:UBi,LBj:UBj)
254 real(r8),
intent(out) :: om_p(LBi:UBi,LBj:UBj)
255 real(r8),
intent(out) :: om_r(LBi:UBi,LBj:UBj)
256 real(r8),
intent(out) :: om_u(LBi:UBi,LBj:UBj)
257 real(r8),
intent(out) :: om_v(LBi:UBi,LBj:UBj)
258 real(r8),
intent(out) :: on_p(LBi:UBi,LBj:UBj)
259 real(r8),
intent(out) :: on_r(LBi:UBi,LBj:UBj)
260 real(r8),
intent(out) :: on_u(LBi:UBi,LBj:UBj)
261 real(r8),
intent(out) :: on_v(LBi:UBi,LBj:UBj)
262 real(r8),
intent(out) :: fomn(LBi:UBi,LBj:UBj)
263 real(r8),
intent(out) :: omn(LBi:UBi,LBj:UBj)
264 real(r8),
intent(out) :: pnom_p(LBi:UBi,LBj:UBj)
265 real(r8),
intent(out) :: pnom_r(LBi:UBi,LBj:UBj)
266 real(r8),
intent(out) :: pnom_u(LBi:UBi,LBj:UBj)
267 real(r8),
intent(out) :: pnom_v(LBi:UBi,LBj:UBj)
268 real(r8),
intent(out) :: pmon_p(LBi:UBi,LBj:UBj)
269 real(r8),
intent(out) :: pmon_r(LBi:UBi,LBj:UBj)
270 real(r8),
intent(out) :: pmon_u(LBi:UBi,LBj:UBj)
271 real(r8),
intent(out) :: pmon_v(LBi:UBi,LBj:UBj)
272 real(r8),
intent(out) :: CosAngler(LBi:UBi,LBj:UBj)
273 real(r8),
intent(out) :: SinAngler(LBi:UBi,LBj:UBj)
274# if defined TIDE_GENERATING_FORCES
275 real(r8),
intent(out) :: Cos2Lat(LBi:UBi,LBj:UBj)
276 real(r8),
intent(out) :: SinLat2(LBi:UBi,LBj:UBj)
279 real(r8),
intent(out) :: Hz(LBi:UBi,LBj:UBj,N(ng))
280 real(r8),
intent(out) :: z_r(LBi:UBi,LBj:UBj,N(ng))
281 real(r8),
intent(out) :: z_w(LBi:UBi,LBj:UBj,0:N(ng))
287 integer :: NSUB, i, ibry, is, j, k, rec
289 integer :: cr, dg, ig, rg
291#if defined DIFF_3DCOEF || defined VISC_3DCOEF
292 real(r8),
parameter :: PecletCoef = 1.0_r8 / 12.0_r8
293 real(r8),
parameter :: Uscale = 0.1_r8
295 real(r8) :: cff, cff1, cff2
296#if defined TIDE_GENERATING_FORCES
297 real(r8) :: cosphi, phi
302 real(dp) :: my_DXmax, my_DXmin, my_DYmax, my_DYmin
304 real(dp) :: my_DXmaxW, my_DXminW, my_DYmaxW, my_DYminW
308 real(dp) :: my_DZmax, my_DZmin
310 real(dp) :: my_DZmaxW, my_DZminW
313 real(dp) :: my_Cg_Cor, my_Cg_max, my_Cg_min, my_grdmax
314#if defined DIFF_3DCOEF
315 real(dp) :: my_DiffMax, my_DiffMin
317#if defined VISC_3DCOEF
318 real(dp) :: my_ViscMax, my_ViscMin
320#if defined DIFF_3DCOEF || defined VISC_3DCOEF
321 character (len=4) :: units
324 character (len=50) :: Text
329 real(dp),
dimension(20) :: rbuffer
330 character (len=3),
dimension(20) :: op_handle
332 real(dp),
dimension(14) :: rbuffer
333 character (len=3),
dimension(14) :: op_handle
338 real(r8),
dimension(LBi:UBi,LBj:UBj) :: A2d
341#include "set_bounds.h"
349 om_r(i,j)=1.0_r8/pm(i,j)
350 on_r(i,j)=1.0_r8/pn(i,j)
351 omn(i,j)=1.0_r8/(pm(i,j)*pn(i,j))
352 fomn(i,j)=f(i,j)*omn(i,j)
360 & lbi, ubi, lbj, ubj, &
363 & lbi, ubi, lbj, ubj, &
366 & lbi, ubi, lbj, ubj, &
369 & lbi, ubi, lbj, ubj, &
375 & lbi, ubi, lbj, ubj, &
377 & om_r, on_r, omn, fomn)
386 pnom_r(i,j)=pn(i,j)/pm(i,j)
387 pmon_r(i,j)=pm(i,j)/pn(i,j)
395 & lbi, ubi, lbj, ubj, &
398 & lbi, ubi, lbj, ubj, &
404 & lbi, ubi, lbj, ubj, &
415 pmon_u(i,j)=(pm(i-1,j)+pm(i,j))/(pn(i-1,j)+pn(i,j))
416 pnom_u(i,j)=(pn(i-1,j)+pn(i,j))/(pm(i-1,j)+pm(i,j))
417 om_u(i,j)=2.0_r8/(pm(i-1,j)+pm(i,j))
418 on_u(i,j)=2.0_r8/(pn(i-1,j)+pn(i,j))
426 & lbi, ubi, lbj, ubj, &
429 & lbi, ubi, lbj, ubj, &
432 & lbi, ubi, lbj, ubj, &
435 & lbi, ubi, lbj, ubj, &
441 & lbi, ubi, lbj, ubj, &
443 & pmon_u, pnom_u, om_u, on_u)
452 pmon_v(i,j)=(pm(i,j-1)+pm(i,j))/(pn(i,j-1)+pn(i,j))
453 pnom_v(i,j)=(pn(i,j-1)+pn(i,j))/(pm(i,j-1)+pm(i,j))
454 om_v(i,j)=2.0_r8/(pm(i,j-1)+pm(i,j))
455 on_v(i,j)=2.0_r8/(pn(i,j-1)+pn(i,j))
463 & lbi, ubi, lbj, ubj, &
466 & lbi, ubi, lbj, ubj, &
469 & lbi, ubi, lbj, ubj, &
472 & lbi, ubi, lbj, ubj, &
478 & lbi, ubi, lbj, ubj, &
480 & pmon_v, pnom_v, om_v, on_v)
489 pnom_p(i,j)=(pn(i-1,j-1)+pn(i-1,j)+pn(i,j-1)+pn(i,j))/ &
490 & (pm(i-1,j-1)+pm(i-1,j)+pm(i,j-1)+pm(i,j))
491 pmon_p(i,j)=(pm(i-1,j-1)+pm(i-1,j)+pm(i,j-1)+pm(i,j))/ &
492 & (pn(i-1,j-1)+pn(i-1,j)+pn(i,j-1)+pn(i,j))
493 om_p(i,j)=4.0_r8/(pm(i-1,j-1)+pm(i-1,j)+pm(i,j-1)+pm(i,j))
494 on_p(i,j)=4.0_r8/(pn(i-1,j-1)+pn(i-1,j)+pn(i,j-1)+pn(i,j))
502 & lbi, ubi, lbj, ubj, &
505 & lbi, ubi, lbj, ubj, &
508 & lbi, ubi, lbj, ubj, &
511 & lbi, ubi, lbj, ubj, &
517 & lbi, ubi, lbj, ubj, &
519 & pnom_p, pmon_p, om_p, on_p)
535 IF ((rmask(i-1,j ).gt.0.5_r8).and. &
536 & (rmask(i ,j ).gt.0.5_r8).and. &
537 & (rmask(i-1,j-1).gt.0.5_r8).and. &
538 & (rmask(i ,j-1).gt.0.5_r8))
THEN
540 ELSE IF ((rmask(i-1,j ).lt.0.5_r8).and. &
541 & (rmask(i ,j ).gt.0.5_r8).and. &
542 & (rmask(i-1,j-1).gt.0.5_r8).and. &
543 & (rmask(i ,j-1).gt.0.5_r8))
THEN
545 ELSE IF ((rmask(i-1,j ).gt.0.5_r8).and. &
546 & (rmask(i ,j ).lt.0.5_r8).and. &
547 & (rmask(i-1,j-1).gt.0.5_r8).and. &
548 & (rmask(i ,j-1).gt.0.5_r8))
THEN
550 ELSE IF ((rmask(i-1,j ).gt.0.5_r8).and. &
551 & (rmask(i ,j ).gt.0.5_r8).and. &
552 & (rmask(i-1,j-1).lt.0.5_r8).and. &
553 & (rmask(i ,j-1).gt.0.5_r8))
THEN
555 ELSE IF ((rmask(i-1,j ).gt.0.5_r8).and. &
556 & (rmask(i ,j ).gt.0.5_r8).and. &
557 & (rmask(i-1,j-1).gt.0.5_r8).and. &
558 & (rmask(i ,j-1).lt.0.5_r8))
THEN
560 ELSE IF ((rmask(i-1,j ).gt.0.5_r8).and. &
561 & (rmask(i ,j ).lt.0.5_r8).and. &
562 & (rmask(i-1,j-1).gt.0.5_r8).and. &
563 & (rmask(i ,j-1).lt.0.5_r8))
THEN
565 ELSE IF ((rmask(i-1,j ).lt.0.5_r8).and. &
566 & (rmask(i ,j ).gt.0.5_r8).and. &
567 & (rmask(i-1,j-1).lt.0.5_r8).and. &
568 & (rmask(i ,j-1).gt.0.5_r8))
THEN
570 ELSE IF ((rmask(i-1,j ).gt.0.5_r8).and. &
571 & (rmask(i ,j ).gt.0.5_r8).and. &
572 & (rmask(i-1,j-1).lt.0.5_r8).and. &
573 & (rmask(i ,j-1).lt.0.5_r8))
THEN
575 ELSE IF ((rmask(i-1,j ).lt.0.5_r8).and. &
576 & (rmask(i ,j ).lt.0.5_r8).and. &
577 & (rmask(i-1,j-1).gt.0.5_r8).and. &
578 & (rmask(i ,j-1).gt.0.5_r8))
THEN
590 & lbi, ubi, lbj, ubj, &
596 & lbi, ubi, lbj, ubj, &
608 cosangler(i,j)=cos(angler(i,j))
609 sinangler(i,j)=sin(angler(i,j))
617 & lbi, ubi, lbj, ubj, &
620 & lbi, ubi, lbj, ubj, &
626 & lbi, ubi, lbj, ubj, &
628 & cosangler, sinangler)
631#if defined TIDE_GENERATING_FORCES
641 cos2lat(i,j)=cosphi*cosphi
642 sinlat2(i,j)=sin(2.0_r8*phi)
650 & lbi, ubi, lbj, ubj, &
653 & lbi, ubi, lbj, ubj, &
659 & lbi, ubi, lbj, ubj, &
665#if defined DIFF_GRID || defined DIFF_3DCOEF || \
666 defined visc_grid || defined visc_3dcoef
676 grdscl(i,j)=sqrt(om_r(i,j)*on_r(i,j))
684 & lbi, ubi, lbj, ubj, &
690 & lbi, ubi, lbj, ubj, &
696#if defined DIFF_3DCOEF || defined VISC_3DCOEF
708# if defined DIFF_3DCOEF
712# if defined VISC_3DCOEF
718# if defined DIFF_3DCOEF
720 hdiffusion(i,j)=pecletcoef*uscale*grdscl(i,j)
721# elif defined TS_DIF4
722 hdiffusion(i,j)=pecletcoef*uscale*grdscl(i,j)**3
724 my_diffmin=min(my_diffmin, hdiffusion(i,j))
725 my_diffmax=max(my_diffmax, hdiffusion(i,j))
727# if defined VISC_3DCOEF
729 hviscosity(i,j)=pecletcoef*uscale*grdscl(i,j)
730# elif defined UV_VIS4
731 hviscosity(i,j)=pecletcoef*uscale*grdscl(i,j)**3
733 my_viscmin=min(my_viscmin, hviscosity(i,j))
734 my_viscmax=max(my_viscmax, hviscosity(i,j))
744 & lbi, ubi, lbj, ubj, &
749 & lbi, ubi, lbj, ubj, &
757 & lbi, ubi, lbj, ubj, &
763 & lbi, ubi, lbj, ubj, &
784 & lbi, ubi, lbj, ubj, &
785 & imins, imaxs, jmins, jmaxs, &
818#if defined VISC_GRID || defined DIFF_GRID
821 cff=sqrt(om_r(i,j)*on_r(i,j))
823 my_dxmin=min(my_dxmin,om_r(i,j))
824 my_dxmax=max(my_dxmax,om_r(i,j))
825 my_dymin=min(my_dymin,on_r(i,j))
826 my_dymax=max(my_dymax,on_r(i,j))
828 IF (rmask(i,j).gt.0.0_r8)
THEN
829 my_grdmax=max(my_grdmax,cff)
830 my_dxminw=min(my_dxminw,om_r(i,j))
831 my_dxmaxw=max(my_dxmaxw,om_r(i,j))
832 my_dyminw=min(my_dyminw,on_r(i,j))
833 my_dymaxw=max(my_dymaxw,on_r(i,j))
836 my_grdmax=max(my_grdmax,cff)
840 my_dzmin=min(my_dzmin,hz(i,j,k))
841 my_dzmax=max(my_dzmax,hz(i,j,k))
843 IF (rmask(i,j).gt.0.0_r8)
THEN
844 my_dzminw=min(my_dzminw,hz(i,j,k))
845 my_dzmaxw=max(my_dzmaxw,hz(i,j,k))
871 IF (rmask(i,j).gt.0.0_r8)
THEN
875 & sqrt(
g*abs(h(i,j)-abs(zice(i,j)))* &
876 & (pm(i,j)*pm(i,j)+pn(i,j)*pn(i,j)))
879 & sqrt(
g*abs(h(i,j))*(pm(i,j)*pm(i,j)+pn(i,j)*pn(i,j)))
881 my_cg_min=min(my_cg_min,cff)
882 my_cg_max=max(my_cg_max,cff)
884 cff=
dt(ng)*abs(f(i,j))
885 my_cg_cor=max(my_cg_cor,cff)
900 IF (
domain(ng)%SouthWest_Corner(tile).and. &
901 &
domain(ng)%NorthEast_Corner(tile))
THEN
931 diffmin(ng)=min(diffmin(ng),my_diffmin)
932 diffmax(ng)=max(diffmax(ng),my_diffmax)
935 viscmin(ng)=min(viscmin(ng),my_viscmin)
936 viscmax(ng)=max(viscmax(ng),my_viscmax)
961 rbuffer(10)=
dzmax(ng)
970 rbuffer(11)=diffmin(ng)
972 rbuffer(12)=diffmax(ng)
981 rbuffer(13)=viscmin(ng)
983 rbuffer(14)=viscmax(ng)
1011 CALL mp_reduce (ng, model, 20, rbuffer, op_handle)
1013 CALL mp_reduce (ng, model, 14, rbuffer, op_handle)
1019 dxmin(ng)=rbuffer(5)
1020 dxmax(ng)=rbuffer(6)
1021 dymin(ng)=rbuffer(7)
1022 dymax(ng)=rbuffer(8)
1024 dzmin(ng)=rbuffer(9)
1025 dzmax(ng)=rbuffer(10)
1028 diffmin(ng)=rbuffer(11)
1029 diffmax(ng)=rbuffer(12)
1032 viscmin(ng)=rbuffer(13)
1033 viscmax(ng)=rbuffer(14)
1053 10
FORMAT (/,
' Metrics information for Grid ',i2.2,
':', &
1054 & /,
' ===============================',/, &
1055 & /,
' Minimum X-grid spacing, DXmin = ',1pe15.8,
' km', &
1056 & 4x,
'Water points = ',1pe15.8,
' km', &
1057 & /,
' Maximum X-grid spacing, DXmax = ',1pe15.8,
' km', &
1058 & 4x,
'Water points = ',1pe15.8,
' km', &
1059 & /,
' Minimum Y-grid spacing, DYmin = ',1pe15.8,
' km', &
1060 & 4x,
'Water points = ',1pe15.8,
' km', &
1061 & /,
' Maximum Y-grid spacing, DYmax = ',1pe15.8,
' km', &
1062 & 4x,
'Water points = ',1pe15.8,
' km')
1064 &
dxmin(ng)*0.001_dp, &
1065 &
dxmax(ng)*0.001_dp, &
1066 &
dymin(ng)*0.001_dp, &
1067 &
dymax(ng)*0.001_dp
1068 10
FORMAT (/,
' Metrics information for Grid ',i2.2,
':', &
1069 & /,
' ===============================',/, &
1070 & /,
' Minimum X-grid spacing, DXmin = ',1pe15.8,
' km', &
1071 & /,
' Maximum X-grid spacing, DXmax = ',1pe15.8,
' km', &
1072 & /,
' Minimum Y-grid spacing, DYmin = ',1pe15.8,
' km', &
1073 & /,
' Maximum Y-grid spacing, DYmax = ',1pe15.8,
' km')
1078 20
FORMAT (
' Minimum Z-grid spacing, DZmin = ',1pe15.8,
' m', &
1079 & 5x,
'Water points = ',1pe15.8,
' m',/, &
1080 &
' Maximum Z-grid spacing, DZmax = ',1pe15.8,
' m', &
1081 & 5x,
'Water points = ',1pe15.8,
' m')
1084 20
FORMAT (
' Minimum Z-grid spacing, DZmin = ',1pe15.8,
' m',/, &
1085 &
' Maximum Z-grid spacing, DZmax = ',1pe15.8,
' m')
1089 30
FORMAT (/,
' Minimum barotropic Courant Number = ', 1pe15.8,/, &
1090 &
' Maximum barotropic Courant Number = ', 1pe15.8,/, &
1091 &
' Maximum Coriolis Courant Number = ', 1pe15.8,/)
1092# if defined VISC_GRID || defined DIFF_GRID
1094 40
FORMAT (
' Horizontal mixing scaled by grid area squared root',&
1096 &
', MAXVAL(grdscl) = ',1pe15.8,
' km', &
1097 & 2x,
'(Water points)')
1099 &
', MAXVAL(grdscl) = ',1pe15.8,
' km')
1105# elif defined TS_DIF4
1108 WRITE (
stdout,50) diffmin(ng), trim(units), &
1109 & diffmax(ng), trim(units)
1110 50
FORMAT (/,
' Minimum horizontal diffusion coefficient = ', &
1112 & /,
' Maximum horizontal diffusion coefficient = ', &
1118# elif defined UV_VIS4
1121 WRITE (
stdout,60) viscmin(ng), trim(units), &
1122 & viscmax(ng), trim(units)
1123 60
FORMAT (/,
' Minimum horizontal viscosity coefficient = ', &
1125 & /,
' Maximum horizontal viscosity coefficient = ', &
1208 IF (
domain(ng)%NorthEast_Test(tile))
THEN
1211 70
FORMAT (/,
' Refined Nested Grid(s) Information: ', &
1212 & /,
' ==================================',/,/, &
1213 &
' Refined Donor Refined Timestep Refined', &
1214 & /,
' Grid Grid Scale Ratio ', &
1221 80
FORMAT(4x,i2.2,8x,i2.2,7x,i2.2,4x,f9.5,6x,i2.2)
1225 90
FORMAT (/,
' WARNING: Usually the number of Refined ', &
1226 &
'Timesteps must be the same',/,10x, &
1227 &
'as the Refined Scale for numerical stability.',/)
1246 IF (mod(
dt(dg)*secscale,
dt(ig)*secscale).ne.0.0_dp)
THEN
1247 IF (
domain(ng)%SouthWest_Test(tile))
THEN
1250 & mod(
dt(dg),
dt(ig))
1251 100
FORMAT (/,
' METRICS - illegal timestep size for ', &
1252 &
' finer reciever grid (rg),',/,11x, &
1253 &
'It must be an exact divisible factor from ', &
1254 &
'donor grid (dg).',/,/,11x,
'rg = ',i2.2, &
1255 &
', dt(rg) = ',f12.4,/,11x,
'dg = ',i2.2, &
1256 &
', dt(dg) = ',f12.4,4x, &
1257 &
'MOD[dt(dg), dt(rg)] = ',f10.4,/)
1288 IF (is.le.(5+
nt(ng)))
THEN
1297# ifdef IMPLICIT_VCONV
1299 & (2.0_r8*
kvmax(ng))
1302 & (2.0_r8*
kvmax(ng))
1308# ifdef ADJUST_BOUNDARY
1317 & (2.0_r8*
khmax(ng))
1320 & (2.0_r8*
khmax(ng))
1323# ifdef IMPLICIT_VCONV
1325 & (2.0_r8*
kvmax(ng))
1328 & (2.0_r8*
kvmax(ng))
1346 IF (
hdecay(rec,is,ng).gt.0.0_r8)
THEN
1350 IF (mod(
nhsteps(rec,is),2).ne.0)
THEN
1355 IF (
vdecay(rec,is,ng).gt.0.0_r8)
THEN
1359# ifdef IMPLICIT_VCONV
1362 IF (mod(
nvsteps(rec,is),2).ne.0)
THEN
1370# ifdef ADJUST_BOUNDARY
1376 IF (
hdecayb(is,ibry,ng).gt.0.0_r8)
THEN
1380 IF (mod(
nhstepsb(ibry,is),2).ne.0)
THEN
1385 IF (
vdecayb(is,ibry,ng).gt.0.0_r8)
THEN
1389# ifdef IMPLICIT_VCONV
1392 IF (mod(
nvstepsb(ibry,is),2).ne.0)
THEN
1407 text=
'Horizontal convolution, NHstepsI, DTsizeH ='
1408 ELSE IF (rec.eq.2)
THEN
1409 text=
'Horizontal convolution, NHstepsM, DTsizeH ='
1411 ELSE IF (is.gt.(5+
nt(ng)))
THEN
1413 ELSE IF (is.gt.3)
THEN
1415 text=
'Horizontal convolution, NHstepsF, DTsizeH ='
1417 IF (
hdecay(rec,is,ng).gt.0.0_r8)
THEN
1425# if defined SOLVE3D && defined VCONVOLUTION
1429 text=
'Vertical convolution, NVstepsI, DTsizeV ='
1430 ELSE IF (rec.eq.2)
THEN
1431 text=
'Vertical convolution, NVstepsM, DTsizeV ='
1433 ELSE IF (is.gt.(5+
nt(ng)))
THEN
1435 ELSE IF (is.gt.3)
THEN
1437 text=
'Vertical convolution, NVstepsF, DTsizeV ='
1439 IF (
vdecay(rec,is,ng).gt.0.0_r8)
THEN
1448# ifdef ADJUST_BOUNDARY
1451 IF (
lobc(ibry,is,ng))
THEN
1452 IF (ibry.eq.
iwest)
THEN
1453 text=
'West bry Hconvolution, NHstepsB, DTsizeHB ='
1454 ELSE IF (ibry.eq.
isouth)
THEN
1455 text=
'South bry Hconvolution, NHstepsB, DTsizeHB ='
1456 ELSE IF (ibry.eq.
ieast)
THEN
1457 text=
'East bry Hconvolution, NHstepsB, DTsizeHB ='
1458 ELSE IF (ibry.eq.
inorth)
THEN
1459 text=
'North bry Hconvolution, NHstepsB, DTsizeHB ='
1461 IF (
hdecayb(is,ibry,ng).gt.0.0_r8)
THEN
1470# if defined SOLVE3D && defined VCONVOLUTION
1473 IF (
lobc(ibry,is,ng))
THEN
1474 IF (ibry.eq.
iwest)
THEN
1475 text=
'West bry Vconvolution, NVstepsB, DTsizeVB ='
1476 ELSE IF (ibry.eq.
isouth)
THEN
1477 text=
'South bry Vconvolution, NVstepsB, DTsizeVB ='
1478 ELSE IF (ibry.eq.
ieast)
THEN
1479 text=
'East bry Vconvolution, NVstepsB, DTsizeVB ='
1480 ELSE IF (ibry.eq.
inorth)
THEN
1481 text=
'North bry Vconvolution, NVstepsB, DTsizeVB ='
1483 IF (
vdecayb(is,ibry,ng).gt.0.0_r8)
THEN
1495 110
FORMAT (1x,a,i5,1x,1pe15.8,
' s',2x,a)