77 WRITE(ipt,* )
'! SETTING INITIAL CONDITIONS ' 88 &
"! INITIALIZING SEA SURFACE HEIGHT" 89 SELECT CASE(startup_type)
91 CASE(startup_type_hotstart)
118 CASE(startup_type_crashrestart)
137 CASE(startup_type_coldstart)
146 CALL fatal_error(
"STARTUP: UNKNOWN STARTUP TYPE: "//trim(startup_type))
151 &
"! INITIALIZING VELOCITY FIELDS" 154 SELECT CASE (startup_uv_type)
155 CASE (startup_type_observed)
156 CALL fatal_error(
"I DON'T KNOW HOW TO DO THAT KIND OF STARTUP")
157 CASE(startup_type_linear)
158 CALL fatal_error(
"I DON'T KNOW HOW TO DO THAT KIND OF STARTUP")
159 CASE(startup_type_constant)
162 CASE(startup_type_default)
164 CASE(startup_type_setvalues)
173 &
"! INITIALIZING TURBULENCE FIELDS" 176 SELECT CASE(startup_turb_type)
177 CASE(startup_type_observed)
178 CALL fatal_error(
"I DON'T KNOW HOW TO DO THAT KIND OF STARTUP")
179 CASE(startup_type_linear)
180 CALL fatal_error(
"I DON'T KNOW HOW TO DO THAT KIND OF STARTUP")
181 CASE(startup_type_constant)
182 CALL fatal_error(
"I DON'T KNOW HOW TO DO THAT KIND OF STARTUP")
183 CASE(startup_type_default)
185 CALL set_default_turb
187 CASE(startup_type_setvalues)
196 &
"! INITIALIZING TEMPERATURE AND SALINITY" 199 SELECT CASE(startup_ts_type)
200 CASE(startup_type_observed)
204 CASE(startup_type_linear)
208 CASE(startup_type_constant)
212 CASE(startup_type_default)
213 CALL fatal_error(
"There is no default startup for Temperature and Salinity")
214 CASE(startup_type_setvalues)
313 TYPE(ncvar),
POINTER :: var
314 TYPE(ncdim),
POINTER :: dim
323 var => find_var(
nc_start,
'zeta',found)
324 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'zeta'& 325 & IN THE HOTSTART FILE OBJECT")
330 var => find_var(
nc_start,
'et',found)
331 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'et'& 332 & IN THE HOTSTART FILE OBJECT")
361 TYPE(ncvar),
POINTER :: var
362 TYPE(ncdim),
POINTER :: dim
371 var => find_var(
nc_start,
'wet_nodes',found)
372 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'wet_nodes'& 373 & IN THE HOTSTART FILE OBJECT")
378 var => find_var(
nc_start,
'wet_cells',found)
379 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'wet_cells'& 380 & IN THE HOTSTART FILE OBJECT")
386 var => find_var(
nc_start,
'wet_nodes_prev_int',found)
387 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'wet_nodes_prev_int'& 388 & IN THE HOTSTART FILE OBJECT")
393 var => find_var(
nc_start,
'wet_cells_prev_int',found)
394 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'wet_cells_prev_int'& 395 & IN THE HOTSTART FILE OBJECT")
400 var => find_var(
nc_start,
'wet_cells_prev_ext',found)
401 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'wet_cells_prev_ext'& 402 & IN THE HOTSTART FILE OBJECT")
416 TYPE(ncvar),
POINTER :: VAR
417 TYPE(ncdim),
POINTER :: DIM
426 var => find_var(
nc_start,
'el_atmo',found)
428 &(
"COULD NOT FIND VARIABLE 'el_atmo' IN THE HOTSTART FILE OBJECT")
438 TYPE(ncvar),
POINTER :: VAR
439 TYPE(ncdim),
POINTER :: DIM
448 var => find_var(
nc_start,
'el_eqi',found)
450 &(
"COULD NOT FIND VARIABLE 'el_eqi' IN THE HOTSTART FILE OBJECT")
456 END SUBROUTINE read_eqi
465 TYPE(ncvar),
POINTER :: var
466 TYPE(ncdim),
POINTER :: dim
469 REAL(sp),
DIMENSION(0:MT,KB) :: pressure
477 var => find_var(
nc_start,
'temp',found)
478 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'temp'& 479 & IN THE HOTSTART FILE OBJECT")
485 var => find_var(
nc_start,
'tmean1',found)
486 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'tmean1'& 487 & IN THE HOTSTART FILE OBJECT")
492 var => find_var(
nc_start,
'salinity',found)
493 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'saltinity'& 494 & IN THE HOTSTART FILE OBJECT")
499 var => find_var(
nc_start,
'smean1',found)
500 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'smean1'& 501 & IN THE HOTSTART FILE OBJECT")
506 var => find_var(
nc_start,
'rho1',found)
507 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'rho1'& 508 & IN THE HOTSTART FILE OBJECT")
513 var => find_var(
nc_start,
'rmean1',found)
514 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'rmean1'& 515 & IN THE HOTSTART FILE OBJECT")
580 SUBROUTINE set_observed_ts
582 TYPE(ncvar),
POINTER :: var
583 TYPE(ncdim),
POINTER :: dim
587 REAL(sp),
ALLOCATABLE,
TARGET :: dpthsl(:)
588 REAL(sp),
ALLOCATABLE,
TARGET :: tsl(:,:),ssl(:,:)
589 REAL(sp),
ALLOCATABLE :: ta(:),sa(:)
591 REAL(sp),
DIMENSION(KBM1) :: ti,si,zi
592 REAL(sp),
DIMENSION(0:MT,KB) :: pressure
593 INTEGER :: k, i, ib, ierr
594 REAL(sp) :: scount, fac, rbuf
605 dim => find_dim(
nc_start,
'ksl',found)
606 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND DIMENSION 'ksl'& 607 & IN THE STARTUP FILE OBJECT")
611 ALLOCATE(tsl(mt,ksl))
612 ALLOCATE(ssl(mt,ksl))
613 ALLOCATE(dpthsl(ksl))
619 ALLOCATE(ta(ksl),sa(ksl))
624 var => find_var(
nc_start,
'tsl',found)
625 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'tsl'& 626 & IN THE STARTUP FILE OBJECT")
631 var => find_var(
nc_start,
'ssl',found)
632 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'ssl'& 633 & IN THE STARTUP FILE OBJECT")
639 var => find_var(
nc_start,
'zsl',found)
640 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'zsl'& 641 & IN THE STARTUP FILE OBJECT")
651 where(ssl <0.0_sp) ssl=0.0
658 IF(-
h(i) <= dpthsl(k))
THEN 659 scount = scount + 1.0_sp
660 ta(k) = ta(k) + tsl(i,k)
661 sa(k) = sa(k) + ssl(i,k)
664 IF(scount >= 1.0_sp)
THEN 676 zi(k)=
zz(i,k)*
d(i)+
el(i)
698 where(
s1<0.0_sp)
s1=0.0
700 IF(.NOT.barotropic)
THEN 701 SELECT CASE(sea_water_density_function)
706 pressure(:,k) = -
grav_n*1.025_sp*(
zz(:,k)*
d(:))*0.1_sp
729 pressure(:,k) = -
grav_n*1.025_sp*(
zz(:,k)*
d(:))*0.01_sp
739 CALL fatal_error(
"INVALID DENSITY FUNCTION SELECTED:",&
740 &
" "//trim(sea_water_density_function) )
756 DEALLOCATE(tsl,ssl,dpthsl)
762 END SUBROUTINE set_observed_ts
764 SUBROUTINE set_linear_ts
768 INTEGER,
PARAMETER :: ksl =2
770 REAL(sp),
DIMENSION(KBM1) :: ti,si,zi
771 REAL(sp),
DIMENSION(KSL) :: ta,sa,za
779 ta(1) = startup_t_vals(1)
780 ta(2) = startup_t_vals(2)
782 sa(1) = startup_s_vals(1)
783 sa(2) = startup_s_vals(2)
791 zi(k)=
zz(i,k)*
d(i)+
el(i)
806 IF(.NOT.barotropic)
THEN 807 SELECT CASE(sea_water_density_function)
815 CALL fatal_error(
"INVALID DENSITY FUNCTION SELECTED:",&
816 &
" "//trim(sea_water_density_function) )
836 END SUBROUTINE set_linear_ts
838 SUBROUTINE set_constant_ts
844 t1(:,1:kbm1) = startup_t_vals(1)
845 s1(:,1:kbm1) = startup_s_vals(1)
847 t0(:,1:kbm1) = startup_t_vals(1)
848 s0(:,1:kbm1) = startup_s_vals(1)
851 IF(.NOT.barotropic)
THEN 852 SELECT CASE(sea_water_density_function)
860 CALL fatal_error(
"INVALID DENSITY FUNCTION SELECTED:",&
861 &
" "//trim(sea_water_density_function) )
883 END SUBROUTINE set_constant_ts
886 SUBROUTINE set_constant_uv
892 u(:,1:kbm1) = startup_u_vals
893 v(:,1:kbm1) = startup_v_vals
901 END SUBROUTINE set_constant_uv
906 TYPE(ncvar),
POINTER :: var
907 TYPE(ncdim),
POINTER :: dim
917 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'u'& 918 & IN THE HOTSTART FILE OBJECT")
924 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'v'& 925 & IN THE HOTSTART FILE OBJECT")
929 var => find_var(
nc_start,
'omega',found)
937 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'w' & 938 & or 'omega' IN THE HOTSTART FILE OBJECT")
943 var => find_var(
nc_start,
'ua',found)
944 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'ua'& 945 & IN THE HOTSTART FILE OBJECT")
949 var => find_var(
nc_start,
'va',found)
950 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'va'& 951 & IN THE HOTSTART FILE OBJECT")
961 TYPE(ncvar),
POINTER :: var
962 TYPE(ncdim),
POINTER :: dim
971 var => find_var(
nc_start,
'q2',found)
972 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'q2'& 973 & IN THE HOTSTART FILE OBJECT")
977 var => find_var(
nc_start,
'q2l',found)
978 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'q2l'& 979 & IN THE HOTSTART FILE OBJECT")
984 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'l'& 985 & IN THE HOTSTART FILE OBJECT")
990 var => find_var(
nc_start,
'km',found)
991 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'km'& 992 & IN THE HOTSTART FILE OBJECT")
996 var => find_var(
nc_start,
'kq',found)
997 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'kq'& 998 & IN THE HOTSTART FILE OBJECT")
1002 var => find_var(
nc_start,
'kh',found)
1003 IF(.not. found)
CALL fatal_error(
"COULD NOT FIND VARIABLE 'kh'& 1004 & IN THE HOTSTART FILE OBJECT")
1015 SUBROUTINE set_default_turb
1053 IF (
d(i) > 0.0_sp)
THEN 1059 kh(i,k) = 2.*umol / vprnu
1067 END SUBROUTINE set_default_turb
1081 SUBROUTINE set_water_depth
1087 INTEGER :: i,k,j1,j2
1095 h =
h + static_ssh_adj
1103 IF(iobcn > 0 .AND. obc_depth_control_on)
THEN 1131 z1(i,k)=(
z(
nv(i,1),k)+
z(
nv(i,2),k)+
z(
nv(i,3),k))/3.0_sp
1141 zz1(i,k) = .5_sp*(
z1(i,k)+
z1(i,k+1))
1146 zz1(i,kb) = 2.0_sp*
zz1(i,kb-1)-
zz1(i,kb-2)
1155 dzz1(:,kbm1) = 0.0_sp
1160 END SUBROUTINE set_water_depth
real(sp), dimension(:,:), allocatable, target q2
real(sp), dimension(:,:), allocatable, target km
real(sp), dimension(:), allocatable, target va
real(sp), dimension(:), allocatable, target d
real(sp), dimension(:), allocatable, target d1
integer, dimension(:), allocatable iswetce
real(sp), dimension(:,:), allocatable, target s
real(sp), dimension(:), allocatable, target h
subroutine, public read_uv
real(sp), dimension(:), allocatable, target el
real(sp), dimension(:,:), allocatable, target v
logical function dbg_set(vrb)
real(sp), dimension(:,:), allocatable, target rho1
real(sp), dimension(:,:), allocatable, target t1
real(sp), dimension(:,:), allocatable, target w
real(sp), dimension(:,:), allocatable, target dzz1
real(sp), dimension(:,:), allocatable, target rho
integer, dimension(:), allocatable iswetct
real(sp), dimension(:,:), allocatable, target q2l
real(sp), dimension(:), allocatable, target el_eqi
real(sp), dimension(:,:), allocatable, target tmean1
real(sp), dimension(:,:), allocatable, target u
real(sp), dimension(:,:), allocatable, target s1
subroutine, public read_ts
integer, dimension(:), allocatable next_obc
real(sp), dimension(:,:), allocatable, target smean1
real(sp), dimension(:), allocatable, target el1
real(sp), dimension(:), allocatable, target et
subroutine, public startup
subroutine sinter_extrp_up(X, A, Y, B, M1, N1)
real(sp), dimension(:), allocatable nn_hvc
integer, dimension(:,:), allocatable, target nv
subroutine, public read_ssh
real(sp), dimension(:,:), allocatable, target zz1
real(sp), dimension(:,:), allocatable, target dzz
real(sp), dimension(:,:), allocatable, target aam
real(sp), dimension(:), allocatable, target ua
subroutine n2e2d(NVAR, EVAR)
real(sp), dimension(:,:), allocatable, target tmean
real(sp), dimension(:,:), allocatable, target dz
real(sp), dimension(:,:), allocatable, target l
integer, dimension(:), allocatable iswetnt
real(sp), dimension(:,:), allocatable, target kh
integer, dimension(:), allocatable iswetc
real(sp), dimension(:), allocatable, target dt1
real(sp), dimension(:,:), allocatable, target z
subroutine fatal_error(ER1, ER2, ER3, ER4)
real(sp), dimension(:), allocatable, target h1
real(sp), dimension(:,:), allocatable, target dz1
real(sp), dimension(:,:), allocatable, target t0
real(sp), dimension(:,:), allocatable, target z1
real(sp), dimension(:), allocatable, target grav_n
real(sp), dimension(:), allocatable, target el_atmo
subroutine n2e3d(NVAR, EVAR)
real(sp), dimension(:,:), allocatable, target smean
real(sp), dimension(:,:), allocatable, target wts
real(sp), dimension(:,:), allocatable, target t
integer, parameter dbg_sbr
subroutine, public read_wetdry
real(sp), dimension(:,:), allocatable, target km1
subroutine, public read_turb
real(sp), dimension(:,:), allocatable, target s0
real(sp), dimension(:,:), allocatable, target zz
real(sp), dimension(:), allocatable, target et1
real(sp), dimension(:,:), allocatable, target kq
real(sp), dimension(:,:), allocatable, target rmean
real(sp), dimension(:), allocatable, target dt
real(sp), dimension(:,:), allocatable, target rmean1
integer, parameter dbg_log
integer, dimension(:), allocatable iswetn