Changeset 32 for trunk/NEMO/OPA_SRC/LDF
- Timestamp:
- 2004-02-17T10:20:15+01:00 (20 years ago)
- Location:
- trunk/NEMO/OPA_SRC/LDF
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90
r3 r32 17 17 !! 18 18 !! ** Method : 19 !! **** W A R N I N G ****20 !! ORCA OCEAN VERSION21 !! This method is relevant ONLY for the grid build by the method22 !! given in the 'Reference' section.23 !! **** W A R N I N G ****24 !!25 19 !! 2D eddy viscosity coefficients ( longitude, latitude ) 26 20 !! … … 55 49 56 50 zdx_max = MAXVAL( e1t(:,:) ) 57 #if defined key_mpp 58 CALL mpp_max( zdx_max ) 59 #endif 51 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 52 60 53 IF(lwp) WRITE(numout,*) ' laplacian operator: ahm proportional to e1' 61 54 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 96 89 97 90 zdx_max = MAXVAL( e1u(:,:) ) 98 #if defined key_mpp 99 CALL mpp_max( zdx_max ) 100 #endif 91 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 92 101 93 IF(lwp) WRITE(numout,*) ' bi-laplacian operator: ahm proportional to e1**3 ' 102 94 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 141 133 142 134 !! * Arguments 143 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout135 LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout 144 136 145 137 !! * Local variables 146 INTEGER :: ji, jj ! dummy loop indices 147 INTEGER :: inumcf, iost, iim, ijm 148 INTEGER :: jn 149 INTEGER :: ifreq, il1, il2, ij, ii, inorth, isouth 150 INTEGER :: ipi, ipj, iumout, iwork, icompt, ibtest, ikmax 151 INTEGER :: ijpt0, ijpt1, iipt0, iipt1 152 INTEGER ,DIMENSION(jpidta,jpidta) :: idata 153 INTEGER ,DIMENSION(jpi ,jpj ) :: icof 138 INTEGER :: ji, jj, jn ! dummy loop indices 139 INTEGER :: inum = 11 ! temporary logical unit 140 INTEGER :: iost, iim, ijm 141 INTEGER :: ifreq, il1, il2, ij, ii 142 INTEGER, DIMENSION(jpidta,jpidta) :: idata 143 INTEGER, DIMENSION(jpi ,jpj ) :: icof 154 144 155 145 REAL(wp) :: zahmeq, zcoft, zcoff, zmsk … … 173 163 ! ===================== equatorial strip (20N-20S) defined at t-points 174 164 175 inumcf = 15 176 OPEN( UNIT=inumcf,FILE='ahmcoef',STATUS='OLD', & 177 FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 178 IOSTAT= iost) 165 OPEN( UNIT=inum, FILE='ahmcoef', STATUS='OLD', & 166 & FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 167 & IOSTAT= iost ) 179 168 IF( iost == 0 ) THEN 180 169 IF(lwp) WRITE(numout,*) ' file : ahmcoef open ok' 181 IF(lwp) WRITE(numout,*) ' unit = ', inum cf170 IF(lwp) WRITE(numout,*) ' unit = ', inum 182 171 IF(lwp) WRITE(numout,*) ' status = OLD' 183 172 IF(lwp) WRITE(numout,*) ' form = FORMATTED' … … 195 184 ENDIF 196 185 197 REWIND inum cf198 READ(inum cf,9101) clexp, iim, ijm199 READ(inum cf,'(/)')186 REWIND inum 187 READ(inum,9101) clexp, iim, ijm 188 READ(inum,'(/)') 200 189 ifreq = 40 201 190 il1 = 1 202 191 DO jn = 1, jpidta/ifreq+1 203 READ(inum cf,'(/)')192 READ(inum,'(/)') 204 193 il2 = MIN( jpidta, il1+ifreq-1 ) 205 READ(inum cf,9201) ( ii, ji = il1, il2, 5 )206 READ(inum cf,'(/)')194 READ(inum,9201) ( ii, ji = il1, il2, 5 ) 195 READ(inum,'(/)') 207 196 DO jj = jpjdta, 1, -1 208 READ(inum cf,9202) ij, ( idata(ji,jj), ji = il1, il2 )197 READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 209 198 END DO 210 199 il1 = il1 + ifreq -
trunk/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90
r3 r32 49 49 50 50 zdx_max = MAXVAL( e1t(:,:) ) 51 #if defined key_mpp 52 CALL mpp_max( zdx_max ) 53 #endif 51 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 52 54 53 IF(lwp) WRITE(numout,*) ' laplacian operator: ahm proportional to e1' 55 54 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 105 104 106 105 zdx_max = MAXVAL( e1u(:,:) ) 107 #if defined key_mpp 108 CALL mpp_max( zdx_max ) 109 #endif 106 IF( lk_mpp ) CALL mpp_max( zdx_max ) ! max over the global domain 107 110 108 IF(lwp) WRITE(numout,*) ' bi-laplacian operator: ahm proportional to e1**3 ' 111 109 IF(lwp) WRITE(numout,*) ' Caution, here we assume your mesh is isotropic ...' … … 133 131 ELSE ! partial steps or s-ccordinate 134 132 zc = MAXVAL( fsdept(:,:,jpkm1) ) 135 #if defined key_mpp 136 CALL mpp_max( zc ) 137 #endif 133 IF( lk_mpp ) CALL mpp_max( zc ) ! max over the global domain 134 138 135 zc = 1. / ( 1. - EXP( ( zc - zh ) / zh ) ) 139 136 DO jk = 2, jpkm1 … … 188 185 189 186 !! * local variables 190 INTEGER ::inumcf, iost, iim, ijm 191 INTEGER ::ji,jj,jk, jn 192 INTEGER ::ifreq, il1, il2, ij, ii 193 INTEGER ,DIMENSION(jpidta, jpjdta) :: idata 194 INTEGER ,DIMENSION(jpi , jpj ) :: icof 187 INTEGER :: ji, jj, jk, jn ! dummy loop indices 188 INTEGER :: inum = 11 ! temporary logical unit 189 INTEGER :: iost, iim, ijm 190 INTEGER :: ifreq, il1, il2, ij, ii 191 INTEGER, DIMENSION(jpidta, jpjdta) :: idata 192 INTEGER, DIMENSION(jpi , jpj ) :: icof 195 193 196 194 REAL(wp) :: zahmeq, zcoff, zcoft, zmsk 197 REAL(wp) :: zcoef(jpk)195 REAL(wp), DIMENSION(jpk) :: zcoef 198 196 199 197 CHARACTER (len=15) :: clexp … … 211 209 ! ===================== equatorial strip (20N-20S) defined at t-points 212 210 213 inumcf = 15 214 OPEN( UNIT=inumcf,FILE='ahmcoef',STATUS='OLD', & 215 FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 216 IOSTAT= iost) 211 OPEN( UNIT=inum, FILE='ahmcoef', STATUS='OLD', & 212 & FORM='FORMATTED', ACCESS='SEQUENTIAL', ERR=111 , & 213 & IOSTAT= iost) 217 214 IF( iost == 0 ) THEN 218 215 IF(lwp) THEN 219 216 WRITE(numout,*) ' file : ahmcoef open ok' 220 WRITE(numout,*) ' unit = ', inum cf217 WRITE(numout,*) ' unit = ', inum 221 218 WRITE(numout,*) ' status = OLD' 222 219 WRITE(numout,*) ' form = FORMATTED' … … 235 232 ENDIF 236 233 237 REWIND inum cf238 READ(inum cf,9101) clexp, iim, ijm239 READ(inum cf,'(/)')234 REWIND inum 235 READ(inum,9101) clexp, iim, ijm 236 READ(inum,'(/)') 240 237 ifreq = 40 241 238 il1 = 1 242 239 DO jn = 1, jpidta/ifreq+1 243 READ(inum cf,'(/)')240 READ(inum,'(/)') 244 241 il2 = MIN( jpidta, il1+ifreq-1 ) 245 READ(inum cf,9201) ( ii, ji = il1, il2, 5 )246 READ(inum cf,'(/)')242 READ(inum,9201) ( ii, ji = il1, il2, 5 ) 243 READ(inum,'(/)') 247 244 DO jj = jpjdta, 1, -1 248 READ(inum cf,9202) ij, ( idata(ji,jj), ji = il1, il2 )245 READ(inum,9202) ij, ( idata(ji,jj), ji = il1, il2 ) 249 246 END DO 250 247 il1 = il1 + ifreq -
trunk/NEMO/OPA_SRC/LDF/ldfeiv_substitute.h90
r3 r32 1 #if defined key_traldf_eiv 1 #if defined key_traldf_eiv || defined key_esopa 2 2 !!---------------------------------------------------------------------- 3 3 !! *** ldfeiv_substitute.h90 *** -
trunk/NEMO/OPA_SRC/LDF/ldfslp.F90
r3 r32 29 29 30 30 !! * Share module variables 31 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. ! slopes flag32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & 33 uslp, wslpi, & ! i_slope at U- and W-points34 vslp, wslpj ! j-slope at V- and W-points31 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. !: slopes flag 32 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 33 uslp, wslpi, & !: i_slope at U- and W-points 34 vslp, wslpj !: j-slope at V- and W-points 35 35 36 36 !! * Module variables … … 95 95 96 96 !! * Local declarations 97 INTEGER :: ji, jj, jk ! dummy loop indices 97 INTEGER :: ji, jj, jk ! dummy loop indices 98 INTEGER :: ii0, ii1, ij0, ij1 ! temporary integer 98 99 #if defined key_partial_steps 99 100 INTEGER :: iku, ikv ! temporary integers … … 120 121 121 122 zeps = 1.e-20 122 zmg = -1.0 / g 123 zm05g = -0.5 / g 123 zmg = -1.0 / grav 124 zm05g = -0.5 / grav 124 125 125 126 zww(:,:,:) = 0.e0 … … 177 178 178 179 ! Local vertical density gradient evaluated from N^2 179 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point180 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 180 181 181 182 DO jj = 1, jpj … … 323 324 324 325 ! Local vertical density gradient evaluated from N^2 325 ! zwy = d/dz(prd)= - mk ( prd ) / g * pn2 -- at w point326 ! zwy = d/dz(prd)= - mk ( prd ) / grav * pn2 -- at w point 326 327 DO jj = 1, jpj 327 328 DO ji = 1, jpi … … 450 451 ! 451 452 ! ! Gibraltar Strait 452 uslp ( mi0(69):mi1(71) , mj0(50):mj1(53) , jk ) = 0.0e0 453 vslp ( mi0(68):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 454 wslpi( mi0(69):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 455 wslpj( mi0(69):mi1(71) , mj0(51):mj1(53) , jk ) = 0.0e0 453 ij0 = 50 ; ij1 = 53 454 ii0 = 69 ; ii1 = 71 ; uslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 455 ij0 = 51 ; ij1 = 53 456 ii0 = 68 ; ii1 = 71 ; vslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 457 ii0 = 69 ; ii1 = 71 ; wslpi( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 458 ii0 = 69 ; ii1 = 71 ; wslpj( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 456 459 457 460 ! ! Mediterrannean Sea 458 uslp ( mi0(71):mi1(90) , mj0(49):mj1(56) , jk ) = 0.0e0 459 vslp ( mi0(70):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 460 wslpi( mi0(71):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 461 wslpj( mi0(71):mi1(90) , mj0(50):mj1(56) , jk ) = 0.0e0 461 ij0 = 49 ; ij1 = 56 462 ii0 = 71 ; ii1 = 90 ; uslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 463 ij0 = 50 ; ij1 = 56 464 ii0 = 70 ; ii1 = 90 ; vslp ( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 465 ii0 = 71 ; ii1 = 90 ; wslpi( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 466 ii0 = 71 ; ii1 = 90 ; wslpj( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , jk ) = 0.e0 462 467 ENDIF 463 468 ! ! =============== … … 527 532 528 533 zeps = 1.e-20 529 zmg = -1.0 / g 530 zm05g = -0.5 / g 534 zmg = -1.0 / grav 535 zm05g = -0.5 / grav 531 536 532 537 … … 567 572 568 573 ! Local vertical density gradient evaluated from N^2 569 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point574 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 570 575 571 576 !----------------------------------------------------------------------- … … 619 624 620 625 ! Local vertical density gradient evaluated from N^2 621 ! zwy = d/dz(prd)= - ( prd ) / g * mk(pn2) -- at t point626 ! zwy = d/dz(prd)= - ( prd ) / grav * mk(pn2) -- at t point 622 627 zwy ( :, jpj) = 0.0e0 623 628 zwy ( jpi, :) = 0.0e0 … … 673 678 674 679 ! Local vertical density gradient evaluated from N^2 675 ! zwy = d/dz(prd)= - mk ( prd ) / g * pn2 -- at w point680 ! zwy = d/dz(prd)= - mk ( prd ) / grav * pn2 -- at w point 676 681 # if defined key_vectopt_loop && ! defined key_autotasking 677 682 jj = 1 … … 809 814 !! Dummy module : NO Rotation of lateral mixing tensor 810 815 !!------------------------------------------------------------------------ 811 LOGICAL, PUBLIC, PARAMETER :: lk_ldfslp = .FALSE. ! slopes flag816 LOGICAL, PUBLIC, PARAMETER :: lk_ldfslp = .FALSE. !: slopes flag 812 817 CONTAINS 813 818 SUBROUTINE ldf_slp( kt, prd, pn2 ) ! Dummy routine 814 819 INTEGER, INTENT(in) :: kt 815 820 REAL,DIMENSION(:,:,:), INTENT(in) :: prd, pn2 816 WRITE(*,*) kt, prd, pn2821 WRITE(*,*) 'ldf_slp: You should not have seen this print! error?', kt, prd(1,1,1), pn2(1,1,1) 817 822 END SUBROUTINE ldf_slp 818 823 #endif -
trunk/NEMO/OPA_SRC/LDF/ldftra_oce.F90
r3 r32 22 22 !!---------------------------------------------------------------------- 23 23 24 LOGICAL , PUBLIC :: & !! !** lateral mixing namelist (nam_traldf) **25 ln_traldf_lap = .TRUE. , & ! laplacian operator26 ln_traldf_bilap = .FALSE. , & ! bilaplacian operator27 ln_traldf_level = .FALSE. , & ! iso-level direction28 ln_traldf_hor = .FALSE. , & ! horizontal (geopotential) direction29 ln_traldf_iso = .TRUE. ! iso-neutral direction24 LOGICAL , PUBLIC :: & !!: ** lateral mixing namelist (nam_traldf) ** 25 ln_traldf_lap = .TRUE. , & !: laplacian operator 26 ln_traldf_bilap = .FALSE. , & !: bilaplacian operator 27 ln_traldf_level = .FALSE. , & !: iso-level direction 28 ln_traldf_hor = .FALSE. , & !: horizontal (geopotential) direction 29 ln_traldf_iso = .TRUE. !: iso-neutral direction 30 30 31 REAL(wp), PUBLIC :: & !! !** lateral mixing namelist (namldf) **32 aht0 = 2000._wp , & ! lateral eddy diffusivity (m2/s)33 ahtb0 = 0._wp , & ! lateral background eddy diffusivity (m2/s)34 aeiv0 = 2000._wp ! eddy induced velocity coefficient (m2/s)31 REAL(wp), PUBLIC :: & !!: ** lateral mixing namelist (namldf) ** 32 aht0 = 2000._wp , & !: lateral eddy diffusivity (m2/s) 33 ahtb0 = 0._wp , & !: lateral background eddy diffusivity (m2/s) 34 aeiv0 = 2000._wp !: eddy induced velocity coefficient (m2/s) 35 35 36 LOGICAL , PUBLIC :: & ! flag of the lateral diff. scheme used37 l_traldf_lap , & ! iso-level laplacian operator38 l_traldf_bilap , & ! iso-level bilaplacian operator39 l_traldf_bilapg , & ! geopotential bilap. (s-coord)40 l_traldf_iso , & ! iso-neutral laplacian or horizontal lapacian (s-coord)41 l_trazdf_iso , & ! idem for the vertical component42 l_trazdf_iso_vo , & ! idem with vectopt_memory43 l_traldf_iso_zps ! iso-neutral laplacian (partial steps)36 LOGICAL , PUBLIC :: & !: flag of the lateral diff. scheme used 37 l_traldf_lap , & !: iso-level laplacian operator 38 l_traldf_bilap , & !: iso-level bilaplacian operator 39 l_traldf_bilapg , & !: geopotential bilap. (s-coord) 40 l_traldf_iso , & !: iso-neutral laplacian or horizontal lapacian (s-coord) 41 l_trazdf_iso , & !: idem for the vertical component 42 l_trazdf_iso_vo , & !: idem with vectopt_memory 43 l_traldf_iso_zps !: iso-neutral laplacian (partial steps) 44 44 45 45 #if defined key_traldf_c3d 46 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & ! ** 3D coefficients **46 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: ** 3D coefficients ** 47 47 #elif defined key_traldf_c2d 48 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & ! ** 2D coefficients **48 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: ** 2D coefficients ** 49 49 #elif defined key_traldf_c1d 50 REAL(wp), PUBLIC, DIMENSION(jpk) :: & ! ** 1D coefficients **50 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: ** 1D coefficients ** 51 51 #else 52 REAL(wp), PUBLIC :: & ! ** 0D coefficients **52 REAL(wp), PUBLIC :: & !: ** 0D coefficients ** 53 53 #endif 54 ahtt, ahtu, ahtv, ahtw ! T-, U-, V-, W-points coefficients54 ahtt, ahtu, ahtv, ahtw !: T-, U-, V-, W-points coefficients 55 55 56 56 … … 59 59 !! 'key_traldf_eiv' eddy induced velocity 60 60 !!---------------------------------------------------------------------- 61 LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. ! eddy induced velocity flag61 LOGICAL, PUBLIC, PARAMETER :: lk_traldf_eiv = .TRUE. !: eddy induced velocity flag 62 62 63 63 # if defined key_traldf_c3d 64 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & ! ** 3D coefficients **64 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: ** 3D coefficients ** 65 65 # elif defined key_traldf_c2d 66 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & ! ** 2D coefficients **66 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: ** 2D coefficients ** 67 67 # elif defined key_traldf_c1d 68 REAL(wp), PUBLIC, DIMENSION(jpk) :: & ! ** 1D coefficients **68 REAL(wp), PUBLIC, DIMENSION(jpk) :: & !: ** 1D coefficients ** 69 69 # else 70 REAL(wp), PUBLIC :: & ! ** 0D coefficients **70 REAL(wp), PUBLIC :: & !: ** 0D coefficients ** 71 71 # endif 72 aeiu, aeiv, aeiw ! U-, V-, W-points induced velocity coef. (m2/s)72 aeiu, aeiv, aeiw !: U-, V-, W-points induced velocity coef. (m2/s) 73 73 74 74 # if defined key_diaeiv 75 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & 76 u_eiv, & ! The three component of the eddy induced velocity (m/s) 77 v_eiv, & ! saved for diagnostics and/or outputs 78 w_eiv ! 75 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) :: & !: 76 u_eiv, v_eiv, w_eiv !: The three component of the eddy induced velocity (m/s) 79 77 # endif 80 78 … … 83 81 !! Default option : NO eddy induced velocity 84 82 !!---------------------------------------------------------------------- 85 LOGICAL , PUBLIC, PARAMETER :: lk_traldf_eiv = .FALSE. ! eddy induced velocity flag83 LOGICAL , PUBLIC, PARAMETER :: lk_traldf_eiv = .FALSE. !: eddy induced velocity flag 86 84 REAL(wp), PUBLIC :: aeiu, aeiv, aeiw 87 85 #endif
Note: See TracChangeset
for help on using the changeset viewer.