102 SUBROUTINE ana_nlminitial_tile (ng, tile, model, &
103 & LBi, UBi, LBj, UBj, &
104 & IminS, ImaxS, JminS, JmaxS, &
138 integer,
intent(in) :: ng, tile, model
139 integer,
intent(in) :: LBi, UBi, LBj, UBj
140 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
143 real(r8),
intent(in) :: h(LBi:,LBj:)
145 real(r8),
intent(in) :: lonr(LBi:,LBj:)
146 real(r8),
intent(in) :: latr(LBi:,LBj:)
148 real(r8),
intent(in) :: xr(LBi:,LBj:)
149 real(r8),
intent(in) :: yr(LBi:,LBj:)
152 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
154 real(r8),
intent(out) :: u(LBi:,LBj:,:,:)
155 real(r8),
intent(out) :: v(LBi:,LBj:,:,:)
156 real(r8),
intent(out) :: t(LBi:,LBj:,:,:,:)
158 real(r8),
intent(out) :: ubar(LBi:,LBj:,:)
159 real(r8),
intent(out) :: vbar(LBi:,LBj:,:)
160 real(r8),
intent(out) :: zeta(LBi:,LBj:,:)
163 real(r8),
intent(in) :: lonr(LBi:UBi,LBj:UBj)
164 real(r8),
intent(in) :: latr(LBi:UBi,LBj:UBj)
166 real(r8),
intent(in) :: xr(LBi:UBi,LBj:UBj)
167 real(r8),
intent(in) :: yr(LBi:UBi,LBj:UBj)
169 real(r8),
intent(in) :: h(LBi:UBi,LBj:UBj)
171 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
173 real(r8),
intent(out) :: u(LBi:UBi,LBj:UBj,N(ng),2)
174 real(r8),
intent(out) :: v(LBi:UBi,LBj:UBj,N(ng),2)
175 real(r8),
intent(out) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
177 real(r8),
intent(out) :: ubar(LBi:UBi,LBj:UBj,:)
178 real(r8),
intent(out) :: vbar(LBi:UBi,LBj:UBj,:)
179 real(r8),
intent(out) :: zeta(LBi:UBi,LBj:UBj,:)
184 logical,
save :: first = .true.
186 integer :: Iless, Iplus, i, itrc, j, k
189 real(r8),
parameter :: guscale = 40.0e+03_r8
190 real(r8),
parameter :: u0 = 1.6_r8
192 real(r8) :: depth, dx, val1, val2, val3, val4, x, x0, y, y0
194 TYPE (T_STATS),
save :: Stats(7)
196#include "set_bounds.h"
205 stats(i) % checksum=0_i8b
208 stats(i) % max=-
large
209 stats(i) % avg=0.0_r8
210 stats(i) % rms=0.0_r8
218#if defined CHANNEL && !defined ONLY_TS_IC
222 val1=(
grid(ng)%yu(i,j)-y0)/guscale
223 ubar(i,j,1)=u0*exp(-val1*val1)/6.0_r8
232 x0=2.0_r8*
xl(ng)/3.0_r8
235 val2=0.771_r8*(val1*val1)
239 x=0.5_r8*(xr(i-1,j)+xr(i,j))-x0
240 y=0.5_r8*(yr(i-1,j)+yr(i,j))-y0
242 val4=val2*((2.0_r8*val3/(1.0_r8+(val3*val3)))**2)
243 ubar(i,j,1)=0.25_r8*val4*(6.0_r8*y*y-9.0_r8)* &
249 x=0.5_r8*(xr(i,j-1)+xr(i,j))-x0
250 y=0.5_r8*(yr(i,j-1)+yr(i,j))-y0
252 val4=val2*((2.0_r8*val3/(1.0_r8+(val3*val3)))**2)
253 vbar(i,j,1)=2.0_r8*val4*y*(-2.0_r8*val1*tanh(val1*x))* &
269#elif defined RIVERPLUME2
280#elif defined SED_TEST1
284 ubar(i,j,1)=-10.0_r8/(10.0_r8+9.0e-06_r8*real(i,r8)*val1)
303#elif defined TEST_CHAN
331 & lbi, ubi, lbj, ubj, ubar(:,:,1))
332 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
335 & ng, stats(1)%min, stats(1)%max
338 & lbi, ubi, lbj, ubj, vbar(:,:,1))
339 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
342 & ng, stats(2)%min, stats(2)%max
349#if defined CHANNEL && !defined ONLY_TS_IC
354 val1=(yr(i,j)-y0)/guscale
355 val2=-u0*guscale*
grid(ng)%f(i,j)*sqrt(
pi)/(12.0_r8*
g)
356 zeta(i,j,1)=val2*
erf(val1)
362 val1=(yr(i,j)-y0)/guscale
363 val2=-0.5_r8*u0*guscale*
grid(ng)%f(i,j)*sqrt(
pi)/
g
364 zeta(i,j,1)=val2*
erf(val1)
386 x0=2.0_r8*
xl(ng)/3.0_r8
389 val2=0.771_r8*(val1*val1)
395 val4=val2*((2.0_r8*val3/(1.0_r8+(val3*val3)))**2)
396 zeta(i,j,1)=0.25_r8*val4*(6.0_r8*y*y+3.0_r8)* &
407#elif defined SED_TEST1
411 zeta(i,j,1)=9.0e-06_r8*real(i,r8)*val1
414#elif defined TEST_CHAN
417 zeta(i,j,1)=-0.4040_r8*real(i,r8)/real(
lm(ng)+1,r8)
431 & lbi, ubi, lbj, ubj, zeta(:,:,1))
432 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
435 & ng, stats(3)%min, stats(3)%max
444# if defined CHANNEL && !defined ONLY_TS_IC
449 val1=(
grid(ng)%yu(i,j)-y0)/guscale
450 val2=(z_r(i,j,k)+z_r(i-1,j,k))/(h(i,j)+h(i-1,j))
451 val3=u0*(0.5_r8+val2+(0.5_r8*val2*val2))*exp(-val1*val1)
463# elif defined RIVERPLUME2
472 v(i,j,k,1)=-0.05_r8*log((h(i,j)+z_r(i,j,k))/
zob(ng))/ &
473 & (log(h(i,j)/
zob(ng))-1.0_r8+
zob(ng)/h(i,j))
477# elif defined SED_TEST1
481 u(i,j,k,1)=-1.0_r8*log((h(i,j)+z_r(i,j,k))/
zob(ng))/ &
482 & (log(h(i,j)/
zob(ng))-1.0_r8+
zob(ng)/h(i,j))
491# elif defined SED_TOY
524 & lbi, ubi, lbj, ubj, 1, n(ng), u(:,:,:,1))
525 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
528 & ng, stats(4)%min, stats(4)%max
531 & lbi, ubi, lbj, ubj, 1, n(ng), v(:,:,:,1))
532 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
535 & ng, stats(5)%min, stats(5)%max
545# if defined BENCHMARK
546 val1=(44.69_r8/39.382_r8)**2
547 val2=val1*(
rho0*800.0_r8/
g)*(5.0e-05_r8/((42.689_r8/44.69_r8)**2))
551 t(i,j,k,1,
itemp)=val2*exp(z_r(i,j,k)/800.0_r8)* &
552 & (0.6_r8-0.4_r8*tanh(z_r(i,j,k)/800.0_r8))
554 t(i,j,k,1,
isalt)=35.0_r8
560 val1=(44.69_r8/39.382_r8)**2
561 val2=val1*(
rho0*800.0_r8/
g)*(5.0e-05_r8/((42.689_r8/44.69_r8)**2))
565 t(i,j,k,1,
itemp)=val2*exp(z_r(i,j,k)/800.0_r8)* &
566 & (0.6_r8-0.4_r8*tanh(z_r(i,j,k)/800.0_r8))
570# elif defined BL_TEST
574 val1=tanh(1.1_r8*z_r(i,j,k)+11.0_r8)
575 t(i,j,k,1,
itemp)=
t0(ng)+6.25_r8*val1
577 t(i,j,k,1,
isalt)=
s0(ng)-0.75_r8*val1
582# elif defined CHANNEL
587 val1=(yr(i,j)-y0)/guscale
588 val2=-0.5_r8*u0*guscale*
grid(ng)%f(i,j)*sqrt(
pi)/ &
590 val3=(val2*
erf(val1)+
t0(ng))*(1.0_r8+z_r(i,j,k)/h(i,j))
591 t(i,j,k,1,
itemp)=val3
602 t(i,j,k,1,
itemp)=3.488_r8*exp(z_r(i,j,k)/800.0_r8)* &
603 & (1.0_r8-(2.0_r8/3.0_r8)* &
604 & tanh(z_r(i,j,k)/800.0_r8))
608# elif defined CHANNEL_NECK
612 t(i,j,k,1,
itemp)=20.0_r8
617# elif defined COUPLING_TEST
622 t(i,j,k,1,
itemp)=val1*exp(z_r(i,j,k)/800.0_r8)* &
623 & (0.6_r8-0.4_r8*tanh(z_r(i,j,k)/800.0_r8))+ &
626 t(i,j,k,1,
isalt)=35.0_r8
631# elif defined DOUBLE_GYRE
632 val1=(44.69_r8/39.382_r8)**2
633 val2=val1*(
rho0*100.0_r8/
g)*(5.0e-5_r8/((42.689_r8/44.69_r8)**2))
637 val3=
t0(ng)+val2*exp(z_r(i,j,k)/100.0_r8)* &
638 & (10.0_r8-0.4_r8*tanh(z_r(i,j,k)/100.0_r8))
640 t(i,j,k,1,
itemp)=val3-3.0_r8*val4
642 t(i,j,k,1,
isalt)=34.5_r8-0.001_r8*z_r(i,j,k)-val4
647# elif defined ESTUARY_TEST
651 t(i,j,k,1,
itemp)=10.0_r8
653 IF (xr(i,j).le.30000.0_r8)
then
654 t(i,j,k,1,
isalt)=30.0_r8
655 ELSEIF (xr(i,j).le.80000.0_r8)
then
656 t(i,j,k,1,
isalt)=(80000.0_r8-xr(i,j))/50000.0_r8*30.0_r8
658 t(i,j,k,1,
isalt)=0.0_r8
664# elif defined FLT_TEST
672# elif defined GRAV_ADJ
675 DO i=istrt,min((
lm(ng)+1)/2,iendt)
678 t(i,j,k,1,
isalt)=0.0_r8
681 DO i=max((
lm(ng)+1)/2+1,istrt),iendt
700# elif defined LAB_CANYON
704 t(i,j,k,1,
itemp)=-659.34183_r8*z_r(i,j,k)
708# elif defined LAKE_SIGNELL
712 t(i,j,k,1,
itemp)=10.0_r8
714 t(i,j,k,1,
isalt)=30.0_r8
719# elif defined LMD_TEST
723 t(i,j,k,1,
itemp)=min(13.0_r8, &
724 & 7.0_r8+0.2_r8*(z_r(i,j,k)+50.0_r8))
726 t(i,j,k,1,
isalt)=35.0_r8
731# elif defined MIXED_LAYER
735 t(i,j,k,1,
itemp)=10.0_r8+3.0_r8*(z_r(i,j,k)+h(i,j))/ &
743# elif defined NJ_BIGHT
748 IF (depth.ge.-15.0_r8)
THEN
749 t(i,j,k,1,
itemp)= 2.049264257728403e+01_r8-depth* &
750 & (2.640850848793918e-01_r8+depth* &
751 & (2.751125328535212e-01_r8+depth* &
752 & (9.207489761648872e-02_r8+depth* &
753 & (1.449075725742839e-02_r8+depth* &
754 & (1.078215685912076e-03_r8+depth* &
755 & (3.240318053903974e-05_r8+ &
756 & 1.262826857690271e-07_r8*depth))))))
758 t(i,j,k,1,
isalt)= 3.066489149193135e+01_r8-depth* &
759 & (1.476725262946735e-01_r8+depth* &
760 & (1.126455760313399e-01_r8+depth* &
761 & (3.900923281871022e-02_r8+depth* &
762 & (6.939014937447098e-03_r8+depth* &
763 & (6.604436696792939e-04_r8+depth* &
764 & (3.191792361954220e-05_r8+ &
765 & 6.177352634409320e-07_r8*depth))))))
768 t(i,j,k,1,
itemp)=14.6_r8+ &
769 & 6.70_r8*tanh(1.1_r8*depth+15.9_r8)
771 t(i,j,k,1,
isalt)=31.3_r8- &
772 & 0.55_r8*tanh(1.1_r8*depth+15.9_r8)
778# elif defined OVERFLOW
782 t(i,j,k,1,
itemp)=
t0(ng)-0.5_r8*
t0(ng)*(1.0_r8+ &
783 & tanh((yr(i,j)-60000.0_r8)/2000.0_r8))
787# elif defined RIVERPLUME1
791 t(i,j,k,1,
itemp)=
t0(ng)+0.01_r8*real(k,r8)
798# elif defined RIVERPLUME2
809# elif defined SEAMOUNT
813 t(i,j,k,1,
itemp)=
t0(ng)+7.5_r8*exp(z_r(i,j,k)/1000.0_r8)
817# elif defined SED_TEST1
821 t(i,j,k,1,
itemp)=20.0_r8
823 t(i,j,k,1,
isalt)=0.0_r8
828# elif defined UPWELLING
832 t(i,j,k,1,
itemp)=
t0(ng)+8.0_r8*exp(z_r(i,j,k)/50.0_r8)
850# elif defined WINDBASIN
854 t(i,j,k,1,
itemp)=20.0_r8
877 & lbi, ubi, lbj, ubj, 1, n(ng), t(:,:,:,1,itrc))
878 IF (
domain(ng)%NorthEast_Corner(tile))
THEN
881 & ng, stats(itrc+5)%min, stats(itrc+5)%max
886 10
FORMAT (3x,
' ANA_INITIAL - ',a,/,19x, &
887 &
'(Grid = ',i2.2,
', Min = ',1p,e15.8,0p, &
888 &
' Max = ',1p,e15.8,0p,
')')