- Timestamp:
- 2017-04-19T12:15:07+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90
r7753 r7931 9 9 !! 3.6 ! 2013-04 (G. Madec, F. Roquet) zrau compute locally using interpolation of alpha & beta 10 10 !!---------------------------------------------------------------------- 11 #if defined key_zdfddm 11 12 12 !!---------------------------------------------------------------------- 13 !! 'key_zdfddm' : double diffusion13 !! zdf_ddm : compute the Kz for salinity 14 14 !!---------------------------------------------------------------------- 15 !! zdf_ddm : compute the Ks for salinity 16 !! zdf_ddm_init : read namelist and control the parameters 17 !!---------------------------------------------------------------------- 18 USE oce ! ocean dynamics and tracers variables 19 USE dom_oce ! ocean space and time domain variables 20 USE zdf_oce ! ocean vertical physics variables 15 USE oce ! ocean dynamics and tracers variables 16 USE dom_oce ! ocean space and time domain variables 17 USE zdf_oce ! ocean vertical physics variables 21 18 USE eosbn2 ! equation of state 22 19 ! 23 USE in_out_manager 24 USE lbclnk 25 USE prtctl 26 USE lib_mpp 27 USE wrk_nemo 28 USE timing 20 USE in_out_manager ! I/O manager 21 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 22 USE prtctl ! Print control 23 USE lib_mpp ! MPP library 24 USE wrk_nemo ! work arrays 25 USE timing ! Timing 29 26 30 27 IMPLICIT NONE … … 32 29 33 30 PUBLIC zdf_ddm ! called by step.F90 34 PUBLIC zdf_ddm_init ! called by opa.F9035 PUBLIC zdf_ddm_alloc ! called by nemogcm.F9036 37 LOGICAL , PUBLIC, PARAMETER :: lk_zdfddm = .TRUE. !: double diffusive mixing flag38 39 REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: avs !: salinity vertical diffusivity coeff. at w-point40 41 ! !!* Namelist namzdf_ddm : double diffusive mixing *42 REAL(wp) :: rn_avts ! maximum value of avs for salt fingering43 REAL(wp) :: rn_hsbfr ! heat/salt buoyancy flux ratio44 31 45 32 !! * Substitutions … … 51 38 !!---------------------------------------------------------------------- 52 39 CONTAINS 53 54 INTEGER FUNCTION zdf_ddm_alloc()55 !!----------------------------------------------------------------------56 !! *** ROUTINE zdf_ddm_alloc ***57 !!----------------------------------------------------------------------58 ALLOCATE( avs(jpi,jpj,jpk) , STAT= zdf_ddm_alloc )59 IF( lk_mpp ) CALL mpp_sum ( zdf_ddm_alloc )60 IF( zdf_ddm_alloc /= 0 ) CALL ctl_warn('zdf_ddm_alloc: failed to allocate arrays')61 END FUNCTION zdf_ddm_alloc62 63 40 64 41 SUBROUTINE zdf_ddm( kt ) … … 174 151 & + 0.15 * zrau(ji,jj) * zmskd2(ji,jj) ) 175 152 ! add to the eddy viscosity coef. previously computed 176 # if defined key_zdftmx_new 177 ! key_zdftmx_new: New internal wave-driven param: use avs value computed by zdftmx 178 avs (ji,jj,jk) = avs(ji,jj,jk) + zavfs + zavds 179 # else 180 avs (ji,jj,jk) = avt(ji,jj,jk) + zavfs + zavds 181 # endif 182 avt (ji,jj,jk) = avt(ji,jj,jk) + zavft + zavdt 183 avm (ji,jj,jk) = avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 153 avs(ji,jj,jk) = avt(ji,jj,jk) + zavfs + zavds 154 avt(ji,jj,jk) = avt(ji,jj,jk) + zavft + zavdt 155 avm(ji,jj,jk) = avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 184 156 END DO 185 157 END DO … … 221 193 END SUBROUTINE zdf_ddm 222 194 223 224 SUBROUTINE zdf_ddm_init225 !!----------------------------------------------------------------------226 !! *** ROUTINE zdf_ddm_init ***227 !!228 !! ** Purpose : Initialization of double diffusion mixing scheme229 !!230 !! ** Method : Read the namzdf_ddm namelist and check the parameter values231 !! called by zdf_ddm at the first timestep (nit000)232 !!----------------------------------------------------------------------233 INTEGER :: ios ! local integer234 !!235 NAMELIST/namzdf_ddm/ rn_avts, rn_hsbfr236 !!----------------------------------------------------------------------237 !238 REWIND( numnam_ref ) ! Namelist namzdf_ddm in reference namelist : Double diffusion mixing scheme239 READ ( numnam_ref, namzdf_ddm, IOSTAT = ios, ERR = 901)240 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ddm in reference namelist', lwp )241 242 REWIND( numnam_cfg ) ! Namelist namzdf_ddm in configuration namelist : Double diffusion mixing scheme243 READ ( numnam_cfg, namzdf_ddm, IOSTAT = ios, ERR = 902 )244 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ddm in configuration namelist', lwp )245 IF(lwm) WRITE ( numond, namzdf_ddm )246 !247 IF(lwp) THEN ! Parameter print248 WRITE(numout,*)249 WRITE(numout,*) 'zdf_ddm : double diffusive mixing'250 WRITE(numout,*) '~~~~~~~'251 WRITE(numout,*) ' Namelist namzdf_ddm : set dd mixing parameter'252 WRITE(numout,*) ' maximum avs for dd mixing rn_avts = ', rn_avts253 WRITE(numout,*) ' heat/salt buoyancy flux ratio rn_hsbfr = ', rn_hsbfr254 ENDIF255 !256 ! ! allocate zdfddm arrays257 IF( zdf_ddm_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'zdf_ddm_init : unable to allocate arrays' )258 ! ! initialization to masked Kz259 avs(:,:,:) = rn_avt0 * wmask(:,:,:)260 !261 END SUBROUTINE zdf_ddm_init262 263 #else264 !!----------------------------------------------------------------------265 !! Default option : Dummy module No double diffusion266 !!----------------------------------------------------------------------267 LOGICAL, PUBLIC, PARAMETER :: lk_zdfddm = .FALSE. !: double diffusion flag268 CONTAINS269 SUBROUTINE zdf_ddm( kt ) ! Dummy routine270 WRITE(*,*) 'zdf_ddm: You should not have seen this print! error?', kt271 END SUBROUTINE zdf_ddm272 SUBROUTINE zdf_ddm_init ! Dummy routine273 END SUBROUTINE zdf_ddm_init274 #endif275 276 195 !!====================================================================== 277 196 END MODULE zdfddm
Note: See TracChangeset
for help on using the changeset viewer.