New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 9019 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90 – NEMO

Ignore:
Timestamp:
2017-12-13T15:58:53+01:00 (6 years ago)
Author:
timgraham
Message:

Merge of dev_CNRS_2017 into branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r8570 r9019  
    5050   USE usrdef_nam     ! user defined configuration 
    5151   USE tideini        ! tidal components initialization   (tide_ini routine) 
    52    USE bdy_oce,   ONLY: ln_bdy 
     52   USE bdy_oce,  ONLY : ln_bdy 
    5353   USE bdyini         ! open boundary cond. setting       (bdy_init routine) 
    5454   USE istate         ! initial state setting          (istate_init routine) 
    5555   USE ldfdyn         ! lateral viscosity setting      (ldfdyn_init routine) 
    5656   USE ldftra         ! lateral diffusivity setting    (ldftra_init routine) 
    57    USE zdfini         ! vertical physics setting          (zdf_init routine) 
    5857   USE trdini         ! dyn/tra trends initialization     (trd_init routine) 
    5958   USE asminc         ! assimilation increments      
     
    140139      CALL Agrif_Declare_Var_top   !  "      "   "   "      "  TOP 
    141140# endif 
    142 # if defined key_lim2 
    143       CALL Agrif_Declare_Var_lim2  !  "      "   "   "      "  LIM2 
    144 # endif 
    145141# if defined key_lim3 
    146142      CALL Agrif_Declare_Var_lim3  !  "      "   "   "      "  LIM3 
     
    206202      ! 
    207203#if defined key_agrif 
    208       CALL Agrif_ParentGrid_To_ChildGrid() 
    209       IF( ln_diaobs ) CALL dia_obs_wri 
    210       IF( nn_timing == 1 )   CALL timing_finalize 
    211       CALL Agrif_ChildGrid_To_ParentGrid() 
    212 #endif 
    213       IF( nn_timing == 1 )   CALL timing_finalize 
     204      IF( .NOT. Agrif_Root() ) THEN 
     205         CALL Agrif_ParentGrid_To_ChildGrid() 
     206         IF( ln_diaobs )        CALL dia_obs_wri 
     207         IF( nn_timing == 1 )   CALL timing_finalize 
     208         CALL Agrif_ChildGrid_To_ParentGrid() 
     209      ENDIF 
     210#endif 
     211      IF( ln_timing    )   CALL timing_finalize 
    214212      ! 
    215213      CALL nemo_closefile 
     
    237235      INTEGER  ::   ji                 ! dummy loop indices 
    238236      INTEGER  ::   ios, ilocal_comm   ! local integer 
     237      INTEGER  ::   iiarea, ijarea     ! local integers 
     238      INTEGER  ::   iirest, ijrest     ! local integers 
    239239      CHARACTER(len=120), DIMENSION(30) ::   cltxt, cltxt2, clnam 
    240240      ! 
    241241      NAMELIST/namctl/ ln_ctl   , nn_print, nn_ictls, nn_ictle,   & 
    242242         &             nn_isplt , nn_jsplt, nn_jctls, nn_jctle,   & 
    243          &             nn_timing, nn_diacfl 
     243         &             ln_timing, ln_diacfl 
    244244      NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_write_cfg, cn_domcfg_out, ln_use_jattr 
    245245      !!---------------------------------------------------------------------- 
     
    280280      ENDIF 
    281281      ! 
    282       jpk = jpkglo 
    283       ! 
    284 #if defined key_agrif 
    285       IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
    286          jpiglo  = nbcellsx + 2 + 2*nbghostcells 
    287          jpjglo  = nbcellsy + 2 + 2*nbghostcells 
    288          jpi     = ( jpiglo-2*jpreci + (jpni-1+0) ) / jpni + 2*jpreci 
    289          jpj     = ( jpjglo-2*jprecj + (jpnj-1+0) ) / jpnj + 2*jprecj 
    290          nperio  = 0 
    291          jperio  = 0 
    292          ln_use_jattr = .false. 
    293       ENDIF 
    294 #endif 
    295282      ! 
    296283      !                             !--------------------------------------------! 
     
    351338#endif 
    352339      ENDIF 
     340      ! 
     341#if defined key_agrif 
     342      IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
     343         jpiglo  = nbcellsx + 2 + 2*nbghostcells 
     344         jpjglo  = nbcellsy + 2 + 2*nbghostcells 
     345         jpi     = ( jpiglo-2*nn_hls + (jpni-1+0) ) / jpni + 2*nn_hls 
     346         jpj     = ( jpjglo-2*nn_hls + (jpnj-1+0) ) / jpnj + 2*nn_hls 
     347         jpimax  = jpi 
     348         jpjmax  = jpj 
     349         nperio  = 0 
     350         jperio  = 0 
     351         ln_use_jattr = .false. 
     352      ENDIF 
     353#endif 
    353354 
    354355      IF( Agrif_Root() ) THEN       ! AGRIF mother: specific setting from jpni and jpnj 
     356         iiarea = 1 + MOD( narea - 1 , jpni ) 
     357         ijarea = 1 + ( narea - 1 ) / jpni 
     358         iirest = 1 + MOD( jpiglo - 2*nn_hls - 1 , jpni ) 
     359         ijrest = 1 + MOD( jpjglo - 2*nn_hls - 1 , jpnj ) 
    355360#if defined key_nemocice_decomp 
    356          jpi = ( nx_global+2-2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    357          jpj = ( ny_global+2-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim.  
     361         jpi = ( nx_global+2-2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     362         jpj = ( ny_global+2-2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim.  
     363         jpimax  = jpi 
     364         jpjmax  = jpj 
     365         IF( iiarea == jpni ) jpi = jpiglo - (jpni - 1) * (jpi - 2*nn_hls) 
     366         IF( ijarea == jpnj ) jpj = jpjglo - (jpnj - 1) * (jpj - 2*nn_hls) 
    358367#else 
    359          jpi = ( jpiglo     -2*jpreci + (jpni-1) ) / jpni + 2*jpreci    ! first  dim. 
    360          jpj = ( jpjglo     -2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj    ! second dim. 
    361 #endif 
    362       ENDIF 
    363  
    364 !!gm ???    why here  it has already been done in line 301 ! 
     368         jpi = ( jpiglo     -2*nn_hls + (jpni-1) ) / jpni + 2*nn_hls    ! first  dim. 
     369         jpj = ( jpjglo     -2*nn_hls + (jpnj-1) ) / jpnj + 2*nn_hls    ! second dim. 
     370         jpimax  = jpi 
     371         jpjmax  = jpj 
     372         IF( iiarea > iirest ) jpi = jpi - 1 
     373         IF( ijarea > ijrest ) jpj = jpj - 1 
     374#endif 
     375      ENDIF 
     376 
    365377      jpk = jpkglo                                             ! third dim 
    366 !!gm end 
    367378 
    368379#if defined key_agrif 
     
    411422 
    412423      !                                      ! Domain decomposition 
    413       IF( jpni*jpnj == jpnij ) THEN   ;   CALL mpp_init      ! standard cutting out 
    414       ELSE                            ;   CALL mpp_init2     ! eliminate land processors 
    415       ENDIF 
    416       ! 
    417       IF( nn_timing == 1 )  CALL timing_init 
     424      CALL mpp_init 
     425      IF( ln_nnogather )   CALL nemo_northcomms! northfold neighbour lists 
     426      ! 
     427      IF( ln_timing    )   CALL timing_init 
    418428      ! 
    419429      !                                      ! General initialization 
    420                             CALL     phy_cst    ! Physical constants 
    421                             CALL     eos_init   ! Equation of state 
    422       IF( lk_c1d        )   CALL     c1d_init   ! 1D column configuration 
    423                             CALL     wad_init   ! Wetting and drying options 
    424                             CALL     dom_init   ! Domain 
    425       IF( ln_crs        )   CALL     crs_init   ! coarsened grid: domain initialization  
    426       IF( ln_nnogather )    CALL nemo_northcomms! northfold neighbour lists (must be done after the masks are defined) 
    427       IF( ln_ctl        )   CALL prt_ctl_init   ! Print control 
     430                           CALL     phy_cst    ! Physical constants 
     431                           CALL     eos_init   ! Equation of state 
     432      IF( lk_c1d       )   CALL     c1d_init   ! 1D column configuration 
     433                           CALL     wad_init   ! Wetting and drying options 
     434                           CALL     dom_init   ! Domain 
     435      IF( ln_crs       )   CALL     crs_init   ! coarsened grid: domain initialization  
     436      IF( ln_ctl       )   CALL prt_ctl_init   ! Print control 
    428437       
    429       CALL diurnal_sst_bulk_init            ! diurnal sst 
     438      CALL diurnal_sst_bulk_init             ! diurnal sst 
    430439      IF ( ln_diurnal ) CALL diurnal_sst_coolskin_init   ! cool skin    
    431440       
    432441      ! IF ln_diurnal_only, then we only want a subset of the initialisation routines 
    433       IF ( ln_diurnal_only ) THEN 
     442      IF( ln_diurnal_only ) THEN 
    434443         CALL  istate_init   ! ocean initial state (Dynamics and tracers) 
    435444         CALL     sbc_init   ! Forcings : surface module 
    436445         CALL tra_qsr_init   ! penetrative solar radiation qsr 
    437          IF( ln_diaobs     ) THEN                  ! Observation & model comparison 
    438             CALL dia_obs_init            ! Initialize observational data 
    439             CALL dia_obs( nit000 - 1 )   ! Observation operator for restart 
     446         IF( ln_diaobs ) THEN                   ! Observation & model comparison 
     447            CALL dia_obs_init                      ! Initialize observational data 
     448            CALL dia_obs( nit000 - 1 )             ! Observation operator for restart 
    440449         ENDIF      
    441450         !                                     ! Assimilation increments 
    442          IF( lk_asminc     )   CALL asm_inc_init   ! Initialize assimilation increments 
     451         IF( lk_asminc )   CALL asm_inc_init   ! Initialize assimilation increments 
    443452                  
    444453         IF(lwp) WRITE(numout,*) 'Euler time step switch is ', neuler 
     
    446455      ENDIF 
    447456       
    448                             CALL  istate_init   ! ocean initial state (Dynamics and tracers) 
     457                           CALL  istate_init   ! ocean initial state (Dynamics and tracers) 
    449458 
    450459      !                                      ! external forcing  
    451 !!gm to be added : creation and call of sbc_apr_init 
    452 !==> cbr: sbc_apr_init in sbcmod as sbc_rnf_init 
    453                             CALL    tide_init   ! tidal harmonics 
    454                             CALL     sbc_init   ! surface boundary conditions (including sea-ice) 
    455                             CALL     bdy_init   ! Open boundaries initialisation 
     460                           CALL    tide_init   ! tidal harmonics 
     461                           CALL     sbc_init   ! surface boundary conditions (including sea-ice) 
     462                           CALL     bdy_init   ! Open boundaries initialisation 
     463 
    456464      !                                      ! Ocean physics 
    457       !                                         ! Vertical physics 
    458                             CALL     zdf_init      ! namelist read 
    459                             CALL zdf_bfr_init      ! bottom friction 
    460       IF( lk_zdfric     )   CALL zdf_ric_init      ! Richardson number dependent Kz 
    461       IF( lk_zdftke     )   CALL zdf_tke_init      ! TKE closure scheme 
    462       IF( lk_zdfgls     )   CALL zdf_gls_init      ! GLS closure scheme 
    463       IF( lk_zdftmx     )   CALL zdf_tmx_init      ! tidal vertical mixing 
    464       IF( lk_zdfddm     )   CALL zdf_ddm_init      ! double diffusive mixing 
    465           
     465                           CALL zdf_phy_init    ! Vertical physics 
     466                                      
    466467      !                                         ! Lateral physics 
    467                             CALL ldf_tra_init      ! Lateral ocean tracer physics 
    468                             CALL ldf_eiv_init      ! eddy induced velocity param. 
    469                             CALL ldf_dyn_init      ! Lateral ocean momentum physics 
    470  
    471       !                                         ! Active tracers 
    472                             CALL tra_qsr_init      ! penetrative solar radiation qsr 
    473                             CALL tra_bbc_init      ! bottom heat flux 
    474       IF( lk_trabbl     )   CALL tra_bbl_init      ! advective (and/or diffusive) bottom boundary layer scheme 
    475                             CALL tra_dmp_init      ! internal tracer damping 
    476                             CALL tra_adv_init      ! horizontal & vertical advection 
    477                             CALL tra_ldf_init      ! lateral mixing 
    478                             CALL tra_zdf_init      ! vertical mixing and after tracer fields 
    479  
    480       !                                         ! Dynamics 
    481       IF( lk_c1d        )   CALL dyn_dmp_init      ! internal momentum damping 
    482                             CALL dyn_adv_init      ! advection (vector or flux form) 
    483                             CALL dyn_vor_init      ! vorticity term including Coriolis 
    484                             CALL dyn_ldf_init      ! lateral mixing 
    485                             CALL dyn_hpg_init      ! horizontal gradient of Hydrostatic pressure 
    486                             CALL dyn_zdf_init      ! vertical diffusion 
    487                             CALL dyn_spg_init      ! surface pressure gradient 
     468                           CALL ldf_tra_init      ! Lateral ocean tracer physics 
     469                           CALL ldf_eiv_init      ! eddy induced velocity param. 
     470                           CALL ldf_dyn_init      ! Lateral ocean momentum physics 
     471 
     472      !                                      ! Active tracers 
     473      IF( ln_traqsr    )   CALL tra_qsr_init      ! penetrative solar radiation qsr 
     474                           CALL tra_bbc_init      ! bottom heat flux 
     475      IF( ln_trabbl    )   CALL tra_bbl_init      ! advective (and/or diffusive) bottom boundary layer scheme 
     476                           CALL tra_dmp_init      ! internal tracer damping 
     477                           CALL tra_adv_init      ! horizontal & vertical advection 
     478                           CALL tra_ldf_init      ! lateral mixing 
     479 
     480      !                                      ! Dynamics 
     481      IF( lk_c1d       )   CALL dyn_dmp_init      ! internal momentum damping 
     482                           CALL dyn_adv_init      ! advection (vector or flux form) 
     483                           CALL dyn_vor_init      ! vorticity term including Coriolis 
     484                           CALL dyn_ldf_init      ! lateral mixing 
     485                           CALL dyn_hpg_init      ! horizontal gradient of Hydrostatic pressure 
     486                           CALL dyn_spg_init      ! surface pressure gradient 
    488487 
    489488#if defined key_top 
    490489      !                                      ! Passive tracers 
    491                             CALL     trc_init 
    492 #endif 
    493       IF( l_ldfslp      )   CALL ldf_slp_init   ! slope of lateral mixing 
     490                           CALL     trc_init 
     491#endif 
     492      IF( l_ldfslp     )   CALL ldf_slp_init    ! slope of lateral mixing 
    494493 
    495494      !                                      ! Icebergs 
    496                             CALL icb_init( rdt, nit000)   ! initialise icebergs instance 
     495                           CALL icb_init( rdt, nit000)   ! initialise icebergs instance 
    497496 
    498497      !                                      ! Misc. options 
    499                             CALL sto_par_init   ! Stochastic parametrization 
    500       IF( ln_sto_eos     )  CALL sto_pts_init   ! RRandom T/S fluctuations 
     498                           CALL sto_par_init    ! Stochastic parametrization 
     499      IF( ln_sto_eos   )   CALL sto_pts_init    ! RRandom T/S fluctuations 
    501500      
    502501      !                                      ! Diagnostics 
    503       IF( lk_floats     )   CALL     flo_init   ! drifting Floats 
    504                             CALL dia_cfl_init   ! Initialise CFL diagnostics 
    505                             CALL dia_ptr_init   ! Poleward TRansports initialization 
    506       IF( lk_diadct     )   CALL dia_dct_init   ! Sections tranports 
    507                             CALL dia_hsb_init   ! heat content, salt content and volume budgets 
    508                             CALL     trd_init   ! Mixed-layer/Vorticity/Integral constraints trends 
    509                             CALL dia_obs_init            ! Initialize observational data 
    510       IF( ln_diaobs     )   CALL dia_obs( nit000 - 1 )   ! Observation operator for restart 
    511  
    512       !                                         ! Assimilation increments 
    513       IF( lk_asminc     )   CALL asm_inc_init   ! Initialize assimilation increments 
     502      IF( lk_floats    )   CALL     flo_init    ! drifting Floats 
     503      IF( ln_diacfl    )   CALL dia_cfl_init    ! Initialise CFL diagnostics 
     504                           CALL dia_ptr_init    ! Poleward TRansports initialization 
     505      IF( lk_diadct    )   CALL dia_dct_init    ! Sections tranports 
     506                           CALL dia_hsb_init    ! heat content, salt content and volume budgets 
     507                           CALL     trd_init    ! Mixed-layer/Vorticity/Integral constraints trends 
     508                           CALL dia_obs_init    ! Initialize observational data 
     509      IF( ln_diaobs    )   CALL dia_obs( nit000 - 1 )   ! Observation operator for restart 
     510 
     511      !                                      ! Assimilation increments 
     512      IF( lk_asminc    )   CALL asm_inc_init    ! Initialize assimilation increments 
    514513      IF(lwp) WRITE(numout,*) 'Euler time step switch is ', neuler 
    515                             CALL dia_tmb_init  ! TMB outputs 
    516                             CALL dia_25h_init  ! 25h mean  outputs 
     514                           CALL dia_tmb_init    ! TMB outputs 
     515                           CALL dia_25h_init    ! 25h mean  outputs 
    517516      ! 
    518517   END SUBROUTINE nemo_init 
     
    541540         WRITE(numout,*) '      number of proc. following i     nn_isplt   = ', nn_isplt 
    542541         WRITE(numout,*) '      number of proc. following j     nn_jsplt   = ', nn_jsplt 
    543          WRITE(numout,*) '      timing activated    (0/1)       nn_timing  = ', nn_timing 
     542         WRITE(numout,*) '      timing by routine               ln_timing  = ', ln_timing 
     543         WRITE(numout,*) '      CFL diagnostics                 ln_diacfl  = ', ln_diacfl 
    544544      ENDIF 
    545545      ! 
     
    551551      isplt     = nn_isplt 
    552552      jsplt     = nn_jsplt 
     553!!gm to be remove at the end of the 2017 merge party 
     554      if( ln_timing ) then  ;  nn_timing = 1 
     555      else                  ;  nn_timing = 0 
     556      endif 
     557!!gm end 
     558       
    553559 
    554560      IF(lwp) THEN                  ! control print 
     
    621627      ! 
    622628      IF( numstp          /= -1 )   CLOSE( numstp          )   ! time-step file 
    623       IF( numsol          /= -1 )   CLOSE( numsol          )   ! solver file 
     629      IF( numrun          /= -1 )   CLOSE( numrun          )   ! run statistics file 
    624630      IF( numnam_ref      /= -1 )   CLOSE( numnam_ref      )   ! oce reference namelist 
    625631      IF( numnam_cfg      /= -1 )   CLOSE( numnam_cfg      )   ! oce configuration namelist 
Note: See TracChangeset for help on using the changeset viewer.