SUBROUTINE tl_get_data (ng) ! !git $Id$ !svn $Id: tl_get_data.F 1151 2023-02-09 03:08:53Z arango $ !================================================== Hernan G. Arango === ! Copyright (c) 2002-2023 The ROMS/TOMS Group ! ! Licensed under a MIT/X style license ! ! See License_ROMS.md ! !======================================================================= ! ! ! This routine reads in forcing, climatology and other data from ! ! NetCDF files. If there is more than one time-record, data is ! ! loaded into global two-time record arrays. The interpolation ! ! is carried elsewhere. ! ! ! ! Currently, this routine is only executed in serial mode by the ! ! main thread. ! ! ! !======================================================================= ! USE mod_param USE mod_boundary USE mod_coupling USE mod_clima USE mod_forces USE mod_grid USE mod_iounits USE mod_mixing USE mod_ncparam USE mod_ocean USE mod_scalars USE mod_sources USE mod_stepping ! USE strings_mod, ONLY : FoundError ! implicit none ! ! Imported variable declarations. ! integer, intent(in) :: ng ! ! Local variable declarations. ! logical, save :: recordless = .FALSE. logical, dimension(3) :: update = & & (/ .FALSE., .FALSE., .FALSE. /) ! integer :: ILB, IUB, JLB, JUB integer :: LBi, UBi, LBj, UBj integer :: i, ic, my_tile ! real(r8) :: scale ! character (len=*), parameter :: MyFile = & & "ROMS/Tangent/tl_get_data.F" ! ! Lower and upper bounds for nontiled (global values) boundary arrays. ! my_tile=-1 ! for global values ILB=BOUNDS(ng)%LBi(my_tile) IUB=BOUNDS(ng)%UBi(my_tile) JLB=BOUNDS(ng)%LBj(my_tile) JUB=BOUNDS(ng)%UBj(my_tile) ! ! Lower and upper bounds for tiled arrays. ! LBi=LBOUND(GRID(ng)%h,DIM=1) UBi=UBOUND(GRID(ng)%h,DIM=1) LBj=LBOUND(GRID(ng)%h,DIM=2) UBj=UBOUND(GRID(ng)%h,DIM=2) ! !----------------------------------------------------------------------- ! Turn on input data time wall clock. !----------------------------------------------------------------------- ! CALL wclock_on (ng, iTLM, 3, 89, MyFile) ! !======================================================================= ! Read in forcing data from FORCING NetCDF file. !======================================================================= ! !----------------------------------------------------------------------- ! Point Sources/Sinks time dependent data. !----------------------------------------------------------------------- ! ! Point Source/Sink vertically integrated mass transport. ! IF (LuvSrc(ng).or.LwSrc(ng)) THEN CALL get_ngfld (ng, iTLM, idRtra, SSF(ng)%ncid, & & 1, SSF(ng), recordless, update(1), & & 1, Nsrc(ng), 1, 2, 1, Nsrc(ng), 1, & & SOURCES(ng) % QbarG) IF (FoundError(exit_flag, NoError, 112, MyFile)) RETURN END IF ! ! Tracer Sources/Sinks. ! DO i=1,NT(ng) IF (LtracerSrc(i,ng)) THEN CALL get_ngfld (ng, iTLM, idRtrc(i), SSF(ng)%ncid, & & 1, SSF(ng), recordless, update(1), & & 1, Nsrc(ng), N(ng), 2, 1, Nsrc(ng), N(ng), & & SOURCES(ng) % TsrcG(:,:,:,i)) IF (FoundError(exit_flag, NoError, 128, MyFile)) RETURN END IF END DO ! !----------------------------------------------------------------------- ! Surface wind stress components from NLM forward file. !----------------------------------------------------------------------- ! CALL get_2dfld (ng, iTLM, idUsms, BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % umask, & & FORCES(ng) % sustrG) IF (FoundError(exit_flag, NoError, 217, MyFile)) RETURN ! CALL get_2dfld (ng, iTLM, idVsms, BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % vmask, & & FORCES(ng) % svstrG) IF (FoundError(exit_flag, NoError, 229, MyFile)) RETURN ! !----------------------------------------------------------------------- ! Surface air pressure from NLM forward file. !----------------------------------------------------------------------- ! CALL get_2dfld (ng, iTLM, idPair, BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & FORCES(ng) % PairG) IF (FoundError(exit_flag, NoError, 269, MyFile)) RETURN ! !----------------------------------------------------------------------- ! Surface solar shortwave radiation from NLM forward file. !----------------------------------------------------------------------- ! CALL get_2dfld (ng, iTLM, idSrad, BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & FORCES(ng) % srflxG) IF (FoundError(exit_flag, NoError, 437, MyFile)) RETURN ! !----------------------------------------------------------------------- ! Surface net heat flux from NLM forward file. !----------------------------------------------------------------------- ! CALL get_2dfld (ng, iTLM, idTsur(itemp), BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & FORCES(ng) % stfluxG(:,:,:,itemp)) IF (FoundError(exit_flag, NoError, 602, MyFile)) RETURN ! !----------------------------------------------------------------------- ! Surface net freshwater flux (E-P) from NLM forward file. !----------------------------------------------------------------------- ! CALL get_2dfld (ng, iTLM, idEmPf, BLK(ng)%ncid, & & 1, BLK(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & FORCES(ng) % stfluxG(:,:,:,isalt)) IF (FoundError(exit_flag, NoError, 704, MyFile)) RETURN ! !======================================================================= ! Read in open boundary conditions from BOUNDARY NetCDF file. !======================================================================= ! IF (LprocessOBC(ng)) THEN IF (tl_LBC(iwest,isFsur,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idZbry(iwest), & & BRYncid(idZbry(iwest),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 0, Mm(ng)+1, 1, & & BOUNDARY(ng) % zetaG_west) IF (FoundError(exit_flag, NoError, 809, MyFile)) RETURN END IF ! IF (tl_LBC(ieast,isFsur,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idZbry(ieast), & & BRYncid(idZbry(ieast),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 0, Mm(ng)+1, 1, & & BOUNDARY(ng) % zetaG_east) IF (FoundError(exit_flag, NoError, 822, MyFile)) RETURN END IF ! IF (tl_LBC(isouth,isFsur,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idZbry(isouth), & & BRYncid(idZbry(isouth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 0, Lm(ng)+1, 1, & & BOUNDARY(ng) % zetaG_south) IF (FoundError(exit_flag, NoError, 835, MyFile)) RETURN END IF ! IF (tl_LBC(inorth,isFsur,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idZbry(inorth), & & BRYncid(idZbry(inorth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 0, Lm(ng)+1, 1, & & BOUNDARY(ng) % zetaG_north) IF (FoundError(exit_flag, NoError, 848, MyFile)) RETURN END IF END IF ! IF (LprocessOBC(ng)) THEN IF (tl_LBC(iwest,isUbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU2bc(iwest), & & BRYncid(idU2bc(iwest),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 0, Mm(ng)+1, 1, & & BOUNDARY(ng) % ubarG_west) IF (FoundError(exit_flag, NoError, 866, MyFile)) RETURN END IF ! IF (tl_LBC(iwest,isVbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV2bc(iwest), & & BRYncid(idV2bc(iwest),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 1, Mm(ng)+1, 1, & & BOUNDARY(ng) % vbarG_west) IF (FoundError(exit_flag, NoError, 879, MyFile)) RETURN END IF ! IF (tl_LBC(ieast,isUbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU2bc(ieast), & & BRYncid(idU2bc(ieast),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 0, Mm(ng)+1, 1, & & BOUNDARY(ng) % ubarG_east) IF (FoundError(exit_flag, NoError, 892, MyFile)) RETURN END IF ! IF (tl_LBC(ieast,isVbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV2bc(ieast), & & BRYncid(idV2bc(ieast),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, 1, 2, 1, Mm(ng)+1, 1, & & BOUNDARY(ng) % vbarG_east) IF (FoundError(exit_flag, NoError, 905, MyFile)) RETURN END IF ! IF (tl_LBC(isouth,isUbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU2bc(isouth), & & BRYncid(idU2bc(isouth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 1, Lm(ng)+1, 1, & & BOUNDARY(ng) % ubarG_south) IF (FoundError(exit_flag, NoError, 918, MyFile)) RETURN END IF ! IF (tl_LBC(isouth,isVbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV2bc(isouth), & & BRYncid(idV2bc(isouth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 0, Lm(ng)+1, 1, & & BOUNDARY(ng) % vbarG_south) IF (FoundError(exit_flag, NoError, 931, MyFile)) RETURN END IF ! IF (tl_LBC(inorth,isUbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU2bc(inorth), & & BRYncid(idU2bc(inorth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 1, Lm(ng)+1, 1, & & BOUNDARY(ng) % ubarG_north) IF (FoundError(exit_flag, NoError, 944, MyFile)) RETURN END IF ! IF (tl_LBC(inorth,isVbar,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV2bc(inorth), & & BRYncid(idV2bc(inorth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, 1, 2, 0, Lm(ng)+1, 1, & & BOUNDARY(ng) % vbarG_north) IF (FoundError(exit_flag, NoError, 957, MyFile)) RETURN END IF END IF ! IF (LprocessOBC(ng)) THEN IF (tl_LBC(iwest,isUvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU3bc(iwest), & & BRYncid(idU3bc(iwest),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 0, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % uG_west) IF (FoundError(exit_flag, NoError, 976, MyFile)) RETURN END IF ! IF (tl_LBC(iwest,isVvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV3bc(iwest), & & BRYncid(idV3bc(iwest),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 1, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % vG_west) IF (FoundError(exit_flag, NoError, 989, MyFile)) RETURN END IF ! IF (tl_LBC(ieast,isUvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU3bc(ieast), & & BRYncid(idU3bc(ieast),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 0, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % uG_east) IF (FoundError(exit_flag, NoError, 1002, MyFile)) RETURN END IF ! IF (tl_LBC(ieast,isVvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV3bc(ieast), & & BRYncid(idV3bc(ieast),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 1, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % vG_east) IF (FoundError(exit_flag, NoError, 1015, MyFile)) RETURN END IF ! IF (tl_LBC(isouth,isUvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU3bc(isouth), & & BRYncid(idU3bc(isouth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 1, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % uG_south) IF (FoundError(exit_flag, NoError, 1028, MyFile)) RETURN END IF ! IF (tl_LBC(isouth,isVvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV3bc(isouth), & & BRYncid(idV3bc(isouth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 0, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % vG_south) IF (FoundError(exit_flag, NoError, 1041, MyFile)) RETURN END IF ! IF (tl_LBC(inorth,isUvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idU3bc(inorth), & & BRYncid(idU3bc(inorth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 1, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % uG_north) IF (FoundError(exit_flag, NoError, 1054, MyFile)) RETURN END IF ! IF (tl_LBC(inorth,isVvel,ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idV3bc(inorth), & & BRYncid(idV3bc(inorth),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 0, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % vG_north) IF (FoundError(exit_flag, NoError, 1067, MyFile)) RETURN END IF END IF ! IF (LprocessOBC(ng)) THEN DO i=1,NT(ng) IF (tl_LBC(iwest,isTvar(i),ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idTbry(iwest,i), & & BRYncid(idTbry(iwest,i),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 0, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % tG_west(:,:,:,i)) IF (FoundError(exit_flag, NoError, 1086, MyFile)) RETURN END IF END DO ! DO i=1,NT(ng) IF (tl_LBC(ieast,isTvar(i),ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idTbry(ieast,i), & & BRYncid(idTbry(ieast,i),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & JLB, JUB, N(ng), 2, 0, Mm(ng)+1, N(ng), & & BOUNDARY(ng) % tG_east(:,:,:,i)) IF (FoundError(exit_flag, NoError, 1101, MyFile)) RETURN END IF END DO ! DO i=1,NT(ng) IF (tl_LBC(isouth,isTvar(i),ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idTbry(isouth,i), & & BRYncid(idTbry(isouth,i),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 0, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % tG_south(:,:,:,i)) IF (FoundError(exit_flag, NoError, 1116, MyFile)) RETURN END IF END DO ! DO i=1,NT(ng) IF (tl_LBC(inorth,isTvar(i),ng)%acquire) THEN CALL get_ngfld (ng, iTLM, idTbry(inorth,i), & & BRYncid(idTbry(inorth,i),ng), & & nBCfiles(ng), BRY(1,ng), & & recordless, update(1), & & ILB, IUB, N(ng), 2, 0, Lm(ng)+1, N(ng), & & BOUNDARY(ng) % tG_north(:,:,:,i)) IF (FoundError(exit_flag, NoError, 1131, MyFile)) RETURN END IF END DO END IF ! !======================================================================= ! Read in data from Climatology NetCDF file. !======================================================================= ! ! Free-surface. ! IF (LsshCLM(ng)) THEN CALL get_2dfld (ng, iTLM, idSSHc, CLMncid(idSSHc,ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & CLIMA(ng) % sshG) IF (FoundError(exit_flag, NoError, 1157, MyFile)) RETURN END IF ! ! 2D momentum. ! IF (Lm2CLM(ng)) THEN CALL get_2dfld (ng, iTLM, idUbcl, CLMncid(idUbcl,ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % umask, & & CLIMA(ng) % ubarclmG) IF (FoundError(exit_flag, NoError, 1175, MyFile)) RETURN ! CALL get_2dfld (ng, iTLM, idVbcl, CLMncid(idVbcl,ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % vmask, & & CLIMA(ng) % vbarclmG) IF (FoundError(exit_flag, NoError, 1187, MyFile)) RETURN END IF ! ! 3D momentum. ! IF (Lm3CLM(ng)) THEN CALL get_3dfld (ng, iTLM, idUclm, CLMncid(idUclm,ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % umask, & & CLIMA(ng) % uclmG) IF (FoundError(exit_flag, NoError, 1206, MyFile)) RETURN ! CALL get_3dfld (ng, iTLM, idVclm, CLMncid(idVclm,ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % vmask, & & CLIMA(ng) % vclmG) IF (FoundError(exit_flag, NoError, 1218, MyFile)) RETURN END IF ! ! Tracers. ! ic=0 DO i=1,NT(ng) IF (LtracerCLM(i,ng)) THEN ic=ic+1 CALL get_3dfld (ng, iTLM, idTclm(i), & & CLMncid(idTclm(i),ng), & & nCLMfiles(ng), CLM(1,ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % rmask, & & CLIMA(ng) % tclmG(:,:,:,:,ic)) IF (FoundError(exit_flag, NoError, 1240, MyFile)) RETURN END IF END DO ! !----------------------------------------------------------------------- ! Read in forward state solution. !----------------------------------------------------------------------- ! ! Read in free-surface. ! CALL get_2dfld (ng, iTLM, idFsur, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & OCEAN(ng) % zetaG) IF (FoundError(exit_flag, NoError, 1264, MyFile)) RETURN ! ! Read 2D momentum. ! CALL get_2dfld (ng, iTLM, idUbar, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % umask, & & OCEAN(ng) % ubarG) IF (FoundError(exit_flag, NoError, 1278, MyFile)) RETURN CALL get_2dfld (ng, iTLM, idVbar, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % vmask, & & OCEAN(ng) % vbarG) IF (FoundError(exit_flag, NoError, 1290, MyFile)) RETURN ! ! Read in variables associated with time-averaged 2D momentum terms. ! CALL get_2dfld (ng, iTLM, idUfx1, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % umask, & & COUPLING(ng) % DU_avg1G) IF (FoundError(exit_flag, NoError, 1347, MyFile)) RETURN ! CALL get_2dfld (ng, iTLM, idUfx2, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % umask, & & COUPLING(ng) % DU_avg2G) IF (FoundError(exit_flag, NoError, 1359, MyFile)) RETURN ! CALL get_2dfld (ng, iTLM, idVfx1, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % vmask, & & COUPLING(ng) % DV_avg1G) IF (FoundError(exit_flag, NoError, 1371, MyFile)) RETURN ! CALL get_2dfld (ng, iTLM, idVfx2, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % vmask, & & COUPLING(ng) % DV_avg2G) IF (FoundError(exit_flag, NoError, 1383, MyFile)) RETURN ! ! Read in 3D momentum. ! CALL get_3dfld (ng, iTLM, idUvel, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % umask, & & OCEAN(ng) % uG) IF (FoundError(exit_flag, NoError, 1397, MyFile)) RETURN ! CALL get_3dfld (ng, iRPM, idVvel, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % vmask, & & OCEAN(ng) % vG) IF (FoundError(exit_flag, NoError, 1409, MyFile)) RETURN ! ! Read in 3D tracers. ! DO i=1,NT(ng) CALL get_3dfld (ng, iTLM, idTvar(i), FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % rmask, & & OCEAN(ng) % tG(:,:,:,:,i)) IF (FoundError(exit_flag, NoError, 1477, MyFile)) RETURN END DO ! ! Read in vertical mixing variables. ! DO i=1,NAT scale=Fscale(idDiff(i),ng) ! save and rescale Fscale(idDiff(i),ng)=tl_Akt_fac(i,ng) CALL get_3dfld (ng, iTLM, idDiff(i), FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 0, N(ng), 2, 1, & & GRID(ng) % rmask, & & MIXING(ng) % AktG(:,:,:,:,i)) Fscale(idDiff(i),ng)=scale IF (FoundError(exit_flag, NoError, 1498, MyFile)) RETURN END DO ! scale=Fscale(idVvis,ng) ! save and rescale Fscale(idVvis,ng)=tl_Akv_fac(ng) CALL get_3dfld (ng, iTLM, idVvis, FWD(ng)%ncid, & & 1, FWD(ng), update(1), & & LBi, UBi, LBj, UBj, 0, N(ng), 2, 1, & & GRID(ng) % rmask, & & MIXING(ng) % AkvG) Fscale(idVvis,ng)=scale IF (FoundError(exit_flag, NoError, 1514, MyFile)) RETURN ! !----------------------------------------------------------------------- ! Read frequent impulse forcing for weak constraint. !----------------------------------------------------------------------- ! IF (FrequentImpulse(ng)) THEN CALL get_2dfld (ng, iTLM, idZtlf, TLF(ng)%ncid, & & 1, TLF(ng), update(1), & & LBi, UBi, LBj, UBj, 2, 1, & & GRID(ng) % rmask, & & OCEAN(ng) % f_zetaG) IF (FoundError(exit_flag, NoError, 1664, MyFile)) RETURN ! ! Read in 3D momentum forcing. ! CALL get_3dfld (ng, iTLM, idUtlf, TLF(ng)%ncid, & & 1, TLF(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % umask, & & OCEAN(ng) % f_uG) IF (FoundError(exit_flag, NoError, 1709, MyFile)) RETURN ! CALL get_3dfld (ng, iTLM, idVtlf, TLF(ng)%ncid, & & 1, TLF(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % vmask, & & OCEAN(ng) % f_vG) IF (FoundError(exit_flag, NoError, 1721, MyFile)) RETURN ! ! Read in 3D tracers forcing. ! DO i=1,NT(ng) CALL get_3dfld (ng, iTLM, idTtlf(i), TLF(ng)%ncid, & & 1, TLF(ng), update(1), & & LBi, UBi, LBj, UBj, 1, N(ng), 2, 1, & & GRID(ng) % rmask, & & OCEAN(ng) % f_tG(:,:,:,:,i)) IF (FoundError(exit_flag, NoError, 1736, MyFile)) RETURN END DO END IF ! !----------------------------------------------------------------------- ! Turn off input data time wall clock. !----------------------------------------------------------------------- ! CALL wclock_off (ng, iTLM, 3, 1749, MyFile) ! RETURN END SUBROUTINE tl_get_data