Changeset 9490 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN
- Timestamp:
- 2018-04-23T10:44:07+02:00 (6 years ago)
- Location:
- branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90
r9190 r9490 98 98 !!---------------------------------------------------------------------- 99 99 ! 100 IF(lwp) THEN 101 WRITE(numout,*) 102 WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 103 WRITE(numout,*) '~~~~~~~~~~~~' 104 ENDIF 105 ! 100 106 REWIND( numnam_ref ) ! Namelist namdyn_adv in reference namelist : Momentum advection scheme 101 107 READ ( numnam_ref, namdyn_adv, IOSTAT = ios, ERR = 901) … … 107 113 108 114 IF(lwp) THEN ! Namelist print 109 WRITE(numout,*)110 WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme'111 WRITE(numout,*) '~~~~~~~~~~~~'112 115 WRITE(numout,*) ' Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 113 116 WRITE(numout,*) ' linear dynamics : no momentum advection ln_dynadv_NONE = ', ln_dynadv_NONE -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r9168 r9490 53 53 PUBLIC dyn_hpg_init ! routine called by opa module 54 54 55 ! !!* Namelist namdyn_hpg : hydrostatic pressure gradient 56 LOGICAL , PUBLIC :: ln_hpg_zco !: z-coordinate - full steps 57 LOGICAL , PUBLIC :: ln_hpg_zps !: z-coordinate - partial steps (interpolation) 58 LOGICAL , PUBLIC :: ln_hpg_sco !: s-coordinate (standard jacobian formulation) 59 LOGICAL , PUBLIC :: ln_hpg_djc !: s-coordinate (Density Jacobian with Cubic polynomial) 60 LOGICAL , PUBLIC :: ln_hpg_prj !: s-coordinate (Pressure Jacobian scheme) 61 LOGICAL , PUBLIC :: ln_hpg_isf !: s-coordinate similar to sco modify for isf 62 63 INTEGER , PUBLIC :: nhpg = 0 ! = 0 to 7, type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 55 ! !!* Namelist namdyn_hpg : hydrostatic pressure gradient 56 LOGICAL, PUBLIC :: ln_hpg_zco !: z-coordinate - full steps 57 LOGICAL, PUBLIC :: ln_hpg_zps !: z-coordinate - partial steps (interpolation) 58 LOGICAL, PUBLIC :: ln_hpg_sco !: s-coordinate (standard jacobian formulation) 59 LOGICAL, PUBLIC :: ln_hpg_djc !: s-coordinate (Density Jacobian with Cubic polynomial) 60 LOGICAL, PUBLIC :: ln_hpg_prj !: s-coordinate (Pressure Jacobian scheme) 61 LOGICAL, PUBLIC :: ln_hpg_isf !: s-coordinate similar to sco modify for isf 62 63 ! !! Flag to control the type of hydrostatic pressure gradient 64 INTEGER, PARAMETER :: np_ERROR =-10 ! error in specification of lateral diffusion 65 INTEGER, PARAMETER :: np_zco = 0 ! z-coordinate - full steps 66 INTEGER, PARAMETER :: np_zps = 1 ! z-coordinate - partial steps (interpolation) 67 INTEGER, PARAMETER :: np_sco = 2 ! s-coordinate (standard jacobian formulation) 68 INTEGER, PARAMETER :: np_djc = 3 ! s-coordinate (Density Jacobian with Cubic polynomial) 69 INTEGER, PARAMETER :: np_prj = 4 ! s-coordinate (Pressure Jacobian scheme) 70 INTEGER, PARAMETER :: np_isf = 5 ! s-coordinate similar to sco modify for isf 71 ! 72 INTEGER, PUBLIC :: nhpg !: type of pressure gradient scheme used ! (deduced from ln_hpg_... flags) (PUBLIC for TAM) 64 73 65 74 !! * Substitutions … … 95 104 ! 96 105 SELECT CASE ( nhpg ) ! Hydrostatic pressure gradient computation 97 CASE ( 0) ; CALL hpg_zco ( kt ) ! z-coordinate98 CASE ( 1) ; CALL hpg_zps ( kt ) ! z-coordinate plus partial steps (interpolation)99 CASE ( 2) ; CALL hpg_sco ( kt ) ! s-coordinate (standard jacobian formulation)100 CASE ( 3) ; CALL hpg_djc ( kt ) ! s-coordinate (Density Jacobian with Cubic polynomial)101 CASE ( 4) ; CALL hpg_prj ( kt ) ! s-coordinate (Pressure Jacobian scheme)102 CASE ( 5) ; CALL hpg_isf ( kt ) ! s-coordinate similar to sco modify for ice shelf106 CASE ( np_zco ) ; CALL hpg_zco ( kt ) ! z-coordinate 107 CASE ( np_zps ) ; CALL hpg_zps ( kt ) ! z-coordinate plus partial steps (interpolation) 108 CASE ( np_sco ) ; CALL hpg_sco ( kt ) ! s-coordinate (standard jacobian formulation) 109 CASE ( np_djc ) ; CALL hpg_djc ( kt ) ! s-coordinate (Density Jacobian with Cubic polynomial) 110 CASE ( np_prj ) ; CALL hpg_prj ( kt ) ! s-coordinate (Pressure Jacobian scheme) 111 CASE ( np_isf ) ; CALL hpg_isf ( kt ) ! s-coordinate similar to sco modify for ice shelf 103 112 END SELECT 104 113 ! … … 179 188 ENDIF 180 189 ! 181 ! ! Set nhpg from ln_hpg_... flags 182 IF( ln_hpg_zco ) nhpg = 0 183 IF( ln_hpg_zps ) nhpg = 1 184 IF( ln_hpg_sco ) nhpg = 2 185 IF( ln_hpg_djc ) nhpg = 3 186 IF( ln_hpg_prj ) nhpg = 4 187 IF( ln_hpg_isf ) nhpg = 5 188 ! 189 ! ! Consistency check 190 ! ! Set nhpg from ln_hpg_... flags & consistency check 191 nhpg = np_ERROR 190 192 ioptio = 0 191 IF( ln_hpg_zco ) ioptio = ioptio + 1 192 IF( ln_hpg_zps ) ioptio = ioptio + 1 193 IF( ln_hpg_sco ) ioptio = ioptio + 1 194 IF( ln_hpg_djc ) ioptio = ioptio + 1 195 IF( ln_hpg_prj ) ioptio = ioptio + 1 196 IF( ln_hpg_isf ) ioptio = ioptio + 1 193 IF( ln_hpg_zco ) THEN ; nhpg = np_zco ; ioptio = ioptio +1 ; ENDIF 194 IF( ln_hpg_zps ) THEN ; nhpg = np_zps ; ioptio = ioptio +1 ; ENDIF 195 IF( ln_hpg_sco ) THEN ; nhpg = np_sco ; ioptio = ioptio +1 ; ENDIF 196 IF( ln_hpg_djc ) THEN ; nhpg = np_djc ; ioptio = ioptio +1 ; ENDIF 197 IF( ln_hpg_prj ) THEN ; nhpg = np_prj ; ioptio = ioptio +1 ; ENDIF 198 IF( ln_hpg_isf ) THEN ; nhpg = np_isf ; ioptio = ioptio +1 ; ENDIF 199 ! 197 200 IF( ioptio /= 1 ) CALL ctl_stop( 'NO or several hydrostatic pressure gradient options used' ) 198 201 ! 202 IF(lwp) THEN 203 WRITE(numout,*) 204 SELECT CASE( nhpg ) 205 CASE( np_zco ) ; WRITE(numout,*) ' ==>>> z-coord. - full steps ' 206 CASE( np_zps ) ; WRITE(numout,*) ' ==>>> z-coord. - partial steps (interpolation)' 207 CASE( np_sco ) ; WRITE(numout,*) ' ==>>> s-coord. (standard jacobian formulation)' 208 CASE( np_djc ) ; WRITE(numout,*) ' ==>>> s-coord. (Density Jacobian: Cubic polynomial)' 209 CASE( np_prj ) ; WRITE(numout,*) ' ==>>> s-coord. (Pressure Jacobian: Cubic polynomial)' 210 CASE( np_isf ) ; WRITE(numout,*) ' ==>>> s-coord. (standard jacobian formulation) for isf' 211 END SELECT 212 WRITE(numout,*) 213 ENDIF 199 214 ! 200 215 IF ( .NOT. ln_isfcav ) THEN !--- no ice shelf load -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90
r9190 r9490 17 17 USE phycst ! physical constants 18 18 USE ldfdyn ! lateral diffusion: eddy viscosity coef. 19 USE ldfslp ! lateral diffusion: slopes of mixing orientation20 19 USE dynldf_lap_blp ! lateral mixing (dyn_ldf_lap & dyn_ldf_blp routines) 21 20 USE dynldf_iso ! lateral mixing (dyn_ldf_iso routine ) … … 34 33 PUBLIC dyn_ldf ! called by step module 35 34 PUBLIC dyn_ldf_init ! called by opa module 36 37 ! ! Parameter to control the type of lateral viscous operator38 INTEGER, PARAMETER, PUBLIC :: np_ERROR =-10 !: error in setting the operator39 INTEGER, PARAMETER, PUBLIC :: np_no_ldf = 00 !: without operator (i.e. no lateral viscous trend)40 ! !! laplacian ! bilaplacian !41 INTEGER, PARAMETER, PUBLIC :: np_lap = 10 , np_blp = 20 !: iso-level operator42 INTEGER, PARAMETER, PUBLIC :: np_lap_i = 11 !: iso-neutral or geopotential operator43 44 INTEGER, PUBLIC :: nldf !: type of lateral diffusion used defined from ln_dynldf_... (namlist logicals)45 35 46 36 !! * Substitutions … … 72 62 ENDIF 73 63 74 SELECT CASE ( nldf )! compute lateral mixing trend and add it to the general trend64 SELECT CASE ( nldf_dyn ) ! compute lateral mixing trend and add it to the general trend 75 65 ! 76 CASE ( np_lap ) ; CALL dyn_ldf_lap 77 CASE ( np_lap_i ) ; CALL dyn_ldf_iso 78 CASE ( np_blp ) ; CALL dyn_ldf_blp 66 CASE ( np_lap ) ; CALL dyn_ldf_lap( kt, ub, vb, ua, va, 1 ) ! iso-level laplacian 67 CASE ( np_lap_i ) ; CALL dyn_ldf_iso( kt ) ! rotated laplacian 68 CASE ( np_blp ) ; CALL dyn_ldf_blp( kt, ub, vb, ua, va ) ! iso-level bi-laplacian 79 69 ! 80 70 END SELECT … … 101 91 !! ** Purpose : initializations of the horizontal ocean dynamics physics 102 92 !!---------------------------------------------------------------------- 103 INTEGER :: ioptio, ierr ! temporary integers104 !!----------------------------------------------------------------------105 93 ! 106 ! !== Namelist nam_dynldf ==! already read in ldfdyn module 107 ! 108 IF(lwp) THEN !== Namelist print ==! 94 IF(lwp) THEN !== Namelist print ==! 109 95 WRITE(numout,*) 110 96 WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 111 97 WRITE(numout,*) '~~~~~~~~~~~~' 112 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 113 WRITE(numout,*) ' Type of operator' 114 WRITE(numout,*) ' no explicit diffusion ln_dynldf_NONE = ', ln_dynldf_NONE 115 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 116 WRITE(numout,*) ' bilaplacian operator ln_dynldf_blp = ', ln_dynldf_blp 117 WRITE(numout,*) ' Direction of action' 118 WRITE(numout,*) ' iso-level ln_dynldf_lev = ', ln_dynldf_lev 119 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 120 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 121 ENDIF 122 ! !== use of lateral operator or not ==! 123 nldf = np_ERROR 124 ioptio = 0 125 IF( ln_dynldf_NONE ) THEN ; nldf = np_no_ldf ; ioptio = ioptio + 1 ; ENDIF 126 IF( ln_dynldf_lap ) THEN ; ioptio = ioptio + 1 ; ENDIF 127 IF( ln_dynldf_blp ) THEN ; ioptio = ioptio + 1 ; ENDIF 128 IF( ioptio /= 1 ) CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 operator options (NONE/lap/blp)' ) 129 ! 130 IF(.NOT.ln_dynldf_NONE ) THEN !== direction ==>> type of operator ==! 131 ioptio = 0 132 IF( ln_dynldf_lev ) ioptio = ioptio + 1 133 IF( ln_dynldf_hor ) ioptio = ioptio + 1 134 IF( ln_dynldf_iso ) ioptio = ioptio + 1 135 IF( ioptio /= 1 ) CALL ctl_stop( 'dyn_ldf_init: use ONE of the 3 direction options (level/hor/iso)' ) 98 WRITE(numout,*) ' Namelist namdyn_ldf: already read in ldfdyn module' 99 WRITE(numout,*) ' see ldf_dyn_init report for lateral mixing parameters' 100 WRITE(numout,*) 136 101 ! 137 ! ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals 138 ierr = 0 139 IF( ln_dynldf_lap ) THEN ! laplacian operator 140 IF( ln_zco ) THEN ! z-coordinate 141 IF ( ln_dynldf_lev ) nldf = np_lap ! iso-level = horizontal (no rotation) 142 IF ( ln_dynldf_hor ) nldf = np_lap ! iso-level = horizontal (no rotation) 143 IF ( ln_dynldf_iso ) nldf = np_lap_i ! iso-neutral ( rotation) 144 ENDIF 145 IF( ln_zps ) THEN ! z-coordinate with partial step 146 IF ( ln_dynldf_lev ) nldf = np_lap ! iso-level (no rotation) 147 IF ( ln_dynldf_hor ) nldf = np_lap ! iso-level (no rotation) 148 IF ( ln_dynldf_iso ) nldf = np_lap_i ! iso-neutral ( rotation) 149 ENDIF 150 IF( ln_sco ) THEN ! s-coordinate 151 IF ( ln_dynldf_lev ) nldf = np_lap ! iso-level = horizontal (no rotation) 152 IF ( ln_dynldf_hor ) nldf = np_lap_i ! horizontal ( rotation) 153 IF ( ln_dynldf_iso ) nldf = np_lap_i ! iso-neutral ( rotation) 154 ENDIF 155 ENDIF 156 ! 157 IF( ln_dynldf_blp ) THEN ! bilaplacian operator 158 IF( ln_zco ) THEN ! z-coordinate 159 IF( ln_dynldf_lev ) nldf = np_blp ! iso-level = horizontal (no rotation) 160 IF( ln_dynldf_hor ) nldf = np_blp ! iso-level = horizontal (no rotation) 161 IF( ln_dynldf_iso ) ierr = 2 ! iso-neutral ( rotation) 162 ENDIF 163 IF( ln_zps ) THEN ! z-coordinate with partial step 164 IF( ln_dynldf_lev ) nldf = np_blp ! iso-level (no rotation) 165 IF( ln_dynldf_hor ) nldf = np_blp ! iso-level (no rotation) 166 IF( ln_dynldf_iso ) ierr = 2 ! iso-neutral ( rotation) 167 ENDIF 168 IF( ln_sco ) THEN ! s-coordinate 169 IF( ln_dynldf_lev ) nldf = np_blp ! iso-level (no rotation) 170 IF( ln_dynldf_hor ) ierr = 2 ! horizontal ( rotation) 171 IF( ln_dynldf_iso ) ierr = 2 ! iso-neutral ( rotation) 172 ENDIF 173 ENDIF 174 ! 175 IF( ierr == 2 ) CALL ctl_stop( 'rotated bi-laplacian operator does not exist' ) 176 ! 177 IF( nldf == np_lap_i ) l_ldfslp = .TRUE. ! rotation require the computation of the slopes 178 ! 179 ENDIF 180 181 IF(lwp) THEN 182 WRITE(numout,*) 183 IF( nldf == np_no_ldf ) WRITE(numout,*) ' ==>>> NO lateral viscosity' 184 IF( nldf == np_lap ) WRITE(numout,*) ' ==>>> iso-level laplacian operator' 185 IF( nldf == np_lap_i ) WRITE(numout,*) ' ==>>> rotated laplacian operator with iso-level background' 186 IF( nldf == np_blp ) WRITE(numout,*) ' ==>>> iso-level bi-laplacian operator' 102 SELECT CASE( nldf_dyn ) ! print the choice of operator 103 CASE( np_no_ldf ) ; WRITE(numout,*) ' ==>>> NO lateral viscosity' 104 CASE( np_lap ) ; WRITE(numout,*) ' ==>>> iso-level laplacian operator' 105 CASE( np_lap_i ) ; WRITE(numout,*) ' ==>>> rotated laplacian operator with iso-level background' 106 CASE( np_blp ) ; WRITE(numout,*) ' ==>>> iso-level bi-laplacian operator' 107 END SELECT 187 108 ENDIF 188 109 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90
r9124 r9490 108 108 REAL(wp) :: zabe1, zmskt, zmkt, zuav, zuwslpi, zuwslpj ! local scalars 109 109 REAL(wp) :: zabe2, zmskf, zmkf, zvav, zvwslpi, zvwslpj ! - - 110 REAL(wp) :: zcof0, zcof1, zcof2, zcof3, zcof4 110 REAL(wp) :: zcof0, zcof1, zcof2, zcof3, zcof4, zaht_0 ! - - 111 111 REAL(wp), DIMENSION(jpi,jpj) :: ziut, zivf, zdku, zdk1u ! 2D workspace 112 112 REAL(wp), DIMENSION(jpi,jpj) :: zjuf, zjvt, zdkv, zdk1v ! - - … … 139 139 ! 140 140 ENDIF 141 141 142 zaht_0 = 0.5_wp * rn_Ud * rn_Ld ! aht_0 from namtra_ldf = zaht_max 143 142 144 ! ! =============== 143 145 DO jk = 1, jpkm1 ! Horizontal slab … … 174 176 & + umask(ji-1,jj,jk+1)+umask(ji,jj,jk ) , 1._wp ) 175 177 176 zcof1 = - rn_aht_0 * e2t(ji,jj) * zmskt * 0.5 * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) )178 zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5 * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 177 179 178 180 ziut(ji,jj) = ( zabe1 * ( ub(ji,jj,jk) - ub(ji-1,jj,jk) ) & … … 189 191 & + umask(ji-1,jj,jk+1) + umask(ji,jj,jk ) , 1._wp ) 190 192 191 zcof1 = - rn_aht_0 * e2t(ji,jj) * zmskt * 0.5 * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) )193 zcof1 = - zaht_0 * e2t(ji,jj) * zmskt * 0.5 * ( uslp(ji-1,jj,jk) + uslp(ji,jj,jk) ) 192 194 193 195 ziut(ji,jj) = ( zabe1 * ( ub(ji,jj,jk) - ub(ji-1,jj,jk) ) & … … 206 208 & + umask(ji,jj+1,jk+1)+umask(ji,jj,jk ) , 1._wp ) 207 209 208 zcof2 = - rn_aht_0 * e1f(ji,jj) * zmskf * 0.5 * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) )210 zcof2 = - zaht_0 * e1f(ji,jj) * zmskf * 0.5 * ( vslp(ji+1,jj,jk) + vslp(ji,jj,jk) ) 209 211 210 212 zjuf(ji,jj) = ( zabe2 * ( ub(ji,jj+1,jk) - ub(ji,jj,jk) ) & … … 227 229 & + vmask(ji+1,jj,jk+1)+vmask(ji,jj,jk ) , 1._wp ) 228 230 229 zcof1 = - rn_aht_0 * e2f(ji,jj) * zmskf * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) )231 zcof1 = - zaht_0 * e2f(ji,jj) * zmskf * 0.5 * ( uslp(ji,jj+1,jk) + uslp(ji,jj,jk) ) 230 232 231 233 zivf(ji,jj) = ( zabe1 * ( vb(ji+1,jj,jk) - vb(ji,jj,jk) ) & … … 244 246 & + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk ) , 1._wp ) 245 247 246 zcof2 = - rn_aht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )248 zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 247 249 248 250 zjvt(ji,jj) = ( zabe2 * ( vb(ji,jj,jk) - vb(ji,jj-1,jk) ) & … … 259 261 & + vmask(ji,jj-1,jk+1)+vmask(ji,jj,jk ), 1. ) 260 262 261 zcof2 = - rn_aht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) )263 zcof2 = - zaht_0 * e1t(ji,jj) * zmskt * 0.5 * ( vslp(ji,jj-1,jk) + vslp(ji,jj,jk) ) 262 264 263 265 zjvt(ji,jj) = ( zabe2 * ( vb(ji,jj,jk) - vb(ji,jj-1,jk) ) & … … 335 337 DO jk = 2, jpkm1 336 338 DO ji = 2, jpim1 337 zcof0 = 0.5_wp * rn_aht_0 * umask(ji,jj,jk)339 zcof0 = 0.5_wp * zaht_0 * umask(ji,jj,jk) 338 340 ! 339 341 zuwslpi = zcof0 * ( wslpi(ji+1,jj,jk) + wslpi(ji,jj,jk) ) … … 353 355 & + zdj1u(ji,jk ) + zdju (ji ,jk ) ) 354 356 ! vertical mixing coefficient (akzu) 355 ! Note: zcof0 include rn_aht_0, so divided by rn_aht_0 to obtain slp^2 * rn_aht_0356 akzu(ji,jj,jk) = ( zuwslpi * zuwslpi + zuwslpj * zuwslpj ) / rn_aht_0357 ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0 358 akzu(ji,jj,jk) = ( zuwslpi * zuwslpi + zuwslpj * zuwslpj ) / zaht_0 357 359 END DO 358 360 END DO … … 361 363 DO jk = 2, jpkm1 362 364 DO ji = 2, jpim1 363 zcof0 = 0.5_wp * rn_aht_0 * vmask(ji,jj,jk)365 zcof0 = 0.5_wp * zaht_0 * vmask(ji,jj,jk) 364 366 ! 365 367 zvwslpi = zcof0 * ( wslpi(ji,jj+1,jk) + wslpi(ji,jj,jk) ) … … 379 381 & + zdjv (ji,jk ) + zdj1v(ji ,jk ) ) 380 382 ! vertical mixing coefficient (akzv) 381 ! Note: zcof0 include rn_aht_0, so divided by rn_aht_0 to obtain slp^2 * rn_aht_0382 akzv(ji,jj,jk) = ( zvwslpi * zvwslpi + zvwslpj * zvwslpj ) / rn_aht_0383 ! Note: zcof0 include zaht_0, so divided by zaht_0 to obtain slp^2 * zaht_0 384 akzv(ji,jj,jk) = ( zvwslpi * zvwslpi + zvwslpj * zvwslpj ) / zaht_0 383 385 END DO 384 386 END DO -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90
r9250 r9490 19 19 USE zdfdrg ! vertical physics: top/bottom drag coef. 20 20 USE dynadv ,ONLY: ln_dynadv_vec ! dynamics: advection form 21 USE dynldf ,ONLY: nldf, np_lap_i ! dynamics: type of lateral mixing22 21 USE dynldf_iso,ONLY: akzu, akzv ! dynamics: vertical component of rotated lateral mixing 23 USE ldfdyn ! lateral diffusion: eddy viscosity coef. 22 USE ldfdyn ! lateral diffusion: eddy viscosity coef. and type of operator 24 23 USE trd_oce ! trends: ocean variables 25 24 USE trddyn ! trend manager: dynamics … … 156 155 ! !* Matrix construction 157 156 zdt = r2dt * 0.5 158 IF( nldf == np_lap_i ) THEN ! rotated lateral mixing: add its vertical mixing (akzu) 157 SELECT CASE( nldf_dyn ) 158 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzu) 159 159 DO jk = 1, jpkm1 160 160 DO jj = 2, jpjm1 … … 171 171 END DO 172 172 END DO 173 ELSE ! standard case173 CASE DEFAULT ! iso-level lateral mixing 174 174 DO jk = 1, jpkm1 175 175 DO jj = 2, jpjm1 … … 184 184 END DO 185 185 END DO 186 END IF186 END SELECT 187 187 ! 188 188 DO jj = 2, jpjm1 !* Surface boundary conditions … … 274 274 ! !* Matrix construction 275 275 zdt = r2dt * 0.5 276 IF( nldf == np_lap_i ) THEN ! rotated lateral mixing: add its vertical mixing (akzu) 276 SELECT CASE( nldf_dyn ) 277 CASE( np_lap_i ) ! rotated lateral mixing: add its vertical mixing (akzu) 277 278 DO jk = 1, jpkm1 278 279 DO jj = 2, jpjm1 279 280 DO ji = fs_2, fs_jpim1 ! vector opt. 280 281 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk) ! after scale factor at T-point 281 zzwi = - zdt * ( avm(ji,jj+1,jk ) + avm(ji,jj,jk ) + akzv(ji,jj,jk ) ) &282 zzwi = - zdt * ( avm(ji,jj+1,jk ) + avm(ji,jj,jk ) + akzv(ji,jj,jk ) ) & 282 283 & / ( ze3va * e3vw_n(ji,jj,jk ) ) * wvmask(ji,jj,jk ) 283 zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) ) &284 zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) + akzv(ji,jj,jk+1) ) & 284 285 & / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 285 286 zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk ) … … 289 290 END DO 290 291 END DO 291 ELSE ! standard case292 CASE DEFAULT ! iso-level lateral mixing 292 293 DO jk = 1, jpkm1 293 294 DO jj = 2, jpjm1 294 295 DO ji = fs_2, fs_jpim1 ! vector opt. 295 296 ze3va = ( 1._wp - r_vvl ) * e3v_n(ji,jj,jk) + r_vvl * e3v_a(ji,jj,jk) ! after scale factor at T-point 296 zzwi = - zdt * ( avm(ji,jj+1,jk ) + avm(ji,jj,jk ) ) / ( ze3va * e3vw_n(ji,jj,jk ) ) * wvmask(ji,jj,jk )297 zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1)297 zzwi = - zdt * ( avm(ji,jj+1,jk ) + avm(ji,jj,jk ) ) / ( ze3va * e3vw_n(ji,jj,jk ) ) * wvmask(ji,jj,jk ) 298 zzws = - zdt * ( avm(ji,jj+1,jk+1) + avm(ji,jj,jk+1) ) / ( ze3va * e3vw_n(ji,jj,jk+1) ) * wvmask(ji,jj,jk+1) 298 299 zwi(ji,jj,jk) = zzwi * wvmask(ji,jj,jk ) 299 300 zws(ji,jj,jk) = zzws * wvmask(ji,jj,jk+1) … … 302 303 END DO 303 304 END DO 304 END IF305 END SELECT 305 306 ! 306 307 DO jj = 2, jpjm1 !* Surface boundary conditions
Note: See TracChangeset
for help on using the changeset viewer.