Changeset 1601 for trunk/NEMO/OPA_SRC/ZDF/zdfddm.F90
- Timestamp:
- 2009-08-11T12:09:19+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/ZDF/zdfddm.F90
r1537 r1601 4 4 !! Ocean physics : double diffusion mixing parameterization 5 5 !!====================================================================== 6 !! History : OPA ! 2000-08 (G. Madec) double diffusive mixing 7 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 8 !!---------------------------------------------------------------------- 6 9 #if defined key_zdfddm || defined key_esopa 7 10 !!---------------------------------------------------------------------- … … 28 31 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: rrau !: heat/salt buoyancy flux ratio 29 32 30 ! !!* Namelist nam _ddm : double diffusive mixing *33 ! !!* Namelist namzdf_ddm : double diffusive mixing * 31 34 REAL(wp) :: rn_avts = 1.e-4_wp ! maximum value of avs for salt fingering 32 35 REAL(wp) :: rn_hsbfr = 1.6_wp ! heat/salt buoyancy flux ratio … … 47 50 !! 48 51 !! ** Purpose : Add to the vertical eddy diffusivity coefficient the 49 !! effect of salt fingering and diffusive convection.52 !! effect of salt fingering and diffusive convection. 50 53 !! 51 54 !! ** Method : Diapycnal mixing is increased in case of double … … 70 73 !! avmu, avmv are required to remain at least above avt and avs. 71 74 !! 72 !! ** Action : avt, avs : update vertical eddy diffusivity coef. 73 !! for temperature and salinity 74 !! 75 !! References : 76 !! Merryfield et al., JPO, 29, 1124-1142, 1999. 77 !! History : 78 !! ! 00-08 (G. Madec) double diffusive mixing 79 !! 8.5 ! 02-06 (G. Madec) F90: Free form and module 80 !!---------------------------------------------------------------------- 81 !! * Arguments 82 INTEGER, INTENT( in ) :: kt ! ocean time-step indexocean time step 83 84 !! * Local declarations 85 INTEGER :: ji, jj , jk ! dummy loop indices 86 REAL(wp), DIMENSION(jpi,jpj) :: & 87 zmsks, zmskf, & ! temporary workspace 88 zmskd1, zmskd2, zmskd3 ! " " 89 REAL(wp) :: & 90 zinr, zrr, & ! temporary scalars 91 zavft, zavfs, & ! " " 92 zavdt, zavds ! " " 93 !!---------------------------------------------------------------------- 94 75 !! ** Action : avt, avs : updated vertical eddy diffusivity coef. for T & S 76 !! 77 !! References : Merryfield et al., JPO, 29, 1124-1142, 1999. 78 !!---------------------------------------------------------------------- 79 INTEGER, INTENT(in) :: kt ! ocean time-step indexocean time step 80 !! 81 INTEGER :: ji, jj , jk ! dummy loop indices 82 REAL(wp) :: zinr, zrr ! temporary scalars 83 REAL(wp) :: zavft, zavfs ! - - 84 REAL(wp) :: zavdt, zavds ! - - 85 REAL(wp), DIMENSION(jpi,jpj) :: zmsks, zmskf, zmskd1, zmskd2, zmskd3 ! 2D workspace 86 !!---------------------------------------------------------------------- 95 87 96 88 IF ( kt == nit000 ) CALL zdf_ddm_init ! Initialization (first time-step only) 97 89 98 99 ! Compute avs100 ! -----------101 90 ! ! =============== 102 91 DO jk = 2, jpkm1 ! Horizontal slab … … 104 93 ! Define the mask 105 94 ! --------------- 106 ! only retains positive value of rrau 107 rrau(:,:,jk) = MAX( 1.e-20, rrau(:,:,jk) ) 108 109 ! indicators: 110 DO jj = 1, jpj 95 rrau(:,:,jk) = MAX( 1.e-20, rrau(:,:,jk) ) ! only retains positive value of rrau 96 97 DO jj = 1, jpj ! indicators: 111 98 DO ji = 1, jpi 112 99 ! stability indicator: msks=1 if rn2>0; 0 elsewhere … … 158 145 zrr = rrau(ji,jj,jk)/rn_hsbfr 159 146 zrr = zrr * zrr 160 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj)147 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) 161 148 zavft = 0.7 * zavfs * zinr 162 149 ! diffusive layering 163 zavdt = 1.3635e-6 * EXP(4.6*EXP(-0.54*(zinr-1.) ) ) & 164 * zmsks(ji,jj) * zmskd1(ji,jj) 165 zavds = zavdt * zmsks(ji,jj) & 166 * ( (1.85 * rrau(ji,jj,jk) - 0.85 ) * zmskd3(ji,jj) & 167 + 0.15 * rrau(ji,jj,jk) * zmskd2(ji,jj) ) 150 zavdt = 1.3635e-6 * EXP( 4.6 * EXP( -0.54*(zinr-1.) ) ) * zmsks(ji,jj) * zmskd1(ji,jj) 151 zavds = zavdt * zmsks(ji,jj) * ( (1.85 * rrau(ji,jj,jk) - 0.85 ) * zmskd3(ji,jj) & 152 & + 0.15 * rrau(ji,jj,jk) * zmskd2(ji,jj) ) 168 153 ! add to the eddy viscosity coef. previously computed 169 154 avs (ji,jj,jk) = avt(ji,jj,jk) + zavfs + zavds … … 180 165 DO ji = 1, fs_jpim1 ! vector opt. 181 166 avmu(ji,jj,jk) = MAX( avmu(ji,jj,jk), & 182 avt(ji,jj,jk), avt(ji+1,jj,jk), & 183 avs(ji,jj,jk), avs(ji+1,jj,jk) ) & 184 * umask(ji,jj,jk) 167 & avt(ji,jj,jk), avt(ji+1,jj,jk), & 168 & avs(ji,jj,jk), avs(ji+1,jj,jk) ) * umask(ji,jj,jk) 185 169 avmv(ji,jj,jk) = MAX( avmv(ji,jj,jk), & 186 avt(ji,jj,jk), avt(ji,jj+1,jk), & 187 avs(ji,jj,jk), avs(ji,jj+1,jk) ) & 188 * vmask(ji,jj,jk) 170 & avt(ji,jj,jk), avt(ji,jj+1,jk), & 171 & avs(ji,jj,jk), avs(ji,jj+1,jk) ) * vmask(ji,jj,jk) 189 172 END DO 190 173 END DO … … 192 175 END DO ! End of slab 193 176 ! ! =============== 194 195 ! Lateral boundary conditions on ( avt, avs, avmu, avmv ) (unchanged sign) 196 ! -------------------------------======================== 197 CALL lbc_lnk( avt , 'W', 1. ) 177 ! 178 CALL lbc_lnk( avt , 'W', 1. ) ! Lateral boundary conditions (unchanged sign) 198 179 CALL lbc_lnk( avs , 'W', 1. ) 199 180 CALL lbc_lnk( avm , 'W', 1. ) … … 206 187 & tab3d_2=avmv, clinfo2= ' v: ', mask2=vmask, ovlap=1, kdim=jpk) 207 188 ENDIF 208 189 ! 209 190 END SUBROUTINE zdf_ddm 210 191 … … 216 197 !! ** Purpose : Initialization of double diffusion mixing scheme 217 198 !! 218 !! ** Method : Read the nam _ddm namelist and check the parameter values199 !! ** Method : Read the namzdf_ddm namelist and check the parameter values 219 200 !! called by zdf_ddm at the first timestep (nit000) 220 !! 221 !! History : 8.5 ! 02-08 (G. Madec) Original code 222 !!---------------------------------------------------------------------- 223 NAMELIST/nam_ddm/ rn_avts, rn_hsbfr 224 !!---------------------------------------------------------------------- 225 ! 226 REWIND ( numnam ) ! Read Namelist nam_ddm : double diffusion mixing scheme 227 READ ( numnam, nam_ddm ) 201 !!---------------------------------------------------------------------- 202 NAMELIST/namzdf_ddm/ rn_avts, rn_hsbfr 203 !!---------------------------------------------------------------------- 204 ! 205 REWIND ( numnam ) ! Read Namelist namzdf_ddm : double diffusion mixing scheme 206 READ ( numnam, namzdf_ddm ) 228 207 ! 229 208 IF(lwp) THEN ! Parameter print … … 231 210 WRITE(numout,*) 'zdf_ddm : double diffusive mixing' 232 211 WRITE(numout,*) '~~~~~~~' 233 WRITE(numout,*) ' Namelist nam _ddm : set dd mixing parameter'212 WRITE(numout,*) ' Namelist namzdf_ddm : set dd mixing parameter' 234 213 WRITE(numout,*) ' maximum avs for dd mixing rn_avts = ', rn_avts 235 214 WRITE(numout,*) ' heat/salt buoyancy flux ratio rn_hsbfr = ', rn_hsbfr
Note: See TracChangeset
for help on using the changeset viewer.