Changeset 6043 for branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
- Timestamp:
- 2015-12-14T10:27:28+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.12_STAND_ALONE_OBSOPER/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r5600 r6043 28 28 !! - ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 29 29 !! 3.3.1! 2011-01 (A. R. Porter, STFC Daresbury) dynamical allocation 30 !! 3.4 ! 2011-11 (C. Harris) decomposition changes for running with CICE 31 !! ! 2012-05 (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening 30 !! 3.4 ! 2011-10 (A. C. Coward, NOCS & J. Donners, PRACE) add nemo_northcomms 31 !! - ! 2011-11 (C. Harris) decomposition changes for running with CICE 32 !! 3.6 ! 2012-05 (C. Calone, J. Simeon, G. Madec, C. Ethe) Add grid coarsening 33 !! - ! 2013-06 (I. Epicoco, S. Mocavero, CMCC) nemo_northcomms: setup avoiding MPI communication 34 !! - ! 2014-12 (G. Madec) remove KPP scheme and cross-land advection (cla) 32 35 !!---------------------------------------------------------------------- 33 36 … … 41 44 !! factorise : calculate the factors of the no. of MPI processes 42 45 !!---------------------------------------------------------------------- 43 USE step_oce ! module used in the ocean time stepping module 44 USE cla ! cross land advection (tra_cla routine) 46 USE step_oce ! module used in the ocean time stepping module (step.F90) 45 47 USE domcfg ! domain configuration (dom_cfg routine) 46 48 USE mppini ! shared/distributed memory setting (mpp_init routine) … … 77 79 USE lib_mpp ! distributed memory computing 78 80 #if defined key_iomput 79 USE xios 80 #endif 81 USE sbctide, ONLY : lk_tide81 USE xios ! xIOserver 82 #endif 83 USE sbctide, ONLY : lk_tide 82 84 USE crsini ! initialise grid coarsening utility 83 USE lbcnfd , ONLY: isendto, nsndto, nfsloop, nfeloop! Setup of north fold exchanges84 USE sbc_oce, ONLY : lk_oasis85 USE lbcnfd , ONLY : isendto, nsndto, nfsloop, nfeloop ! Setup of north fold exchanges 86 USE sbc_oce, ONLY : lk_oasis 85 87 USE stopar 86 88 USE stopts … … 96 98 97 99 !!---------------------------------------------------------------------- 98 !! NEMO/OPA 4.0 , NEMO Consortium (2011)100 !! NEMO/OPA 3.7 , NEMO Consortium (2015) 99 101 !! $Id$ 100 102 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 161 163 ENDIF 162 164 165 #if defined key_agrif 166 CALL Agrif_Regrid() 167 #endif 168 163 169 DO WHILE ( istp <= nitend .AND. nstop == 0 ) 164 170 #if defined key_agrif 165 CALL Agrif_Step( stp )! AGRIF: time stepping171 CALL stp ! AGRIF: time stepping 166 172 #else 167 173 CALL stp( istp ) ! standard time stepping … … 187 193 ! 188 194 #if defined key_agrif 189 IF ( Agrif_Level() < Agrif_MaxLevel() ) THEN190 CALL Agrif_ParentGrid_To_ChildGrid()191 IF( lk_diaobs ) CALL dia_obs_wri195 IF(.NOT.Agrif_Root() ) THEN 196 CALL Agrif_ParentGrid_To_ChildGrid() 197 IF( lk_diaobs ) CALL dia_obs_wri 192 198 IF( nn_timing == 1 ) CALL timing_finalize 193 CALL Agrif_ChildGrid_To_ParentGrid()199 CALL Agrif_ChildGrid_To_ParentGrid() 194 200 ENDIF 195 201 #endif … … 199 205 ! 200 206 #if defined key_iomput 201 CALL xios_finalize ! end mpp communications with xios202 IF( lk_oasis ) CALL cpl_finalize! end coupling and mpp communications with OASIS207 CALL xios_finalize ! end mpp communications with xios 208 IF( lk_oasis ) CALL cpl_finalize ! end coupling and mpp communications with OASIS 203 209 #else 204 210 IF( lk_oasis ) THEN … … 315 321 ! If dimensions of processor grid weren't specified in the namelist file 316 322 ! then we calculate them here now that we have our communicator size 317 IF( (jpni < 1) .OR. (jpnj < 1) )THEN323 IF( jpni < 1 .OR. jpnj < 1 ) THEN 318 324 #if defined key_mpp_mpi 319 IF( Agrif_Root() ) CALL nemo_partition(mppsize)325 IF( Agrif_Root() ) CALL nemo_partition( mppsize ) 320 326 #else 321 327 jpni = 1 … … 323 329 jpnij = jpni*jpnj 324 330 #endif 325 END 331 ENDIF 326 332 327 333 ! Calculate domain dimensions given calculated jpni and jpnj 328 ! This used to be done in par_oce.F90 when they were parameters rather 329 ! than variables 334 ! This used to be done in par_oce.F90 when they were parameters rather than variables 330 335 IF( Agrif_Root() ) THEN 331 336 #if defined key_nemocice_decomp 332 jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim.333 jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim.337 jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim. 338 jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 334 339 #else 335 jpi = ( jpiglo -2*jpreci + (jpni-1) ) / jpni + 2*jpreci! first dim.336 jpj = ( jpjglo -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj! second dim.337 #endif 338 ENDIF 340 jpi = ( jpiglo -2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim. 341 jpj = ( jpjglo -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj ! second dim. 342 #endif 343 ENDIF 339 344 jpk = jpkdta ! third dim 345 #if defined key_agrif 346 ! simple trick to use same vertical grid as parent but different number of levels: 347 ! Save maximum number of levels in jpkdta, then define all vertical grids with this number. 348 ! Suppress once vertical online interpolation is ok 349 IF(.NOT.Agrif_Root()) jpkdta = Agrif_Parent( jpkdta ) 350 #endif 340 351 jpim1 = jpi-1 ! inner domain indices 341 352 jpjm1 = jpj-1 ! " " … … 351 362 WRITE(numout,*) ' NEMO team' 352 363 WRITE(numout,*) ' Ocean General Circulation Model' 353 WRITE(numout,*) ' version 3. 6(2015) '364 WRITE(numout,*) ' version 3.7 (2015) ' 354 365 WRITE(numout,*) 355 366 WRITE(numout,*) … … 384 395 CALL dom_cfg ! Domain configuration 385 396 CALL dom_init ! Domain 386 387 IF( ln_nnogather ) CALL nemo_northcomms ! Initialise the northfold neighbour lists (must be done after the masks are defined) 388 397 IF( ln_crs ) CALL crs_init ! coarsened grid: domain initialization 398 IF( ln_nnogather ) CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 389 399 IF( ln_ctl ) CALL prt_ctl_init ! Print control 390 391 400 CALL istate_init ! ocean initial state (Dynamics and tracers) 392 401 393 IF( lk_tide ) CALL tide_init( nit000 ) ! Initialisation of the tidal harmonics 394 395 CALL sbc_init ! Forcings : surface module (clem: moved here for bdy purpose) 396 402 ! ! external forcing 403 !!gm to be added : creation and call of sbc_apr_init 404 IF( lk_tide ) CALL tide_init( nit000 ) ! tidal harmonics 405 CALL sbc_init ! surface boundary conditions (including sea-ice) 406 !!gm ==>> bdy_init should call bdy_dta_init and bdytide_init NOT in nemogcm !!! 397 407 IF( lk_bdy ) CALL bdy_init ! Open boundaries initialisation 398 408 IF( lk_bdy ) CALL bdy_dta_init ! Open boundaries initialisation of external data arrays 399 409 IF( lk_bdy .AND. lk_tide ) & 400 410 & CALL bdytide_init ! Open boundaries initialisation of tidal harmonic forcing 401 402 CALL dyn_nept_init ! simplified form of Neptune effect 403 ! 404 IF( ln_crs ) CALL crs_init ! Domain initialization of coarsened grid 405 ! 406 ! Ocean physics 411 412 ! ! Ocean physics 407 413 ! ! Vertical physics 408 414 CALL zdf_init ! namelist read … … 411 417 IF( lk_zdftke ) CALL zdf_tke_init ! TKE closure scheme 412 418 IF( lk_zdfgls ) CALL zdf_gls_init ! GLS closure scheme 413 IF( lk_zdfkpp ) CALL zdf_kpp_init ! KPP closure scheme414 419 IF( lk_zdftmx ) CALL zdf_tmx_init ! tidal vertical mixing 415 IF( lk_zdfddm .AND. .NOT. lk_zdfkpp ) &416 & CALL zdf_ddm_init ! double diffusive mixing420 IF( lk_zdfddm ) CALL zdf_ddm_init ! double diffusive mixing 421 417 422 ! ! Lateral physics 418 423 CALL ldf_tra_init ! Lateral ocean tracer physics 424 CALL ldf_eiv_init ! eddy induced velocity param. 419 425 CALL ldf_dyn_init ! Lateral ocean momentum physics 420 IF( lk_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 421 422 ! ! Active tracers 423 CALL tra_qsr_init ! penetrative solar radiation qsr 424 CALL tra_bbc_init ! bottom heat flux 425 IF( lk_trabbl ) CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 426 CALL tra_dmp_init ! internal damping trends- tracers 427 CALL tra_adv_init ! horizontal & vertical advection 428 CALL tra_ldf_init ! lateral mixing 429 CALL tra_zdf_init ! vertical mixing and after tracer fields 430 431 ! ! Dynamics 432 IF( lk_c1d ) CALL dyn_dmp_init ! internal damping trends- momentum 433 CALL dyn_adv_init ! advection (vector or flux form) 434 CALL dyn_vor_init ! vorticity term including Coriolis 435 CALL dyn_ldf_init ! lateral mixing 436 CALL dyn_hpg_init ! horizontal gradient of Hydrostatic pressure 437 CALL dyn_zdf_init ! vertical diffusion 438 CALL dyn_spg_init ! surface pressure gradient 439 440 ! ! Misc. options 441 IF( nn_cla == 1 .AND. cp_cfg == 'orca' .AND. jp_cfg == 2 ) CALL cla_init ! Cross Land Advection 426 427 ! ! Active tracers 428 CALL tra_qsr_init ! penetrative solar radiation qsr 429 CALL tra_bbc_init ! bottom heat flux 430 IF( lk_trabbl ) CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 431 CALL tra_dmp_init ! internal tracer damping 432 CALL tra_adv_init ! horizontal & vertical advection 433 CALL tra_ldf_init ! lateral mixing 434 CALL tra_zdf_init ! vertical mixing and after tracer fields 435 436 ! ! Dynamics 437 IF( lk_c1d ) CALL dyn_dmp_init ! internal momentum damping 438 CALL dyn_adv_init ! advection (vector or flux form) 439 CALL dyn_vor_init ! vorticity term including Coriolis 440 CALL dyn_ldf_init ! lateral mixing 441 CALL dyn_hpg_init ! horizontal gradient of Hydrostatic pressure 442 CALL dyn_zdf_init ! vertical diffusion 443 CALL dyn_spg_init ! surface pressure gradient 444 445 #if defined key_top 446 ! ! Passive tracers 447 CALL trc_init 448 #endif 449 IF( l_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 450 451 ! ! Icebergs 442 452 CALL icb_init( rdt, nit000) ! initialise icebergs instance 453 454 ! ! Misc. options 443 455 CALL sto_par_init ! Stochastic parametrization 444 456 IF( ln_sto_eos ) CALL sto_pts_init ! RRandom T/S fluctuations 445 457 446 #if defined key_top 447 ! ! Passive tracers 448 CALL trc_init 449 #endif 450 ! ! Diagnostics 458 ! ! Diagnostics 451 459 IF( lk_floats ) CALL flo_init ! drifting Floats 452 460 IF( lk_diaar5 ) CALL dia_ar5_init ! ar5 diag … … 459 467 CALL dia_obs( nit000 - 1 ) ! Observation operator for restart 460 468 ENDIF 461 462 ! ! Assimilation increments 469 ! ! Assimilation increments 463 470 IF( lk_asminc ) CALL asm_inc_init ! Initialize assimilation increments 464 471 IF(lwp) WRITE(numout,*) 'Euler time step switch is ', neuler … … 507 514 WRITE(numout,*) '~~~~~~~ ' 508 515 WRITE(numout,*) ' Namelist namcfg' 509 WRITE(numout,*) ' configuration name cp_cfg= ', TRIM(cp_cfg)510 WRITE(numout,*) ' configuration zoom name cp_cfz= ', TRIM(cp_cfz)511 WRITE(numout,*) ' configuration resolution jp_cfg= ', jp_cfg512 WRITE(numout,*) ' 1st lateral dimension ( >= jpi ) jpidta= ', jpidta513 WRITE(numout,*) ' 2nd " " ( >= jpj ) jpjdta= ', jpjdta514 WRITE(numout,*) ' 3nd " " jpkdta= ', jpkdta515 WRITE(numout,*) ' 1st dimension of global domain in i jpiglo = ', jpiglo516 WRITE(numout,*) ' 2nd - - in j jpjglo = ', jpjglo516 WRITE(numout,*) ' configuration name cp_cfg = ', TRIM(cp_cfg) 517 WRITE(numout,*) ' configuration zoom name cp_cfz = ', TRIM(cp_cfz) 518 WRITE(numout,*) ' configuration resolution jp_cfg = ', jp_cfg 519 WRITE(numout,*) ' 1st lateral dimension ( >= jpiglo ) jpidta = ', jpidta 520 WRITE(numout,*) ' 2nd " " ( >= jpjglo ) jpjdta = ', jpjdta 521 WRITE(numout,*) ' 3nd " " jpkdta = ', jpkdta 522 WRITE(numout,*) ' 1st dimension of global domain in i jpiglo = ', jpiglo 523 WRITE(numout,*) ' 2nd - - in j jpjglo = ', jpjglo 517 524 WRITE(numout,*) ' left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom 518 525 WRITE(numout,*) ' left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom 519 WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio= ', jperio526 WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio = ', jperio 520 527 WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr 521 528 ENDIF … … 598 605 IF( numdct_heat /= -1 ) CLOSE( numdct_heat ) ! heat transports 599 606 IF( numdct_salt /= -1 ) CLOSE( numdct_salt ) ! salt transports 600 601 607 ! 602 608 numout = 6 ! redefine numout in case it is used after this point... … … 615 621 USE diawri , ONLY: dia_wri_alloc 616 622 USE dom_oce , ONLY: dom_oce_alloc 617 USE ldfdyn_oce, ONLY: ldfdyn_oce_alloc618 USE ldftra_oce, ONLY: ldftra_oce_alloc619 623 USE trc_oce , ONLY: trc_oce_alloc 620 624 #if defined key_diadct … … 631 635 ierr = ierr + dia_wri_alloc () 632 636 ierr = ierr + dom_oce_alloc () ! ocean domain 633 ierr = ierr + ldfdyn_oce_alloc() ! ocean lateral physics : dynamics634 ierr = ierr + ldftra_oce_alloc() ! ocean lateral physics : tracers635 637 ierr = ierr + zdf_oce_alloc () ! ocean vertical physics 636 638 ! … … 712 714 INTEGER :: ifac, jl, inu 713 715 INTEGER, PARAMETER :: ntest = 14 714 INTEGER :: ilfax(ntest) 716 INTEGER, DIMENSION(ntest) :: ilfax 717 !!---------------------------------------------------------------------- 715 718 ! 716 719 ! lfax contains the set of allowed factors. 717 data (ilfax(jl),jl=1,ntest) / 16384, 8192, 4096, 2048, 1024, 512, 256, & 718 & 128, 64, 32, 16, 8, 4, 2 / 719 !!---------------------------------------------------------------------- 720 720 ilfax(:) = (/(2**jl,jl=ntest,1,-1)/) 721 ! 721 722 ! Clear the error flag and initialise output vars 722 kerr = 0723 kfax = 1723 kerr = 0 724 kfax = 1 724 725 knfax = 0 725 726 ! 726 727 ! Find the factors of n. 727 728 IF( kn == 1 ) GOTO 20 … … 731 732 ! l points to the allowed factor list. 732 733 ! ifac holds the current factor. 733 734 ! 734 735 inu = kn 735 736 knfax = 0 736 737 ! 737 738 DO jl = ntest, 1, -1 738 739 ! … … 758 759 ! 759 760 END DO 760 761 ! 761 762 20 CONTINUE ! Label 20 is the exit point from the factor search loop. 762 763 ! … … 766 767 767 768 SUBROUTINE nemo_northcomms 768 !! ======================================================================769 !!---------------------------------------------------------------------- 769 770 !! *** ROUTINE nemo_northcomms *** 770 !! nemo_northcomms : Setup for north fold exchanges with explicit 771 !! point-to-point messaging 772 !!===================================================================== 773 !!---------------------------------------------------------------------- 774 !! 775 !! ** Purpose : Initialization of the northern neighbours lists. 771 !! ** Purpose : Setup for north fold exchanges with explicit 772 !! point-to-point messaging 773 !! 774 !! ** Method : Initialization of the northern neighbours lists. 776 775 !!---------------------------------------------------------------------- 777 776 !! 1.0 ! 2011-10 (A. C. Coward, NOCS & J. Donners, PRACE) 778 777 !! 2.0 ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC) 779 778 !!---------------------------------------------------------------------- 780 781 779 INTEGER :: sxM, dxM, sxT, dxT, jn 782 780 INTEGER :: njmppmax 783 781 !!---------------------------------------------------------------------- 782 ! 784 783 njmppmax = MAXVAL( njmppt ) 785 784 ! 786 785 !initializes the north-fold communication variables 787 786 isendto(:) = 0 788 nsndto = 0789 787 nsndto = 0 788 ! 790 789 !if I am a process in the north 791 790 IF ( njmpp == njmppmax ) THEN … … 834 833 l_north_nogather = .TRUE. 835 834 END SUBROUTINE nemo_northcomms 835 836 836 #else 837 837 SUBROUTINE nemo_northcomms ! Dummy routine … … 843 843 END MODULE nemogcm 844 844 845
Note: See TracChangeset
for help on using the changeset viewer.