Changeset 75
- Timestamp:
- 2004-04-22T14:42:43+02:00 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/step.F90
r39 r75 14 14 USE ldftra_oce 15 15 USE ldfdyn_oce 16 USE cpl ! coupled exchanges (???)16 USE cpl_oce ! ??? 17 17 USE in_out_manager ! I/O manager 18 18 USE lbclnk … … 41 41 USE dynspg_rl ! surface pressure gradient (dyn_spg_rl routine) 42 42 USE dynkeg ! kinetic energy gradient (dyn_keg routine) 43 USE dynvor ! vorticity term (dyn_vor routine)43 USE dynvor ! vorticity term (dyn_vor_... routines) 44 44 USE dynzad ! vertical advection (dyn_adv routine) 45 45 USE dynldf_bilapg ! lateral mixing (dyn_ldf_bilapg routine) … … 117 117 118 118 USE stpctl ! time stepping control (stp_ctl routine) 119 USE restart ! ocean restart (rst_write routine) 119 USE restart ! ocean restart (rst_wri routine) 120 USE cpl ! exchanges in coupled mode (cpl_stp routine) 120 121 121 122 IMPLICIT NONE … … 209 210 ENDIF 210 211 IF( lk_diaptr ) CALL dia_ptr_init ! Poleward TRansport initialization 211 ENDIF 212 213 IF( l_ctl .AND. lwp ) THEN ! print mean trends (used for debugging) 212 213 ENDIF 214 215 IF(l_ctl) THEN ! print mean trends (used for debugging) 214 216 WRITE(numout,*) ' emp - : ', SUM( emp * tmask(:,:,1) ) 215 217 WRITE(numout,*) ' emps - : ', SUM( emps * tmask(:,:,1) ) … … 262 264 IF( lk_zdfddm ) CALL zdf_ddm( kstp ) ! double diffusive mixing 263 265 264 CALL zdf_bfr( kstp ) ! Bottom boudary condition266 CALL zdf_bfr( kstp ) ! bottom friction 265 267 266 268 CALL zdf_mxl( kstp ) ! mixed layer depth … … 302 304 !----------------------------------------------------------------------- 303 305 304 305 306 307 306 ta(:,:,:) = 0.e0 ! set tracer trends to zero 307 sa(:,:,:) = 0.e0 308 309 CALL tra_sbc( kstp ) ! surface boundary condition 308 310 309 311 IF( ln_traqsr ) CALL tra_qsr( kstp ) ! penetrative solar radiation qsr … … 314 316 IF( lk_trabbl_adv ) CALL tra_bbl_adv( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 315 317 316 IF( lk_tradmp ) CALL tra_dmp( kstp ) 317 318 ! 318 IF( lk_tradmp ) CALL tra_dmp( kstp ) ! internal damping trends 319 320 ! ! horizontal & vertical advection 319 321 IF( kstp == nit000 ) CALL tra_adv_ctl ! chose/control the scheme used 320 322 IF( ln_traadv_cen2 ) CALL tra_adv_cen2 ( kstp ) ! 2nd order centered scheme … … 323 325 IF( ln_traadv_muscl2 ) CALL tra_adv_muscl2( kstp ) ! MUSCL2 scheme 324 326 325 IF( n_cla == 1 ) CALL tra_cla( kstp ) 326 327 ! 328 IF( l_traldf_lap 329 IF( l_traldf_bilap 330 IF( l_traldf_bilapg 331 IF( l_traldf_iso 332 IF( l_traldf_iso_zps 333 334 ! 335 IF( l_trazdf_exp 336 IF( l_trazdf_imp 337 IF( l_trazdf_iso 338 IF( l_trazdf_iso_vo 339 340 341 342 IF( ln_zdfnpc 343 ! 344 345 IF( ln_dynhpg_imp 346 347 IF( lk_zps ) 348 & 349 & 350 ELSE 327 IF( n_cla == 1 ) CALL tra_cla( kstp ) ! Cross Land Advection (Update Hor. advection) 328 329 ! ! lateral mixing 330 IF( l_traldf_lap ) CALL tra_ldf_lap ( kstp ) ! iso-level laplacian 331 IF( l_traldf_bilap ) CALL tra_ldf_bilap ( kstp ) ! iso-level bilaplacian 332 IF( l_traldf_bilapg ) CALL tra_ldf_bilapg ( kstp ) ! s-coord. horizontal bilaplacian 333 IF( l_traldf_iso ) CALL tra_ldf_iso ( kstp ) ! iso-neutral/geopot. laplacian 334 IF( l_traldf_iso_zps ) CALL tra_ldf_iso_zps( kstp ) ! partial step iso-neutral/geopot. laplacian 335 336 ! ! vertical diffusion 337 IF( l_trazdf_exp ) CALL tra_zdf_exp ( kstp ) ! explicit time stepping (time splitting scheme) 338 IF( l_trazdf_imp ) CALL tra_zdf_imp ( kstp ) ! implicit time stepping (euler backward) 339 IF( l_trazdf_iso ) CALL tra_zdf_iso ( kstp ) ! isopycnal 340 IF( l_trazdf_iso_vo ) CALL tra_zdf_iso_vopt( kstp ) ! vector opt. isopycnal 341 342 CALL tra_nxt( kstp ) ! tracer fields at next time step 343 344 IF( ln_zdfnpc ) CALL tra_npc( kstp ) ! update the new (t,s) fields by non 345 ! ! penetrative convective adjustment 346 347 IF( ln_dynhpg_imp ) THEN ! semi-implicit hpg 348 CALL eos( ta, sa, rhd, rhop ) ! Time-filtered in situ density used in dynhpg module 349 IF( lk_zps ) CALL zps_hde( kstp, ta, sa, rhd, & ! Partial steps: time filtered hor. gradient 350 & gtu, gsu, gru, & ! of t, s, rd at the bottom ocean level 351 & gtv, gsv, grv ) 352 ELSE ! centered hpg (default case) 351 353 CALL eos( tb, sb, rhd, rhop ) ! now (swap=before) in situ density for dynhpg module 352 354 IF( lk_zps ) CALL zps_hde( kstp, tb, sb, rhd, & ! Partial steps: now horizontal gradient … … 361 363 !----------------------------------------------------------------------- 362 364 363 ua(:,:,:) = 0.e0 ! set dynamics trends to zero 364 va(:,:,:) = 0.e0 365 366 CALL dyn_keg( kstp ) ! horizontal gradient of kinetic energy 367 368 ! ! vorticity term including Coriolis 365 ua(:,:,:) = 0.e0 ! set dynamics trends to zero 366 va(:,:,:) = 0.e0 367 368 CALL dyn_keg( kstp ) ! horizontal gradient of kinetic energy 369 370 ! ! vorticity term including Coriolis 371 IF( kstp == nit000 ) CALL dyn_vor_ctl ! chose/control the scheme used 369 372 IF( ln_dynvor_ens ) CALL dyn_vor_enstrophy( kstp ) ! enstrophy conserving scheme 370 373 IF( ln_dynvor_ene ) CALL dyn_vor_energy ( kstp ) ! energy conserving scheme 371 374 IF( ln_dynvor_mix ) CALL dyn_vor_mixed ( kstp ) ! mixed energy/enstrophy conserving scheme 372 375 373 ! ! lateral mixing376 ! ! lateral mixing 374 377 IF( l_dynldf_lap ) CALL dyn_ldf_lap ( kstp ) ! iso-level laplacian 375 378 IF( l_dynldf_bilap ) CALL dyn_ldf_bilap ( kstp ) ! iso-level bilaplacian … … 377 380 IF( l_dynldf_iso ) CALL dyn_ldf_iso ( kstp ) ! iso-neutral laplacian 378 381 379 ! ! horizontal gradient of Hydrostatic pressure382 ! ! horizontal gradient of Hydrostatic pressure 380 383 IF( lk_dynhpg ) CALL dyn_hpg ( kstp ) ! default case (k-j-i loop) 381 384 IF( lk_dynhpg_tsk ) CALL dyn_hpg_atsk( kstp ) ! autatask case (j-k-i loop) 382 385 383 CALL dyn_zad ( kstp ) ! vertical advection384 385 ! ! vertical diffusion386 CALL dyn_zad ( kstp ) ! vertical advection 387 388 ! ! vertical diffusion 386 389 IF( l_dynzdf_exp ) CALL dyn_zdf_exp ( kstp ) ! explicit time stepping (time splitting scheme) 387 390 IF( l_dynzdf_imp ) CALL dyn_zdf_imp ( kstp ) ! implicit time stepping (euler backward) … … 390 393 391 394 IF( lk_dynspg_rl ) THEN 392 IF( lk_obc ) CALL obc_spg( kstp ) 395 IF( lk_obc ) CALL obc_spg( kstp ) ! surface pressure gradient at open boundaries 393 396 ENDIF 394 397 indic=0 395 ! ! surface pressure gradient396 398 !i bug lbc sur emp 397 399 CALL lbc_lnk( emp, 'T', 1. ) 398 400 !i 401 ! ! surface pressure gradient 399 402 IF( lk_dynspg_fsc ) CALL dyn_spg_fsc ( kstp, indic ) ! free surface constant volume case 400 403 IF( lk_dynspg_fsc_tsk ) CALL dyn_spg_fsc_atsk( kstp, indic ) ! autotask free surface constant volume case 401 404 IF( lk_dynspg_rl ) CALL dyn_spg_rl ( kstp, indic ) ! rigid-lid case 402 405 403 CALL dyn_nxt( kstp )! lateral velocity at next time step406 CALL dyn_nxt( kstp ) ! lateral velocity at next time step 404 407 405 408 … … 426 429 !----------------------------------------------------------------------- 427 430 428 ! Time loop: control and print 429 ! ---------------------------- 430 431 ! ! Time loop: control and print 431 432 CALL stp_ctl( kstp, indic ) 432 433 IF ( indic < 0 ) nstop = nstop + 1 434 435 IF ( nstop /= 0 ) RETURN 436 437 ! Diagnostics: 438 ! ------------ 439 440 IF( lk_floats ) CALL flo_stp( kstp ) ! drifting Floats 441 442 IF( lk_trddyn ) CALL trd_dyn( kstp ) ! trends: dynamics 443 444 IF( lk_trdtra ) CALL trd_tra( kstp ) ! trends: active tracers 445 446 IF( lk_trdmld ) CALL trd_mld( kstp ) ! trends: Mixed-layer 447 448 IF( lk_diaspr ) CALL dia_spr( kstp ) ! Surface pressure diagnostics 449 450 IF( lk_diahth ) CALL dia_hth( kstp ) ! Thermocline depth (20 degres isotherm depth) 451 452 IF( lk_diaptr ) CALL dia_ptr( kstp ) ! Poleward TRansport diagnostics 453 454 IF( lk_diagap ) CALL dia_gap( kstp ) ! basin averaged diagnostics 455 456 IF( lk_diahdy ) CALL dia_hdy( kstp ) ! dynamical heigh diagnostics 457 458 IF( lk_diafwb ) CALL dia_fwb( kstp ) ! Fresh water budget diagnostics 433 IF ( indic < 0 ) nstop = nstop + 1 434 435 IF ( nstop == 0 ) THEN 436 ! ! Diagnostics: 437 IF( lk_floats ) CALL flo_stp( kstp ) ! drifting Floats 438 IF( lk_trddyn ) CALL trd_dyn( kstp ) ! trends: dynamics 439 IF( lk_trdtra ) CALL trd_tra( kstp ) ! trends: active tracers 440 IF( lk_trdmld ) CALL trd_mld( kstp ) ! trends: Mixed-layer 441 IF( lk_diaspr ) CALL dia_spr( kstp ) ! Surface pressure diagnostics 442 IF( lk_diahth ) CALL dia_hth( kstp ) ! Thermocline depth (20 degres isotherm depth) 443 IF( lk_diagap ) CALL dia_gap( kstp ) ! basin averaged diagnostics 444 IF( lk_diahdy ) CALL dia_hdy( kstp ) ! dynamical heigh diagnostics 445 IF( lk_diafwb ) CALL dia_fwb( kstp ) ! Fresh water budget diagnostics 459 446 #if defined key_diaptr 460 IF( MOD( kstp, nf_ptr ) == 0 ) CALL dia_ptr( kstp ) ! Poleward TRansports 447 IF( kstp == nit000 .OR. MOD( kstp, nf_ptr ) == 0 ) & 448 CALL dia_ptr( kstp ) ! Poleward TRansports diagnostics 461 449 #endif 462 450 463 ! save and outputs 464 ! ---------------- 465 CALL rst_write( kstp ) ! ocean model: restart file output 466 467 IF( lk_obc ) CALL obc_rst_wri(kstp) ! ocean model: open boundary restart file output 468 469 CALL dia_wri( kstp, indic ) ! ocean model: outputs 470 #if defined key_coupled 471 CALL stp_cmo( kstp ) ! coupling fields 472 #endif 451 ! ! save and outputs 452 CALL rst_write ( kstp ) ! ocean model: restart file output 453 IF( lk_obc ) CALL obc_rst_wri( kstp ) ! ocean model: open boundary restart file output 454 CALL dia_wri ( kstp, indic ) ! ocean model: outputs 455 456 ENDIF 457 458 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 459 ! Coupled mode 460 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 461 462 IF( lk_cpl ) CALL cpl_stp( kstp ) ! coupled mode : field exchanges 473 463 474 464 END SUBROUTINE stp
Note: See TracChangeset
for help on using the changeset viewer.