Changeset 1601 for trunk/NEMO/OPA_SRC/LDF/ldfdyn.F90
- Timestamp:
- 2009-08-11T12:09:19+02:00 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/LDF/ldfdyn.F90
r1152 r1601 4 4 !! Ocean physics: lateral viscosity coefficient 5 5 !!===================================================================== 6 !! History : OPA ! 1997-07 (G. Madec) multi dimensional coefficients 7 !! NEMO 1.0 ! 2002-09 (G. Madec) F90: Free form and module 8 !!---------------------------------------------------------------------- 6 9 7 10 !!---------------------------------------------------------------------- … … 11 14 !! ldf_dyn_c1d : 1D eddy viscosity coefficient initialization 12 15 !!---------------------------------------------------------------------- 13 !! * Modules used14 16 USE oce ! ocean dynamics and tracers 15 17 USE dom_oce ! ocean space and time domain … … 17 19 USE phycst ! physical constants 18 20 USE ldfslp ! ??? 21 USE ioipsl 19 22 USE in_out_manager ! I/O manager 20 23 USE lib_mpp ! distribued memory computing library … … 24 27 PRIVATE 25 28 26 !! * Routine accessibility 27 PUBLIC ldf_dyn_init ! called by opa.F90 29 PUBLIC ldf_dyn_init ! called by opa.F90 28 30 29 31 INTERFACE ldf_zpf … … 34 36 # include "domzgr_substitute.h90" 35 37 !!---------------------------------------------------------------------- 36 !! OPA 9.0 , LOCEAN-IPSL (2005)38 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 37 39 !! $Id$ 38 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt40 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 39 41 !!---------------------------------------------------------------------- 40 42 … … 48 50 !! 49 51 !! ** Method : 50 !! Eddy viscosity coefficients: 51 !! default option : constant coef. ahm0 (namelist) 52 !! 'key_dynldf_c1d': depth dependent coef. defined in 53 !! in ldf_dyn_c1d routine 54 !! 'key_dynldf_c2d': latitude and longitude dependent coef. 55 !! defined in ldf_dyn_c2d routine 56 !! 'key_dynldf_c3d': latitude, longitude, depth dependent coef. 57 !! defined in ldf_dyn_c3d routine 52 !! - default option : ahm = constant coef. = rn_ahm_0 (namelist) 53 !! - 'key_dynldf_c1d': ahm = F(depth) see ldf_dyn_c1d.h90 54 !! - 'key_dynldf_c2d': ahm = F(latitude,longitude) see ldf_dyn_c2d.h90 55 !! - 'key_dynldf_c3d': ahm = F(latitude,longitude,depth) see ldf_dyn_c3d.h90 56 !! 58 57 !! N.B. User defined include files. By default, 3d and 2d coef. 59 58 !! are set to a constant value given in the namelist and the 1d … … 61 60 !! profile. 62 61 !! 63 !! Reference : 64 !! Madec, G. and M. Imbard, 1996, A global ocean mesh to overcome 65 !! the North Pole singularity, Climate Dynamics, 12, 381-388. 66 !! 67 !! History : 68 !! ! 07-97 (G. Madec) from inimix.F split in 2 routines 69 !! ! 08-97 (G. Madec) multi dimensional coefficients 70 !! 8.5 ! 02-09 (G. Madec) F90: Free form and module 71 !!---------------------------------------------------------------------- 72 !! * Modules used 73 USE ioipsl 74 75 !! * Local declarations 62 !! Reference : Madec, G. and M. Imbard, 1996: Climate Dynamics, 12, 381-388. 63 !!---------------------------------------------------------------------- 76 64 INTEGER :: ioptio ! ??? 77 65 LOGICAL :: ll_print = .FALSE. ! Logical flag for printing viscosity coef. 78 79 80 NAMELIST/nam_dynldf/ ln_dynldf_lap , ln_dynldf_bilap, & 81 & ln_dynldf_level, ln_dynldf_hor, ln_dynldf_iso, & 82 & ahm0, ahmb0 83 !!---------------------------------------------------------------------- 84 85 86 ! Define the lateral physics parameters 87 ! ====================================== 88 89 ! Read Namelist nam_dynldf : Lateral physics 90 REWIND( numnam ) 91 READ ( numnam, nam_dynldf ) 92 93 ! Parameter print 94 IF(lwp) THEN 66 !! 67 NAMELIST/namdyn_ldf/ ln_dynldf_lap , ln_dynldf_bilap, & 68 & ln_dynldf_level, ln_dynldf_hor , ln_dynldf_iso, & 69 & rn_ahm_0 , rn_ahmb_0 70 !!---------------------------------------------------------------------- 71 72 REWIND( numnam ) ! Read Namelist namdyn_ldf : Lateral physics 73 READ ( numnam, namdyn_ldf ) 74 75 IF(lwp) THEN ! Parameter print 95 76 WRITE(numout,*) 96 77 WRITE(numout,*) 'ldf_dyn : lateral momentum physics' 97 78 WRITE(numout,*) '~~~~~~~' 98 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters' 99 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 100 WRITE(numout,*) ' bilaplacian operator ln_dynldf_bilap = ', ln_dynldf_bilap 101 WRITE(numout,*) ' iso-level ln_dynldf_level = ', ln_dynldf_level 102 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 103 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 104 WRITE(numout,*) ' horizontal eddy viscosity ahm0 = ', ahm0 105 WRITE(numout,*) ' background viscosity ahmb0 = ', ahmb0 106 ENDIF 79 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters' 80 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 81 WRITE(numout,*) ' bilaplacian operator ln_dynldf_bilap = ', ln_dynldf_bilap 82 WRITE(numout,*) ' iso-level ln_dynldf_level = ', ln_dynldf_level 83 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 84 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 85 WRITE(numout,*) ' horizontal eddy viscosity rn_ahm_0 = ', rn_ahm_0 86 WRITE(numout,*) ' background viscosity rn_ahmb_0 = ', rn_ahmb_0 87 ENDIF 88 89 ahm0 = rn_ahm_0 ! OLD namelist variables defined from DOCTOR namelist variables 90 ahmb0 = rn_ahmb_0 107 91 108 92 ! ... check of lateral diffusive operator on tracers … … 112 96 ioptio = 0 113 97 #if defined key_dynldf_c3d 114 IF(lwp) WRITE(numout,*) ' 98 IF(lwp) WRITE(numout,*) ' momentum mixing coef. = F( latitude, longitude, depth)' 115 99 ioptio = ioptio+1 116 100 #endif 117 101 #if defined key_dynldf_c2d 118 IF(lwp) WRITE(numout,*) ' 102 IF(lwp) WRITE(numout,*) ' momentum mixing coef. = F( latitude, longitude)' 119 103 ioptio = ioptio+1 120 104 #endif 121 105 #if defined key_dynldf_c1d 122 IF(lwp) WRITE(numout,*) ' 106 IF(lwp) WRITE(numout,*) ' momentum mixing coef. = F( depth )' 123 107 ioptio = ioptio+1 124 IF( ln_sco ) CALL ctl_stop( ' 108 IF( ln_sco ) CALL ctl_stop( 'key_dynldf_c1d cannot be used in s-coordinate (ln_sco)' ) 125 109 #endif 126 110 IF( ioptio == 0 ) THEN 127 IF(lwp) WRITE(numout,*) ' 111 IF(lwp) WRITE(numout,*) ' momentum mixing coef. = constant (default option)' 128 112 ELSEIF( ioptio > 1 ) THEN 129 CALL ctl_stop( ' use only one of the following keys:', & 130 & ' key_dynldf_c3d, key_dynldf_c2d, key_dynldf_c1d' ) 113 CALL ctl_stop( 'use only one of the following keys: key_dynldf_c3d, key_dynldf_c2d, key_dynldf_c1d' ) 131 114 ENDIF 132 115 133 116 134 117 IF( ln_dynldf_bilap ) THEN 135 IF(lwp) WRITE(numout,*) ' biharmonic momentum diffusion' 136 IF( ahm0 > 0 .AND. .NOT. lk_esopa ) & 137 & CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 118 IF(lwp) WRITE(numout,*) ' biharmonic momentum diffusion' 119 IF( ahm0 > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 138 120 ELSE 139 IF(lwp) WRITE(numout,*) ' harmonic momentum diff. (default)' 140 IF( ahm0 < 0 .AND. .NOT. lk_esopa ) & 141 & CALL ctl_stop( ' The horizontal viscosity coef. ahm0 must be positive' ) 121 IF(lwp) WRITE(numout,*) ' harmonic momentum diff. (default)' 122 IF( ahm0 < 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be positive' ) 142 123 ENDIF 143 124 … … 145 126 ! Lateral eddy viscosity 146 127 ! ====================== 147 148 128 #if defined key_dynldf_c3d 149 129 CALL ldf_dyn_c3d( ll_print ) ! ahm = 3D coef. = F( longitude, latitude, depth ) … … 159 139 IF(lwp) WRITE(numout,*) ' ahm1 = ahm2 = ahm0 = ',ahm0 160 140 #endif 161 141 ! 162 142 END SUBROUTINE ldf_dyn_init 163 143 … … 178 158 !! 179 159 !! ** Method : 1D eddy viscosity coefficients ( depth ) 180 !! 181 !!---------------------------------------------------------------------- 182 !! * Arguments 183 LOGICAL , INTENT (in ) :: ld_print ! If true, output arrays on numout 184 REAL(wp), INTENT (in ) :: & 185 pdam, & ! depth of the inflection point 186 pwam, & ! width of inflection 187 pbot ! battom value (0<pbot<= 1) 188 REAL(wp), INTENT (in ), DIMENSION(jpk) :: & 189 pdep ! depth of the gridpoint (T, U, V, F) 190 REAL(wp), INTENT (inout), DIMENSION(jpk) :: & 191 pah ! adimensional vertical profile 192 193 !! * Local variables 160 !!---------------------------------------------------------------------- 161 LOGICAL , INTENT(in ) :: ld_print ! If true, output arrays on numout 162 REAL(wp), INTENT(in ) :: pdam ! depth of the inflection point 163 REAL(wp), INTENT(in ) :: pwam ! width of inflection 164 REAL(wp), INTENT(in ) :: pbot ! bottom value (0<pbot<= 1) 165 REAL(wp), INTENT(in ), DIMENSION(jpk) :: pdep ! depth of the gridpoint (T, U, V, F) 166 REAL(wp), INTENT(inout), DIMENSION(jpk) :: pah ! adimensional vertical profile 167 !! 194 168 INTEGER :: jk ! dummy loop indices 195 169 REAL(wp) :: zm00, zm01, zmhb, zmhs ! temporary scalars … … 205 179 END DO 206 180 207 ! Control print 208 IF(lwp .AND. ld_print ) THEN 181 IF(lwp .AND. ld_print ) THEN ! Control print 209 182 WRITE(numout,*) 210 183 WRITE(numout,*) ' ahm profile : ' … … 215 188 END DO 216 189 ENDIF 217 190 ! 218 191 END SUBROUTINE ldf_zpf_1d 219 192 … … 226 199 !! 227 200 !! ** Method : 1D eddy viscosity coefficients ( depth ) 228 !! 229 !!---------------------------------------------------------------------- 230 !! * Arguments 231 LOGICAL , INTENT (in ) :: ld_print ! If true, output arrays on numout 232 REAL(wp), INTENT (in ) :: & 233 pdam, & ! depth of the inflection point 234 pwam, & ! width of inflection 235 pbot ! battom value (0<pbot<= 1) 236 REAL(wp), INTENT (in ), DIMENSION(jpk) :: & 237 pdep ! depth of the gridpoint (T, U, V, F) 238 REAL(wp), INTENT (inout), DIMENSION(jpi,jpj,jpk) :: & 239 pah ! adimensional vertical profile 240 241 !! * Local variables 201 !!---------------------------------------------------------------------- 202 LOGICAL , INTENT(in ) :: ld_print ! If true, output arrays on numout 203 REAL(wp), INTENT(in ) :: pdam ! depth of the inflection point 204 REAL(wp), INTENT(in ) :: pwam ! width of inflection 205 REAL(wp), INTENT(in ) :: pbot ! bottom value (0<pbot<= 1) 206 REAL(wp), INTENT(in ), DIMENSION (jpk) :: pdep ! depth of the gridpoint (T, U, V, F) 207 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pah ! adimensional vertical profile 208 !! 242 209 INTEGER :: jk ! dummy loop indices 243 210 REAL(wp) :: zm00, zm01, zmhb, zmhs, zcf ! temporary scalars … … 254 221 END DO 255 222 256 ! Control print 257 IF(lwp .AND. ld_print ) THEN 223 IF(lwp .AND. ld_print ) THEN ! Control print 258 224 WRITE(numout,*) 259 225 WRITE(numout,*) ' ahm profile : ' … … 264 230 END DO 265 231 ENDIF 266 232 ! 267 233 END SUBROUTINE ldf_zpf_1d_3d 268 234 … … 275 241 !! 276 242 !! ** Method : 3D for partial step or s-coordinate 277 !! 278 !!---------------------------------------------------------------------- 279 !! * Arguments 280 LOGICAL , INTENT (in ) :: ld_print ! If true, output arrays on numout 281 REAL(wp), INTENT (in ) :: & 282 pdam, & ! depth of the inflection point 283 pwam, & ! width of inflection 284 pbot ! reduction factor (surface value / bottom value) 285 REAL(wp), INTENT (in ), DIMENSION(jpi,jpj,jpk) :: & 286 pdep ! dep of the gridpoint (T, U, V, F) 287 REAL(wp), INTENT (inout), DIMENSION(jpi,jpj,jpk) :: & 288 pah ! adimensional vertical profile 289 290 !! * Local variables 243 !!---------------------------------------------------------------------- 244 LOGICAL , INTENT(in ) :: ld_print ! If true, output arrays on numout 245 REAL(wp), INTENT(in ) :: pdam ! depth of the inflection point 246 REAL(wp), INTENT(in ) :: pwam ! width of inflection 247 REAL(wp), INTENT(in ) :: pbot ! bottom value (0<pbot<= 1) 248 REAL(wp), INTENT(in ), DIMENSION(jpi,jpj,jpk) :: pdep ! dep of the gridpoint (T, U, V, F) 249 REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) :: pah ! adimensional vertical profile 250 !! 291 251 INTEGER :: jk ! dummy loop indices 292 252 REAL(wp) :: zm00, zm01, zmhb, zmhs ! temporary scalars … … 302 262 END DO 303 263 304 ! Control print 305 IF(lwp .AND. ld_print ) THEN 264 IF(lwp .AND. ld_print ) THEN ! Control print 306 265 WRITE(numout,*) 307 266 WRITE(numout,*) ' ahm profile : ' … … 312 271 END DO 313 272 ENDIF 314 273 ! 315 274 END SUBROUTINE ldf_zpf_3d 275 316 276 !!====================================================================== 317 277 END MODULE ldfdyn
Note: See TracChangeset
for help on using the changeset viewer.