- Timestamp:
- 2021-12-03T20:32:50+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/dev_r14318_RK3_stage1
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/dev_r14318_RK3_stage1
- Property svn:externals
-
old new 9 9 10 10 # SETTE 11 ^/utils/CI/sette@14244 sette 11 ^/utils/CI/sette@HEAD sette 12
-
- Property svn:externals
-
NEMO/branches/2021/dev_r14318_RK3_stage1/src/OCE/C1D/dtauvd.F90
r13497 r15574 26 26 PUBLIC dta_uvd ! called by istate.F90 and dyndmp.90 27 27 28 LOGICAL , PUBLIC :: ln_uvd_init ! Flag to initialise with U & V current data29 LOGICAL , PUBLIC :: ln_uvd_dyndmp ! Flag for Newtonian damping toward U & V current data28 LOGICAL , PUBLIC :: ln_uvd_init = .FALSE. ! Flag to initialise with U & V current data 29 LOGICAL , PUBLIC :: ln_uvd_dyndmp = .FALSE. ! Flag for Newtonian damping toward U & V current data 30 30 31 31 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_uvd ! structure for input U & V current (file information and data) … … 33 33 !! * Substitutions 34 34 # include "do_loop_substitute.h90" 35 # include "domzgr_substitute.h90" 35 36 !!---------------------------------------------------------------------- 36 37 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 93 94 94 95 ! 95 IF( ln_uvd_init .OR. ln_uvd_dyndmp) THEN96 IF( ln_uvd_init .OR. ln_uvd_dyndmp ) THEN 96 97 ! !== allocate the data arrays ==! 97 98 ALLOCATE( sf_uvd(2), STAT=ierr0 ) … … 117 118 118 119 119 SUBROUTINE dta_uvd( kt, Kmm, pu vd )120 SUBROUTINE dta_uvd( kt, Kmm, pud, pvd ) 120 121 !!---------------------------------------------------------------------- 121 122 !! *** ROUTINE dta_uvd *** … … 134 135 INTEGER , INTENT(in ) :: kt ! ocean time-step 135 136 INTEGER , INTENT(in ) :: Kmm ! time level index 136 REAL(wp), DIMENSION(jpi,jpj,jpk,2), INTENT( out) :: puvd ! U & V current data 137 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pud ! U & V current data 138 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT( out) :: pvd ! U & V current data 137 139 ! 138 140 INTEGER :: ji, jj, jk, jl, jkk ! dummy loop indicies … … 146 148 CALL fld_read( kt, 1, sf_uvd ) !== read U & V current data at time step kt ==! 147 149 ! 148 pu vd(:,:,:,1) = sf_uvd(1)%fnow(:,:,:) ! NO mask149 p uvd(:,:,:,2) = sf_uvd(2)%fnow(:,:,:)150 pud(:,:,:) = sf_uvd(1)%fnow(:,:,:) ! NO mask 151 pvd(:,:,:) = sf_uvd(2)%fnow(:,:,:) 150 152 ! 151 153 IF( ln_sco ) THEN !== s- or mixed s-zps-coordinate ==! … … 162 164 zl = gdept(ji,jj,jk,Kmm) 163 165 IF ( zl < gdept_1d(1 ) ) THEN ! extrapolate above the first level of data 164 zup(jk) = pu vd(ji,jj,1,1)165 zvp(jk) = p uvd(ji,jj,1 ,2)166 zup(jk) = pud(ji,jj,1) 167 zvp(jk) = pvd(ji,jj,1) 166 168 ELSEIF( zl > gdept_1d(jpk) ) THEN ! extrapolate below the last level of data 167 zup(jk) = pu vd(ji,jj,jpkm1,1)168 zvp(jk) = p uvd(ji,jj,jpkm1,2)169 zup(jk) = pud(ji,jj,jpkm1) 170 zvp(jk) = pvd(ji,jj,jpkm1) 169 171 ELSE ! inbetween : vertical interpolation between jkk & jkk+1 170 DO jkk = 1, jpkm1 ! when gdept(jkk) < zl < gdept(jkk+1)172 DO jkk = 1, jpkm1 ! when dept(jkk) < zl < dept(jkk+1) 171 173 IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 172 174 zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 173 zup(jk) = pu vd(ji,jj,jkk,1) + ( puvd(ji,jj,jkk+1,1 ) - puvd(ji,jj,jkk,1) ) * zi174 zvp(jk) = p uvd(ji,jj,jkk,2) + ( puvd(ji,jj,jkk+1,2 ) - puvd(ji,jj,jkk,2) ) * zi175 zup(jk) = pud(ji,jj,jkk) + ( pud(ji,jj,jkk+1) - pud(ji,jj,jkk) ) * zi 176 zvp(jk) = pvd(ji,jj,jkk) + ( pvd(ji,jj,jkk+1) - pvd(ji,jj,jkk) ) * zi 175 177 ENDIF 176 178 END DO … … 178 180 END DO 179 181 DO jk = 1, jpkm1 ! apply mask 180 pu vd(ji,jj,jk,1) = zup(jk) * umask(ji,jj,jk)181 p uvd(ji,jj,jk,2) = zvp(jk) * vmask(ji,jj,jk)182 pud(ji,jj,jk) = zup(jk) * umask(ji,jj,jk) 183 pvd(ji,jj,jk) = zvp(jk) * vmask(ji,jj,jk) 182 184 END DO 183 pu vd(ji,jj,jpk,1) = 0._wp184 p uvd(ji,jj,jpk,2) = 0._wp185 pud(ji,jj,jpk) = 0._wp 186 pvd(ji,jj,jpk) = 0._wp 185 187 END_2D 186 188 ! … … 189 191 ELSE !== z- or zps- coordinate ==! 190 192 ! 191 pu vd(:,:,:,1) = puvd(:,:,:,1) * umask(:,:,:) ! apply mask192 p uvd(:,:,:,2) = puvd(:,:,:,2) * vmask(:,:,:)193 pud(:,:,:) = pud(:,:,:) * umask(:,:,:) ! apply mask 194 pvd(:,:,:) = pvd(:,:,:) * vmask(:,:,:) 193 195 ! 194 196 IF( ln_zps ) THEN ! zps-coordinate (partial steps) interpolation at the last ocean level … … 197 199 IF( ik > 1 ) THEN 198 200 zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 199 pu vd(ji,jj,ik,1) = (1.-zl) * puvd(ji,jj,ik,1) + zl * puvd(ji,jj,ik-1,1)200 p uvd(ji,jj,ik,2) = (1.-zl) * puvd(ji,jj,ik,2) + zl * puvd(ji,jj,ik-1,2)201 pud(ji,jj,ik) = (1.-zl) * pud(ji,jj,ik) + zl * pud(ji,jj,ik-1) 202 pvd(ji,jj,ik) = (1.-zl) * pvd(ji,jj,ik) + zl * pvd(ji,jj,ik-1) 201 203 ENDIF 202 204 END_2D
Note: See TracChangeset
for help on using the changeset viewer.