Changeset 15737
- Timestamp:
- 2022-03-04T15:23:00+01:00 (2 years ago)
- Location:
- NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdy_oce.F90
r14075 r15737 43 43 INTEGER , DIMENSION(2) :: nread 44 44 LOGICAL :: lneed_ssh 45 !--- davbyr 46 LOGICAL :: lforced_ssh 47 !--- END davbyr 45 48 LOGICAL :: lneed_dyn2d 46 49 LOGICAL :: lneed_dyn3d … … 117 120 REAL(wp), DIMENSION(jp_bdy) :: rice_hpnd !: pond thick. of incoming sea ice 118 121 REAL(wp), DIMENSION(jp_bdy) :: rice_hlid !: pond lid thick. of incoming sea ice 122 123 ! davbyr 124 LOGICAL, DIMENSION(jp_bdy) :: ln_ssh_bdy !: =T USE SSH BDY - name list switch 125 REAL(wp), DIMENSION(jp_bdy) :: rn_ssh_shift !: =F SHIFT SSH AT A BORDER BY rn_ssh_shift m_ 126 ! END davbyr 119 127 ! 120 128 !!---------------------------------------------------------------------- -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdydta.F90
r14075 r15737 362 362 ENDIF 363 363 ENDIF 364 365 ! davbyr - add a shift to the boundary + free elevation Enda, JT from NEMO RAN 3.6 366 DO jbdy = 1, nb_bdy 367 IF( dta_bdy(jbdy)%lneed_ssh ) THEN 368 igrd = 1 369 DO ib = 1, idx_bdy(jbdy)%nblenrim(igrd) ! ssh is used only on the rim 370 ii = idx_bdy(jbdy)%nbi(ib,igrd) 371 ij = idx_bdy(jbdy)%nbj(ib,igrd) 372 dta_bdy(jbdy)%ssh(ib) = dta_bdy(jbdy)%ssh(ib) + rn_ssh_shift(jbdy) * tmask(ii,ij,1) 373 IF( .NOT. dta_bdy(jbdy)%lforced_ssh ) dta_bdy(jbdy)%ssh(ib) = sshn(ii,ij) * tmask(ii,ij,1) 374 END DO 375 END IF 376 END DO 377 !--- END davbyr 378 364 379 ! 365 380 IF( ln_timing ) CALL timing_stop('bdy_dta') -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdyini.F90
r14075 r15737 69 69 & ln_vol, nn_volctl, nn_rimwidth 70 70 ! 71 ! davbyr Propagating ENDA's stuff from 3.6 72 NAMELIST/nambdy_ssh/ ln_ssh_bdy, rn_ssh_shift 73 INTEGER :: ib_bdy 74 ! END davbyr 71 75 INTEGER :: ios ! Local integer output status for namelist read 72 76 !!---------------------------------------------------------------------- … … 97 101 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nambdy in configuration namelist' ) 98 102 IF(lwm) WRITE ( numond, nambdy ) 103 104 ! davbyr Propagating ENDA's stuff from 3.6 105 REWIND( numnam_ref ) ! Namelist nambdy in reference namelist :Unstructured open boundaries 106 READ ( numnam_ref, nambdy_ssh, IOSTAT = ios, ERR = 905) 107 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_ssh in reference namelist' ) 108 109 REWIND( numnam_cfg ) ! Namelist nambdy in configuration namelist :Unstructured open boundaries 110 READ ( numnam_cfg, nambdy_ssh, IOSTAT = ios, ERR = 906) 111 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nambdy_ssh in configuration namelist' ) 112 IF(lwm) WRITE ( numond, nambdy_ssh ) 113 114 IF(lwp) WRITE(numout,*) 115 IF(lwp) WRITE(numout,*) 'nambdy_ssh : use of ssh boundaries' 116 IF(lwp) WRITE(numout,*) '~~~~~~~~' 117 IF(lwp) WRITE(numout,*) ' ln_ssh_bdy: ' 118 DO ib_bdy = 1,nb_bdy 119 IF(lwp) WRITE(numout,*) ' ln_ssh_bdy (',ib_bdy,'): ',ln_ssh_bdy(ib_bdy) 120 IF(lwp) WRITE(numout,*) ' rn_ssh_shift: ' 121 ENDDO 122 DO ib_bdy = 1,nb_bdy 123 IF(lwp) WRITE(numout,*) ' rn_ssh_shift(',ib_bdy,'): ',rn_ssh_shift(ib_bdy) 124 ENDDO 125 IF(lwp) WRITE(numout,*) '~~~~~~~~' 126 IF(lwp) WRITE(numout,*) 127 ! END davbyr 99 128 100 129 IF( .NOT. Agrif_Root() ) ln_bdy = .FALSE. ! forced for Agrif children … … 201 230 dta_bdy(ib_bdy)%lneed_ssh = cn_dyn2d(ib_bdy) == 'flather' 202 231 dta_bdy(ib_bdy)%lneed_dyn2d = cn_dyn2d(ib_bdy) /= 'none' 232 233 ! davbyr propagating JT override dta_bdy(ib_bdy)%ll_ssh with namelist value (ln_ssh_bdy) 234 dta_bdy(ib_bdy)%lforced_ssh = ln_ssh_bdy(ib_bdy) 235 IF(lwp) WRITE(numout,*) 'nambdy_ssh : use of ssh boundaries' 236 IF(lwp) WRITE(numout,*) '~~~~~~~~' 237 IF(lwp) WRITE(numout,*) ' ib_bdy: ',ib_bdy 238 IF(lwp) WRITE(numout,*) ' dta_bdy(ib_bdy)%lneed_ssh : ',dta_bdy(ib_bdy)%lneed_ssh 239 IF(lwp) WRITE(numout,*) ' dta_bdy(ib_bdy)%lforced_ssh: ',dta_bdy(ib_bdy)%lforced_ssh 240 IF(lwp) WRITE(numout,*) '~~~~~~~~' 241 ! END davbyr 203 242 204 243 IF( lwp .AND. dta_bdy(ib_bdy)%lneed_dyn2d ) THEN … … 598 637 DO ib = 1, idx_bdy(ib_bdy)%nblen(igrd) 599 638 ir = MAX( 1, idx_bdy(ib_bdy)%nbr(ib,igrd) ) ! both rim 0 and rim 1 have the same weights 600 idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( REAL( ir - 1 ) *0.5 ) ! tanh formulation 639 ! idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( REAL( ir - 1 ) *0.5 ) ! tanh formulation 640 idx_bdy(ib_bdy)%nbw(ib,igrd) = 1.- TANH( FLOAT( ir - 1 ) * 0.5 & 641 & *(10./FLOAT(nn_rimwidth(ib_bdy))) ) ! JGraham:modified for rim=15 601 642 ! idx_bdy(ib_bdy)%nbw(ib,igrd) = (REAL(nn_rimwidth(ib_bdy)+1-ir)/REAL(nn_rimwidth(ib_bdy)))**2. ! quadratic 602 643 ! idx_bdy(ib_bdy)%nbw(ib,igrd) = REAL(nn_rimwidth(ib_bdy)+1-ir)/REAL(nn_rimwidth(ib_bdy)) ! linear -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/BDY/bdytides.F90
r14075 r15737 147 147 ! 148 148 ! SSH fields 149 IF( ASSOCIATED(dta%ssh) ) THEN ! we use bdy ssh on this mpi subdomain150 149 clfile = TRIM(filtide)//'_grid_T.nc' 151 150 CALL iom_open( clfile , inum ) … … 154 153 CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z1', ztr(:,:) ) 155 154 CALL iom_get( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_z2', zti(:,:) ) 155 IF( ASSOCIATED(dta%ssh) ) THEN ! we use bdy ssh on this mpi subdomain 156 156 DO ib = 1, SIZE(dta%ssh) 157 157 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 160 160 td%ssh0(ib,itide,2) = zti(ii,ij) 161 161 END DO 162 ENDIF 162 163 END DO 163 164 CALL iom_close( inum ) 164 END IF165 165 ! 166 166 ! U fields 167 IF( ASSOCIATED(dta%u2d) ) THEN ! we use bdy u2d on this mpi subdomain168 167 clfile = TRIM(filtide)//'_grid_U.nc' 169 168 CALL iom_open( clfile , inum ) … … 172 171 CALL iom_get ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u1', ztr(:,:) ) 173 172 CALL iom_get ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_u2', zti(:,:) ) 173 IF( ASSOCIATED(dta%u2d) ) THEN ! we use bdy u2d on this mpi subdomain 174 174 DO ib = 1, SIZE(dta%u2d) 175 175 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 178 178 td%u0(ib,itide,2) = zti(ii,ij) 179 179 END DO 180 END IF 180 181 END DO 181 CALL iom_close( inum ) 182 END IF 182 CALL iom_close( inum ) 183 183 ! 184 184 ! V fields 185 IF( ASSOCIATED(dta%v2d) ) THEN ! we use bdy v2d on this mpi subdomain186 185 clfile = TRIM(filtide)//'_grid_V.nc' 187 186 CALL iom_open( clfile , inum ) … … 190 189 CALL iom_get ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v1', ztr(:,:) ) 191 190 CALL iom_get ( inum, jpdom_autoglo, TRIM(Wave(ntide(itide))%cname_tide)//'_v2', zti(:,:) ) 191 IF( ASSOCIATED(dta%v2d) ) THEN ! we use bdy v2d on this mpi subdomain 192 192 DO ib = 1, SIZE(dta%v2d) 193 193 ii = idx_bdy(ib_bdy)%nbi(ib,igrd) … … 196 196 td%v0(ib,itide,2) = zti(ii,ij) 197 197 END DO 198 END IF 198 199 END DO 199 CALL iom_close( inum ) 200 END IF 200 CALL iom_close( inum ) 201 201 ! 202 202 DEALLOCATE( ztr, zti ) -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/DOM/dtatsd.F90
r14075 r15737 22 22 USE in_out_manager ! I/O manager 23 23 USE lib_mpp ! MPP library 24 24 USE iom 25 25 26 IMPLICIT NONE 26 27 PRIVATE … … 31 32 ! !!* namtsd namelist : Temperature & Salinity Data * 32 33 LOGICAL , PUBLIC :: ln_tsd_init !: T & S data flag 34 LOGICAL , PUBLIC :: ln_tsd_interp !: vertical interpolation flag 33 35 LOGICAL , PUBLIC :: ln_tsd_dmp !: internal damping toward input data flag 36 INTEGER , PUBLIC :: nn_tsd_zone !: 1=AMM7 July on-shelf, 2=AMM7 July off-shelf, 3=AMM7 Jan on-shelf, 4=AMM7 Jan off-shelf 37 REAL(wp), PUBLIC :: rn_sal_sf, rn_mld_sf, rn_maxdep_sf, rn_c0_sf, rn_c1_sf 34 38 35 39 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tsd ! structure of input SST (file informations, fields read) 40 INTEGER :: jpk_init , inum_dta 41 INTEGER :: id ,linum ! local integers 42 INTEGER :: zdim(4) 43 36 44 37 45 !!---------------------------------------------------------------------- 38 46 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 39 !! $Id $47 !! $Id: dtatsd.F90 10213 2018-10-23 14:40:09Z aumont $ 40 48 !! Software governed by the CeCILL license (see ./LICENSE) 41 49 !!---------------------------------------------------------------------- … … 53 61 LOGICAL, INTENT(in), OPTIONAL :: ld_tradmp ! force the initialization when tradp is used 54 62 ! 55 INTEGER :: ios, ierr0, ierr1, ierr2, ierr3 ! local integers63 INTEGER :: ios, ierr0, ierr1, ierr2, ierr3, ierr4, ierr5 ! local integers 56 64 !! 57 65 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 58 TYPE(FLD_N), DIMENSION( jpts) :: slf_i ! array of namelist informations on the fields to read 59 TYPE(FLD_N) :: sn_tem, sn_sal 66 TYPE(FLD_N), DIMENSION(jpts+2):: slf_i ! array of namelist informations on the fields to read 67 TYPE(FLD_N) :: sn_tem, sn_sal, sn_dep, sn_msk 68 60 69 !! 61 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_dmp, cn_dir, sn_tem, sn_sal 70 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_interp, ln_tsd_dmp, cn_dir, sn_tem, sn_sal, sn_dep, sn_msk, nn_tsd_zone, & 71 rn_sal_sf, rn_mld_sf, rn_maxdep_sf, rn_c0_sf, rn_c1_sf 62 72 !!---------------------------------------------------------------------- 63 73 ! 64 74 ! Initialisation 65 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 75 ierr0 = 0 ; ierr1 = 0 ; ierr2 = 0 ; ierr3 = 0 ; ierr4 = 0 ; ierr5 = 0 66 76 ! 67 77 REWIND( numnam_ref ) ! Namelist namtsd in reference namelist : … … 80 90 WRITE(numout,*) '~~~~~~~~~~~~ ' 81 91 WRITE(numout,*) ' Namelist namtsd' 82 WRITE(numout,*) ' Initialisation of ocean T & S with T &S input data ln_tsd_init = ', ln_tsd_init 83 WRITE(numout,*) ' damping of ocean T & S toward T &S input data ln_tsd_dmp = ', ln_tsd_dmp 92 WRITE(numout,*) ' Initialisation of ocean T & S with T &S input data ln_tsd_init = ', ln_tsd_init 93 WRITE(numout,*) ' Interpolation of initial conditions in the vertical ln_tsd_interp = ', ln_tsd_interp 94 WRITE(numout,*) ' damping of ocean T & S toward T &S input data ln_tsd_dmp = ', ln_tsd_dmp 84 95 WRITE(numout,*) 85 96 IF( .NOT.ln_tsd_init .AND. .NOT.ln_tsd_dmp ) THEN … … 94 105 ln_tsd_init = .FALSE. 95 106 ENDIF 107 IF( ln_tsd_interp .AND. ln_tsd_dmp ) THEN 108 CALL ctl_stop( 'dta_tsd_init: Tracer damping and vertical interpolation not yet configured' ) ; RETURN 109 ENDIF 110 IF( ln_tsd_interp .AND. LEN(TRIM(sn_msk%wname)) > 0 ) THEN 111 CALL ctl_stop( 'dta_tsd_init: Using vertical interpolation and weights files not recommended' ) ; RETURN 112 ENDIF 96 113 ! 97 114 ! ! allocate the arrays (if necessary) 98 115 IF( ln_tsd_init .OR. ln_tsd_dmp ) THEN 99 116 ! 100 ALLOCATE( sf_tsd(jpts), STAT=ierr0 ) 117 IF( ln_tsd_interp ) THEN 118 ALLOCATE( sf_tsd(jpts+2), STAT=ierr0 ) ! to carry the addtional depth information 119 ELSE 120 ALLOCATE( sf_tsd(jpts ), STAT=ierr0 ) 121 ENDIF 101 122 IF( ierr0 > 0 ) THEN 102 123 CALL ctl_stop( 'dta_tsd_init: unable to allocate sf_tsd structure' ) ; RETURN 103 124 ENDIF 104 125 ! 105 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk) , STAT=ierr0 ) 106 IF( sn_tem%ln_tint ) ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk,2) , STAT=ierr1 ) 107 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk) , STAT=ierr2 ) 108 IF( sn_sal%ln_tint ) ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 109 ! 110 IF( ierr0 + ierr1 + ierr2 + ierr3 > 0 ) THEN 126 slf_i(jp_tem) = sn_tem ; slf_i(jp_sal) = sn_sal 127 IF( ln_tsd_interp ) slf_i(jp_dep) = sn_dep ; slf_i(jp_msk) = sn_msk 128 CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd' ) 129 130 IF( ln_tsd_interp ) THEN 131 CALL fld_clopn ( sf_tsd(jp_dep) ) 132 IF(lwp) WRITE(numout,*) 'INFO: ', sf_tsd(jp_dep)%num, sn_dep%clvar 133 id = iom_varid( sf_tsd(jp_dep)%num, sn_dep%clvar, zdim ) 134 jpk_init = zdim(3) 135 IF(lwp) WRITE(numout,*) 'Dimension of veritcal coordinate in ICs: ', jpk_init 136 ! 137 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk_init ) , STAT=ierr0 ) 138 IF( sn_tem%ln_tint ) ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk_init,2) , STAT=ierr1 ) 139 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk_init ) , STAT=ierr2 ) 140 IF( sn_sal%ln_tint ) ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk_init,2) , STAT=ierr3 ) 141 ALLOCATE( sf_tsd(jp_dep)%fnow(jpi,jpj,jpk_init ) , STAT=ierr4 ) 142 ALLOCATE( sf_tsd(jp_msk)%fnow(jpi,jpj,jpk_init ) , STAT=ierr5 ) 143 ELSE 144 ALLOCATE( sf_tsd(jp_tem)%fnow(jpi,jpj,jpk) , STAT=ierr0 ) 145 IF( sn_tem%ln_tint ) ALLOCATE( sf_tsd(jp_tem)%fdta(jpi,jpj,jpk,2) , STAT=ierr1 ) 146 ALLOCATE( sf_tsd(jp_sal)%fnow(jpi,jpj,jpk) , STAT=ierr2 ) 147 IF( sn_sal%ln_tint ) ALLOCATE( sf_tsd(jp_sal)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 148 ENDIF ! ln_tsd_interp 149 150 ! 151 IF( ierr0 + ierr1 + ierr2 + ierr3 + ierr4 + ierr5 > 0 ) THEN 111 152 CALL ctl_stop( 'dta_tsd : unable to allocate T & S data arrays' ) ; RETURN 112 153 ENDIF … … 138 179 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT( out) :: ptsd ! T & S data 139 180 ! 140 INTEGER :: ji, jj, jk, jl, jk k! dummy loop indicies181 INTEGER :: ji, jj, jk, jl, jk_init ! dummy loop indicies 141 182 INTEGER :: ik, il0, il1, ii0, ii1, ij0, ij1 ! local integers 142 183 REAL(wp):: zl, zi ! local scalars 143 REAL(wp), DIMENSION(jpk) :: ztp, zsp ! 1D workspace144 184 !!---------------------------------------------------------------------- 145 185 ! … … 176 216 !!gm end 177 217 ! 178 ptsd(:,:,:,jp_tem) = sf_tsd(jp_tem)%fnow(:,:,:) ! NO mask 179 ptsd(:,:,:,jp_sal) = sf_tsd(jp_sal)%fnow(:,:,:) 180 ! 181 IF( ln_sco ) THEN !== s- or mixed s-zps-coordinate ==! 218 IF( ln_tsd_interp ) THEN 182 219 ! 183 220 IF( kt == nit000 .AND. lwp )THEN 184 221 WRITE(numout,*) 185 WRITE(numout,*) 'dta_tsd: interpolates T & S data onto the s- or mixed s-z-coordinate mesh' 186 ENDIF 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 222 WRITE(numout,*) 'dta_tsd: interpolates T & S data onto current mesh' 223 ENDIF 224 DO jk = 1, jpk ! determines the intepolated T-S profiles at each (i,j) points 225 DO jj= 1, jpj 226 DO ji= 1, jpi 191 227 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 228 IF( zl < sf_tsd(jp_dep)%fnow(ji,jj,1) ) THEN ! above the first level of data 229 ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,1) 230 ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,1) 231 ELSEIF( zl > sf_tsd(jp_dep)%fnow(ji,jj,jpk_init) ) THEN ! below the last level of data 232 ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,jpk_init) 233 ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,jpk_init) 234 ELSE ! inbetween : vertical interpolation between jk_init & jk_init+1 235 DO jk_init = 1, jpk_init-1 ! when gdept(jk_init) < zl < gdept(jk_init+1) 236 IF( sf_tsd(jp_msk)%fnow(ji,jj,jk_init+1) == 0 ) THEN ! if there is no data fill down 237 sf_tsd(jp_tem)%fnow(ji,jj,jk_init+1) = sf_tsd(jp_tem)%fnow(ji,jj,jk_init) 238 sf_tsd(jp_sal)%fnow(ji,jj,jk_init+1) = sf_tsd(jp_sal)%fnow(ji,jj,jk_init) 239 ENDIF 240 IF( (zl-sf_tsd(jp_dep)%fnow(ji,jj,jk_init)) * (zl-sf_tsd(jp_dep)%fnow(ji,jj,jk_init+1)) <= 0._wp ) THEN 241 zi = ( zl - sf_tsd(jp_dep)%fnow(ji,jj,jk_init) ) / & 242 & (sf_tsd(jp_dep)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_dep)%fnow(ji,jj,jk_init)) 243 ptsd(ji,jj,jk,jp_tem) = sf_tsd(jp_tem)%fnow(ji,jj,jk_init) + & 244 & (sf_tsd(jp_tem)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_tem)%fnow(ji,jj,jk_init)) * zi 245 ptsd(ji,jj,jk,jp_sal) = sf_tsd(jp_sal)%fnow(ji,jj,jk_init) + & 246 & (sf_tsd(jp_sal)%fnow(ji,jj,jk_init+1)-sf_tsd(jp_sal)%fnow(ji,jj,jk_init)) * zi 204 247 ENDIF 205 248 END DO 206 249 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 214 END DO 250 ENDDO 251 ENDDO 215 252 END DO 216 ! 217 ELSE !== z- or zps- coordinate ==! 218 ! 219 ptsd(:,:,:,jp_tem) = ptsd(:,:,:,jp_tem) * tmask(:,:,:) ! Mask 220 ptsd(:,:,:,jp_sal) = ptsd(:,:,:,jp_sal) * tmask(:,:,:) 253 ! 254 ptsd(:,:,:,jp_tem) = ptsd(:,:,:,jp_tem) *tmask(:,:,:) 255 ptsd(:,:,:,jp_sal) = ptsd(:,:,:,jp_sal) *tmask(:,:,:) 256 ELSE 257 ! 258 CALL ctl_warn('dta_tsd: T & S data are assumed to be on the current mesh. No interpolation performed') 259 ! 260 ptsd(:,:,:,jp_tem) = sf_tsd(jp_tem)%fnow(:,:,:) * tmask(:,:,:) ! Mask 261 ptsd(:,:,:,jp_sal) = sf_tsd(jp_sal)%fnow(:,:,:) * tmask(:,:,:) 221 262 ! 222 263 IF( ln_zps ) THEN ! zps-coordinate (partial steps) interpolation at the last ocean level … … 248 289 DEALLOCATE( sf_tsd(jp_sal)%fnow ) ! S arrays in the structure 249 290 IF( sf_tsd(jp_sal)%ln_tint ) DEALLOCATE( sf_tsd(jp_sal)%fdta ) 291 IF( ln_tsd_interp ) DEALLOCATE( sf_tsd(jp_dep)%fnow ) ! T arrays in the structure 292 IF( ln_tsd_interp ) DEALLOCATE( sf_tsd(jp_msk)%fnow ) ! T arrays in the structure 250 293 DEALLOCATE( sf_tsd ) ! the structure itself 251 294 ENDIF -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/sbctide.F90
r14075 r15737 16 16 USE ioipsl ! NetCDF IPSL library 17 17 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 18 19 USE bdytides ! davbyr - Access to love number 18 20 19 21 IMPLICIT NONE … … 108 110 109 111 DO jk = 1, nb_harmo 110 zcons = 0.7_wp * Wave(ntide(jk))%equitide * ftide(jk) 112 ! davbyr - Insert variable Love number where once was 0.7 113 zcons = dn_love_number * Wave(ntide(jk))%equitide * ftide(jk) 114 ! END davbyr 111 115 DO ji = 1, jpi 112 116 DO jj = 1, jpj … … 119 123 IF ( Wave(ntide(jk))%nutide == 1 ) THEN ; zcs = zcons * SIN( 2._wp*zlat ) 120 124 ELSEIF( Wave(ntide(jk))%nutide == 2 ) THEN ; zcs = zcons * COS( zlat )**2 125 ! davbyr - Include long period tidal forcing 126 ELSEIF( Wave(ntide(jk))%nutide == 0 ) THEN ; zcs = zcons * (0.5_wp-1.5_wp*SIN(zlat)**2._wp) 127 ! END - davbyr 121 128 ELSE ; zcs = 0._wp 122 129 ENDIF -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tide.h90
r14075 r15737 2 2 !! History : 3.2 ! 2007 (O. Le Galloudec) Original code 3 3 !!---------------------------------------------------------------------- 4 4 !! TIDES ADDED ! 2017 (Nico Bruneau) 5 !! Following this document that seems to match implemented code 6 !! https://docs.lib.noaa.gov/rescue/cgs_specpubs/QB275U35no981924.pdf 7 !! see page 189 for some proposed values 8 !! 9 !! The convention which seems to have been chosen is the Shureman one and 10 !! not the Cartwright and Tayer (1971) 11 !! This is probably due to the fact the Schureman has a solar calendar 12 !! while Cartwright and Tayer is based on a lunar calendar 13 !! 14 !! Therefore the coefficient are not the Doodson number but the one 15 !! defined by Schureman. For example : 16 !! M2 : Doodson : 2 0 0 0 0 0 17 !! Schureman : 2 -2 2 0 0 0 18 !! 19 !! Components 1-34 are for FES 2014 20 !! Components >= 35 are the one that were initially present in NEMO and not in FES14 21 !! keep in mind than equitide coefficient have been ajusted for the 22 !! 34 FES 2014 constituents 23 !! 24 !! The different coefficient are as follows 25 !! - nt = T = Number of Julian centuries (36625 days) from Greenwich mean noon on December 31, 1899. 26 !! = Hour angle of mean sun 27 !! - ns = s = mean longitude of the moon 28 !! - nh = h = mean longitude of the sun 29 !! - np = p = mean longitude of the lunar perigee 30 !! - np1 = p1 = mean longitude of the solar perigee 31 !! - shift appears in table as a bias in degree 32 !! - nksi Coefficient for the longitude in moon's orbit of lunar intersection 33 !! - nu0 Coefficient for the right ascension of lunar intersection 34 !! - nu1 Coefficient for the term in argument of lunisolar constituent K1 35 !! - nu2 Coefficient for the term in argument of lunisolar constituent K2 36 !! - R = ??? 37 !! - Formula = Nodal factor function; see the table of Schureman. Implemented in tide_mod.F90 38 !! 39 !! The equitide parameter seems to be the equilibrium tide amplitude corrected 40 !! with the C_n^m coefficient: see Cartwright and Tayer (1971) equation 12 41 !! and Table 2 42 !! As an example in their Table 4c (p66), M2 (200000) has an amplitude of 43 !! around 0.63186 m 44 !! Table 2, give us a correction of m = 2, n = 2 (semi-diurnal) 45 !! 0.63186*3*sqrt( 5 / 96 / pi ) = 0.24407 46 !! very close to the one define originally here : 0.242297 47 !! Third order terms are neglected 48 !! 49 !! So to correct (to match what is implemented in sbctide.F90 - take care CT71 uses co-latitude): 50 !! - long wave : Amplitude from CT71 * [ -1 * sqrt( 5 / 4 / pi ) ] 51 !! - diurnal : Amplitude from CT71 * [ -3/2 * sqrt( 5 / 24 / pi ) ] 52 !! - semi-diur : Amplitude from CT71 * [ 3 * sqrt( 5 / 96 / pi ) ] 53 !! 54 !! ATTENTION: convention seems to be to have a positive coefficient and a 180 shift to 55 !! represent negative value. to be confirmed though. 56 !! 57 !! All equtide were computed using the last epocs from Cartwright and Tayer (1971) multiply by 58 !! the corresponding coefficient of their table 2 59 !! 60 !! nutide is used to compute tide potential - it uses a different formulation depending of nutide 61 !! see sbctide.F90 in function tide_init_potential 62 !! 63 !! Some random note 64 !! in cnes fes tool: 65 !! Msf has nksi = 2 and nnu0 = -2 which is reverse from Schureman (I kept the Schureman one) 66 !! 67 !!---------------------------------------------------------------------- 68 ! 5 69 ! !! name_tide , equitide , nutide , nt , ns , nh , np , np1 , shift , nksi , nnu0 , nnu1 , nnu2 , R , formula !! 6 70 ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! 7 Wave( 1) = tide( 'M2' , 0.242297 , 2 , 2 , -2 , 2 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 8 Wave( 2) = tide( 'N2' , 0.046313 , 2 , 2 , -3 , 2 , 1 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 9 Wave( 3) = tide( '2N2' , 0.006184 , 2 , 2 , -4 , 2 , 2 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 10 Wave( 4) = tide( 'S2' , 0.113572 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 11 Wave( 5) = tide( 'K2' , 0.030875 , 2 , 2 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , -2 , 0 , 235 ) 12 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 13 Wave( 6) = tide( 'K1' , 0.142408 , 1 , 1 , 0 , 1 , 0 , 0 , -90 , 0 , 0 , -1 , 0 , 0 , 227 ) 14 Wave( 7) = tide( 'O1' , 0.101266 , 1 , 1 , -2 , 1 , 0 , 0 , +90 , 2 , -1 , 0 , 0 , 0 , 75 ) 15 Wave( 8) = tide( 'Q1' , 0.019387 , 1 , 1 , -3 , 1 , 1 , 0 , +90 , 2 , -1 , 0 , 0 , 0 , 75 ) 16 Wave( 9) = tide( 'P1' , 0.047129 , 1 , 1 , 0 , -1 , 0 , 0 , +90 , 0 , 0 , 0 , 0 , 0 , 0 ) 17 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 18 Wave(10) = tide( 'M4' , 0.000000 , 4 , 4 , -4 , 4 , 0 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 1 ) 19 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 20 Wave(11) = tide( 'Mf' , 0.042017 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 21 Wave(12) = tide( 'Mm' , 0.022191 , 0 , 0 , 1 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 73 ) 22 Wave(13) = tide( 'Msqm' , 0.000667 , 0 , 0 , 4 , -2 , 0 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 23 Wave(14) = tide( 'Mtm' , 0.008049 , 0 , 0 , 3 , 0 , -1 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 24 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 25 Wave(15) = tide( 'S1' , 0.000000 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 26 Wave(16) = tide( 'MU2' , 0.005841 , 2 , 2 , -4 , 4 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 27 Wave(17) = tide( 'NU2' , 0.009094 , 2 , 2 , -3 , 4 , -1 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 28 Wave(18) = tide( 'L2' , 0.006694 , 2 , 2 , -1 , 2 , -1 , 0 , +180 , 2 , -2 , 0 , 0 , 0 , 215 ) 29 Wave(19) = tide( 'T2' , 0.006614 , 2 , 2 , 0 , -1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 71 ! 72 ! Long Period Tides 73 Wave( 1) = tide( 'SA' , 0.003103 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 74 Wave( 2) = tide( 'SSA' , 0.019523 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 75 Wave( 3) = tide( 'MM' , 0.022191 , 0 , 0 , 1 , 0 , -1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 73 ) 76 Wave( 4) = tide( 'MF' , 0.042023 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 77 Wave( 5) = tide( 'MTM' , 0.008042 , 0 , 0 , 3 , 0 , -1 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 78 Wave( 6) = tide( 'MSF' , 0.003671 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , -2 , 2 , 0 , 0 , 0 , 78 ) 79 Wave( 7) = tide( 'MSQM' , 0.001293 , 0 , 0 , 4 , -2 , 0 , 0 , 0 , -2 , 0 , 0 , 0 , 0 , 74 ) 80 ! 81 ! Diurnal Tides 82 Wave( 8) = tide( 'K1' , 0.142442 , 1 , 1 , 0 , 1 , 0 , 0 , -90 , 0 , 0 , -1 , 0 , 0 , 227 ) 83 Wave( 9) = tide( 'O1' , 0.101277 , 1 , 1 , -2 , 1 , 0 , 0 , +90 , 2 , -1 , 0 , 0 , 0 , 75 ) 84 Wave(10) = tide( 'Q1' , 0.019383 , 1 , 1 , -3 , 1 , 1 , 0 , +90 , 2 , -1 , 0 , 0 , 0 , 75 ) 85 Wave(11) = tide( 'P1' , 0.047145 , 1 , 1 , 0 , -1 , 0 , 0 , +90 , 0 , 0 , 0 , 0 , 0 , 0 ) 86 Wave(12) = tide( 'S1' ,-0.001116 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 87 Wave(13) = tide( 'J1' ,-0.007961 , 1 , 1 , 1 , 1 , -1 , 0 , -90 , 0 , -1 , 0 , 0 , 0 , 76 ) 88 ! 89 ! Semi-Diurnal Tides 90 Wave(14) = tide( 'M2' , 0.244083 , 2 , 2 , -2 , 2 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 91 Wave(15) = tide( 'N2' , 0.046720 , 2 , 2 , -3 , 2 , 1 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 92 Wave(16) = tide( 'S2' , 0.113565 , 2 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 93 Wave(17) = tide( 'K2' , 0.030875 , 2 , 2 , 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , -2 , 0 , 235 ) 94 Wave(18) = tide( 'L2' , 0.006903 , 2 , 2 , -1 , 2 , -1 , 0 , +180 , 2 , -2 , 0 , 0 , 0 , 215 ) 95 Wave(19) = tide( 'T2' , 0.006644 , 2 , 2 , 0 , -1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 96 Wave(20) = tide( 'R2' , 0.000950 , 2 , 2 , 0 , 1 , 0 , -1 , +180 , 2 , 0 , 0 , 0 , 0 , 0 ) 97 ! 98 Wave(21) = tide( 'MU2' , 0.007451 , 2 , 2 , -4 , 4 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 99 Wave(22) = tide( 'NU2' , 0.008873 , 2 , 2 , -3 , 4 , -1 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 100 Wave(23) = tide( '2N2' , 0.006176 , 2 , 2 , -4 , 2 , 2 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 101 Wave(24) = tide( 'MKS2' , 0.000000 , 2 , 2 , -2 , 4 , 0 , 0 , 0 , 2 , -2 , 0 , -2 , 0 , 4 ) 102 Wave(25) = tide( 'LA2' , 0.001800 , 2 , 2 , -1 , 0 , 1 , 0 , +180 , 2 , -2 , 0 , 0 , 0 , 78 ) 103 Wave(26) = tide( 'EPS2' , 0.001796 , 2 , 2 , -5 , 4 , 1 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 104 ! 105 ! Harmonic and others 106 Wave(27) = tide( 'M3' , 0.000000 , 3 , 3 , -3 , 3 , 0 , 0 , 0 , 3 , -3 , 0 , 0 , 0 , 149 ) 107 Wave(28) = tide( 'M4' , 0.000000 , 4 , 4 , -4 , 4 , 0 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 1 ) 108 Wave(29) = tide( 'M6' , 0.000000 , 6 , 6 , -6 , 6 , 0 , 0 , 0 , 6 , -6 , 0 , 0 , 0 , 18 ) 109 Wave(30) = tide( 'M8' , 0.000000 , 8 , 8 , -8 , 8 , 0 , 0 , 0 , 8 , -8 , 0 , 0 , 0 , 20 ) 110 Wave(31) = tide( 'N4' , 0.000000 , 4 , 4 , -6 , 4 , 2 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 1 ) 111 Wave(32) = tide( 'S4' , 0.000000 , 4 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) 112 Wave(33) = tide( 'MN4' , 0.000000 , 4 , 4 , -5 , 4 , 1 , 0 , 0 , 4 , -4 , 0 , 0 , 0 , 1 ) 113 Wave(34) = tide( 'MS4' , 0.000000 , 4 , 4 , -2 , 2 , 0 , 0 , 0 , 2 , -2 , 0 , 0 , 0 , 78 ) 114 ! -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tide_mod.F90
r14075 r15737 16 16 PUBLIC tide_init_Wave ! called by tideini and diaharm modules 17 17 18 INTEGER, PUBLIC, PARAMETER :: jpmax_harmo = 19 !: maximum number of harmonic 18 ! davbyr: increase maximum number of harmonics from 19 to 34 19 INTEGER, PUBLIC, PARAMETER :: jpmax_harmo = 34 !: maximum number of harmonic 19 20 20 21 TYPE, PUBLIC :: tide … … 331 332 zf = zf * zf1 * zf1 332 333 ! 334 335 !--- davbyr 11/2017 336 CASE( 20 ) !== formule 20, compound waves ( 78 x 78 x 78 x 78 ) 337 zf1 = nodal_factort(78) 338 zf = zf1 * zf1 * zf1 * zf1 339 !--- END davbyr 333 340 CASE( 73 ) !== formule 73 334 341 zs = sin(sh_I) -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/SBC/tideini.F90
r14075 r15737 34 34 REAL(wp), PUBLIC :: rdttideramp !: 35 35 REAL(wp), PUBLIC :: rn_scal_load !: 36 ! davbyr - read love number from namelist 37 REAL(wp), PUBLIC :: dn_love_number !: 38 ! END davbyr 36 39 CHARACTER(lc), PUBLIC :: cn_tide_load !: 37 40 … … 54 57 ! 55 58 NAMELIST/nam_tide/ln_tide, ln_tide_pot, ln_scal_load, ln_read_load, cn_tide_load, & 56 & ln_tide_ramp, rn_scal_load, rdttideramp, clname59 & ln_tide_ramp, rn_scal_load, rdttideramp, dn_love_number, clname 57 60 !!---------------------------------------------------------------------- 58 61 ! … … 80 83 WRITE(numout,*) ' Fraction of SSH used in scal. approx. rn_scal_load = ', rn_scal_load 81 84 WRITE(numout,*) ' Duration (days) of ramp rdttideramp = ', rdttideramp 85 ! davbyr - Love number (one line) 86 WRITE(numout,*) ' Love Number dn_love_number = ', dn_love_number 82 87 ENDIF 83 88 ELSE -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/ZDF/zdfgls.F90
r14075 r15737 110 110 !!---------------------------------------------------------------------- 111 111 !! NEMO/OCE 4.0 , NEMO Consortium (2018) 112 !! $Id $112 !! $Id: zdfgls.F90 13511 2020-09-24 08:55:10Z smasson $ 113 113 !! Software governed by the CeCILL license (see ./LICENSE) 114 114 !!---------------------------------------------------------------------- … … 188 188 DO jj = 2, jpjm1 ! bottom friction 189 189 DO ji = fs_2, fs_jpim1 ! vector opt. 190 zmsku = ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) )191 zmskv = ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) ! (CAUTION: CdU<0)190 zmsku = 0.5_wp * ( 2._wp - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 191 zmskv = 0.5_wp * ( 2._wp - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) ! (CAUTION: CdU<0) 192 192 ustar2_bot(ji,jj) = - rCdU_bot(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 & 193 193 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) … … 197 197 DO jj = 2, jpjm1 198 198 DO ji = fs_2, fs_jpim1 ! vector opt. 199 zmsku = ( 2._wp - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) )200 zmskv = ( 2._wp - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) ! (CAUTION: CdU<0)199 zmsku = 0.5_wp * ( 2._wp - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 200 zmskv = 0.5_wp * ( 2._wp - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) ! (CAUTION: CdU<0) 201 201 ustar2_top(ji,jj) = - rCdU_top(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2 & 202 202 & + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2 ) … … 413 413 zdiag(ji,jj,ibot) = 1._wp ; zdiag(ji,jj,ibotm1) = zdiag(ji,jj,ibotm1) + zd_up(ji,jj,ibotm1) 414 414 zd_up(ji,jj,ibot) = 0._wp ; zd_up(ji,jj,ibotm1) = 0._wp 415 en (ji,jj,ibot) = z_en 415 416 END DO 416 417 END DO … … 429 430 zdiag(ji,jj,itop) = 1._wp ; zdiag(ji,jj,itopp1) = zdiag(ji,jj,itopp1) + zd_up(ji,jj,itopp1) 430 431 zd_up(ji,jj,itop) = 0._wp ; zd_up(ji,jj,itopp1) = 0._wp 432 en (ji,jj,itop) = z_en 431 433 END DO 432 434 END DO … … 1236 1238 !!====================================================================== 1237 1239 END MODULE zdfgls 1238 -
NEMO/branches/UKMO/NEMO_4.0.4_eiwpo12/src/OCE/par_oce.F90
r14075 r15737 64 64 INTEGER, PUBLIC, PARAMETER :: jp_tem = 1 !: indice for temperature 65 65 INTEGER, PUBLIC, PARAMETER :: jp_sal = 2 !: indice for salinity 66 66 !annkat 67 INTEGER, PUBLIC, PARAMETER :: jp_dep = 3 !: indice for depth 68 INTEGER, PUBLIC, PARAMETER :: jp_msk = 4 !: indice for mask 67 69 !!---------------------------------------------------------------------- 68 70 !! Domain decomposition
Note: See TracChangeset
for help on using the changeset viewer.