Changeset 5972 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
- Timestamp:
- 2015-12-02T09:52:20+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r5967 r5972 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 CALL Agrif_ParentGrid_To_ChildGrid() 190 IF( lk_diaobs ) CALL dia_obs_wri 195 IF(.NOT.Agrif_Root() ) THEN 196 CALL Agrif_ParentGrid_To_ChildGrid() 197 IF( lk_diaobs ) CALL dia_obs_wri 198 IF( nn_timing == 1 ) CALL timing_finalize 199 CALL Agrif_ChildGrid_To_ParentGrid() 200 ENDIF 201 #endif 191 202 IF( nn_timing == 1 ) CALL timing_finalize 192 CALL Agrif_ChildGrid_To_ParentGrid()193 #endif194 IF( nn_timing == 1 ) CALL timing_finalize195 203 ! 196 204 CALL nemo_closefile 197 205 ! 198 206 #if defined key_iomput 199 CALL xios_finalize ! end mpp communications with xios200 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 201 209 #else 202 210 IF( lk_oasis ) THEN … … 313 321 ! If dimensions of processor grid weren't specified in the namelist file 314 322 ! then we calculate them here now that we have our communicator size 315 IF( (jpni < 1) .OR. (jpnj < 1) )THEN323 IF( jpni < 1 .OR. jpnj < 1 ) THEN 316 324 #if defined key_mpp_mpi 317 IF( Agrif_Root() ) CALL nemo_partition(mppsize)325 IF( Agrif_Root() ) CALL nemo_partition( mppsize ) 318 326 #else 319 327 jpni = 1 … … 321 329 jpnij = jpni*jpnj 322 330 #endif 323 END 331 ENDIF 324 332 325 333 ! Calculate domain dimensions given calculated jpni and jpnj 326 ! This used to be done in par_oce.F90 when they were parameters rather 327 ! than variables 334 ! This used to be done in par_oce.F90 when they were parameters rather than variables 328 335 IF( Agrif_Root() ) THEN 329 336 #if defined key_nemocice_decomp 330 jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci ! first dim.331 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. 332 339 #else 333 jpi = ( jpiglo -2*jpreci + (jpni-1) ) / jpni + 2*jpreci! first dim.334 jpj = ( jpjglo -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj! second dim.335 #endif 336 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 337 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 338 351 jpim1 = jpi-1 ! inner domain indices 339 352 jpjm1 = jpj-1 ! " " … … 349 362 WRITE(numout,*) ' NEMO team' 350 363 WRITE(numout,*) ' Ocean General Circulation Model' 351 WRITE(numout,*) ' version 3. 6(2015) '364 WRITE(numout,*) ' version 3.7 (2015) ' 352 365 WRITE(numout,*) 353 366 WRITE(numout,*) … … 382 395 CALL dom_cfg ! Domain configuration 383 396 CALL dom_init ! Domain 384 385 IF( ln_nnogather ) CALL nemo_northcomms ! Initialise the northfold neighbour lists (must be done after the masks are defined) 386 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) 387 399 IF( ln_ctl ) CALL prt_ctl_init ! Print control 388 389 400 CALL istate_init ! ocean initial state (Dynamics and tracers) 390 401 391 IF( lk_tide ) CALL tide_init( nit000 ) ! Initialisation of the tidal harmonics 392 393 CALL sbc_init ! Forcings : surface module (clem: moved here for bdy purpose) 394 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 !!! 395 407 IF( lk_bdy ) CALL bdy_init ! Open boundaries initialisation 396 408 IF( lk_bdy ) CALL bdy_dta_init ! Open boundaries initialisation of external data arrays 397 409 IF( lk_bdy .AND. lk_tide ) & 398 410 & CALL bdytide_init ! Open boundaries initialisation of tidal harmonic forcing 399 400 CALL dyn_nept_init ! simplified form of Neptune effect 401 ! 402 IF( ln_crs ) CALL crs_init ! Domain initialization of coarsened grid 403 ! 404 ! Ocean physics 411 412 ! ! Ocean physics 405 413 ! ! Vertical physics 406 414 CALL zdf_init ! namelist read … … 409 417 IF( lk_zdftke ) CALL zdf_tke_init ! TKE closure scheme 410 418 IF( lk_zdfgls ) CALL zdf_gls_init ! GLS closure scheme 411 IF( lk_zdfkpp ) CALL zdf_kpp_init ! KPP closure scheme412 419 IF( lk_zdftmx ) CALL zdf_tmx_init ! tidal vertical mixing 413 IF( lk_zdfddm .AND. .NOT. lk_zdfkpp ) &414 & CALL zdf_ddm_init ! double diffusive mixing420 IF( lk_zdfddm ) CALL zdf_ddm_init ! double diffusive mixing 421 415 422 ! ! Lateral physics 416 423 CALL ldf_tra_init ! Lateral ocean tracer physics 424 CALL ldf_eiv_init ! eddy induced velocity param. 417 425 CALL ldf_dyn_init ! Lateral ocean momentum physics 418 IF( lk_ldfslp ) CALL ldf_slp_init ! slope of lateral mixing 419 420 ! ! Active tracers 421 CALL tra_qsr_init ! penetrative solar radiation qsr 422 CALL tra_bbc_init ! bottom heat flux 423 IF( lk_trabbl ) CALL tra_bbl_init ! advective (and/or diffusive) bottom boundary layer scheme 424 CALL tra_dmp_init ! internal damping trends- tracers 425 CALL tra_adv_init ! horizontal & vertical advection 426 CALL tra_ldf_init ! lateral mixing 427 CALL tra_zdf_init ! vertical mixing and after tracer fields 428 429 ! ! Dynamics 430 IF( lk_c1d ) CALL dyn_dmp_init ! internal damping trends- momentum 431 CALL dyn_adv_init ! advection (vector or flux form) 432 CALL dyn_vor_init ! vorticity term including Coriolis 433 CALL dyn_ldf_init ! lateral mixing 434 CALL dyn_hpg_init ! horizontal gradient of Hydrostatic pressure 435 CALL dyn_zdf_init ! vertical diffusion 436 CALL dyn_spg_init ! surface pressure gradient 437 438 ! ! Misc. options 439 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 440 452 CALL icb_init( rdt, nit000) ! initialise icebergs instance 453 454 ! ! Misc. options 441 455 CALL sto_par_init ! Stochastic parametrization 442 456 IF( ln_sto_eos ) CALL sto_pts_init ! RRandom T/S fluctuations 443 457 444 #if defined key_top 445 ! ! Passive tracers 446 CALL trc_init 447 #endif 448 ! ! Diagnostics 458 ! ! Diagnostics 449 459 IF( lk_floats ) CALL flo_init ! drifting Floats 450 460 IF( lk_diaar5 ) CALL dia_ar5_init ! ar5 diag … … 457 467 CALL dia_obs( nit000 - 1 ) ! Observation operator for restart 458 468 ENDIF 459 460 ! ! Assimilation increments 469 ! ! Assimilation increments 461 470 IF( lk_asminc ) CALL asm_inc_init ! Initialize assimilation increments 462 471 IF(lwp) WRITE(numout,*) 'Euler time step switch is ', neuler … … 505 514 WRITE(numout,*) '~~~~~~~ ' 506 515 WRITE(numout,*) ' Namelist namcfg' 507 WRITE(numout,*) ' configuration name cp_cfg= ', TRIM(cp_cfg)508 WRITE(numout,*) ' configuration zoom name cp_cfz= ', TRIM(cp_cfz)509 WRITE(numout,*) ' configuration resolution jp_cfg= ', jp_cfg510 WRITE(numout,*) ' 1st lateral dimension ( >= jpi ) jpidta= ', jpidta511 WRITE(numout,*) ' 2nd " " ( >= jpj ) jpjdta= ', jpjdta512 WRITE(numout,*) ' 3nd " " jpkdta= ', jpkdta513 WRITE(numout,*) ' 1st dimension of global domain in i jpiglo = ', jpiglo514 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 515 524 WRITE(numout,*) ' left bottom i index of the zoom (in data domain) jpizoom = ', jpizoom 516 525 WRITE(numout,*) ' left bottom j index of the zoom (in data domain) jpizoom = ', jpjzoom 517 WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio= ', jperio526 WRITE(numout,*) ' lateral cond. type (between 0 and 6) jperio = ', jperio 518 527 WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr 519 528 ENDIF … … 596 605 IF( numdct_heat /= -1 ) CLOSE( numdct_heat ) ! heat transports 597 606 IF( numdct_salt /= -1 ) CLOSE( numdct_salt ) ! salt transports 598 599 607 ! 600 608 numout = 6 ! redefine numout in case it is used after this point... … … 613 621 USE diawri , ONLY: dia_wri_alloc 614 622 USE dom_oce , ONLY: dom_oce_alloc 615 USE ldfdyn_oce, ONLY: ldfdyn_oce_alloc616 USE ldftra_oce, ONLY: ldftra_oce_alloc617 623 USE trc_oce , ONLY: trc_oce_alloc 618 624 #if defined key_diadct … … 629 635 ierr = ierr + dia_wri_alloc () 630 636 ierr = ierr + dom_oce_alloc () ! ocean domain 631 ierr = ierr + ldfdyn_oce_alloc() ! ocean lateral physics : dynamics632 ierr = ierr + ldftra_oce_alloc() ! ocean lateral physics : tracers633 637 ierr = ierr + zdf_oce_alloc () ! ocean vertical physics 634 638 ! … … 710 714 INTEGER :: ifac, jl, inu 711 715 INTEGER, PARAMETER :: ntest = 14 712 INTEGER :: ilfax(ntest) 716 INTEGER, DIMENSION(ntest) :: ilfax 717 !!---------------------------------------------------------------------- 713 718 ! 714 719 ! lfax contains the set of allowed factors. 715 data (ilfax(jl),jl=1,ntest) / 16384, 8192, 4096, 2048, 1024, 512, 256, & 716 & 128, 64, 32, 16, 8, 4, 2 / 717 !!---------------------------------------------------------------------- 718 720 ilfax(:) = (/(2**jl,jl=ntest,1,-1)/) 721 ! 719 722 ! Clear the error flag and initialise output vars 720 kerr = 0721 kfax = 1723 kerr = 0 724 kfax = 1 722 725 knfax = 0 723 726 ! 724 727 ! Find the factors of n. 725 728 IF( kn == 1 ) GOTO 20 … … 729 732 ! l points to the allowed factor list. 730 733 ! ifac holds the current factor. 731 734 ! 732 735 inu = kn 733 736 knfax = 0 734 737 ! 735 738 DO jl = ntest, 1, -1 736 739 ! … … 756 759 ! 757 760 END DO 758 761 ! 759 762 20 CONTINUE ! Label 20 is the exit point from the factor search loop. 760 763 ! … … 764 767 765 768 SUBROUTINE nemo_northcomms 766 !! ======================================================================769 !!---------------------------------------------------------------------- 767 770 !! *** ROUTINE nemo_northcomms *** 768 !! nemo_northcomms : Setup for north fold exchanges with explicit 769 !! point-to-point messaging 770 !!===================================================================== 771 !!---------------------------------------------------------------------- 772 !! 773 !! ** 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. 774 775 !!---------------------------------------------------------------------- 775 776 !! 1.0 ! 2011-10 (A. C. Coward, NOCS & J. Donners, PRACE) 776 777 !! 2.0 ! 2013-06 Setup avoiding MPI communication (I. Epicoco, S. Mocavero, CMCC) 777 778 !!---------------------------------------------------------------------- 778 779 779 INTEGER :: sxM, dxM, sxT, dxT, jn 780 780 INTEGER :: njmppmax 781 781 !!---------------------------------------------------------------------- 782 ! 782 783 njmppmax = MAXVAL( njmppt ) 783 784 ! 784 785 !initializes the north-fold communication variables 785 786 isendto(:) = 0 786 nsndto = 0787 787 nsndto = 0 788 ! 788 789 !if I am a process in the north 789 790 IF ( njmpp == njmppmax ) THEN … … 832 833 l_north_nogather = .TRUE. 833 834 END SUBROUTINE nemo_northcomms 835 834 836 #else 835 837 SUBROUTINE nemo_northcomms ! Dummy routine … … 841 843 END MODULE nemogcm 842 844 843
Note: See TracChangeset
for help on using the changeset viewer.