Changeset 1839 for branches/dev_r1821_mixed_ldfdyn
- Timestamp:
- 2010-04-14T15:28:04+02:00 (14 years ago)
- Location:
- branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/DYN/dynldf.F90
r1152 r1839 69 69 CASE ( 2 ) ; CALL dyn_ldf_bilap ( kt ) ! iso-level bilaplacian 70 70 CASE ( 3 ) ; CALL dyn_ldf_bilapg ( kt ) ! s-coord. horizontal bilaplacian 71 CASE ( 4 ) ! iso-level laplacian + bilaplacian 72 CALL dyn_ldf_lap ( kt ) 73 CALL dyn_ldf_bilap ( kt ) 74 CASE ( 5 ) ! rotated laplacian + bilaplacian (s-coord) 75 CALL dyn_ldf_iso ( kt ) 76 CALL dyn_ldf_bilapg ( kt ) 71 77 ! 72 78 CASE ( -1 ) ! esopa: test all possibility with control print … … 83 89 CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask, & 84 90 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 91 ! 92 CASE ( -2 ) ! neither laplacian nor bilaplacian schemes used 93 IF( kt == nit000 ) THEN 94 IF(lwp) WRITE(numout,*) 95 IF(lwp) WRITE(numout,*) 'dyn_ldf : no lateral diffusion on momentum setup' 96 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 97 ENDIF 85 98 END SELECT 86 99 … … 124 137 IF( ln_dynldf_lap ) ioptio = ioptio + 1 125 138 IF( ln_dynldf_bilap ) ioptio = ioptio + 1 126 IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE of the 2 lap/bilap operator type ondynamics' )139 IF( ioptio < 1 ) CALL ctl_warn( ' neither laplacian nor bilaplacian operator set for dynamics' ) 127 140 ioptio = 0 128 141 IF( ln_dynldf_level ) ioptio = ioptio + 1 … … 144 157 IF ( ln_dynldf_iso ) nldf = 1 ! isoneutral ( rotation) 145 158 ENDIF 146 IF ( ln_sco ) THEN ! z-coordinate159 IF ( ln_sco ) THEN ! s-coordinate 147 160 IF ( ln_dynldf_level ) nldf = 0 ! iso-level (no rotation) 148 161 IF ( ln_dynldf_hor ) nldf = 1 ! horizontal ( rotation) … … 162 175 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 163 176 ENDIF 164 IF ( ln_sco ) THEN ! z-coordinate177 IF ( ln_sco ) THEN ! s-coordinate 165 178 IF ( ln_dynldf_level ) nldf = 2 ! iso-level (no rotation) 166 179 IF ( ln_dynldf_hor ) nldf = 3 ! horizontal ( rotation) … … 169 182 ENDIF 170 183 184 IF( ln_dynldf_lap .AND. ln_dynldf_bilap ) THEN ! mixed laplacian and bilaplacian operators 185 IF ( ln_zco ) THEN ! z-coordinate 186 IF ( ln_dynldf_level ) nldf = 4 ! iso-level (no rotation) 187 IF ( ln_dynldf_hor ) nldf = 4 ! horizontal (no rotation) 188 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 189 ENDIF 190 IF ( ln_zps ) THEN ! z-coordinate 191 IF ( ln_dynldf_level ) ierr = 1 ! iso-level not allowed 192 IF ( ln_dynldf_hor ) nldf = 4 ! horizontal (no rotation) 193 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 194 ENDIF 195 IF ( ln_sco ) THEN ! s-coordinate 196 IF ( ln_dynldf_level ) nldf = 4 ! iso-level (no rotation) 197 IF ( ln_dynldf_hor ) nldf = 5 ! horizontal ( rotation) 198 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 199 ENDIF 200 ENDIF 201 171 202 IF( lk_esopa ) nldf = -1 ! esopa test 172 203 … … 179 210 IF(lwp) THEN 180 211 WRITE(numout,*) 212 IF( nldf == -2 ) WRITE(numout,*) ' neither laplacian nor bilaplacian schemes used' 181 213 IF( nldf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used' 182 214 IF( nldf == 0 ) WRITE(numout,*) ' laplacian operator' 183 IF( nldf == 1 ) WRITE(numout,*) ' Rotated laplacian operator'215 IF( nldf == 1 ) WRITE(numout,*) ' rotated laplacian operator' 184 216 IF( nldf == 2 ) WRITE(numout,*) ' bilaplacian operator' 185 IF( nldf == 3 ) WRITE(numout,*) ' Rotated bilaplacian' 217 IF( nldf == 3 ) WRITE(numout,*) ' rotated bilaplacian' 218 IF( nldf == 4 ) WRITE(numout,*) ' laplacian and bilaplacian operators' 219 IF( nldf == 5 ) WRITE(numout,*) ' rotated laplacian and bilaplacian operators' 186 220 ENDIF 187 221 ! -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/DYN/dynldf_lap.F90
r1152 r1839 78 78 IF( kt == nit000 ) THEN 79 79 IF(lwp) WRITE(numout,*) 80 IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplaci en) operator'80 IF(lwp) WRITE(numout,*) 'dyn_ldf : iso-level harmonic (laplacian) operator' 81 81 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 82 82 ENDIF -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn.F90
r1601 r1839 67 67 NAMELIST/namdyn_ldf/ ln_dynldf_lap , ln_dynldf_bilap, & 68 68 & ln_dynldf_level, ln_dynldf_hor , ln_dynldf_iso, & 69 & rn_ahm_0 , rn_ahmb_0 69 & rn_ahm_0 , rn_ahmb_0 , rn_ahm_0_blp 70 70 !!---------------------------------------------------------------------- 71 71 … … 78 78 WRITE(numout,*) '~~~~~~~' 79 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 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 laplacian eddy viscosity rn_ahm_0 = ', rn_ahm_0 86 WRITE(numout,*) ' background viscosity rn_ahmb_0 = ', rn_ahmb_0 87 WRITE(numout,*) ' horizontal bilaplacian eddy viscosity rn_ahm_0 = ', rn_ahm_0 88 89 ENDIF 90 91 ahm0 = rn_ahm_0 ! OLD namelist variables defined from DOCTOR namelist variables 92 ahmb0 = rn_ahmb_0 93 ahm0_blp = rn_ahm_0_blp 91 94 92 95 ! ... check of lateral diffusive operator on tracers … … 117 120 IF( ln_dynldf_bilap ) THEN 118 121 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' ) 122 IF( ahm0_blp == 0.0 ) ahm0_blp = ahm0 ! Old namelist method: bilap specified with ahm0 123 IF( .NOT. ln_dynldf_lap ) ahm0 = ahm0_blp ! Allow spatially varying coefs, which use ahm0 as input 124 IF( ahm0_blp > 0 .AND. .NOT. lk_esopa ) CALL ctl_stop( 'The horizontal viscosity coef. ahm0 must be negative' ) 120 125 ELSE 121 126 IF(lwp) WRITE(numout,*) ' harmonic momentum diff. (default)' -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn_c1d.h90
r1152 r1839 17 17 !! ** Method : 1D eddy viscosity coefficients ( depth ) 18 18 !! ahm3, ahm4 never used 19 !! biharmonic or harmonic operator : ahm1=ahm2 defined at T-level 19 !! harmonic operator : ahm1 defined at T-level 20 !! biharmonic operator : ahm2 defined at T-level 20 21 !! isopycnal or geopotential harmonic operator 21 22 !! : ahm1 defined at T-level … … 27 28 28 29 !! * Local variables 29 REAL(wp) :: zdam, zwam, zm00, zm01, zmhf, zmhs 30 REAL(wp) :: zdam, zwam, zm00, zm01, zmhf, zmhs 31 REAL(wp) :: zdam2, zwam2, zm200, zm201, zmh2f, zmh2s 30 32 REAL(wp) :: zahmf, zahms 31 33 !!---------------------------------------------------------------------- … … 36 38 IF(lwp) WRITE(numout,*) 37 39 38 ! Set ahm1 =ahm2(always at t-level)40 ! Set ahm1 for laplacian (always at t-level) 39 41 ! ============= 40 42 ! (USER: modify ahm1 following your desiderata) … … 53 55 zmhs = zahms-zmhf * zm00 54 56 55 ! set ahm1=ahm2 at T-level 57 ! Set ahm2 for bilaplacian (always at t-level) 58 ! ============= 59 ! (USER: modify ahm2 following your desiderata) 60 61 ! initialization of the profile 62 ! ahms, ahmf: surface and bottom values 63 zahm2s = ahm0_blp 64 zahm2f = ahm0_blp/4. 65 ! zdam, zwam: depth of the inflection pt and width of inflection 66 zdam2 = -300. 67 zwam2 = 300. 68 ! computation coefficients 69 zm200 = TANH( (0-zdam2)/zwam2 ) 70 zm201 = TANH( (-fsdept(1,1,jpk)-zdam2)/zwam2 ) 71 zmh2f = (zahm2s-zahm2f)/(zm200-zm201) 72 zmh2s = zahm2s-zmh2f * zm00 73 74 75 ! set ahm1 and ahm2 at T-level 56 76 DO jk = 1, jpk 57 ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam) / zwam)58 ahm2(jk) = ahm1(jk)77 ahm1(jk) = zmhs + zmhf * TANH( (-fsdept(1,1,jk)-zdam ) / zwam ) 78 ahm2(jk) = zmh2s + zmh2f * TANH( (-fsdept(1,1,jk)-zdam2) / zwam2 ) 59 79 END DO 60 80 … … 62 82 IF(lwp .AND. ld_print ) THEN 63 83 WRITE(numout,*) 64 WRITE(numout,*) ' ahm profile : '84 WRITE(numout,*) ' ahm profile (laplacian): ' 65 85 WRITE(numout,*) 66 86 WRITE(numout,9100) 67 87 DO jk = 1, jpk 68 88 WRITE(numout,9110) jk, ahm1(jk), fsdept(1,1,jk) 89 END DO 90 WRITE(numout,*) 91 WRITE(numout,*) ' ahm profile (bilaplacian): ' 92 WRITE(numout,*) 93 WRITE(numout,9100) 94 DO jk = 1, jpk 95 WRITE(numout,9110) jk, ahm2(jk), fsdept(1,1,jk) 69 96 END DO 70 97 ENDIF -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r1694 r1839 27 27 !! iso-model level : ahm3, ahm4 not used 28 28 !! 29 !! biharmonic operator : ahm 1is defined at u-point30 !! ahm 2is defined at v-point31 !! : ahm 3, ahm4not used29 !! biharmonic operator : ahm3 is defined at u-point 30 !! ahm4 is defined at v-point 31 !! : ahm1, ahm2 not used 32 32 !! 33 33 !!---------------------------------------------------------------------- … … 102 102 IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 103 103 104 za00 = ahm0 / ( zd_max * zd_max * zd_max )104 za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 105 105 DO jj = 1, jpj 106 106 DO ji = 1, jpi -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r1694 r1839 122 122 IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0 123 123 124 za00 = ahm0 / ( zd_max * zd_max * zd_max )124 za00 = ahm0_blp / ( zd_max * zd_max * zd_max ) 125 125 DO jj = 1, jpj 126 126 DO ji = 1, jpi -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90
r1601 r1839 17 17 LOGICAL , PUBLIC :: ln_dynldf_hor = .TRUE. !: horizontal (geopotential) direction 18 18 LOGICAL , PUBLIC :: ln_dynldf_iso = .FALSE. !: iso-neutral direction 19 REAL(wp), PUBLIC :: rn_ahm_0 = 40000._wp !: lateral eddy viscosity (m2/s) 20 REAL(wp), PUBLIC :: rn_ahmb_0 = 0._wp !: lateral background eddy viscosity (m2/s) 19 REAL(wp), PUBLIC :: rn_ahm_0 = 40000._wp !: lateral laplacian eddy viscosity (m2/s) 20 REAL(wp), PUBLIC :: rn_ahmb_0 = 0._wp !: lateral laplacian background eddy viscosity (m2/s) 21 REAL(wp), PUBLIC :: rn_ahm_0_blp = 0._wp !: lateral bilaplacian eddy viscosity (m4/s) 21 22 22 REAL(wp), PUBLIC :: ahm0, ahmb0 23 REAL(wp), PUBLIC :: ahm0, ahmb0, ahm0_blp ! OLD namelist names 23 24 24 25 #if defined key_dynldf_c3d -
branches/dev_r1821_mixed_ldfdyn/NEMO/OPA_SRC/LDF/ldfdyn_substitute.h90
r1152 r1839 10 10 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 11 11 !!---------------------------------------------------------------------- 12 !! 13 !! fsahmt, fsahmf - used for laplaian operator only 14 !! fsahmu, fsahmv - used for bilaplacian operator only 15 !! 12 16 #if defined key_dynldf_c3d 13 17 ! ' key_dynldf_c3d' : 3D coefficient … … 26 30 # define fsahmt(i,j,k) ahm1(k) 27 31 # define fsahmf(i,j,k) ahm1(k) 28 # define fsahmu(i,j,k) ahm 1(k)29 # define fsahmv(i,j,k) ahm 1(k)32 # define fsahmu(i,j,k) ahm2(k) 33 # define fsahmv(i,j,k) ahm2(k) 30 34 #else 31 35 ! default option : Constant coefficient 32 36 # define fsahmt(i,j,k) ahm0 33 37 # define fsahmf(i,j,k) ahm0 34 # define fsahmu(i,j,k) ahm0 35 # define fsahmv(i,j,k) ahm0 38 # define fsahmu(i,j,k) ahm0_blp 39 # define fsahmv(i,j,k) ahm0_blp 36 40 #endif
Note: See TracChangeset
for help on using the changeset viewer.