Changeset 2027
- Timestamp:
- 2010-07-29T13:33:05+02:00 (14 years ago)
- Location:
- branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC
- Files:
-
- 1 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DIA/diaar5.F90
r2004 r2027 23 23 PRIVATE 24 24 25 PUBLIC dia_ar5 ! routine called in step.F90 module 25 PUBLIC dia_ar5 ! routine called in step.F90 module 26 PUBLIC dia_ar5_init ! routine called in opa.F90 module 26 27 27 28 LOGICAL, PUBLIC, PARAMETER :: lk_diaar5 = .TRUE. ! coupled flag … … 67 68 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrhd, zrhop 68 69 !!-------------------------------------------------------------------- 69 70 IF( kt == nit000 ) CALL dia_ar5_init ! Initialization (first time-step only)71 70 72 71 CALL iom_put( 'cellthc', fse3t(:,:,:) ) -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynadv.F90
r1601 r2027 22 22 PRIVATE 23 23 24 PUBLIC dyn_adv ! routine called by step module 24 PUBLIC dyn_adv ! routine called by step module 25 PUBLIC dyn_adv_init ! routine called by opa module 25 26 26 27 LOGICAL, PUBLIC :: ln_dynadv_vec = .TRUE. ! vector form flag … … 56 57 !!---------------------------------------------------------------------- 57 58 ! 58 IF( kt == nit000 ) CALL dyn_adv_ctl ! initialisation & control of options59 60 59 SELECT CASE ( nadv ) ! compute advection trend and add it to general trend 61 60 CASE ( 0 ) … … 77 76 78 77 79 SUBROUTINE dyn_adv_ ctl78 SUBROUTINE dyn_adv_init 80 79 !!--------------------------------------------------------------------- 81 !! *** ROUTINE dyn_adv_ ctl***80 !! *** ROUTINE dyn_adv_init *** 82 81 !! 83 82 !! ** Purpose : Control the consistency between namelist options for … … 94 93 IF(lwp) THEN ! Namelist print 95 94 WRITE(numout,*) 96 WRITE(numout,*) 'dyn_adv_ ctl: choice/control of the momentum advection scheme'95 WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 97 96 WRITE(numout,*) '~~~~~~~~~~~' 98 97 WRITE(numout,*) ' Namelist namdyn_adv : chose a advection formulation & scheme for momentum' … … 124 123 ENDIF 125 124 ! 126 END SUBROUTINE dyn_adv_ ctl125 END SUBROUTINE dyn_adv_init 127 126 128 127 !!====================================================================== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynhpg.F90
r1601 r2027 18 18 !! dyn_hpg : update the momentum trend with the now horizontal 19 19 !! gradient of the hydrostatic pressure 20 !! hpg_ ctl: initialisation and control of options20 !! hpg_init : initialisation and control of options 21 21 !! hpg_zco : z-coordinate scheme 22 22 !! hpg_zps : z-coordinate plus partial steps (interpolation) … … 39 39 PRIVATE 40 40 41 PUBLIC dyn_hpg ! routine called by step module 41 PUBLIC dyn_hpg ! routine called by step module 42 PUBLIC hpg_init ! routine called by opa module 42 43 43 44 ! !!* Namelist namdyn_hpg : hydrostatic pressure gradient … … 81 82 !!---------------------------------------------------------------------- 82 83 83 IF( kt == nit000 ) CALL hpg_ctl ! initialisation & control of options84 85 84 IF( l_trddyn ) THEN ! Temporary saving of ua and va trends (l_trddyn) 86 85 ztrdu(:,:,:) = ua(:,:,:) … … 110 109 111 110 112 SUBROUTINE hpg_ ctl113 !!---------------------------------------------------------------------- 114 !! *** ROUTINE hpg_ ctl***111 SUBROUTINE hpg_init 112 !!---------------------------------------------------------------------- 113 !! *** ROUTINE hpg_init *** 115 114 !! 116 115 !! ** Purpose : initializations for the hydrostatic pressure gradient … … 174 173 175 174 ! 176 END SUBROUTINE hpg_ ctl175 END SUBROUTINE hpg_init 177 176 178 177 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynldf.F90
r1954 r2027 30 30 PRIVATE 31 31 32 PUBLIC dyn_ldf ! called by step module 32 PUBLIC dyn_ldf ! called by step module 33 PUBLIC dyn_ldf_init ! called by opa module 33 34 34 35 INTEGER :: nldf = 0 ! type of lateral diffusion used defined from ln_dynldf_... namlist logicals) … … 56 57 !!---------------------------------------------------------------------- 57 58 58 IF( kt == nit000 ) CALL dyn_ldf_ctl ! initialisation & control of options59 60 59 IF( l_trddyn ) THEN ! temporary save of ta and sa trends 61 60 ztrdu(:,:,:) = ua(:,:,:) … … 69 68 CASE ( 2 ) ; CALL dyn_ldf_bilap ( kt ) ! iso-level bilaplacian 70 69 CASE ( 3 ) ; CALL dyn_ldf_bilapg ( kt ) ! s-coord. horizontal bilaplacian 71 CASE ( 4 ) ! iso-level laplacian + bilaplacian72 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 )77 70 ! 78 71 CASE ( -1 ) ! esopa: test all possibility with control print … … 89 82 CALL prt_ctl( tab3d_1=ua, clinfo1=' ldf3 - Ua: ', mask1=umask, & 90 83 & tab3d_2=va, clinfo2= ' Va: ', mask2=vmask, clinfo3='dyn' ) 91 !92 CASE ( -2 ) ! neither laplacian nor bilaplacian schemes used93 IF( kt == nit000 ) THEN94 IF(lwp) WRITE(numout,*)95 IF(lwp) WRITE(numout,*) 'dyn_ldf : no lateral diffusion on momentum setup'96 IF(lwp) WRITE(numout,*) '~~~~~~~ '97 ENDIF98 84 END SELECT 99 85 … … 110 96 111 97 112 SUBROUTINE dyn_ldf_ ctl98 SUBROUTINE dyn_ldf_init 113 99 !!---------------------------------------------------------------------- 114 !! *** ROUTINE dyn_ldf_ ctl***100 !! *** ROUTINE dyn_ldf_init *** 115 101 !! 116 102 !! ** Purpose : initializations of the horizontal ocean dynamics physics … … 123 109 IF(lwp) THEN ! Namelist print 124 110 WRITE(numout,*) 125 WRITE(numout,*) 'dyn_ldf_ ctl: Choice of the lateral diffusive operator on dynamics'111 WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 126 112 WRITE(numout,*) '~~~~~~~~~~~' 127 113 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' … … 137 123 IF( ln_dynldf_lap ) ioptio = ioptio + 1 138 124 IF( ln_dynldf_bilap ) ioptio = ioptio + 1 139 IF( ioptio < 1 ) CALL ctl_warn( ' neither laplacian nor bilaplacian operator set fordynamics' )125 IF( ioptio /= 1 ) CALL ctl_stop( ' use ONE of the 2 lap/bilap operator type on dynamics' ) 140 126 ioptio = 0 141 127 IF( ln_dynldf_level ) ioptio = ioptio + 1 … … 157 143 IF ( ln_dynldf_iso ) nldf = 1 ! isoneutral ( rotation) 158 144 ENDIF 159 IF ( ln_sco ) THEN ! s-coordinate145 IF ( ln_sco ) THEN ! z-coordinate 160 146 IF ( ln_dynldf_level ) nldf = 0 ! iso-level (no rotation) 161 147 IF ( ln_dynldf_hor ) nldf = 1 ! horizontal ( rotation) … … 175 161 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation) 176 162 ENDIF 177 IF ( ln_sco ) THEN ! s-coordinate163 IF ( ln_sco ) THEN ! z-coordinate 178 164 IF ( ln_dynldf_level ) nldf = 2 ! iso-level (no rotation) 179 165 IF ( ln_dynldf_hor ) nldf = 3 ! horizontal ( rotation) … … 182 168 ENDIF 183 169 184 IF( ln_dynldf_lap .AND. ln_dynldf_bilap ) THEN ! mixed laplacian and bilaplacian operators185 IF ( ln_zco ) THEN ! z-coordinate186 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 ENDIF190 IF ( ln_zps ) THEN ! z-coordinate191 IF ( ln_dynldf_level ) ierr = 1 ! iso-level not allowed192 IF ( ln_dynldf_hor ) nldf = 4 ! horizontal (no rotation)193 IF ( ln_dynldf_iso ) ierr = 2 ! isoneutral ( rotation)194 ENDIF195 IF ( ln_sco ) THEN ! s-coordinate196 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 ENDIF200 ENDIF201 202 170 IF( lk_esopa ) nldf = -1 ! esopa test 203 171 … … 210 178 IF(lwp) THEN 211 179 WRITE(numout,*) 212 IF( nldf == -2 ) WRITE(numout,*) ' neither laplacian nor bilaplacian schemes used'213 180 IF( nldf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used' 214 181 IF( nldf == 0 ) WRITE(numout,*) ' laplacian operator' 215 IF( nldf == 1 ) WRITE(numout,*) ' rotated laplacian operator'182 IF( nldf == 1 ) WRITE(numout,*) ' Rotated laplacian operator' 216 183 IF( nldf == 2 ) WRITE(numout,*) ' bilaplacian operator' 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' 184 IF( nldf == 3 ) WRITE(numout,*) ' Rotated bilaplacian' 220 185 ENDIF 221 186 ! 222 END SUBROUTINE dyn_ldf_ ctl187 END SUBROUTINE dyn_ldf_init 223 188 224 189 !!====================================================================== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynspg.F90
r1566 r2027 27 27 PRIVATE 28 28 29 PUBLIC dyn_spg ! routine called by step module 29 PUBLIC dyn_spg ! routine called by step module 30 PUBLIC dyn_spg_init ! routine called by opa module 30 31 31 32 INTEGER :: nspg = 0 ! type of surface pressure gradient scheme defined from lk_dynspg_... … … 74 75 75 76 76 IF( kt == nit000 ) CALL dyn_spg_ctl ! initialisation & control of options77 78 77 IF( l_trddyn ) THEN ! temporary save of ta and sa trends 79 78 ztrdu(:,:,:) = ua(:,:,:) … … 119 118 120 119 121 SUBROUTINE dyn_spg_ ctl120 SUBROUTINE dyn_spg_init 122 121 !!--------------------------------------------------------------------- 123 !! *** ROUTINE dyn_spg_ ctl***122 !! *** ROUTINE dyn_spg_init *** 124 123 !! 125 124 !! ** Purpose : Control the consistency between cpp options for … … 131 130 IF(lwp) THEN ! Control print 132 131 WRITE(numout,*) 133 WRITE(numout,*) 'dyn_spg_ ctl: choice of the surface pressure gradient scheme'132 WRITE(numout,*) 'dyn_spg_init : choice of the surface pressure gradient scheme' 134 133 WRITE(numout,*) '~~~~~~~~~~~' 135 134 WRITE(numout,*) ' Explicit free surface lk_dynspg_exp = ', lk_dynspg_exp … … 178 177 #endif 179 178 ! 180 END SUBROUTINE dyn_spg_ ctl179 END SUBROUTINE dyn_spg_init 181 180 182 181 !!====================================================================== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynvor.F90
r1694 r2027 36 36 PRIVATE 37 37 38 PUBLIC dyn_vor ! routine called by step.F90 38 PUBLIC dyn_vor ! routine called by step.F90 39 PUBLIC vor_init ! routine called by opa.F90 39 40 40 41 ! !!* Namelist namdyn_vor: vorticity term … … 74 75 INTEGER, INTENT( in ) :: kt ! ocean time-step index 75 76 !!---------------------------------------------------------------------- 76 77 IF( kt == nit000 ) CALL vor_ctl ! initialisation & control of options78 77 79 78 ! ! vorticity term … … 637 636 638 637 639 SUBROUTINE vor_ ctl638 SUBROUTINE vor_init 640 639 !!--------------------------------------------------------------------- 641 !! *** ROUTINE vor_ ctl***640 !! *** ROUTINE vor_init *** 642 641 !! 643 642 !! ** Purpose : Control the consistency between cpp options for … … 653 652 IF(lwp) THEN ! Namelist print 654 653 WRITE(numout,*) 655 WRITE(numout,*) 'dyn:vor_ ctl: vorticity term : read namelist and control the consistency'654 WRITE(numout,*) 'dyn:vor_init : vorticity term : read namelist and control the consistency' 656 655 WRITE(numout,*) '~~~~~~~~~~~' 657 656 WRITE(numout,*) ' Namelist namdyn_vor : oice of the vorticity term scheme' … … 700 699 ENDIF 701 700 ! 702 END SUBROUTINE vor_ ctl701 END SUBROUTINE vor_init 703 702 704 703 !!============================================================================== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/DYN/dynzdf.F90
r1533 r2027 27 27 PRIVATE 28 28 29 PUBLIC dyn_zdf ! routine called by step.F90 29 PUBLIC dyn_zdf ! routine called by step.F90 30 PUBLIC dyn_zdf_init ! routine called by opa.F90 30 31 31 32 INTEGER :: nzdf = 0 ! type vertical diffusion algorithm used … … 57 58 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrdu, ztrdv ! 3D workspace 58 59 !!--------------------------------------------------------------------- 59 60 IF( kt == nit000 ) CALL zdf_ctl ! initialisation & control of options61 60 62 61 ! ! set time step … … 96 95 97 96 98 SUBROUTINE zdf_ctl97 SUBROUTINE dyn_zdf_init 99 98 !!---------------------------------------------------------------------- 100 !! *** ROUTINE zdf_ctl***99 !! *** ROUTINE dyn_zdf_init *** 101 100 !! 102 101 !! ** Purpose : initializations of the vertical diffusion scheme … … 124 123 IF(lwp) THEN ! Print the choice 125 124 WRITE(numout,*) 126 WRITE(numout,*) 'dyn :zdf_ctl: vertical dynamics physics scheme'125 WRITE(numout,*) 'dyn_zdf_init : vertical dynamics physics scheme' 127 126 WRITE(numout,*) '~~~~~~~~~~~' 128 127 IF( nzdf == -1 ) WRITE(numout,*) ' ESOPA test All scheme used' … … 131 130 ENDIF 132 131 ! 133 END SUBROUTINE zdf_ctl132 END SUBROUTINE dyn_zdf_init 134 133 135 134 !!============================================================================== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/FLO/floats.F90
r1601 r2027 25 25 26 26 PUBLIC flo_stp ! routine called by step.F90 27 PUBLIC flo_init ! routine called by opa.F90 27 28 28 29 !!---------------------------------------------------------------------- … … 52 53 IF(lwp) WRITE(numout,*) 'flo_stp : call floats routine ' 53 54 IF(lwp) WRITE(numout,*) '~~~~~~~' 54 55 CALL flo_init ! read the namelist of floats56 55 57 56 CALL flo_dom ! compute/read initial position of floats -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/LDF/ldfslp.F90
r1515 r2027 31 31 PRIVATE 32 32 33 PUBLIC ldf_slp ! routine called by step.F90 33 PUBLIC ldf_slp ! routine called by step.F90 34 PUBLIC ldf_slp_init ! routine called by opa.F90 34 35 35 36 LOGICAL , PUBLIC, PARAMETER :: lk_ldfslp = .TRUE. !: slopes flag … … 97 98 !!---------------------------------------------------------------------- 98 99 99 IF( kt == nit000 ) CALL ldf_slp_init ! initialization (first time-step only)100 101 100 zeps = 1.e-20 ! Local constant initialization 102 101 zmg = -1.0 / grav -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r1708 r2027 26 26 PRIVATE 27 27 28 PUBLIC zdf_bfr ! called by step.F90 28 PUBLIC zdf_bfr ! called by step.F90 29 PUBLIC zdf_bfr_init ! called by opa.F90 29 30 30 31 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: bfrua , bfrva !: Bottom friction coefficients set in zdfbfr … … 73 74 REAL(wp) :: zvu, zuv, zecu, zecv ! temporary scalars 74 75 !!---------------------------------------------------------------------- 75 76 77 IF( kt == nit000 ) CALL zdf_bfr_init ! initialisation78 76 79 77 IF( nn_bfr == 2 ) THEN ! quadratic botton friction -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdfddm.F90
r1601 r2027 24 24 PRIVATE 25 25 26 PUBLIC zdf_ddm ! called by step.F90 26 PUBLIC zdf_ddm ! called by step.F90 27 PUBLIC zdf_ddm_init ! called by opa.F90 27 28 28 29 LOGICAL , PUBLIC, PARAMETER :: lk_zdfddm = .TRUE. !: double diffusive mixing flag … … 85 86 REAL(wp), DIMENSION(jpi,jpj) :: zmsks, zmskf, zmskd1, zmskd2, zmskd3 ! 2D workspace 86 87 !!---------------------------------------------------------------------- 87 88 IF ( kt == nit000 ) CALL zdf_ddm_init ! Initialization (first time-step only)89 88 90 89 ! ! =============== -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r2000 r2027 28 28 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 29 29 USE prtctl ! Print control 30 USE trdmod ! momentum/tracers trends 30 USE trdmod_oce ! ocean trends definition 31 USE trdtra ! tracers trends 31 32 32 33 IMPLICIT NONE 33 34 PRIVATE 34 35 35 PUBLIC zdf_kpp ! routine called by step.F90 36 PUBLIC tra_kpp ! routine called by step.F90 36 PUBLIC zdf_kpp ! routine called by step.F90 37 PUBLIC zdf_kpp_init ! routine called by opa.F90 38 PUBLIC tra_kpp ! routine called by step.F90 39 #if defined key_top 40 PUBLIC trc_kpp ! routine called by trcstp.F90 41 #endif 37 42 38 43 LOGICAL , PUBLIC, PARAMETER :: lk_zdfkpp = .TRUE. !: KPP vertical mixing flag … … 1237 1242 !! 1238 1243 !! ** Purpose : compute and add to the tracer trend the non-local 1239 !! tracer flux1244 !! tracer flux 1240 1245 !! 1241 1246 !! ** Method : ??? 1242 1247 !! 1243 1248 !! history : 1244 !! 9.0 ! 05-11 (G. Madec) Original code 1249 !! 1.0 ! 2005-11 (G. Madec) Original code 1250 !! 3.3 ! 2010-06 (C. Ethe) Merge TRA-TRC 1245 1251 !!---------------------------------------------------------------------- 1246 1252 !! * Modules used 1247 USE oce, ONLY : ztrdt => ua, & ! use ua as 3D workspace 1248 ztrds => va ! use va as 3D workspace 1253 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds ! 3D workspace 1249 1254 !!---------------------------------------------------------------------- 1250 1255 INTEGER, INTENT(in) :: kt … … 1252 1257 1253 1258 IF( kt == nit000 ) THEN 1254 IF(lwp) WRITE(numout,*) 1259 IF(lwp) WRITE(numout,*) 1255 1260 IF(lwp) WRITE(numout,*) 'tra_kpp : KPP non-local tracer fluxes' 1256 1261 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 1257 1262 ENDIF 1258 1263 1259 1260 ! Save ta and sa trends 1261 IF( l_trdtra ) THEN 1262 ztrdt(:,:,:) = ta(:,:,:) 1263 ztrds(:,:,:) = sa(:,:,:) 1264 IF( l_trdtra ) THEN !* Save ta and sa trends 1265 ALLOCATE( ztrdt(jpi,jpj,jpk) ) ; ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 1266 ALLOCATE( ztrds(jpi,jpj,jpk) ) ; ztrds(:,:,:) = tsa(:,:,:,jp_sal) 1264 1267 ENDIF 1265 1268 1266 1269 ! add non-local temperature and salinity flux ( in convective case only) 1267 1270 DO jk = 1, jpkm1 1268 DO jj = 2, jpjm1 1271 DO jj = 2, jpjm1 1269 1272 DO ji = fs_2, fs_jpim1 1270 t a(ji,jj,jk) = ta(ji,jj,jk)&1271 & - ( ghats(ji,jj,jk ) * avt(ji,jj,jk ) &1272 & - ghats(ji,jj,jk+1) * avt(ji,jj,jk+1) ) * wt0(ji,jj) / fse3t(ji,jj,jk)1273 sa(ji,jj,jk) = sa(ji,jj,jk)&1274 & - ( ghats(ji,jj,jk ) * fsavs(ji,jj,jk ) &1275 & - ghats(ji,jj,jk+1) * fsavs(ji,jj,jk+1) ) * ws0(ji,jj) / fse3t(ji,jj,jk)1273 tsa(ji,jj,jk,jp_tem) = tsa(ji,jj,jk,jp_tem) & 1274 & - ( ghats(ji,jj,jk ) * avt (ji,jj,jk ) & 1275 & - ghats(ji,jj,jk+1) * avt (ji,jj,jk+1) ) * wt0(ji,jj) / fse3t(ji,jj,jk) 1276 tsa(ji,jj,jk,jp_sal) = tsa(ji,jj,jk,jp_sal) & 1277 & - ( ghats(ji,jj,jk ) * fsavs(ji,jj,jk ) & 1278 & - ghats(ji,jj,jk+1) * fsavs(ji,jj,jk+1) ) * ws0(ji,jj) / fse3t(ji,jj,jk) 1276 1279 END DO 1277 1280 END DO … … 1280 1283 ! save the non-local tracer flux trends for diagnostic 1281 1284 IF( l_trdtra ) THEN 1282 ztrdt(:,:,:) = t a(:,:,:) - ztrdt(:,:,:)1283 ztrds(:,:,:) = sa(:,:,:) - ztrds(:,:,:)1285 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:) 1286 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:) 1284 1287 !!bug gm jpttdzdf ==> jpttkpp 1285 CALL trd_mod(ztrdt, ztrds, jptra_trd_zdf, 'TRA', kt) 1288 CALL trd_tra( kt, 'TRA', jp_tem, jptra_trd_zdf, ztrdt ) 1289 CALL trd_tra( kt, 'TRA', jp_sal, jptra_trd_zdf, ztrds ) 1290 DEALLOCATE( ztrdt ) ; DEALLOCATE( ztrds ) 1286 1291 ENDIF 1287 1292 1288 IF(ln_ctl) THEN 1289 CALL prt_ctl( tab3d_1=t a, clinfo1=' kpp - Ta: ', mask1=tmask, &1290 & tab3d_2= sa, clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )1293 IF(ln_ctl) THEN 1294 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' kpp - Ta: ', mask1=tmask, & 1295 & tab3d_2=tsa(:,:,:,jp_sal), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 1291 1296 ENDIF 1292 1297 1293 1298 END SUBROUTINE tra_kpp 1294 1299 1300 #if defined key_top 1301 !!---------------------------------------------------------------------- 1302 !! 'key_top' TOP models 1303 !!---------------------------------------------------------------------- 1304 SUBROUTINE trc_kpp( kt ) 1305 !!---------------------------------------------------------------------- 1306 !! *** ROUTINE trc_kpp *** 1307 !! 1308 !! ** Purpose : compute and add to the tracer trend the non-local 1309 !! tracer flux 1310 !! 1311 !! ** Method : ??? 1312 !! 1313 !! history : 1314 !! 9.0 ! 2005-11 (G. Madec) Original code 1315 !! NEMO 3.3 ! 2010-06 (C. Ethe ) Adapted to passive tracers 1316 !!---------------------------------------------------------------------- 1317 USE trc 1318 USE prtctl_trc ! Print control 1319 !! * Arguments 1320 INTEGER , INTENT( in ) :: kt ! ocean time-step index 1321 !! * Local declarations 1322 INTEGER :: ji, jj, jk, jn ! Dummy loop indices 1323 REAL(wp) :: ztra, zflx 1324 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrtrd 1325 !!---------------------------------------------------------------------- 1326 1327 IF( kt == nit000 ) THEN 1328 IF(lwp) WRITE(numout,*) 1329 IF(lwp) WRITE(numout,*) 'trc_kpp : KPP non-local tracer fluxes' 1330 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 1331 ENDIF 1332 1333 IF( l_trdtrc ) ALLOCATE( ztrtrd(jpi,jpj,jpk) ) 1334 ! 1335 DO jn = 1, jptra 1336 ! 1337 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) 1338 ! add non-local on passive tracer flux ( in convective case only) 1339 DO jk = 1, jpkm1 1340 DO jj = 2, jpjm1 1341 DO ji = fs_2, fs_jpim1 1342 ! Surface tracer flux for non-local term 1343 zflx = - ( emps(ji,jj) * tra(ji,jj,1,jn) * rcs ) * tmask(ji,jj,1) 1344 ! compute the trend 1345 ztra = - ( ghats(ji,jj,jk ) * fsavs(ji,jj,jk ) & 1346 & - ghats(ji,jj,jk+1) * fsavs(ji,jj,jk+1) ) * zflx / fse3t(ji,jj,jk) 1347 ! add the trend to the general trend 1348 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 1349 END DO 1350 END DO 1351 END DO 1352 ! save the non-local tracer flux trends for diagnostic 1353 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 1354 CALL trd_tra( kt, 'TRC', jn, jptra_trd_zdf, ztrtrd(:,:,:,jn) ) 1355 ! 1356 END DO 1357 IF( l_trdtrc ) DEALLOCATE( ztrtrd ) 1358 IF( ln_ctl ) THEN 1359 WRITE(charout, FMT="(' kpp')") ; CALL prt_ctl_trc_info(charout) 1360 CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=clname, clinfo2='trd' ) 1361 ENDIF 1362 ! 1363 END SUBROUTINE trc_kpp 1364 #endif 1295 1365 1296 1366 SUBROUTINE zdf_kpp_init -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdfric.F90
r1601 r2027 28 28 PRIVATE 29 29 30 PUBLIC zdf_ric ! called by step.F90 30 PUBLIC zdf_ric ! called by step.F90 31 PUBLIC zdf_ric_init ! called by opa.F90 31 32 32 33 LOGICAL, PUBLIC, PARAMETER :: lk_zdfric = .TRUE. !: Richardson vertical mixing flag … … 82 83 !!---------------------------------------------------------------------- 83 84 84 IF( kt == nit000 ) CALL zdf_ric_init ! Initialization (first time-step only)85 86 85 ! ! =============== 87 86 DO jk = 2, jpkm1 ! Horizontal slab -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdftke.F90
r1756 r2027 54 54 55 55 PUBLIC zdf_tke ! routine called in step module 56 PUBLIC tke_init ! routine called in opa module 56 57 PUBLIC tke_rst ! routine called in step module 57 58 … … 149 150 !!---------------------------------------------------------------------- 150 151 ! 151 IF( kt == nit000 ) CALL tke_init ! initialisation152 !153 152 CALL tke_tke ! now tke (en) 154 153 ! -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdftke_old.F90
r1617 r2027 49 49 50 50 PUBLIC zdf_tke_old ! routine called in step module 51 PUBLIC zdf_tke_init ! routine called in opa module 51 52 52 53 LOGICAL , PUBLIC, PARAMETER :: lk_zdftke_old = .TRUE. !: TKE vertical mixing flag … … 182 183 !!-------------------------------------------------------------------- 183 184 184 IF( kt == nit000 ) CALL zdf_tke_init ! Initialization (first time-step only)185 186 185 ! ! Local constant initialization 187 186 zbbrau = .5 * rn_ebb / rau0 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/ZDF/zdftmx.F90
r1601 r2027 27 27 PRIVATE 28 28 29 PUBLIC zdf_tmx ! called in step module 29 PUBLIC zdf_tmx ! called in step module 30 PUBLIC zdf_tmx_init ! called in opa module 30 31 31 32 LOGICAL, PUBLIC, PARAMETER :: lk_zdftmx = .TRUE. !: tidal mixing flag … … 96 97 REAL(wp), DIMENSION(jpi,jpj) :: zkz ! temporary 2D workspace 97 98 !!---------------------------------------------------------------------- 98 99 !100 IF( kt == nit000 ) CALL zdf_tmx_init ! Initialization (first time-step only)101 99 102 100 ! ! ----------------------- ! -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/cla.F90
r2000 r2027 29 29 !! * Routine accessibility 30 30 PUBLIC tra_cla ! routine called by step.F90 31 PUBLIC tra_cla_init ! routine called by opa.F90 31 32 32 33 !! * Modules variables … … 76 77 !!---------------------------------------------------------------------- 77 78 78 ! cross land advection for straits79 80 ! Initialization81 IF( kt == nit000 ) CALL tra_cla_init82 83 84 79 ! Bab el Mandeb strait horizontal advection 85 80 -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/opa.F90
r1976 r2027 25 25 !! - ! 2007-07 (J. Chanut, A. Sellar) Unstructured open boundaries (BDY) 26 26 !! 3.2 ! 2009-08 (S. Masson) open/write in the listing file in mpp 27 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 27 28 !!---------------------------------------------------------------------- 28 29 … … 33 34 !! opa_closefile : close remaining files 34 35 !!---------------------------------------------------------------------- 35 USE oce ! dynamics and tracers variables 36 USE dom_oce ! ocean space domain variables36 37 USE step_oce ! Time stepping module definition 37 38 USE sbc_oce ! surface boundary condition: ocean 38 39 USE trdmod_oce ! ocean variables trends … … 40 41 USE mppini ! shared/distributed memory setting (mpp_init routine) 41 42 USE domain ! domain initialization (dom_init routine) 42 USE obc_par ! open boundary cond. parameters43 43 USE obcini ! open boundary cond. initialization (obc_ini routine) 44 USE bdy_par ! unstructured open boundary cond. parameters45 44 USE bdyini ! unstructured open boundary cond. initialization (bdy_init routine) 46 45 USE istate ! initial state setting (istate_init routine) 47 USE sbcmod ! surface boundary condition48 USE eosbn2 ! equation of state (eos_init routine)49 USE dynhpg ! hydrostatic pressure gradient50 46 USE ldfdyn ! lateral viscosity setting (ldfdyn_init routine) 51 47 USE ldftra ! lateral diffusivity setting (ldftra_init routine) … … 53 49 USE phycst ! physical constant (par_cst routine) 54 50 USE trdmod ! momentum/tracers trends (trd_mod_init routine) 55 USE diaptr ! poleward transports (dia_ptr_init routine)56 51 USE step ! OPA time-stepping (stp routine) 57 52 #if defined key_oasis3 … … 60 55 USE cpl_oasis4 ! OASIS4 coupling (not working) 61 56 #endif 62 USE dynspg_oce ! Control choice of surface pressure gradient schemes63 USE prtctl ! Print control (prt_ctl_init routine)64 57 USE c1d ! 1D configuration 65 USE dyncor_c1d ! Coriolis factor at T-point66 58 USE step_c1d ! Time stepping loop for the 1D configuration 67 59 #if defined key_top 68 60 USE trcini ! passive tracer initialisation 69 61 #endif 70 71 USE iom 72 USE in_out_manager ! I/O manager 62 73 63 USE lib_mpp ! distributed memory computing 74 64 #if defined key_iomput … … 76 66 #endif 77 67 78 IMPLICIT NONE79 68 PRIVATE 80 69 … … 237 226 ELSE ; CALL mpp_init2 ! eliminate land processors 238 227 ENDIF 239 240 CALL phy_cst ! Physical constants 241 CALL eos_init ! Equation of state 242 CALL dom_cfg ! Domain configuration 243 CALL dom_init ! Domain 244 !!gm c1d case can be moved in dom_init routine 245 IF( lk_c1d ) THEN ! 1D configuration 246 CALL cor_c1d ! Coriolis defined at T-point 247 umask(:,:,:) = tmask(:,:,:) ! U, V and T-points are the same 248 vmask(:,:,:) = tmask(:,:,:) ! 249 ENDIF 250 !!gm c1d end 251 252 IF( ln_ctl ) CALL prt_ctl_init ! Print control 253 254 IF( lk_obc ) CALL obc_init ! Open boundaries 255 IF( lk_bdy ) CALL bdy_init ! Unstructured open boundaries 256 257 CALL istate_init ! ocean initial state (Dynamics and tracers) 228 229 230 231 232 233 CALL phy_cst ! Physical constants 234 CALL eos_init ! Equation of state 235 CALL dom_cfg ! Domain configuration 236 CALL dom_init ! Domain 237 238 IF( ln_ctl ) CALL prt_ctl_init ! Print control 239 240 IF( lk_obc ) CALL obc_init ! Open boundaries 241 IF( lk_bdy ) CALL bdy_init ! Unstructured open boundaries 242 243 IF( ln_zps ) CALL zps_hde_init ! Partial steps: horizontal derivative 244 CALL istate_init ! ocean initial state (Dynamics and tracers) 258 245 259 246 ! ! Ocean physics 260 CALL sbc_init ! Read namsbc namelist : surface module (needed for iom_init) 261 CALL ldf_tra_init ! Lateral ocean tracer physics 262 CALL ldf_dyn_init ! Lateral ocean momentum physics 263 CALL zdf_init ! Vertical ocean physics 264 247 CALL sbc_init ! Read namsbc namelist : surface module (needed for iom_init) 248 249 ! ! Vertical physics 250 CALL zdf_init ! namelist read 251 CALL zdf_bfr_init ! bottom friction 252 IF( lk_zdfric ) CALL zdf_ric_init ! Richardson number dependent Kz 253 IF( lk_zdftke_old ) CALL zdf_tke_init ! TKE closure scheme for Kz (old scheme) 254 IF( lk_zdftke ) CALL tke_init ! TKE closure scheme for Kz 255 IF( lk_zdfkpp ) CALL zdf_kpp_init ! KPP closure scheme for Kz 256 IF( lk_zdftmx ) CALL zdf_tmx_init ! tidal vertical mixing 257 IF( lk_zdfddm .AND. .NOT. lk_zdfkpp ) & 258 & CALL zdf_ddm_init ! double diffusive mixing 259 ! ! Lateral physics 260 CALL ldf_tra_init ! Lateral ocean tracer physics 261 CALL ldf_dyn_init ! Lateral ocean momentum physics 262 IF( lk_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 263 #if defined key_traldf_c2d 264 IF( lk_traldf_eiv ) CALL ldf_eiv( kstp ) ! eddy induced velocity coefficient 265 # endif 266 ! ! Active tracers 267 CALL tra_qsr_init ! penetrative solar radiation qsr 268 IF( lk_trabbc ) CALL tra_bbc_init ! bottom heat flux 269 IF( lk_trabbl ) CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 270 IF( lk_tradmp ) CALL tra_dmp_init ! internal damping trends 271 CALL tra_adv_init ! horizontal & vertical advection 272 IF( n_cla == 1 ) CALL tra_cla_init ! Cross Land Advection (Update Hor. advection) 273 CALL tra_ldf_init ! lateral mixing 274 CALL tra_zdf_init ! vertical mixing and after tracer fields 275 276 ! ! Dynamics 277 CALL dyn_adv_init ! advection (vector or flux form) 278 CALL vor_init ! vorticity term including Coriolis 279 CALL dyn_ldf_init ! lateral mixing 280 CALL hpg_init ! horizontal gradient of Hydrostatic pressure 281 CALL dyn_zdf_init ! vertical diffusion 282 CALL dyn_spg_init ! surface pressure gradient 265 283 #if defined key_top 266 CALL trc_ini ! Passive tracers 284 ! ! Passive tracers 285 CALL trc_ini 267 286 #endif 268 287 269 288 ! ! diagnostics 270 CALL iom_init ! iom_put initialization 271 CALL dia_ptr_init ! Poleward TRansports initialization 272 CALL trd_mod_init ! Mixed-layer/Vorticity/Integral constraints trends 289 CALL iom_init ! iom_put initialization 290 IF( lk_floats ) CALL flo_init ! drifting Floats 291 IF( lk_diaar5 ) CALL dia_ar5_init ! ar5 diag 292 CALL dia_ptr_init ! Poleward TRansports initialization 293 CALL trd_mod_init ! Mixed-layer/Vorticity/Integral constraints trends 273 294 ! 274 295 END SUBROUTINE opa_init -
branches/DEV_r2006_merge_TRA_TRC/NEMO/OPA_SRC/step.F90
r1953 r2027 26 26 !! stp : OPA system time-stepping 27 27 !!---------------------------------------------------------------------- 28 USE oce ! ocean dynamics and tracers variables 29 USE dom_oce ! ocean space and time domain variables 30 USE zdf_oce ! ocean vertical physics variables 31 USE ldftra_oce ! ocean tracer - trends 32 USE ldfdyn_oce ! ocean dynamics - trends 33 USE in_out_manager ! I/O manager 34 USE iom ! 35 USE lbclnk 36 37 USE daymod ! calendar (day routine) 38 39 USE dtatem ! ocean temperature data (dta_tem routine) 40 USE dtasal ! ocean salinity data (dta_sal routine) 41 USE sbcmod ! surface boundary condition (sbc routine) 42 USE sbcrnf ! surface boundary condition: runoff variables 43 USE sbccpl ! surface boundary condition: coupled formulation (call send at end of step) 44 USE cpl_oasis3, ONLY : lk_cpl 45 46 #if defined key_top 47 USE trcstp ! passive tracer time-stepping (trc_stp routine) 48 #endif 49 50 USE traqsr ! solar radiation penetration (tra_qsr routine) 51 USE trasbc ! surface boundary condition (tra_sbc routine) 52 USE trabbc ! bottom boundary condition (tra_bbc routine) 53 USE trabbl ! bottom boundary layer (tra_bbl routine) 54 USE tradmp ! internal damping (tra_dmp routine) 55 USE traadv ! advection scheme control (tra_adv_ctl routine) 56 USE traldf ! lateral mixing (tra_ldf routine) 57 USE cla ! cross land advection (tra_cla routine) 58 ! zdfkpp ! KPP non-local tracer fluxes (tra_kpp routine) 59 USE trazdf ! vertical mixing (tra_zdf routine) 60 USE tranxt ! time-stepping (tra_nxt routine) 61 USE tranpc ! non-penetrative convection (tra_npc routine) 62 63 USE eosbn2 ! equation of state (eos_bn2 routine) 64 65 USE dynadv ! advection (dyn_adv routine) 66 USE dynbfr ! Bottom friction terms (dyn_bfr routine) 67 USE dynvor ! vorticity term (dyn_vor routine) 68 USE dynhpg ! hydrostatic pressure grad. (dyn_hpg routine) 69 USE dynldf ! lateral momentum diffusion (dyn_ldf routine) 70 USE dynzdf ! vertical diffusion (dyn_zdf routine) 71 USE dynspg_oce ! surface pressure gradient (dyn_spg routine) 72 USE dynspg ! surface pressure gradient (dyn_spg routine) 73 USE dynnxt ! time-stepping (dyn_nxt routine) 74 75 USE obc_par ! open boundary condition variables 76 USE obcdta ! open boundary condition data (obc_dta routine) 77 USE obcrst ! open boundary cond. restart (obc_rst routine) 78 USE obcrad ! open boundary cond. radiation (obc_rad routine) 79 80 USE bdy_par ! unstructured open boundary data variables 81 USE bdydta ! unstructured open boundary data (bdy_dta routine) 82 83 USE sshwzv ! vertical velocity and ssh (ssh_wzv routine) 84 85 USE ldfslp ! iso-neutral slopes (ldf_slp routine) 86 USE ldfeiv ! eddy induced velocity coef. (ldf_eiv routine) 87 88 USE zdftmx ! tide-induced vertical mixing (zdf_tmx routine) 89 USE zdfbfr ! bottom friction (zdf_bfr routine) 90 USE zdftke_old ! old TKE vertical mixing (zdf_tke_old routine) 91 USE zdftke ! TKE vertical mixing (zdf_tke routine) 92 USE zdfkpp ! KPP vertical mixing (zdf_kpp routine) 93 USE zdfddm ! double diffusion mixing (zdf_ddm routine) 94 USE zdfevd ! enhanced vertical diffusion (zdf_evd routine) 95 USE zdfric ! Richardson vertical mixing (zdf_ric routine) 96 USE zdfmxl ! Mixed-layer depth (zdf_mxl routine) 97 98 USE zpshde ! partial step: hor. derivative (zps_hde routine) 99 100 USE diawri ! Standard run outputs (dia_wri routine) 101 USE trdicp ! Ocean momentum/tracers trends (trd_wri routine) 102 USE trdmld ! mixed-layer trends (trd_mld routine) 103 USE trdmld_rst ! restart for mixed-layer trends 104 USE trdmod_oce ! ocean momentum/tracers trends 105 USE trdvor ! vorticity budget (trd_vor routine) 106 USE diagap ! hor. mean model-data gap (dia_gap routine) 107 USE diahdy ! dynamic height (dia_hdy routine) 108 USE diaptr ! poleward transports (dia_ptr routine) 109 USE diaar5 ! AR5 diagnosics (dia_ar5 routine) 110 USE diahth ! thermocline depth (dia_hth routine) 111 USE diafwb ! freshwater budget (dia_fwb routine) 112 USE flo_oce ! floats variables 113 USE floats ! floats computation (flo_stp routine) 114 115 USE stpctl ! time stepping control (stp_ctl routine) 116 USE restart ! ocean restart (rst_wri routine) 117 USE prtctl ! Print control (prt_ctl routine) 118 119 #if defined key_agrif 120 USE agrif_opa_sponge ! Momemtum and tracers sponges 121 #endif 28 USE step_oce ! time stepping definition modules 122 29 123 30 IMPLICIT NONE … … 265 172 sa(:,:,:) = 0.e0 266 173 174 CALL tra_swap 267 175 CALL tra_sbc ( kstp ) ! surface boundary condition 268 176 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr 269 177 IF( lk_trabbc ) CALL tra_bbc ( kstp ) ! bottom heat flux 270 IF( lk_trabbl_dif ) CALL tra_bbl_dif( kstp ) ! diffusive bottom boundary layer scheme 271 IF( lk_trabbl_adv ) CALL tra_bbl_adv( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 178 IF( lk_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 272 179 IF( lk_tradmp ) CALL tra_dmp ( kstp ) ! internal damping trends 273 180 CALL tra_adv ( kstp ) ! horizontal & vertical advection … … 276 183 CALL tra_ldf ( kstp ) ! lateral mixing 277 184 #if defined key_agrif 185 CALL tra_unswap 278 186 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra ! tracers sponge 187 CALL tra_swap 279 188 #endif 280 189 CALL tra_zdf ( kstp ) ! vertical mixing and after tracer fields … … 283 192 IF( ln_zdfnpc ) CALL tra_npc ( kstp ) ! update after fields by non-penetrative convection 284 193 CALL tra_nxt ( kstp ) ! tracer fields at next time step 194 CALL tra_unswap 285 195 CALL eos( ta, sa, rhd, rhop ) ! Time-filtered in situ density for hpg computation 286 196 IF( ln_zps ) CALL zps_hde( kstp, ta, sa, rhd, & ! Partial steps: time filtered hor. derivative … … 289 199 290 200 ELSE ! centered hpg (eos then time stepping) 201 CALL tra_unswap 291 202 CALL eos( tn, sn, rhd, rhop ) ! now in situ density for hpg computation 292 203 IF( ln_zps ) CALL zps_hde( kstp, tn, sn, rhd, & ! Partial steps: now horizontal derivative 293 204 & gtu, gsu, gru, & ! of t, s, rd at the bottom ocean level 294 205 & gtv, gsv, grv ) 206 CALL tra_swap 295 207 IF( ln_zdfnpc ) CALL tra_npc ( kstp ) ! update after fields by non-penetrative convection 296 208 CALL tra_nxt ( kstp ) ! tracer fields at next time step 209 CALL tra_unswap 297 210 ENDIF 298 211
Note: See TracChangeset
for help on using the changeset viewer.