- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/C1D/dyndmp.F90
- Property svn:keywords set to Id
r4624 r6225 3 3 !! *** MODULE dyndmp *** 4 4 !! Ocean dynamics: internal restoring trend on momentum (U and V current) 5 !! This should only be used for C1D case in current form 5 6 !!====================================================================== 6 7 !! History : 3.5 ! 2013-08 (D. Calvert) Original code 8 !! 3.6 ! 2014-08 (T. Graham) Modified to use netcdf file of 9 !! restoration coefficients supplied to tradmp 7 10 !!---------------------------------------------------------------------- 8 11 … … 15 18 USE dom_oce ! ocean: domain variables 16 19 USE c1d ! 1D vertical configuration 17 USE trdmod ! ocean: trends18 USE trdmod_oce ! ocean: trends variables19 20 USE tradmp ! ocean: internal damping 20 21 USE zdf_oce ! ocean: vertical physics … … 22 23 USE dtauvd ! data: U & V current 23 24 USE zdfmxl ! vertical physics: mixed layer depth 25 ! 24 26 USE in_out_manager ! I/O manager 25 27 USE lib_mpp ! MPP library … … 27 29 USE wrk_nemo ! Memory allocation 28 30 USE timing ! Timing 31 USE iom ! I/O manager 29 32 30 33 IMPLICIT NONE … … 34 37 PUBLIC dyn_dmp ! routine called by step_c1d.F90 35 38 36 LOGICAL, PUBLIC :: ln_dyndmp !Flag for Newtonian damping37 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: utrdmp ! damping U current trend (m/s2)39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vtrdmp ! damping V current trend (m/s2)40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: resto_uv ! restoring coeff. on U & V current39 LOGICAL, PUBLIC :: ln_dyndmp !: Flag for Newtonian damping 40 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: utrdmp !: damping U current trend (m/s2) 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: vtrdmp !: damping V current trend (m/s2) 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: resto_uv !: restoring coeff. on U & V current 41 44 42 45 !! * Substitutions 43 # include "domzgr_substitute.h90"44 46 # include "vectopt_loop_substitute.h90" 45 47 !!---------------------------------------------------------------------- 46 !! NEMO/OPA 3. 3 , NEMO Consortium (2010)47 !! $Id : dyndmp.F90 3294 2012-01-28 16:44:18Z rblod$48 !! NEMO/OPA 3.7 , NEMO Consortium (2015) 49 !! $Id$ 48 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 51 !!---------------------------------------------------------------------- … … 73 75 !! - calculate damping coefficient 74 76 !!---------------------------------------------------------------------- 77 INTEGER :: ios, imask ! local integers 78 !! 75 79 NAMELIST/namc1d_dyndmp/ ln_dyndmp 76 INTEGER :: ios 77 !!---------------------------------------------------------------------- 78 80 !!---------------------------------------------------------------------- 81 ! 79 82 REWIND( numnam_ref ) ! Namelist namc1d_dyndmp in reference namelist : 80 83 READ ( numnam_ref, namc1d_dyndmp, IOSTAT = ios, ERR = 901) 81 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc1d_dyndmp in reference namelist', lwp )82 84 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc1d_dyndmp in reference namelist', lwp ) 85 ! 83 86 REWIND( numnam_cfg ) ! Namelist namc1d_dyndmp in configuration namelist : Parameters of the run 84 87 READ ( numnam_cfg, namc1d_dyndmp, IOSTAT = ios, ERR = 902 ) 85 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc1d_dyndmp in configuration namelist', lwp )88 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namc1d_dyndmp in configuration namelist', lwp ) 86 89 IF(lwm) WRITE ( numond, namc1d_dyndmp ) 87 90 ! 88 91 IF(lwp) THEN ! control print 89 92 WRITE(numout,*) … … 93 96 WRITE(numout,*) ' add a damping term or not ln_dyndmp = ', ln_dyndmp 94 97 WRITE(numout,*) ' Namelist namtra_dmp : Set damping parameters' 95 WRITE(numout,*) ' horizontal damping option nn_hdmp = ', nn_hdmp 96 WRITE(numout,*) ' mixed layer damping option nn_zdmp = ', nn_zdmp, '(non-C1D zoom: forced to 0)' 97 WRITE(numout,*) ' surface time scale (days) rn_surf = ', rn_surf 98 WRITE(numout,*) ' bottom time scale (days) rn_bot = ', rn_bot 99 WRITE(numout,*) ' depth of transition (meters) rn_dep = ', rn_dep 100 WRITE(numout,*) ' create a damping.coeff file nn_file = ', nn_file 98 WRITE(numout,*) ' Apply relaxation or not ln_tradmp = ', ln_tradmp 99 WRITE(numout,*) ' mixed layer damping option nn_zdmp = ', nn_zdmp 100 WRITE(numout,*) ' Damping file name cn_resto = ', cn_resto 101 101 WRITE(numout,*) 102 102 ENDIF 103 103 ! 104 104 IF( ln_dyndmp ) THEN 105 105 ! !== allocate the data arrays ==! 106 106 IF( dyn_dmp_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'dyn_dmp_init: unable to allocate arrays' ) 107 107 ! 108 #if ! defined key_c1d109 SELECT CASE ( nn_hdmp ) !== control print of horizontal option ==!110 CASE ( -1 ) ; IF(lwp) WRITE(numout,*) ' momentum damping in the Med & Red seas only'111 CASE ( 1:90 ) ; IF(lwp) WRITE(numout,*) ' momentum damping poleward of', nn_hdmp, ' degrees'112 CASE DEFAULT113 WRITE(ctmp1,*) ' bad flag value for nn_hdmp = ', nn_hdmp114 CALL ctl_stop(ctmp1)115 END SELECT116 !117 #endif118 108 SELECT CASE ( nn_zdmp ) !== control print of vertical option ==! 119 109 CASE ( 0 ) ; IF(lwp) WRITE(numout,*) ' momentum damping throughout the water column' … … 132 122 utrdmp(:,:,:) = 0._wp ! internal damping trends 133 123 vtrdmp(:,:,:) = 0._wp 134 ! !== Damping coefficients calculation: ==! 135 ! !== use tradmp.F90 subroutines dtacof, dtacof_zoom and cofdis ==! 136 ! !!! NOTE: these need to be altered for use in this module if 137 ! !!! they are to be used outside the C1D context 138 ! !!! (use of U,V grid variables) 139 IF( lzoom .AND. .NOT. lk_c1d ) THEN ; CALL dtacof_zoom( resto_uv ) 140 ELSE ; CALL dtacof( nn_hdmp, rn_surf, rn_bot, rn_dep, nn_file, 'DYN', resto_uv ) 141 ENDIF 142 ! 124 ! 125 !Read in mask from file 126 CALL iom_open ( cn_resto, imask) 127 CALL iom_get ( imask, jpdom_autoglo, 'resto', resto) 128 CALL iom_close( imask ) 143 129 ENDIF 144 130 ! … … 164 150 !! ** Action : - (ua,va) momentum trends updated with the damping trend 165 151 !!---------------------------------------------------------------------- 166 ! 167 INTEGER, INTENT(in) :: kt ! ocean time-step index 168 !! 169 INTEGER :: ji, jj, jk ! dummy loop indices 170 REAL(wp) :: zua, zva ! local scalars 171 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zuv_dta ! Read in data 152 INTEGER, INTENT(in) :: kt ! ocean time-step index 153 !! 154 INTEGER :: ji, jj, jk ! dummy loop indices 155 REAL(wp) :: zua, zva ! local scalars 156 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zuv_dta ! Read in data 172 157 !!---------------------------------------------------------------------- 173 158 ! 174 159 IF( nn_timing == 1 ) CALL timing_start( 'dyn_dmp' ) 175 160 ! 176 CALL wrk_alloc( jpi, jpj, jpk, 2,zuv_dta )161 CALL wrk_alloc( jpi,jpj,jpk,2, zuv_dta ) 177 162 ! 178 163 ! !== read and interpolate U & V current data at kt ==! … … 219 204 DO jj = 2, jpjm1 220 205 DO ji = fs_2, fs_jpim1 ! vector opt. 221 IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN206 IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 222 207 zua = resto_uv(ji,jj,jk) * ( zuv_dta(ji,jj,jk,1) - ub(ji,jj,jk) ) 223 208 zva = resto_uv(ji,jj,jk) * ( zuv_dta(ji,jj,jk,2) - vb(ji,jj,jk) ) … … 236 221 END SELECT 237 222 ! 238 ! ! Trend diagnostic239 IF( l_trddyn ) CALL trd_mod( utrdmp, vtrdmp, jpdyn_trd_dat, 'DYN', kt )240 !241 223 ! ! Control print 242 224 IF( ln_ctl ) CALL prt_ctl( tab3d_1=ua(:,:,:), clinfo1=' dmp - Ua: ', mask1=umask, & 243 225 & tab3d_2=va(:,:,:), clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 244 226 ! 245 CALL wrk_dealloc( jpi, jpj, jpk, 2,zuv_dta )227 CALL wrk_dealloc( jpi,jpj,jpk,2, zuv_dta ) 246 228 ! 247 229 IF( nn_timing == 1 ) CALL timing_stop( 'dyn_dmp')
Note: See TracChangeset
for help on using the changeset viewer.