Changes between Version 1 and Version 2 of 2019WP/ENHANCE-04_AndrewC-reporting


Ignore:
Timestamp:
2019-01-09T14:38:07+01:00 (15 months ago)
Author:
acc
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • 2019WP/ENHANCE-04_AndrewC-reporting

    v1 v2  
    1616[[Include(wiki:Developers/DevProcess#preview_)]] 
    1717}}} 
    18  
     18One of the features of NEMO 4.0 is the large reduction in global communications at the cost of suppressing some global diagnostics which tend to be useful only during SETTE testing, debugging or new configuration development. Such diagnostics can be re-activated using the ln_ctl namelist variable but this is rather a blunt instrument in that it activates all extra output for all processing elements. This list ican include: 
     19{{{ 
     20run.stat 
     21run.stat.nc 
     22tracer.stat 
     23ocean.output_XXXX 
     24layout.dat_XXXX 
     25mpp.output_XXXX 
     26mpp.top.output_XXX     <---- correct this to 4-digits for consistency 
     27EMPave.dat_XXXX 
     28icebergs.stat_XXXX 
     29}}} 
     30and possibly others depending on runtime options. One of the 2019 NEMO workplan entries (ENHANCE-04_AndrewC-reporting) plans to introduce more control over the choice of output created but it may be best to introduce the basic structure prior to the v4.0 release. Below is a summary of the overall plans and what can be implemented immediately if there is consensus. 
     31 
     32At this stage, the plan is to leave ln_ctl as an all-or-nothing switch but to add the basic structure for finer control. For the v4.0 release, this new structure will only be capable of activating the global stats files (run.stat, run.stat.nc and tracer.stat) independently of ln_ctl but the placeholders will be there for extended control over other outputs. Minimal changes to achieve this will affect: 
     33{{{ 
     341. OCE/IOM/in_out_manager.F90 cfgs/SHARED/namelist_ref 
     352. OCE/nemogcm.F90 OFF/nemogcm.F90 SAO/nemogcm.F90 SAS/nemogcm.F90 
     363. OCE/stpctl.F90 
     374. TOP/prtctl_trc.F90 TOP/trcini.F90 TOP/trcstp.F90 
     385. OCE/LBC/mppini.F90 
     396. sette/sette.sh 
     40}}} 
     41''' 1. OCE/IOM/in_out_manager.F90 cfgs/SHARED/namelist_ref ''' 
     42 
     43These changes introduce a derived-type structure into the in_out_manager module and populates the reference namelist with default values. 
     44 There are 5 basic sets of parameters in this structure: 
     45 
     46 
     47{{{ 
     48* l_config                        Activates use of the settings in the rest of the structure (ln_ctl is ignored if this is true) 
     49* l_runstat, l_trcstat            Activates production of global stats files. Only a single file of each of these is ever produced. 
     50* l_oceout, l_layout, l_EMPave    Normal operation is to produce a single version of each of these. If true then a version for each area is produced 
     51* l_mppout, l_mpptrc, l_icbstat   Suppressed if false, otherwise produce a version for each area. 
     52* procmin, procmax, procincr      Allow subsetting of areas when producing output in the previous two categories. Default values will ensure all areas report. 
     53}}} 
     54 
     55{{{ 
     56Index: OCE/IOM/in_out_manager.F90 
     57=================================================================== 
     58--- OCE/IOM/in_out_manager.F90  (revision 10459) 
     59+++ OCE/IOM/in_out_manager.F90  (working copy) 
     60@@ -99,6 +99,27 @@ 
     61    !!                    output monitoring 
     62    !!---------------------------------------------------------------------- 
     63    LOGICAL ::   ln_ctl           !: run control for debugging 
     64+   TYPE :: sn_ctl                !: optional use structure for finer control over output selection 
     65+      LOGICAL :: l_config  = .FALSE.  !: activate/deactivate finer control 
     66+                                      !  Note if l_config is True then ln_ctl is ignored. 
     67+                                      !  Otherwise setting ln_ctl True is equivalent to setting 
     68+                                      !  all the following logicals in this structure True 
     69+      LOGICAL :: l_runstat = .FALSE.  !: Produce/do not produce run.stat file (T/F) 
     70+      LOGICAL :: l_trcstat = .FALSE.  !: Produce/do not produce tracer.stat file (T/F) 
     71+      LOGICAL :: l_oceout  = .FALSE.  !: Produce all ocean.outputs    (T) or just one (F) 
     72+      LOGICAL :: l_layout  = .FALSE.  !: Produce all layout.dat files (T) or just one (F) 
     73+      LOGICAL :: l_EMPave  = .FALSE.  !: Produce all EMPave.dat files (T) or just one (F) (if active) 
     74+      LOGICAL :: l_mppout  = .FALSE.  !: Produce/do not produce mpp.output_XXXX files (T/F) 
     75+      LOGICAL :: l_mpptop  = .FALSE.  !: Produce/do not produce mpp.top.output_XXXX files (T/F) 
     76+      LOGICAL :: l_icbstat = .FALSE.  !: Produce/do not produce icebergs.stat_XXXX files (T/F) 
     77+                                      !  Optional subsetting of processor report files 
     78+                                      !  Default settings of 0/1000000/1 should ensure all areas report. 
     79+                                      !  Set to a more restrictive range to select specific areas 
     80+      INTEGER :: procmin   = 0        !: Minimum narea to output 
     81+      INTEGER :: procmax   = 1000000  !: Maximum narea to output 
     82+      INTEGER :: procincr  = 1        !: narea increment to output 
     83+   END TYPE 
     84+   TYPE (sn_ctl) :: sn_cfctl     !: run control structure for selective output 
     85    LOGICAL ::   ln_timing        !: run control for timing 
     86    LOGICAL ::   ln_diacfl        !: flag whether to create CFL diagnostics 
     87    INTEGER ::   nn_print         !: level of print (0 no print) 
     88 
     89Index: cfgs/SHARED/namelist_ref 
     90=================================================================== 
     91--- cfgs/SHARED/namelist_ref    (revision 10459) 
     92+++ cfgs/SHARED/namelist_ref    (working copy) 
     93@@ -1301,7 +1301,19 @@ 
     94 !----------------------------------------------------------------------- 
     95 &namctl        !   Control prints                                       (default: OFF) 
     96 !----------------------------------------------------------------------- 
     97-   ln_ctl      = .false.   !  trends control print (expensive!) 
     98+   ln_ctl = .FALSE.                 ! Toggle all report printing on/off (T/F); Ignored if sn_cfctl%l_config is T 
     99+     sn_cfctl%l_config = .TRUE.     ! IF .true. then control which reports are written with the following 
     100+       sn_cfctl%l_runstat = .FALSE. ! switches and which areas produce reports with the proc integer settings. 
     101+       sn_cfctl%l_trcstat = .FALSE. ! The default settings for the proc integers should ensure 
     102+       sn_cfctl%l_oceout  = .FALSE. ! that  all areas report. 
     103+       sn_cfctl%l_layout  = .FALSE. ! 
     104+       sn_cfctl%l_EMPave  = .FALSE. ! 
     105+       sn_cfctl%l_mppout  = .FALSE. ! 
     106+       sn_cfctl%l_mpptop  = .FALSE. ! 
     107+       sn_cfctl%l_icbstat = .FALSE. ! 
     108+       sn_cfctl%procmin   = 0       ! Minimum area number for reporting [default:0] 
     109+       sn_cfctl%procmax   = 1000000 ! Maximum area number for reporting [default:1000000] 
     110+       sn_cfctl%procincr  = 1       ! Increment for optional subsetting of areas [default:1] 
     111    nn_print    =    0      !  level of print (0 no extra print) 
     112    nn_ictls    =    0      !  start i indice of control sum (use to compare mono versus 
     113    nn_ictle    =    0      !  end   i indice of control sum        multi processor runs 
     114}}} 
     115 
     116The new structure is read and reported in nemogcm.F90. Changes for all variants are similar OCE/nemogcm.F90 is shown here: 
     117 
     118{{{ 
     119Index: OCE/nemogcm.F90 
     120=================================================================== 
     121--- OCE/nemogcm.F90     (revision 10459) 
     122+++ OCE/nemogcm.F90     (working copy) 
     123@@ -256,8 +256,8 @@ 
     124       INTEGER  ::   ios, ilocal_comm   ! local integers 
     125       CHARACTER(len=120), DIMENSION(60) ::   cltxt, cltxt2, clnam 
     126       !! 
     127-      NAMELIST/namctl/ ln_ctl   , nn_print, nn_ictls, nn_ictle,   & 
     128-         &             nn_isplt , nn_jsplt, nn_jctls, nn_jctle,   & 
     129+      NAMELIST/namctl/ ln_ctl   , sn_cfctl, nn_print, nn_ictls, nn_ictle,   & 
     130+         &             nn_isplt , nn_jsplt, nn_jctls, nn_jctle,             & 
     131          &             ln_timing, ln_diacfl 
     132       NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_closea, ln_write_cfg, cn_domcfg_out, ln_use_jattr 
     133       !!---------------------------------------------------------------------- 
     134@@ -327,6 +327,17 @@ 
     135 
     136       narea = narea + 1                                     ! mynode return the rank of proc (0 --> jpnij -1 ) 
     137 
     138+      IF( sn_cfctl%l_config ) THEN 
     139+         ! Activate finer control of report outputs 
     140+         ! optionally switch off output from selected areas (note this only 
     141+         ! applies to output which does not involve global communications) 
     142+         IF( ( narea < sn_cfctl%procmin .OR. narea > sn_cfctl%procmax  ) .OR. & 
     143+           & ( MOD( narea - sn_cfctl%procmin, sn_cfctl%procincr ) /= 0 ) )    & 
     144+           &   CALL nemo_set_cfctl( sn_cfctl, .FALSE., .FALSE. ) 
     145+      ELSE 
     146+         CALL nemo_set_cfctl( sn_cfctl, ln_ctl, .TRUE. ) 
     147+      ENDIF 
     148+ 
     149       lwm = (narea == 1)                                    ! control of output namelists 
     150       lwp = (narea == 1) .OR. ln_ctl                        ! control of all listing output print 
     151 
     152@@ -489,6 +500,18 @@ 
     153          WRITE(numout,*) '~~~~~~~~' 
     154          WRITE(numout,*) '   Namelist namctl' 
     155          WRITE(numout,*) '      run control (for debugging)     ln_ctl     = ', ln_ctl 
     156+         WRITE(numout,*) '       finer control over o/p sn_cfctl%l_config  = ', sn_cfctl%l_config 
     157+         WRITE(numout,*) '                              sn_cfctl%l_runstat = ', sn_cfctl%l_runstat 
     158+         WRITE(numout,*) '                              sn_cfctl%l_trcstat = ', sn_cfctl%l_trcstat 
     159+         WRITE(numout,*) '                              sn_cfctl%l_oceout  = ', sn_cfctl%l_oceout 
     160+         WRITE(numout,*) '                              sn_cfctl%l_layout  = ', sn_cfctl%l_layout 
     161+         WRITE(numout,*) '                              sn_cfctl%l_EMPave  = ', sn_cfctl%l_EMPave 
     162+         WRITE(numout,*) '                              sn_cfctl%l_mppout  = ', sn_cfctl%l_mppout 
     163+         WRITE(numout,*) '                              sn_cfctl%l_mpptop  = ', sn_cfctl%l_mpptop 
     164+         WRITE(numout,*) '                              sn_cfctl%l_icbstat = ', sn_cfctl%l_icbstat 
     165+         WRITE(numout,*) '                              sn_cfctl%procmin   = ', sn_cfctl%procmin   
     166+         WRITE(numout,*) '                              sn_cfctl%procmax   = ', sn_cfctl%procmax   
     167+         WRITE(numout,*) '                              sn_cfctl%procincr  = ', sn_cfctl%procincr  
     168          WRITE(numout,*) '      level of print                  nn_print   = ', nn_print 
     169          WRITE(numout,*) '      Start i indice for SUM control  nn_ictls   = ', nn_ictls 
     170          WRITE(numout,*) '      End i indice for SUM control    nn_ictle   = ', nn_ictle 
     171@@ -635,6 +658,35 @@ 
     172       ! 
     173    END SUBROUTINE nemo_alloc 
     174 
     175+   SUBROUTINE nemo_set_cfctl(sn_cfctl, setto, for_all ) 
     176+      !!---------------------------------------------------------------------- 
     177+      !!                     ***  ROUTINE nemo_set_cfctl  *** 
     178+      !! 
     179+      !! ** Purpose :   Set elements of the output control structure to setto. 
     180+      !!                for_all should be .false. unless all areas are to be 
     181+      !!                treated identically. 
     182+      !! 
     183+      !! ** Method  :   Note this routine can be used to switch on/off some 
     184+      !!                types of output for selected areas but any output types 
     185+      !!                that involve global communications (e.g. mpp_max, glob_sum) 
     186+      !!                should be protected from selective switching by the 
     187+      !!                for_all argument 
     188+      !!---------------------------------------------------------------------- 
     189+      LOGICAL :: setto, for_all 
     190+      TYPE (sn_ctl) :: sn_cfctl 
     191+      !!---------------------------------------------------------------------- 
     192+      IF( for_all ) THEN 
     193+         sn_cfctl%l_runstat = setto 
     194+         sn_cfctl%l_trcstat = setto 
     195+      ENDIF 
     196+      sn_cfctl%l_oceout  = setto 
     197+      sn_cfctl%l_layout  = setto 
     198+      sn_cfctl%l_EMPave  = setto 
     199+      sn_cfctl%l_mppout  = setto 
     200+      sn_cfctl%l_mpptop  = setto 
     201+      sn_cfctl%l_icbstat = setto 
     202+   END SUBROUTINE nemo_set_cfctl 
     203+ 
     204    !!====================================================================== 
     205 END MODULE nemogcm 
     206}}} 
     207 
     208Eventually, setting sn_cfctl%l_config true will force ln_ctl to be false but the current implementation is incomplete and can only be used the activate run.stat, tracer.stat and multiple layout.dats independently of ln_ctl. ln_ctl, therefore, remains as the overriding control for all outputs. 
     209 
     210''' 3. OCE/stpctl.F90 ''' 
     211 
     212The logic changes required in stpctl.F90 to control the production of run.stat are relatively simple. Two new local logicals are introduced to avoid having to evaluate logical constructs repeatedly. These determine whether or not to collect the global maximums (lcolruns) and whether or not to handle the actual writing (lwrtruns). 
     213 
     214{{{ 
     215  
     216Index: OCE/stpctl.F90 
     217=================================================================== 
     218--- OCE/stpctl.F90      (revision 10459) 
     219+++ OCE/stpctl.F90      (working copy) 
     220@@ -33,7 +33,7 @@ 
     221    PUBLIC stp_ctl           ! routine called by step.F90 
     222 
     223    INTEGER  ::   idrun, idtime, idssh, idu, ids1, ids2, idt1, idt2, idc1, idw1, istatus 
     224-   LOGICAL  ::   lsomeoce 
     225+   LOGICAL  ::   lsomeoce, lcolruns, lwrtruns 
     226    !!---------------------------------------------------------------------- 
     227    !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     228    !! $Id$ 
     229@@ -69,6 +69,8 @@ 
     230       CHARACTER(len=20) :: clname 
     231       !!---------------------------------------------------------------------- 
     232       ! 
     233+      IF( kt == nit000 )   lcolruns = ln_ctl .OR. ( sn_cfctl%l_config .AND. sn_cfctl%l_runstat ) 
     234+      IF( kt == nit000 )   lwrtruns = lcolruns .AND. lwm 
     235       IF( kt == nit000 .AND. lwp ) THEN 
     236          WRITE(numout,*)  
     237          WRITE(numout,*) 'stp_ctl : time-stepping control' 
     238@@ -76,7 +78,7 @@ 
     239          !                                ! open time.step file 
     240          IF( lwm ) CALL ctl_opn( numstp, 'time.step', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, narea ) 
     241          !                                ! open run.stat file 
     242-         IF( ln_ctl .AND. lwm ) THEN 
     243+         IF( lwrtruns ) THEN 
     244             CALL ctl_opn( numrun, 'run.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, narea ) 
     245             clname = 'run.stat.nc'  
     246             IF( .NOT. Agrif_Root() )   clname = TRIM(Agrif_CFixed())//"_"//TRIM(clname) 
     247@@ -120,12 +122,12 @@ 
     248          zmax(9) = MAXVAL(   Cu_adv(:,:,:)   , mask = tmask(:,:,:) == 1._wp ) !       cell Courant no. max 
     249       ENDIF 
     250       ! 
     251-      IF( ln_ctl ) THEN 
     252+      IF( lcolruns ) THEN 
     253          CALL mpp_max( "stpctl", zmax )          ! max over the global domain 
     254          nstop = NINT( zmax(7) )                 ! nstop indicator sheared among all local domains 
     255       ENDIF 
     256       !                                   !==  run statistics  ==!   ("run.stat" files) 
     257-      IF( ln_ctl .AND. lwm ) THEN 
     258+      IF( lwrtruns ) THEN 
     259          WRITE(numrun,9500) kt, zmax(1), zmax(2), -zmax(3), zmax(4) 
     260          istatus = NF90_PUT_VAR( idrun, idssh, (/ zmax(1)/), (/kt/), (/1/) ) 
     261          istatus = NF90_PUT_VAR( idrun,   idu, (/ zmax(2)/), (/kt/), (/1/) ) 
     262}}} 
     263 
     264''' 4. TOP/prtctl_trc.F90 TOP/trcini.F90 TOP/trcstp.F90 ''' 
     265 
     266Changes to control the production of tracer.stat follow similar lines with the introduction of a lltrcstat local logical. Note also changes ti prtctl_trc.F90 to make mpp.top.output filenames compatible  with other similar filenames (i.e. use I4.4 for area number). 
     267{{{ 
     268Index: TOP/prtctl_trc.F90 
     269=================================================================== 
     270--- TOP/prtctl_trc.F90  (revision 10459) 
     271+++ TOP/prtctl_trc.F90  (working copy) 
     272@@ -209,7 +209,7 @@ 
     273       IF( lk_mpp ) THEN 
     274          sind = narea 
     275          eind = narea 
     276-         clb_name = "('mpp.top.output_',I3.3)" 
     277+         clb_name = "('mpp.top.output_',I4.4)" 
     278          cl_run = 'MULTI processor run' 
     279          ! use indices for each area computed by mpp_init subroutine 
     280          nlditl(1:jpnij) = nldit(:) 
     281@@ -228,7 +228,7 @@ 
     282       ELSE 
     283          sind = 1 
     284          eind = ijsplt 
     285-         clb_name = "('mono.top.output_',I3.3)" 
     286+         clb_name = "('mono.top.output_',I4.4)" 
     287          cl_run   = 'MONO processor run ' 
     288          ! compute indices for each area as done in mpp_init subroutine 
     289          CALL sub_dom 
     290 
     291Index: TOP/trcini.F90 
     292=================================================================== 
     293--- TOP/trcini.F90      (revision 10459) 
     294+++ TOP/trcini.F90      (working copy) 
     295@@ -71,7 +71,9 @@ 
     296       CALL trc_ini_trp   ! passive tracers transport 
     297       CALL trc_ice_ini   ! Tracers in sea ice 
     298       ! 
     299-      IF(lwm) CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
     300+      IF( lwm .AND. ( ln_ctl .OR. (sn_cfctl%l_config .AND. sn_cfctl%l_trcstat) ) ) THEN 
     301+         CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
     302+      ENDIF 
     303       ! 
     304       CALL trc_ini_state  !  passive tracers initialisation : from a restart or from clim 
     305       IF( nn_dttrc /= 1 ) & 
     306 
     307Index: TOP/trcstp.F90 
     308=================================================================== 
     309--- TOP/trcstp.F90      (revision 10459) 
     310+++ TOP/trcstp.F90      (working copy) 
     311@@ -31,6 +31,7 @@ 
     312    PUBLIC   trc_stp    ! called by step 
     313 
     314    LOGICAL  ::   llnew                   ! ??? 
     315+   LOGICAL  ::   lltrcstat               ! ??? 
     316    REAL(wp) ::   rdt_sampl               ! ??? 
     317    INTEGER  ::   nb_rec_per_day, ktdcy   ! ??? 
     318    REAL(wp) ::   rsecfst, rseclast       ! ??? 
     319@@ -67,6 +68,7 @@ 
     320          r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
     321       ENDIF 
     322       ! 
     323+      IF( kt == nittrc000 )  lltrcstat = ln_ctl .OR. (sn_cfctl%l_config .AND. sn_cfctl%l_trcstat) 
     324       IF( kt == nittrc000 .AND. lk_trdmxl_trc )  CALL trd_mxl_trc_init    ! trends: Mixed-layer 
     325       ! 
     326       IF( .NOT.ln_linssh ) THEN                                           ! update ocean volume due to ssh temporal evolution 
     327@@ -108,7 +110,7 @@ 
     328          ! 
     329       ENDIF 
     330       ! 
     331-      IF (ln_ctl ) THEN 
     332+      IF (lltrcstat) THEN 
     333          ztrai = 0._wp                                                   !  content of all tracers 
     334          DO jn = 1, jptra 
     335             ztrai = ztrai + glob_sum( 'trcstp', trn(:,:,:,jn) * cvol(:,:,:)   ) 
     336}}} 
     337 
     338''' 5. OCE/LBC/mppini.F90 ''' 
     339 
     340Control over the creation of multiple layout.dat files is easy to implement and so has been done as an example of how output in this category will be handled in future. For this category, the area subsetting can be used to restrict which areas produce files. The standard layout.dat file, produced by narea = 1 is always produced. 
     341 
     342{{{ 
     343Index: OCE/LBC/mppini.F90 
     344=================================================================== 
     345--- OCE/LBC/mppini.F90  (revision 10459) 
     346+++ OCE/LBC/mppini.F90  (working copy) 
     347@@ -150,6 +150,7 @@ 
     348       INTEGER ::   ierr, ios                  ! 
     349       INTEGER ::   inbi, inbj, iimax,  ijmax, icnt1, icnt2 
     350       LOGICAL ::   llbest 
     351+      LOGICAL ::   llwrtlay 
     352       INTEGER, ALLOCATABLE, DIMENSION(:)     ::   iin, ii_nono, ii_noea          ! 1D workspace 
     353       INTEGER, ALLOCATABLE, DIMENSION(:)     ::   ijn, ii_noso, ii_nowe          !  -     - 
     354       INTEGER, ALLOCATABLE, DIMENSION(:,:) ::   iimppt, ilci, ibondi, ipproc   ! 2D workspace 
     355@@ -166,6 +167,7 @@ 
     356            &             ln_vol, nn_volctl, nn_rimwidth, nb_jpk_bdy 
     357       !!---------------------------------------------------------------------- 
     358 
     359+      llwrtlay = lwp .OR. ln_ctl .OR. ( sn_cfctl%l_config .AND.  sn_cfctl%l_layout ) 
     360       ! do we need to take into account bdy_msk? 
     361       REWIND( numnam_ref )              ! Namelist nambdy in reference namelist : BDY 
     362       READ  ( numnam_ref, nambdy, IOSTAT = ios, ERR = 903) 
     363@@ -553,7 +555,7 @@ 
     364       END DO 
     365        
     366       ! Save processor layout in ascii file 
     367-      IF (lwp) THEN 
     368+      IF (llwrtlay) THEN 
     369          CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 
     370          WRITE(inum,'(a)') '   jpnij   jpimax  jpjmax    jpk  jpiglo  jpjglo'//&  
     371    &           ' ( local:    narea     jpi     jpj )'     
     372@@ -614,6 +616,8 @@  
     373             WRITE(numout,*) 
     374             WRITE(numout,*) '   ==>>>   North fold boundary prepared for jpni >1' 
     375             ! additional prints in layout.dat  
     376+         ENDIF 
     377+         IF (llwrtlay) THEN 
     378             WRITE(inum,*) 
     379             WRITE(inum,*) 
     380             WRITE(inum,*) 'number of subdomains located along the north fold : ', ndim_rank_north 
     381@@ -628,7 +632,7 @@ 
     382       ! 
     383       IF( ln_nnogather ) THEN 
     384          CALL mpp_init_nfdcom     ! northfold neighbour lists 
     385-         IF (lwp) THEN 
     386+         IF (llwrtlay) THEN 
     387             WRITE(inum,*) 
     388             WRITE(inum,*) 
     389             WRITE(inum,*) 'north fold exchanges with explicit point-to-point messaging :' 
     390@@ -639,7 +643,7 @@ 
     391          ENDIF 
     392       ENDIF 
     393       ! 
     394-      IF (lwp) CLOSE(inum) 
     395+      IF (llwrtlay) CLOSE(inum) 
     396       ! 
     397       DEALLOCATE(iin, ijn, ii_nono, ii_noea, ii_noso, ii_nowe,    & 
     398          &       iimppt, ijmppt, ibondi, ibondj, ipproc, ipolj,   & 
     399}}} 
     400 
     401''' 6. sette/sette.sh ''' 
     402 
     403Finally, once implemented, these cahnges allow SETTE tests to be run without creating the full set of multiple output files. It is simply be a case of replacing all ln_ctl settings like so: 
     404 
     405{{{ 
     406290c291,294 
     407<     set_namelist namelist_cfg ln_ctl .true. 
     408--- 
     409>     set_namelist namelist_cfg ln_ctl .false. 
     410>     set_namelist namelist_cfg sn_cfctl%l_config .true. 
     411>     set_namelist namelist_cfg sn_cfctl%l_runstat .true. 
     412>     set_namelist namelist_cfg sn_cfctl%l_trcstat .true. 
     413}}} 
    19414== Tests 
    20415