Changeset 5868 for branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN
- Timestamp:
- 2015-11-06T19:07:02+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90
r5643 r5868 78 78 !! (lk_vvl=T), the leap-frog is applied on thickness weighted 79 79 !! velocity. 80 !! Note also that in filtered free surface (lk_dynspg_flt=T),81 !! the time stepping has already been done in dynspg module82 80 !! 83 81 !! * Apply lateral boundary conditions on after velocity … … 101 99 INTEGER :: ji, jj, jk ! dummy loop indices 102 100 INTEGER :: iku, ikv ! local integers 103 #if ! defined key_dynspg_flt104 101 REAL(wp) :: z2dt ! temporary scalar 105 #endif106 102 REAL(wp) :: zue3a, zue3n, zue3b, zuf, zec ! local scalars 107 103 REAL(wp) :: zve3a, zve3n, zve3b, zvf, z1_2dt ! - - … … 120 116 IF(lwp) WRITE(numout,*) '~~~~~~~' 121 117 ENDIF 122 123 #if defined key_dynspg_flt124 !125 ! Next velocity : Leap-frog time stepping already done in dynspg_flt.F routine126 ! -------------127 128 ! Update after velocity on domain lateral boundaries (only local domain required)129 ! --------------------------------------------------130 CALL lbc_lnk( ua, 'U', -1. ) ! local domain boundaries131 CALL lbc_lnk( va, 'V', -1. )132 !133 #else134 118 135 119 # if defined key_dynspg_exp … … 201 185 CALL Agrif_dyn( kt ) !* AGRIF zoom boundaries 202 186 # endif 203 #endif204 187 205 188 IF( l_trddyn ) THEN ! prepare the atf trend computation + some diagnostics -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r5836 r5868 21 21 USE dynspg_exp ! surface pressure gradient (dyn_spg_exp routine) 22 22 USE dynspg_ts ! surface pressure gradient (dyn_spg_ts routine) 23 USE dynspg_flt ! surface pressure gradient (dyn_spg_flt routine)24 23 USE dynadv ! dynamics: vector invariant versus flux form 25 24 USE dynhpg, ONLY: ln_dynhpg_imp … … 32 31 USE in_out_manager ! I/O manager 33 32 USE lib_mpp ! MPP library 34 USE solver ! solver initialization35 33 USE wrk_nemo ! Memory Allocation 36 34 USE timing ! Timing … … 55 53 CONTAINS 56 54 57 SUBROUTINE dyn_spg( kt , kindic)55 SUBROUTINE dyn_spg( kt ) 58 56 !!---------------------------------------------------------------------- 59 57 !! *** ROUTINE dyn_spg *** … … 80 78 ! 81 79 INTEGER, INTENT(in ) :: kt ! ocean time-step index 82 INTEGER, INTENT( out) :: kindic ! solver flag83 80 ! 84 81 INTEGER :: ji, jj, jk ! dummy loop indices … … 171 168 CASE ( 0 ) ; CALL dyn_spg_exp( kt ) ! explicit 172 169 CASE ( 1 ) ; CALL dyn_spg_ts ( kt ) ! time-splitting 173 CASE ( 2 ) ; CALL dyn_spg_flt( kt, kindic ) ! filtered174 170 ! 175 171 END SELECT 176 172 ! 177 173 IF( l_trddyn ) THEN ! save the surface pressure gradient trends for further diagnostics 178 SELECT CASE ( nspg ) 179 CASE ( 0, 1 ) 180 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 181 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 182 CASE( 2 ) 183 z2dt = 2. * rdt 184 IF( neuler == 0 .AND. kt == nit000 ) z2dt = rdt 185 ztrdu(:,:,:) = ( ua(:,:,:) - ub(:,:,:) ) / z2dt - ztrdu(:,:,:) 186 ztrdv(:,:,:) = ( va(:,:,:) - vb(:,:,:) ) / z2dt - ztrdv(:,:,:) 187 END SELECT 174 ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 175 ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 188 176 CALL trd_dyn( ztrdu, ztrdv, jpdyn_spg, kt ) 189 177 ! … … 217 205 WRITE(numout,*) ' Explicit free surface lk_dynspg_exp = ', lk_dynspg_exp 218 206 WRITE(numout,*) ' Free surface with time splitting lk_dynspg_ts = ', lk_dynspg_ts 219 WRITE(numout,*) ' Filtered free surface cst volume lk_dynspg_flt = ', lk_dynspg_flt220 207 ENDIF 221 208 … … 233 220 IF(lk_dynspg_exp) ioptio = ioptio + 1 234 221 IF(lk_dynspg_ts ) ioptio = ioptio + 1 235 IF(lk_dynspg_flt) ioptio = ioptio + 1236 222 ! 237 223 IF( ioptio > 1 .OR. ( ioptio == 0 .AND. .NOT. lk_c1d ) ) & … … 242 228 IF( lk_dynspg_exp) nspg = 0 243 229 IF( lk_dynspg_ts ) nspg = 1 244 IF( lk_dynspg_flt) nspg = 2 230 245 231 ! 246 232 IF(lwp) THEN … … 248 234 IF( nspg == 0 ) WRITE(numout,*) ' explicit free surface' 249 235 IF( nspg == 1 ) WRITE(numout,*) ' free surface with time splitting scheme' 250 IF( nspg == 2 ) WRITE(numout,*) ' filtered free surface' 251 ENDIF 252 253 #if defined key_dynspg_flt 254 CALL solver_init( nit000 ) ! Elliptic solver initialisation 255 #endif 236 ENDIF 256 237 ! ! Control of hydrostatic pressure choice 257 238 IF( lk_dynspg_ts .AND. ln_dynhpg_imp ) CALL ctl_stop( 'Semi-implicit hpg not compatible with time splitting' ) -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90
r5836 r5868 26 26 #else 27 27 LOGICAL, PUBLIC, PARAMETER :: lk_dynspg_ts = .FALSE. !: Free surface with time splitting flag 28 #endif29 #if defined key_dynspg_flt30 LOGICAL, PUBLIC, PARAMETER :: lk_dynspg_flt = .TRUE. !: Filtered free surface cst volume flag31 #else32 LOGICAL, PUBLIC, PARAMETER :: lk_dynspg_flt = .FALSE. !: Filtered free surface cst volume flag33 28 #endif 34 29 ! !!! Time splitting scheme (key_dynspg_ts)
Note: See TracChangeset
for help on using the changeset viewer.