Changeset 503 for trunk/NEMO/OPA_SRC/DYN/dynkeg.F90
- Timestamp:
- 2006-09-27T10:52:29+02:00 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DYN/dynkeg.F90
r258 r503 4 4 !! Ocean dynamics: kinetic energy gradient trend 5 5 !!====================================================================== 6 !! History : 1.0 ! 87-09 (P. Andrich, m.-a. Foujols) Original code 7 !! 7.0 ! 97-05 (G. Madec) Split dynber into dynkeg and dynhpg 8 !! 9.0 ! 02-07 (G. Madec) F90: Free form and module 9 !!---------------------------------------------------------------------- 6 10 7 11 !!---------------------------------------------------------------------- 8 12 !! dyn_keg : update the momentum trend with the horizontal tke 9 13 !!---------------------------------------------------------------------- 10 !! * Modules used11 14 USE oce ! ocean dynamics and tracers 12 15 USE dom_oce ! ocean space and time domain … … 19 22 PRIVATE 20 23 21 !! * Accessibility 22 PUBLIC dyn_keg ! routine called by step.F90 24 PUBLIC dyn_keg ! routine called by step module 23 25 24 26 !! * Substitutions 25 27 # include "vectopt_loop_substitute.h90" 26 !!---------------------------------------------------------------------- -----------28 !!---------------------------------------------------------------------- 27 29 !! OPA 9.0 , LOCEAN-IPSL (2005) 28 30 !! $Header$ 29 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt30 !!---------------------------------------------------------------------- -----------31 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 32 !!---------------------------------------------------------------------- 31 33 32 34 CONTAINS … … 40 42 !! general momentum trend. 41 43 !! 42 !! ** Method : Compute the now horizontal kinetic energy :44 !! ** Method : Compute the now horizontal kinetic energy 43 45 !! zhke = 1/2 [ mi-1( un^2 ) + mj-1( vn^2 ) ] 44 46 !! Take its horizontal gradient and add it to the general momentum … … 48 50 !! 49 51 !! ** Action : - Update the (ua, va) with the hor. ke gradient trend 50 !! - Save the trends in (utrd,vtrd) ('key_trddyn') 52 !! - save this trends (l_trddyn=T) for post-processing 53 !!---------------------------------------------------------------------- 54 USE oce, ONLY : ztrdu => ta ! use ta as 3D workspace 55 USE oce, ONLY : ztrdv => sa ! use sa as 3D workspace 51 56 !! 52 !! History : 53 !! 1.0 ! 87-09 (P. Andrich, m.-a. Foujols) Original code 54 !! 7.0 ! 97-05 (G. Madec) Split dynber into dynkeg and dynhpg 55 !! 9.0 ! 02-07 (G. Madec) F90: Free form and module 56 !! " ! 04-08 (C. Talandier) New trends organization 57 !!---------------------------------------------------------------------- 58 !! * Modules used 59 USE oce, ONLY : ztdua => ta, & ! use ta as 3D workspace 60 ztdva => sa ! use sa as 3D workspace 61 62 !! * Arguments 63 INTEGER, INTENT( in ) :: kt ! ocean time-step index 64 65 !! * Local declarations 66 INTEGER :: ji, jj, jk ! dummy loop indices 67 REAL(wp) :: zua, zva, zu, zv ! temporary scalars 68 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 69 zhke ! temporary workspace 57 INTEGER, INTENT( in ) :: kt ! ocean time-step index 58 !! 59 INTEGER :: ji, jj, jk ! dummy loop indices 60 REAL(wp) :: zu, zv ! temporary scalars 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zhke ! temporary 3D workspace 70 62 !!---------------------------------------------------------------------- 71 63 … … 76 68 ENDIF 77 69 78 ! Save ua and va trends 79 IF( l_trddyn ) THEN 80 ztdua(:,:,:) = ua(:,:,:) 81 ztdva(:,:,:) = va(:,:,:) 70 IF( l_trddyn ) THEN ! Save ua and va trends 71 ztrdu(:,:,:) = ua(:,:,:) 72 ztrdv(:,:,:) = va(:,:,:) 82 73 ENDIF 83 74 … … 85 76 DO jk = 1, jpkm1 ! Horizontal slab 86 77 ! ! =============== 87 ! Horizontal kinetic energy at T-point 88 DO jj = 2, jpj 78 DO jj = 2, jpj ! Horizontal kinetic energy at T-point 89 79 DO ji = fs_2, jpi ! vector opt. 80 zu = 0.25 * ( un(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 81 & + un(ji ,jj ,jk) * un(ji ,jj ,jk) ) 90 82 zv = 0.25 * ( vn(ji ,jj-1,jk) * vn(ji ,jj-1,jk) & 91 + vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) 92 zu = 0.25 * ( un(ji-1,jj ,jk) * un(ji-1,jj ,jk) & 93 + un(ji ,jj ,jk) * un(ji ,jj ,jk) ) 83 & + vn(ji ,jj ,jk) * vn(ji ,jj ,jk) ) 94 84 zhke(ji,jj,jk) = zv + zu 95 85 END DO 96 86 END DO 97 98 ! Horizontal gradient of Horizontal kinetic energy 99 DO jj = 2, jpjm1 87 DO jj = 2, jpjm1 ! add the gradient of kinetic energy to the general momentum trends 100 88 DO ji = fs_2, fs_jpim1 ! vector opt. 101 ! gradient of kinetic energy 102 zua = -( zhke(ji+1,jj ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 103 zva = -( zhke(ji ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 104 ! add to the general momentum trends 105 ua(ji,jj,jk) = ua(ji,jj,jk) + zua 106 va(ji,jj,jk) = va(ji,jj,jk) + zva 89 ua(ji,jj,jk) = ua(ji,jj,jk) - ( zhke(ji+1,jj ,jk) - zhke(ji,jj,jk) ) / e1u(ji,jj) 90 va(ji,jj,jk) = va(ji,jj,jk) - ( zhke(ji ,jj+1,jk) - zhke(ji,jj,jk) ) / e2v(ji,jj) 107 91 END DO 108 92 END DO … … 111 95 ! ! =============== 112 96 113 ! save the Kinetic Energy trends for diagnostic 114 ! momentum trends 115 IF( l_trddyn ) THEN 116 ztdua(:,:,:) = ua(:,:,:) - ztdua(:,:,:) 117 ztdva(:,:,:) = va(:,:,:) - ztdva(:,:,:) 118 119 CALL trd_mod(ztdua, ztdva, jpdtdkeg, 'DYN', kt) 97 IF( l_trddyn ) THEN ! save the Kinetic Energy trends for diagnostic 98 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 99 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 100 CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_keg, 'DYN', kt ) 120 101 ENDIF 121 122 IF(ln_ctl) THEN ! print sum trends (used for debugging) 123 CALL prt_ctl(tab3d_1=ua, clinfo1=' keg - Ua: ', mask1=umask, & 124 & tab3d_2=va, clinfo2=' Va: ', mask2=vmask, clinfo3='dyn') 125 ENDIF 126 102 ! 103 IF(ln_ctl) CALL prt_ctl( tab3d_1=ua, clinfo1=' keg - Ua: ', mask1=umask, & 104 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 105 ! 127 106 END SUBROUTINE dyn_keg 128 107
Note: See TracChangeset
for help on using the changeset viewer.