- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/DOM/dtatsd.F90
r12178 r12928 35 35 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tsd ! structure of input SST (file informations, fields read) 36 36 37 !! * Substitutions 38 # include "do_loop_substitute.h90" 37 39 !!---------------------------------------------------------------------- 38 40 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 65 67 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 66 68 ! 67 REWIND( numnam_ref ) ! Namelist namtsd in reference namelist :68 69 READ ( numnam_ref, namtsd, IOSTAT = ios, ERR = 901) 69 70 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtsd in reference namelist' ) 70 REWIND( numnam_cfg ) ! Namelist namtsd in configuration namelist : Parameters of the run71 71 READ ( numnam_cfg, namtsd, IOSTAT = ios, ERR = 902 ) 72 72 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namtsd in configuration namelist' ) … … 186 186 ENDIF 187 187 ! 188 DO jj = 1, jpj ! vertical interpolation of T & S 189 DO ji = 1, jpi 190 DO jk = 1, jpk ! determines the intepolated T-S profiles at each (i,j) points 191 zl = gdept_0(ji,jj,jk) 192 IF( zl < gdept_1d(1 ) ) THEN ! above the first level of data 193 ztp(jk) = ptsd(ji,jj,1 ,jp_tem) 194 zsp(jk) = ptsd(ji,jj,1 ,jp_sal) 195 ELSEIF( zl > gdept_1d(jpk) ) THEN ! below the last level of data 196 ztp(jk) = ptsd(ji,jj,jpkm1,jp_tem) 197 zsp(jk) = ptsd(ji,jj,jpkm1,jp_sal) 198 ELSE ! inbetween : vertical interpolation between jkk & jkk+1 199 DO jkk = 1, jpkm1 ! when gdept(jkk) < zl < gdept(jkk+1) 200 IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 201 zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 202 ztp(jk) = ptsd(ji,jj,jkk,jp_tem) + ( ptsd(ji,jj,jkk+1,jp_tem) - ptsd(ji,jj,jkk,jp_tem) ) * zi 203 zsp(jk) = ptsd(ji,jj,jkk,jp_sal) + ( ptsd(ji,jj,jkk+1,jp_sal) - ptsd(ji,jj,jkk,jp_sal) ) * zi 204 ENDIF 205 END DO 206 ENDIF 207 END DO 208 DO jk = 1, jpkm1 209 ptsd(ji,jj,jk,jp_tem) = ztp(jk) * tmask(ji,jj,jk) ! mask required for mixed zps-s-coord 210 ptsd(ji,jj,jk,jp_sal) = zsp(jk) * tmask(ji,jj,jk) 211 END DO 212 ptsd(ji,jj,jpk,jp_tem) = 0._wp 213 ptsd(ji,jj,jpk,jp_sal) = 0._wp 188 DO_2D_11_11 189 DO jk = 1, jpk ! determines the intepolated T-S profiles at each (i,j) points 190 zl = gdept_0(ji,jj,jk) 191 IF( zl < gdept_1d(1 ) ) THEN ! above the first level of data 192 ztp(jk) = ptsd(ji,jj,1 ,jp_tem) 193 zsp(jk) = ptsd(ji,jj,1 ,jp_sal) 194 ELSEIF( zl > gdept_1d(jpk) ) THEN ! below the last level of data 195 ztp(jk) = ptsd(ji,jj,jpkm1,jp_tem) 196 zsp(jk) = ptsd(ji,jj,jpkm1,jp_sal) 197 ELSE ! inbetween : vertical interpolation between jkk & jkk+1 198 DO jkk = 1, jpkm1 ! when gdept(jkk) < zl < gdept(jkk+1) 199 IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 200 zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 201 ztp(jk) = ptsd(ji,jj,jkk,jp_tem) + ( ptsd(ji,jj,jkk+1,jp_tem) - ptsd(ji,jj,jkk,jp_tem) ) * zi 202 zsp(jk) = ptsd(ji,jj,jkk,jp_sal) + ( ptsd(ji,jj,jkk+1,jp_sal) - ptsd(ji,jj,jkk,jp_sal) ) * zi 203 ENDIF 204 END DO 205 ENDIF 214 206 END DO 215 END DO 207 DO jk = 1, jpkm1 208 ptsd(ji,jj,jk,jp_tem) = ztp(jk) * tmask(ji,jj,jk) ! mask required for mixed zps-s-coord 209 ptsd(ji,jj,jk,jp_sal) = zsp(jk) * tmask(ji,jj,jk) 210 END DO 211 ptsd(ji,jj,jpk,jp_tem) = 0._wp 212 ptsd(ji,jj,jpk,jp_sal) = 0._wp 213 END_2D 216 214 ! 217 215 ELSE !== z- or zps- coordinate ==! … … 221 219 ! 222 220 IF( ln_zps ) THEN ! zps-coordinate (partial steps) interpolation at the last ocean level 223 DO jj = 1, jpj 224 DO ji = 1, jpi 225 ik = mbkt(ji,jj) 226 IF( ik > 1 ) THEN 227 zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 228 ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik-1,jp_tem) 229 ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik-1,jp_sal) 230 ENDIF 231 ik = mikt(ji,jj) 232 IF( ik > 1 ) THEN 233 zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 234 ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik+1,jp_tem) 235 ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik+1,jp_sal) 236 END IF 237 END DO 238 END DO 221 DO_2D_11_11 222 ik = mbkt(ji,jj) 223 IF( ik > 1 ) THEN 224 zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 225 ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik-1,jp_tem) 226 ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik-1,jp_sal) 227 ENDIF 228 ik = mikt(ji,jj) 229 IF( ik > 1 ) THEN 230 zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 231 ptsd(ji,jj,ik,jp_tem) = (1.-zl) * ptsd(ji,jj,ik,jp_tem) + zl * ptsd(ji,jj,ik+1,jp_tem) 232 ptsd(ji,jj,ik,jp_sal) = (1.-zl) * ptsd(ji,jj,ik,jp_sal) + zl * ptsd(ji,jj,ik+1,jp_sal) 233 END IF 234 END_2D 239 235 ENDIF 240 236 !
Note: See TracChangeset
for help on using the changeset viewer.