Changeset 5917
- Timestamp:
- 2015-11-25T11:03:43+01:00 (9 years ago)
- Location:
- branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM
- Files:
-
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/ARCH/arch-openmpi_NAVITI_MERCATOR.fcm
r5656 r5917 23 23 %CPP cpp 24 24 %FC mpif90 25 %FCFLAGS -O 2-fp-model precise -traceback -r8 -convert big_endian -assume byterecl25 %FCFLAGS -O1 -fp-model precise -traceback -r8 -convert big_endian -assume byterecl 26 26 %FFLAGS %FCFLAGS 27 27 %LD mpif90 -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/AMM12/EXP00/namelist_cfg
r5902 r5917 70 70 ppkth2 = 999999. ! 71 71 ppacr2 = 999999. 72 /73 !-----------------------------------------------------------------------74 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")75 !-----------------------------------------------------------------------76 ln_bt_nn_auto = .FALSE. ! Set nn_baro automatically to be just below77 ! a user defined maximum courant number (rn_bt_cmax)78 nn_baro = 30 ! Number of iterations of barotropic mode79 72 / 80 73 !----------------------------------------------------------------------- … … 346 339 &namdyn_spg ! surface pressure gradient 347 340 !----------------------------------------------------------------------- 341 ln_dynspg_ts = .true. ! split-explicit free surface 342 ln_bt_auto = .false. ! Number of sub-step defined from: 343 nn_baro = 30 ! =F : the number of sub-step in rn_rdt seconds 348 344 / 349 345 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/C1D_PAPA/EXP00/namelist_cfg
r5902 r5917 64 64 / 65 65 !----------------------------------------------------------------------- 66 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")67 !-----------------------------------------------------------------------68 /69 !-----------------------------------------------------------------------70 66 &namcrs ! Grid coarsening for dynamics output and/or 71 67 ! passive tracer coarsened online simulations … … 263 259 &namdyn_spg ! surface pressure gradient 264 260 !----------------------------------------------------------------------- 265 ln_dynspg_exp = .false. ! explicit free surface266 ln_dynspg_ts = .false. ! split-explicit free surface267 261 / 268 262 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/GYRE/EXP00/namelist_cfg
r5902 r5917 64 64 ppkth2 = 999999.0 ! 65 65 ppacr2 = 999999.0 ! 66 /67 !-----------------------------------------------------------------------68 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")69 !-----------------------------------------------------------------------70 66 / 71 67 !----------------------------------------------------------------------- … … 288 284 &namdyn_spg ! surface pressure gradient 289 285 !----------------------------------------------------------------------- 286 ln_dynspg_ts = .true. ! split-explicit free surface 290 287 / 291 288 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/GYRE_BFM/EXP00/namelist_cfg
r5902 r5917 67 67 ppkth2 = 999999.0 ! 68 68 ppacr2 = 999999.0 ! 69 /70 !-----------------------------------------------------------------------71 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")72 !-----------------------------------------------------------------------73 69 / 74 70 !----------------------------------------------------------------------- … … 289 285 &namdyn_spg ! surface pressure gradient 290 286 !----------------------------------------------------------------------- 287 ln_dynspg_ts = .true. ! split-explicit free surface 291 288 / 292 289 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_cfg
r5902 r5917 57 57 ppkth2 = 999999.0 ! 58 58 ppacr2 = 999999.0 ! 59 /60 !-----------------------------------------------------------------------61 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")62 !-----------------------------------------------------------------------63 59 / 64 60 !----------------------------------------------------------------------- … … 208 204 &namdyn_spg ! surface pressure gradient 209 205 !----------------------------------------------------------------------- 206 ln_dynspg_ts = .true. ! split-explicit free surface 210 207 / 211 208 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/GYRE_XIOS/EXP00/namelist_cfg
r5868 r5917 41 41 nn_bathy = 0 ! compute (=0) or read (=1) the bathymetry file 42 42 rn_rdt = 7200. ! time step for the dynamics (and tracer if nn_acc=0) 43 ! nn_baro = 60 ! number of barotropic time step ("key_dynspg_ts")44 43 rn_rdtmin = 7200. ! minimum time step on tracers (used if nn_acc=1) 45 44 rn_rdtmax = 7200. ! maximum time step on tracers (used if nn_acc=1) … … 261 260 / 262 261 !----------------------------------------------------------------------- 263 !namdyn_spg ! surface pressure gradient (CPP key only) 264 !----------------------------------------------------------------------- 262 &namdyn_spg ! surface pressure gradient 263 !----------------------------------------------------------------------- 264 ln_dynspg_ts = .true. ! split-explicit free surface 265 / 265 266 !----------------------------------------------------------------------- 266 267 &namdyn_ldf ! lateral diffusion on momentum -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/1_namelist_cfg
r5902 r5917 54 54 rn_rdtmin = 14400. ! minimum time step on tracers (used if nn_acc=1) 55 55 rn_rdtmax = 14400. ! maximum time step on tracers (used if nn_acc=1) 56 /57 !-----------------------------------------------------------------------58 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")59 !-----------------------------------------------------------------------60 56 / 61 57 !----------------------------------------------------------------------- … … 198 194 ln_dynvor_een = .true. ! energy & enstrophy scheme 199 195 nn_een_e3f = 1 ! e3f = masked averaging of e3t divided by 4 (=0) or by the sum of mask (=1) 200 ln_dynvor_msk = .true. ! vorticity multiplied by fmask (=T) or not (=F) (all vorticity schemes)201 196 / 202 197 !----------------------------------------------------------------------- … … 207 202 &namdyn_spg ! surface pressure gradient 208 203 !----------------------------------------------------------------------- 204 ln_dynspg_ts = .true. ! split-explicit free surface 209 205 / 210 206 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM/EXP00/namelist_cfg
r5902 r5917 46 46 ppkth2 = 999999. ! 47 47 ppacr2 = 999999. ! 48 /49 !-----------------------------------------------------------------------50 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")51 !-----------------------------------------------------------------------52 48 / 53 49 !----------------------------------------------------------------------- … … 190 186 &namdyn_spg ! surface pressure gradient 191 187 !----------------------------------------------------------------------- 188 ln_dynspg_ts = .true. ! split-explicit free surface 192 189 / 193 190 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/1_namelist_cfg
r5902 r5917 53 53 rn_rdtmin = 14400. ! minimum time step on tracers (used if nn_acc=1) 54 54 rn_rdtmax = 14400. ! maximum time step on tracers (used if nn_acc=1) 55 /56 !-----------------------------------------------------------------------57 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")58 !-----------------------------------------------------------------------59 55 / 60 56 !----------------------------------------------------------------------- … … 206 202 &namdyn_spg ! surface pressure gradient 207 203 !----------------------------------------------------------------------- 204 ln_dynspg_ts = .true. ! split-explicit free surface 208 205 / 209 206 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/namelist_cfg
r5902 r5917 46 46 ppkth2 = 999999. ! 47 47 ppacr2 = 999999. ! 48 /49 !-----------------------------------------------------------------------50 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")51 !-----------------------------------------------------------------------52 48 / 53 49 !----------------------------------------------------------------------- … … 186 182 !----------------------------------------------------------------------- 187 183 ln_hpg_zco = .false. ! z-coordinate - full steps 188 ln_hpg_zps = .false. 189 ln_hpg_sco = . false.! s-coordinate (standard jacobian formulation)184 ln_hpg_zps = .false. ! z-coordinate - partial steps (interpolation) 185 ln_hpg_sco = .true. ! s-coordinate (standard jacobian formulation) 190 186 ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) 191 ln_hpg_prj = .true. ! s-coordinate (Pressure Jacobian scheme) 192 ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) 193 ! centered time scheme (F) 187 ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) 194 188 / 195 189 !----------------------------------------------------------------------- 196 190 &namdyn_spg ! surface pressure gradient 197 191 !----------------------------------------------------------------------- 192 ln_dynspg_ts = .true. ! split-explicit free surface 198 193 / 199 194 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/1_namelist_cfg
r5868 r5917 552 552 ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial) 553 553 ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme) 554 ln_dynhpg_imp = .false. ! time stepping: semi-implicit time scheme (T) 555 ! centered time scheme (F) 556 / 557 !----------------------------------------------------------------------- 558 !namdyn_spg ! surface pressure gradient (CPP key only) 559 !----------------------------------------------------------------------- 560 ! ! explicit free surface ("key_dynspg_exp") 561 ! ! split-explicit free surface ("key_dynspg_ts") 562 554 / 555 !----------------------------------------------------------------------- 556 &namdyn_spg ! surface pressure gradient 557 !----------------------------------------------------------------------- 558 ln_dynspg_ts = .true. ! split-explicit free surface 559 / 563 560 !----------------------------------------------------------------------- 564 561 &namdyn_ldf ! lateral diffusion on momentum -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM_CFC_C14b/EXP00/namelist_cfg
r5868 r5917 65 65 ppkth2 = 999999. ! 66 66 ppacr2 = 999999. ! 67 /68 !-----------------------------------------------------------------------69 &namsplit ! time splitting parameters ("key_dynspg_ts")70 !-----------------------------------------------------------------------71 67 / 72 68 !----------------------------------------------------------------------- … … 248 244 / 249 245 !----------------------------------------------------------------------- 250 !namdyn_spg ! surface pressure gradient (CPP key only) 251 !----------------------------------------------------------------------- 246 &namdyn_spg ! surface pressure gradient 247 !----------------------------------------------------------------------- 248 ln_dynspg_ts = .true. ! split-explicit free surface 249 / 252 250 !----------------------------------------------------------------------- 253 251 &namdyn_ldf ! lateral diffusion on momentum -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_cfg
r5902 r5917 46 46 ppkth2 = 999999. ! 47 47 ppacr2 = 999999. ! 48 /49 !-----------------------------------------------------------------------50 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")51 !-----------------------------------------------------------------------52 48 / 53 49 !----------------------------------------------------------------------- … … 190 186 &namdyn_spg ! surface pressure gradient 191 187 !----------------------------------------------------------------------- 188 ln_dynspg_ts = .true. ! split-explicit free surface 192 189 / 193 190 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_cfg
r5836 r5917 53 53 ppkth2 = 999999. ! 54 54 ppacr2 = 999999. ! 55 /56 !-----------------------------------------------------------------------57 &namsplit ! time splitting parameters ("key_dynspg_ts")58 !-----------------------------------------------------------------------59 55 / 60 56 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/ORCA2_SAS_LIM/EXP00/namelist_cfg
r5902 r5917 50 50 / 51 51 !----------------------------------------------------------------------- 52 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")53 !-----------------------------------------------------------------------54 /55 !-----------------------------------------------------------------------56 52 &namcrs ! Grid coarsening for dynamics output and/or 57 53 ! passive tracer coarsened online simulations -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/CONFIG/SHARED/namelist_ref
r5902 r5917 161 161 ppkth2 = 48.029893720000 ! 162 162 ppacr2 = 13.000000000000 ! 163 /164 !-----------------------------------------------------------------------165 &namsplit ! time splitting parameters ("ln_dynspg_ts=T")166 !-----------------------------------------------------------------------167 ln_bt_fw = .TRUE. ! Forward integration of barotropic equations168 ln_bt_av = .TRUE. ! Time filtering of barotropic variables169 ln_bt_nn_auto = .TRUE. ! Set nn_baro automatically to be just below170 ! a user defined maximum courant number (rn_bt_cmax)171 nn_baro = 30 ! Number of iterations of barotropic mode172 ! during rn_rdt seconds. Only used if ln_bt_nn_auto=F173 rn_bt_cmax = 0.8 ! Maximum courant number allowed if ln_bt_nn_auto=T174 nn_bt_flt = 1 ! Time filter choice175 ! = 0 None176 ! = 1 Boxcar over nn_baro barotropic steps177 ! = 2 Boxcar over 2*nn_baro " "178 163 / 179 164 !----------------------------------------------------------------------- … … 867 852 &namdyn_spg ! surface pressure gradient 868 853 !----------------------------------------------------------------------- 869 ln_dynspg_exp = .false. ! explicit free surface 870 ln_dynspg_ts = .true. ! split-explicit free surface 854 ln_dynspg_exp = .false. ! explicit free surface 855 ln_dynspg_ts = .false. ! split-explicit free surface 856 ln_bt_fw = .true. ! Forward integration of barotropic Eqs. 857 ln_bt_av = .true. ! Time filtering of barotropic variables 858 nn_bt_flt = 1 ! Time filter choice = 0 None 859 ! ! = 1 Boxcar over nn_baro sub-steps 860 ! ! = 2 Boxcar over 2*nn_baro " " 861 ln_bt_auto = .true. ! Number of sub-step defined from: 862 rn_bt_cmax = 0.8 ! =T : the Maximum Courant Number allowed 863 nn_baro = 30 ! =F : the number of sub-step in rn_rdt seconds 871 864 / 872 865 !----------------------------------------------------------------------- -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/BDY/bdydta.F90
r5902 r5917 387 387 END DO ! ib_bdy 388 388 389 ! bg jchanut tschanges390 389 #if defined key_tide 391 ! Add tides if not split-explicit free surface else this is done in ts loop 392 IF (.NOT.ln_dynspg_ts) CALL bdy_dta_tides( kt=kt, time_offset=time_offset ) 393 #endif 394 ! end jchanut tschanges 390 IF (ln_dynspg_ts) THEN ! Fill temporary arrays with slow-varying bdy data 391 DO ib_bdy = 1, nb_bdy ! Tidal component added in ts loop 392 IF ( nn_dyn2d_dta(ib_bdy) .ge. 2 ) THEN 393 nblen => idx_bdy(ib_bdy)%nblen 394 nblenrim => idx_bdy(ib_bdy)%nblenrim 395 IF( cn_dyn2d(ib_bdy) == 'frs' ) THEN; ilen1(:)=nblen(:) ; ELSE ; ilen1(:)=nblenrim(:) ; ENDIF 396 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy_s(ib_bdy)%ssh(1:ilen1(1)) = dta_bdy(ib_bdy)%ssh(1:ilen1(1)) 397 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy_s(ib_bdy)%u2d(1:ilen1(2)) = dta_bdy(ib_bdy)%u2d(1:ilen1(2)) 398 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy_s(ib_bdy)%v2d(1:ilen1(3)) = dta_bdy(ib_bdy)%v2d(1:ilen1(3)) 399 ENDIF 400 END DO 401 ELSE ! Add tides if not split-explicit free surface else this is done in ts loop 402 ! 403 CALL bdy_dta_tides( kt=kt, time_offset=time_offset ) 404 ENDIF 405 #endif 395 406 396 407 IF ( ln_apr_obc ) THEN -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/BDY/bdytides.F90
r5902 r5917 53 53 TYPE(TIDES_DATA), PUBLIC, DIMENSION(jp_bdy), TARGET :: tides !: External tidal harmonics data 54 54 !$AGRIF_END_DO_NOT_TREAT 55 TYPE(OBC_DATA) , P RIVATE, DIMENSION(jp_bdy) :: dta_bdy_s !: bdy external data (slow component)55 TYPE(OBC_DATA) , PUBLIC, DIMENSION(jp_bdy) :: dta_bdy_s !: bdy external data (slow component) 56 56 57 57 !!---------------------------------------------------------------------- … … 269 269 ENDIF 270 270 ! 271 IF ( ln_dynspg_ts ) THEN ! Allocate arrays to save slowly varying boundary data during 272 ! time splitting integration 273 ALLOCATE( dta_bdy_s(ib_bdy)%ssh ( ilen0(1) ) ) 274 ALLOCATE( dta_bdy_s(ib_bdy)%u2d ( ilen0(2) ) ) 275 ALLOCATE( dta_bdy_s(ib_bdy)%v2d ( ilen0(3) ) ) 276 dta_bdy_s(ib_bdy)%ssh(:) = 0.e0 277 dta_bdy_s(ib_bdy)%u2d(:) = 0.e0 278 dta_bdy_s(ib_bdy)%v2d(:) = 0.e0 279 ENDIF 271 ! Allocate slow varying data in the case of time splitting: 272 ! Do it anyway because at this stage knowledge of free surface scheme is unknown 273 ALLOCATE( dta_bdy_s(ib_bdy)%ssh ( ilen0(1) ) ) 274 ALLOCATE( dta_bdy_s(ib_bdy)%u2d ( ilen0(2) ) ) 275 ALLOCATE( dta_bdy_s(ib_bdy)%v2d ( ilen0(3) ) ) 276 dta_bdy_s(ib_bdy)%ssh(:) = 0.e0 277 dta_bdy_s(ib_bdy)%u2d(:) = 0.e0 278 dta_bdy_s(ib_bdy)%v2d(:) = 0.e0 280 279 ! 281 280 ENDIF ! nn_dyn2d_dta(ib_bdy) .ge. 2 … … 396 395 !! 397 396 LOGICAL :: lk_first_btstp ! =.TRUE. if time splitting and first barotropic step 398 INTEGER, 397 INTEGER, DIMENSION(jpbgrd) :: ilen0 399 398 INTEGER, DIMENSION(1:jpbgrd) :: nblen, nblenrim ! short cuts 400 399 INTEGER :: itide, ib_bdy, ib, igrd ! loop indices … … 415 414 ! Absolute time from model initialization: 416 415 IF( PRESENT(kit) ) THEN 417 z_arg = ( kt + (kit+ 0.5_wp*(time_add-1)) / REAL(nn_baro,wp) ) * rdt416 z_arg = ( kt + (kit+time_add-1) / REAL(nn_baro,wp) ) * rdt 418 417 ELSE 419 418 z_arg = ( kt + time_add ) * rdt … … 455 454 zoff = -kt_tide * rdt ! time offset relative to nodal factor computation time 456 455 ! 457 ! If time splitting, save data at first barotropic iteration 458 IF ( PRESENT(kit) ) THEN 459 IF ( lk_first_btstp ) THEN ! Save slow varying open boundary data: 460 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy(ib_bdy)%ssh(1:ilen0(1)) 461 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy(ib_bdy)%u2d(1:ilen0(2)) 462 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy(ib_bdy)%v2d(1:ilen0(3)) 463 464 ELSE ! Initialize arrays from slow varying open boundary data: 465 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) 466 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) 467 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) 468 ENDIF 456 ! If time splitting, initialize arrays from slow varying open boundary data: 457 IF ( PRESENT(kit) ) THEN 458 IF ( dta_bdy(ib_bdy)%ll_ssh ) dta_bdy(ib_bdy)%ssh(1:ilen0(1)) = dta_bdy_s(ib_bdy)%ssh(1:ilen0(1)) 459 IF ( dta_bdy(ib_bdy)%ll_u2d ) dta_bdy(ib_bdy)%u2d(1:ilen0(2)) = dta_bdy_s(ib_bdy)%u2d(1:ilen0(2)) 460 IF ( dta_bdy(ib_bdy)%ll_v2d ) dta_bdy(ib_bdy)%v2d(1:ilen0(3)) = dta_bdy_s(ib_bdy)%v2d(1:ilen0(3)) 469 461 ENDIF 470 462 ! -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90
r5902 r5917 47 47 !! Free surface parameters 48 48 !! ======================= 49 LOGICAL, PUBLIC :: ln_dynspg_exp !: Explicit free surface flag50 LOGICAL, PUBLIC :: ln_dynspg_ts !: Split-Explicit free surface flag49 LOGICAL, PUBLIC :: ln_dynspg_exp !: Explicit free surface flag 50 LOGICAL, PUBLIC :: ln_dynspg_ts !: Split-Explicit free surface flag 51 51 52 52 !! Time splitting parameters … … 54 54 LOGICAL, PUBLIC :: ln_bt_fw !: Forward integration of barotropic sub-stepping 55 55 LOGICAL, PUBLIC :: ln_bt_av !: Time averaging of barotropic variables 56 LOGICAL, PUBLIC :: ln_bt_ nn_auto!: Set number of barotropic iterations automatically56 LOGICAL, PUBLIC :: ln_bt_auto !: Set number of barotropic iterations automatically 57 57 INTEGER, PUBLIC :: nn_bt_flt !: Filter choice 58 58 INTEGER, PUBLIC :: nn_baro !: Number of barotropic iterations during one baroclinic step (rdt) 59 REAL(wp), PUBLIC :: rn_bt_cmax !: Maximum allowed courant number (used if ln_bt_ nn_auto=T)59 REAL(wp), PUBLIC :: rn_bt_cmax !: Maximum allowed courant number (used if ln_bt_auto=T) 60 60 61 61 !! Horizontal grid parameters for domhgr -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90
r5869 r5917 36 36 USE trd_oce ! trends: ocean variables 37 37 USE trddyn ! trend manager: dynamics 38 USE zpshde ! partial step: hor. derivative (zps_hde routine) 38 39 ! 39 40 USE in_out_manager ! I/O manager … … 291 292 ENDIF 292 293 294 ! Partial steps: bottom before horizontal gradient of t, s, rd at the last ocean level 295 CALL zps_hde ( kt, jpts, tsn, gtsu, gtsv, rhd, gru , grv ) 293 296 294 297 ! Local constant initialization … … 489 492 ! iniitialised to 0. zhpi zhpi 490 493 zhpi(:,:,:)=0._wp ; zhpj(:,:,:)=0._wp 494 495 ! Partial steps: top & bottom before horizontal gradient 496 CALL zps_hde_isf( kt, jpts, tsn, gtsu, gtsv, gtui, gtvi, & 497 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 498 & grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) 491 499 492 500 !================================================================================== -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r5902 r5917 193 193 INTEGER :: ioptio, ios 194 194 ! 195 NAMELIST/namdyn_spg/ ln_dynspg_exp, ln_dynspg_ts 195 NAMELIST/namdyn_spg/ ln_dynspg_exp, ln_dynspg_ts, & 196 & ln_bt_fw, ln_bt_av, ln_bt_auto, & 197 & nn_baro, rn_bt_cmax, nn_bt_flt 196 198 !!---------------------------------------------------------------------- 197 199 ! -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r5902 r5917 26 26 USE dynvor ! vorticity term 27 27 USE bdy_par ! for lk_bdy 28 USE bdytides ! open boundary condition data 28 29 USE bdydyn2d ! open boundary conditions on barotropic variables 29 30 USE sbctide ! tides … … 40 41 USE sbcapr ! surface boundary condition: atmospheric pressure 41 42 USE dynadv, ONLY: ln_dynadv_vec 42 USE bdytides43 43 #if defined key_agrif 44 44 USE agrif_opa_interp ! agrif … … 86 86 87 87 ALLOCATE( ssha_e(jpi,jpj), sshn_e(jpi,jpj), sshb_e(jpi,jpj), sshbb_e(jpi,jpj), & 88 & ua_e(jpi,jpj), u b_e(jpi,jpj), ubb_e(jpi,jpj), &89 & va_e(jpi,jpj), v b_e(jpi,jpj), vbb_e(jpi,jpj), &88 & ua_e(jpi,jpj), un_e(jpi,jpj), ub_e(jpi,jpj), ubb_e(jpi,jpj), & 89 & va_e(jpi,jpj), vn_e(jpi,jpj), vb_e(jpi,jpj), vbb_e(jpi,jpj), & 90 90 & hu_e(jpi,jpj), hur_e(jpi,jpj), hv_e(jpi,jpj), hvr_e(jpi,jpj), STAT= ierr(1) ) 91 91 … … 146 146 INTEGER :: ikbu, ikbv, noffset ! local integers 147 147 REAL(wp) :: zraur, z1_2dt_b, z2dt_bf ! local scalars 148 REAL(wp) :: zx1, zy1, zx2, zy2 ! - -149 REAL(wp) :: z1_12, z1_8, z1_4, z1_2 150 REAL(wp) :: zu_spg, zv_spg ! - -151 REAL(wp) :: zhura, zhvra 152 REAL(wp) :: za0, za1, za2, za3 153 ! 154 REAL(wp), POINTER, DIMENSION(:,:) :: z un_e, zvn_e, zsshp2_e148 REAL(wp) :: zx1, zy1, zx2, zy2 ! - - 149 REAL(wp) :: z1_12, z1_8, z1_4, z1_2 ! - - 150 REAL(wp) :: zu_spg, zv_spg ! - - 151 REAL(wp) :: zhura, zhvra ! - - 152 REAL(wp) :: za0, za1, za2, za3 ! - - 153 ! 154 REAL(wp), POINTER, DIMENSION(:,:) :: zsshp2_e 155 155 REAL(wp), POINTER, DIMENSION(:,:) :: zu_trd, zv_trd, zu_frc, zv_frc, zssh_frc 156 REAL(wp), POINTER, DIMENSION(:,:) :: z u_sum, zv_sum, zwx, zwy, zhdiv156 REAL(wp), POINTER, DIMENSION(:,:) :: zwx, zwy, zhdiv 157 157 REAL(wp), POINTER, DIMENSION(:,:) :: zhup2_e, zhvp2_e, zhust_e, zhvst_e 158 158 REAL(wp), POINTER, DIMENSION(:,:) :: zsshu_a, zsshv_a … … 164 164 ! !* Allocate temporary arrays 165 165 CALL wrk_alloc( jpi, jpj, zsshp2_e, zhdiv ) 166 CALL wrk_alloc( jpi, jpj, zu_trd, zv_trd , zun_e, zvn_e)167 CALL wrk_alloc( jpi, jpj, zwx, zwy, z u_sum, zv_sum, zssh_frc, zu_frc, zv_frc)166 CALL wrk_alloc( jpi, jpj, zu_trd, zv_trd) 167 CALL wrk_alloc( jpi, jpj, zwx, zwy, zssh_frc, zu_frc, zv_frc) 168 168 CALL wrk_alloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e) 169 169 CALL wrk_alloc( jpi, jpj, zsshu_a, zsshv_a ) … … 188 188 ! 189 189 ! time offset in steps for bdy data update 190 IF (.NOT.ln_bt_fw) THEN ; noffset=- 2*nn_baro ; ELSE ; noffset = 0 ; ENDIF190 IF (.NOT.ln_bt_fw) THEN ; noffset=-nn_baro ; ELSE ; noffset = 0 ; ENDIF 191 191 ! 192 192 IF( kt == nit000 ) THEN !* initialisation … … 485 485 IF (ln_bt_fw) THEN ! FORWARD integration: start from NOW fields 486 486 sshn_e(:,:) = sshn (:,:) 487 zun_e(:,:) = un_b (:,:)488 zvn_e(:,:) = vn_b (:,:)487 un_e (:,:) = un_b (:,:) 488 vn_e (:,:) = vn_b (:,:) 489 489 ! 490 490 hu_e (:,:) = hu (:,:) … … 494 494 ELSE ! CENTRED integration: start from BEFORE fields 495 495 sshn_e(:,:) = sshb (:,:) 496 zun_e(:,:) = ub_b (:,:)497 zvn_e(:,:) = vb_b (:,:)496 un_e (:,:) = ub_b (:,:) 497 vn_e (:,:) = vb_b (:,:) 498 498 ! 499 499 hu_e (:,:) = hu_b (:,:) … … 509 509 va_b (:,:) = 0._wp 510 510 ssha (:,:) = 0._wp ! Sum for after averaged sea level 511 zu_sum(:,:) = 0._wp ! Sum for now transport issued from ts loop512 zv_sum(:,:) = 0._wp511 un_adv(:,:) = 0._wp ! Sum for now transport issued from ts loop 512 vn_adv(:,:) = 0._wp 513 513 ! ! ==================== ! 514 514 DO jn = 1, icycle ! sub-time-step loop ! … … 518 518 ! Update only tidal forcing at open boundaries 519 519 #if defined key_tide 520 IF ( lk_bdy .AND. lk_tide ) 521 IF ( ln_tide_pot .AND. lk_tide ) CALL upd_tide( kt, kit=jn, koffset=noffset )520 IF ( lk_bdy .AND. lk_tide ) CALL bdy_dta_tides( kt, kit=jn, time_offset=(noffset+1) ) 521 IF ( ln_tide_pot .AND. lk_tide ) CALL upd_tide( kt, kit=jn, time_offset=noffset ) 522 522 #endif 523 523 ! … … 534 534 535 535 ! Extrapolate barotropic velocities at step jit+0.5: 536 ua_e(:,:) = za1 * zun_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:)537 va_e(:,:) = za1 * zvn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:)536 ua_e(:,:) = za1 * un_e(:,:) + za2 * ub_e(:,:) + za3 * ubb_e(:,:) 537 va_e(:,:) = za1 * vn_e(:,:) + za2 * vb_e(:,:) + za3 * vbb_e(:,:) 538 538 539 539 IF( lk_vvl ) THEN !* Update ocean depth (variable volume case only) … … 597 597 ! Sum over sub-time-steps to compute advective velocities 598 598 za2 = wgtbtp2(jn) 599 zu_sum(:,:) = zu_sum(:,:) + za2 * zwx(:,:) * r1_e2u(:,:)600 zv_sum(:,:) = zv_sum(:,:) + za2 * zwy(:,:) * r1_e1v(:,:)599 un_adv(:,:) = un_adv(:,:) + za2 * zwx(:,:) * r1_e2u(:,:) 600 vn_adv(:,:) = vn_adv(:,:) + za2 * zwy(:,:) * r1_e1v(:,:) 601 601 ! 602 602 ! Set next sea level: … … 733 733 ! 734 734 ! Add bottom stresses: 735 zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * zun_e(:,:) * hur_e(:,:)736 zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * zvn_e(:,:) * hvr_e(:,:)735 zu_trd(:,:) = zu_trd(:,:) + bfrua(:,:) * un_e(:,:) * hur_e(:,:) 736 zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 737 737 ! 738 738 ! Surface pressure trend: … … 751 751 DO jj = 2, jpjm1 752 752 DO ji = fs_2, fs_jpim1 ! vector opt. 753 ua_e(ji,jj) = ( zun_e(ji,jj) &753 ua_e(ji,jj) = ( un_e(ji,jj) & 754 754 & + rdtbt * ( zwx(ji,jj) & 755 755 & + zu_trd(ji,jj) & … … 757 757 & ) * umask(ji,jj,1) 758 758 759 va_e(ji,jj) = ( zvn_e(ji,jj) &759 va_e(ji,jj) = ( vn_e(ji,jj) & 760 760 & + rdtbt * ( zwy(ji,jj) & 761 761 & + zv_trd(ji,jj) & … … 772 772 zhvra = vmask(ji,jj,1)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - vmask(ji,jj,1)) 773 773 774 ua_e(ji,jj) = ( hu_e(ji,jj) * zun_e(ji,jj) &774 ua_e(ji,jj) = ( hu_e(ji,jj) * un_e(ji,jj) & 775 775 & + rdtbt * ( zhust_e(ji,jj) * zwx(ji,jj) & 776 776 & + zhup2_e(ji,jj) * zu_trd(ji,jj) & … … 778 778 & ) * zhura 779 779 780 va_e(ji,jj) = ( hv_e(ji,jj) * zvn_e(ji,jj) &780 va_e(ji,jj) = ( hv_e(ji,jj) * vn_e(ji,jj) & 781 781 & + rdtbt * ( zhvst_e(ji,jj) * zwy(ji,jj) & 782 782 & + zhvp2_e(ji,jj) * zv_trd(ji,jj) & … … 802 802 #if defined key_bdy 803 803 ! open boundaries 804 IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, zun_e, zvn_e, hur_e, hvr_e, ssha_e )804 IF( lk_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e ) 805 805 #endif 806 806 #if defined key_agrif … … 810 810 ! ! ---- 811 811 ubb_e (:,:) = ub_e (:,:) 812 ub_e (:,:) = zun_e(:,:)813 zun_e(:,:) = ua_e (:,:)812 ub_e (:,:) = un_e (:,:) 813 un_e (:,:) = ua_e (:,:) 814 814 ! 815 815 vbb_e (:,:) = vb_e (:,:) 816 vb_e (:,:) = zvn_e(:,:)817 zvn_e(:,:) = va_e (:,:)816 vb_e (:,:) = vn_e (:,:) 817 vn_e (:,:) = va_e (:,:) 818 818 ! 819 819 sshbb_e(:,:) = sshb_e(:,:) … … 840 840 ! ----------------------------------------------------------------------------- 841 841 ! 842 ! At this stage ssha holds a time averaged value 843 ! ! Sea Surface Height at u-,v- and f-points 844 IF( lk_vvl ) THEN ! (required only in key_vvl case) 842 ! Set advection velocity correction: 843 zwx(:,:) = un_adv(:,:) 844 zwy(:,:) = vn_adv(:,:) 845 IF (((kt==nit000).AND.(neuler==0)).OR.(.NOT.ln_bt_fw)) THEN 846 un_adv(:,:) = zwx(:,:)*hur(:,:) 847 vn_adv(:,:) = zwy(:,:)*hvr(:,:) 848 ELSE 849 un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:)) * hur(:,:) 850 vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:)) * hvr(:,:) 851 END IF 852 853 IF (ln_bt_fw) THEN ! Save integrated transport for next computation 854 ub2_b(:,:) = zwx(:,:) 855 vb2_b(:,:) = zwy(:,:) 856 ENDIF 857 ! 858 ! Update barotropic trend: 859 IF (( ln_dynadv_vec ).OR. (.NOT. lk_vvl)) THEN 860 DO jk=1,jpkm1 861 ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b 862 va(:,:,jk) = va(:,:,jk) + ( va_b(:,:) - vb_b(:,:) ) * z1_2dt_b 863 END DO 864 ELSE 865 ! At this stage, ssha has been corrected: compute new depths at velocity points 845 866 DO jj = 1, jpjm1 846 867 DO ji = 1, jpim1 ! NO Vector Opt. … … 854 875 END DO 855 876 CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 856 ENDIF 857 ! 858 ! Set advection velocity correction: 859 IF (((kt==nit000).AND.(neuler==0)).OR.(.NOT.ln_bt_fw)) THEN 860 un_adv(:,:) = zu_sum(:,:)*hur(:,:) 861 vn_adv(:,:) = zv_sum(:,:)*hvr(:,:) 862 ELSE 863 un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zu_sum(:,:)) * hur(:,:) 864 vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zv_sum(:,:)) * hvr(:,:) 865 END IF 866 867 IF (ln_bt_fw) THEN ! Save integrated transport for next computation 868 ub2_b(:,:) = zu_sum(:,:) 869 vb2_b(:,:) = zv_sum(:,:) 870 ENDIF 871 ! 872 ! Update barotropic trend: 873 IF (( ln_dynadv_vec ).OR. (.NOT. lk_vvl)) THEN 874 DO jk=1,jpkm1 875 ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b 876 va(:,:,jk) = va(:,:,jk) + ( va_b(:,:) - vb_b(:,:) ) * z1_2dt_b 877 END DO 878 ELSE 877 ! 879 878 DO jk=1,jpkm1 880 879 ua(:,:,jk) = ua(:,:,jk) + hur(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b … … 915 914 ! 916 915 CALL wrk_dealloc( jpi, jpj, zsshp2_e, zhdiv ) 917 CALL wrk_dealloc( jpi, jpj, zu_trd, zv_trd , zun_e, zvn_e)918 CALL wrk_dealloc( jpi, jpj, zwx, zwy, z u_sum, zv_sum, zssh_frc, zu_frc, zv_frc )916 CALL wrk_dealloc( jpi, jpj, zu_trd, zv_trd ) 917 CALL wrk_dealloc( jpi, jpj, zwx, zwy, zssh_frc, zu_frc, zv_frc ) 919 918 CALL wrk_dealloc( jpi, jpj, zhup2_e, zhvp2_e, zhust_e, zhvst_e ) 920 919 CALL wrk_dealloc( jpi, jpj, zsshu_a, zsshv_a ) … … 1064 1063 ! 1065 1064 INTEGER :: ji ,jj 1066 INTEGER :: ios ! Local integer output status for namelist read1067 1065 REAL(wp) :: zxr2, zyr2, zcmax 1068 1066 REAL(wp), POINTER, DIMENSION(:,:) :: zcu 1069 1067 !! 1070 NAMELIST/namsplit/ ln_bt_fw, ln_bt_av, ln_bt_nn_auto, &1071 & nn_baro, rn_bt_cmax, nn_bt_flt1072 1068 !!---------------------------------------------------------------------- 1073 1069 ! 1074 REWIND( numnam_ref ) ! Namelist namsplit in reference namelist : time splitting parameters 1075 READ ( numnam_ref, namsplit, IOSTAT = ios, ERR = 901) 1076 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in reference namelist', lwp ) 1077 1078 REWIND( numnam_cfg ) ! Namelist namsplit in configuration namelist : time splitting parameters 1079 READ ( numnam_cfg, namsplit, IOSTAT = ios, ERR = 902 ) 1080 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsplit in configuration namelist', lwp ) 1081 IF(lwm) WRITE ( numond, namsplit ) 1082 ! 1083 ! ! Max courant number for ext. grav. waves 1070 ! Max courant number for ext. grav. waves 1084 1071 ! 1085 1072 CALL wrk_alloc( jpi, jpj, zcu ) 1086 1073 ! 1087 IF (lk_vvl) THEN 1088 DO jj = 1, jpj 1089 DO ji =1, jpi 1090 zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 1091 zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 1092 zcu(ji,jj) = SQRT( grav * ht_0(ji,jj) * (zxr2 + zyr2) ) 1093 END DO 1094 END DO 1095 ELSE 1096 DO jj = 1, jpj 1097 DO ji =1, jpi 1098 zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 1099 zyr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 1100 zcu(ji,jj) = SQRT( grav * ht(ji,jj) * (zxr2 + zyr2) ) 1101 END DO 1102 END DO 1103 ENDIF 1104 1074 DO jj = 1, jpj 1075 DO ji =1, jpi 1076 zxr2 = r1_e1t(ji,jj) * r1_e1t(ji,jj) 1077 zyr2 = r1_e2t(ji,jj) * r1_e2t(ji,jj) 1078 zcu(ji,jj) = SQRT( grav * ht_0(ji,jj) * (zxr2 + zyr2) ) 1079 END DO 1080 END DO 1081 ! 1105 1082 zcmax = MAXVAL( zcu(:,:) ) 1106 1083 IF( lk_mpp ) CALL mpp_max( zcmax ) 1107 1084 1108 1085 ! Estimate number of iterations to satisfy a max courant number= rn_bt_cmax 1109 IF (ln_bt_ nn_auto) nn_baro = CEILING( rdt / rn_bt_cmax * zcmax)1086 IF (ln_bt_auto) nn_baro = CEILING( rdt / rn_bt_cmax * zcmax) 1110 1087 1111 1088 rdtbt = rdt / REAL( nn_baro , wp ) … … 1115 1092 IF(lwp) WRITE(numout,*) 'dyn_spg_ts : split-explicit free surface' 1116 1093 IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 1117 IF( ln_bt_ nn_auto ) THEN1118 IF(lwp) WRITE(numout,*) ' ln_ts_ nn_auto=.true. Automatically set nn_baro '1094 IF( ln_bt_auto ) THEN 1095 IF(lwp) WRITE(numout,*) ' ln_ts_auto=.true. Automatically set nn_baro ' 1119 1096 IF(lwp) WRITE(numout,*) ' Max. courant number allowed: ', rn_bt_cmax 1120 1097 ELSE 1121 IF(lwp) WRITE(numout,*) ' ln_ts_ nn_auto=.false.: Use nn_baro in namelist '1098 IF(lwp) WRITE(numout,*) ' ln_ts_auto=.false.: Use nn_baro in namelist ' 1122 1099 ENDIF 1123 1100 -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/SBC/updtide.F90
r5902 r5917 31 31 CONTAINS 32 32 33 SUBROUTINE upd_tide( kt, kit, kbaro, koffset )33 SUBROUTINE upd_tide( kt, kit, time_offset ) 34 34 !!---------------------------------------------------------------------- 35 35 !! *** ROUTINE upd_tide *** … … 42 42 !!---------------------------------------------------------------------- 43 43 INTEGER, INTENT(in) :: kt ! ocean time-step index 44 INTEGER, INTENT(in), OPTIONAL :: kit ! external mode sub-time-step index ( time split only)45 INTEGER, INTENT(in), OPTIONAL :: kbaro ! number of sub-time-step (time split only)46 INTEGER, INTENT(in), OPTIONAL :: koffset ! time offset in number47 ! of sub-time-steps (time split only)44 INTEGER, INTENT(in), OPTIONAL :: kit ! external mode sub-time-step index (lk_dynspg_ts=T) 45 INTEGER, INTENT(in), OPTIONAL :: time_offset ! time offset in number 46 ! of internal steps (lk_dynspg_ts=F) 47 ! of external steps (lk_dynspg_ts=T) 48 48 ! 49 49 INTEGER :: joffset ! local integer … … 57 57 ! 58 58 joffset = 0 59 IF( PRESENT( koffset ) ) joffset = koffset59 IF( PRESENT( time_offset ) ) joffset = time_offset 60 60 ! 61 IF( PRESENT( kit ) .AND. PRESENT( kbaro )) THEN62 zt = zt + ( kit + 0.5_wp * ( joffset - 1 ) ) * rdt / REAL( kbaro, wp )61 IF( PRESENT( kit ) ) THEN 62 zt = zt + ( kit + joffset - 1 ) * rdt / REAL( nn_baro, wp ) 63 63 ELSE 64 64 zt = zt + joffset * rdt … … 74 74 IF( ln_tide_ramp ) THEN ! linear increase if asked 75 75 zt = ( kt - nit000 ) * rdt 76 IF( PRESENT( kit ) .AND. PRESENT( kbaro ) ) zt = zt + kit * rdt / REAL( kbaro, wp )76 IF( PRESENT( kit ) ) zt = zt + ( kit + joffset -1) * rdt / REAL( nn_baro, wp ) 77 77 zramp = MIN( MAX( zt / (rdttideramp*rday) , 0._wp ) , 1._wp ) 78 78 pot_astro(:,:) = zramp * pot_astro(:,:) … … 86 86 !!---------------------------------------------------------------------- 87 87 CONTAINS 88 SUBROUTINE upd_tide( kt, kit, kbaro, koffset )! Empty routine88 SUBROUTINE upd_tide( kt, kit, time_offset ) ! Empty routine 89 89 INTEGER, INTENT(in) :: kt ! integer arg, dummy routine 90 90 INTEGER, INTENT(in), OPTIONAL :: kit ! optional arg, dummy routine 91 INTEGER, INTENT(in), OPTIONAL :: kbaro ! optional arg, dummy routine 92 INTEGER, INTENT(in), OPTIONAL :: koffset ! optional arg, dummy routine 91 INTEGER, INTENT(in), OPTIONAL :: time_offset ! optional arg, dummy routine 93 92 WRITE(*,*) 'upd_tide: You should not have seen this print! error?', kt 94 93 END SUBROUTINE upd_tide -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/oce.F90
r5902 r5917 47 47 #endif 48 48 49 !! Arrays at barotropic time step: 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: & 51 sshbb_e, sshb_e, sshn_e, ssha_e, & 52 ubb_e, ub_e, ua_e, & 53 vbb_e, vb_e, va_e, & 54 hu_e, hur_e, hv_e, hvr_e 49 !! Arrays at barotropic time step: ! bef before ! before ! now ! after ! 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: ubb_e , ub_e , un_e , ua_e 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vbb_e , vb_e , vn_e , va_e 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sshbb_e , sshb_e , sshn_e , ssha_e 53 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hu_e 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hv_e 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hur_e 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hvr_e 55 57 56 58 !! interpolated gradient (only used in zps case) -
branches/2015/dev_r5847_MERCATOR9_solveur_simplification/NEMOGCM/NEMO/OPA_SRC/step.F90
r5906 r5917 182 182 ! Ocean dynamics : hdiv, ssh, e3, u, v, w 183 183 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 184 ua(:,:,:) = 0._wp ! set dynamics trends to zero185 va(:,:,:) = 0._wp186 184 187 185 CALL ssh_nxt ( kstp ) ! after ssh (includes call to div_hor) … … 194 192 CALL eos ( tsn, rhd, rhop, fsdept_n(:,:,:) ) ! now in situ density for hpg computation 195 193 196 IF( ln_zps .AND. .NOT. ln_isfcav) & ! Partial steps: bottom before horizontal gradient 197 & CALL zps_hde ( kstp, jpts, tsn, gtsu, gtsv, & ! of t, s, rd at the last ocean level 198 & rhd, gru , grv ) 199 IF( ln_zps .AND. ln_isfcav) & ! Partial steps: top & bottom before horizontal gradient 200 & CALL zps_hde_isf( kstp, jpts, tsn, gtsu, gtsv, gtui, gtvi, & 201 & rhd, gru , grv , aru , arv , gzu , gzv , ge3ru , ge3rv , & 202 & grui, grvi, arui, arvi, gzui, gzvi, ge3rui, ge3rvi ) 203 194 ua(:,:,:) = 0._wp ! set dynamics trends to zero 195 va(:,:,:) = 0._wp 204 196 205 197 IF( lk_asminc .AND. ln_asmiau .AND. ln_dyninc ) & … … 218 210 ! With split-explicit free surface, since now transports have been updated and ssha as well 219 211 IF( ln_dynspg_ts ) THEN ! vertical scale factors and vertical velocity need to be updated 220 CALL div_hor ( kstp ) ! Horizontal divergence (2nd call in time-split case)221 IF( lk_vvl )CALL dom_vvl_sf_nxt( kstp, kcall=2 ) ! after vertical scale factors (update depth average component)222 CALL wzv ( kstp ) ! now cross-level velocity212 CALL div_hor ( kstp ) ! Horizontal divergence (2nd call in time-split case) 213 IF( lk_vvl ) CALL dom_vvl_sf_nxt( kstp, kcall=2 ) ! after vertical scale factors (update depth average component) 214 CALL wzv ( kstp ) ! now cross-level velocity 223 215 ENDIF 224 216 … … 249 241 ! Active tracers 250 242 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 251 tsa(:,:,:,:) = 0._wp! set tracer trends to zero243 tsa(:,:,:,:) = 0._wp ! set tracer trends to zero 252 244 253 245 IF( lk_asminc .AND. ln_asmiau .AND. & 254 & ln_trainc ) CALL tra_asm_inc( kstp ) ! apply tracer assimilation increment 255 CALL tra_sbc ( kstp ) ! surface boundary condition 256 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr 257 IF( ln_trabbc ) CALL tra_bbc ( kstp ) ! bottom heat flux 258 IF( lk_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 259 IF( ln_tradmp ) CALL tra_dmp ( kstp ) ! internal damping trends 260 IF( lk_bdy ) CALL bdy_tra_dmp( kstp ) ! bdy damping trends 261 #if defined key_agrif 262 IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_tra ! tracers sponge 263 #endif 264 CALL tra_adv ( kstp ) ! horizontal & vertical advection 265 CALL tra_ldf ( kstp ) ! lateral mixing 246 & ln_trainc ) CALL tra_asm_inc ( kstp ) ! apply tracer assimilation increment 247 CALL tra_sbc ( kstp ) ! surface boundary condition 248 IF( ln_traqsr ) CALL tra_qsr ( kstp ) ! penetrative solar radiation qsr 249 IF( ln_trabbc ) CALL tra_bbc ( kstp ) ! bottom heat flux 250 IF( lk_trabbl ) CALL tra_bbl ( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 251 IF( ln_tradmp ) CALL tra_dmp ( kstp ) ! internal damping trends 252 IF( lk_bdy ) CALL bdy_tra_dmp ( kstp ) ! bdy damping trends 253 #if defined key_agrif 254 IF(.NOT. Agrif_Root()) & 255 & CALL Agrif_Sponge_tra ! tracers sponge 256 #endif 257 CALL tra_adv ( kstp ) ! horizontal & vertical advection 258 CALL tra_ldf ( kstp ) ! lateral mixing 266 259 267 260 !!gm : why CALL to dia_ptr has been moved here??? (use trends info?) 268 IF( ln_diaptr ) CALL dia_ptr! Poleward adv/ldf TRansports diagnostics261 IF( ln_diaptr ) CALL dia_ptr ! Poleward adv/ldf TRansports diagnostics 269 262 !!gm 270 CALL tra_zdf ( kstp )! vertical mixing and after tracer fields271 IF( ln_zdfnpc ) CALL tra_npc ( kstp )! update after fields by non-penetrative convection263 CALL tra_zdf ( kstp ) ! vertical mixing and after tracer fields 264 IF( ln_zdfnpc ) CALL tra_npc ( kstp ) ! update after fields by non-penetrative convection 272 265 273 266 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> … … 288 281 !! 289 282 !!jc2: dynnxt must be the latest call. fse3t_b are indeed updated in that routine 290 CALL tra_nxt ( kstp ) ! tracer fields at next time step291 CALL dyn_nxt ( kstp ) ! lateral velocity at next time step292 CALL ssh_swp ( kstp )! swap of sea surface height293 IF( lk_vvl ) CALL dom_vvl_sf_swp( kstp )! swap of vertical scale factors283 CALL tra_nxt ( kstp ) ! finalize (bcs) tracer fields at next time step and swap 284 CALL dyn_nxt ( kstp ) ! finalize (bcs) velocities at next time step and swap 285 CALL ssh_swp ( kstp ) ! swap of sea surface height 286 IF( lk_vvl ) CALL dom_vvl_sf_swp( kstp ) ! swap of vertical scale factors 294 287 ! 295 288 … … 299 292 !!jc: That would be better, but see comment above 300 293 !! 301 IF( lrst_oce ) CALL rst_write( kstp )! write output ocean restart file294 IF( lrst_oce ) CALL rst_write ( kstp ) ! write output ocean restart file 302 295 303 296 #if defined key_agrif … … 305 298 ! AGRIF 306 299 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 307 CALL Agrif_Integrate_ChildGrids( stp ) 308 309 IF ( Agrif_NbStepint().EQ.0 ) THEN 310 CALL Agrif_Update_Tra() ! Update active tracers 311 CALL Agrif_Update_Dyn() ! Update momentum 312 ENDIF 313 #endif 314 IF( ln_diahsb ) CALL dia_hsb( kstp ) ! - ML - global conservation diagnostics 315 IF( lk_diaobs ) CALL dia_obs( kstp ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 300 CALL Agrif_Integrate_ChildGrids( stp ) 301 302 IF ( Agrif_NbStepint().EQ.0 ) THEN ! AGRIF Update 303 !!jc in fact update i useless at last time step, but do it for global diagnostics 304 CALL Agrif_Update_Tra() ! Update active tracers 305 CALL Agrif_Update_Dyn() ! Update momentum 306 ENDIF 307 #endif 308 IF( ln_diahsb ) CALL dia_hsb ( kstp ) ! - ML - global conservation diagnostics 309 IF( lk_diaobs ) CALL dia_obs ( kstp ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 316 310 317 311 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 318 312 ! Control 319 313 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 320 CALL stp_ctl( kstp, indic )321 IF( indic < 0 322 323 324 ENDIF 325 IF( kstp == nit000 314 CALL stp_ctl ( kstp, indic ) 315 IF( indic < 0 ) THEN 316 CALL ctl_stop( 'step: indic < 0' ) 317 CALL dia_wri_state( 'output.abort', kstp ) 318 ENDIF 319 IF( kstp == nit000 ) THEN 326 320 CALL iom_close( numror ) ! close input ocean restart file 327 321 IF(lwm) CALL FLUSH ( numond ) ! flush output namelist oce … … 334 328 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 335 329 !!gm why lk_oasis and not lk_cpl ???? 336 IF( lk_oasis 330 IF( lk_oasis ) CALL sbc_cpl_snd( kstp ) ! coupled mode : field exchanges 337 331 ! 338 332 #if defined key_iomput
Note: See TracChangeset
for help on using the changeset viewer.