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 10727 for utils/tools_AGRIF_CMEMS_2020/DOMAINcfg/src/prtctl.F90 – NEMO

Ignore:
Timestamp:
2019-02-27T17:02:02+01:00 (5 years ago)
Author:
rblod
Message:

new nesting tools (attempt) and brutal cleaning of DOMAINcfg, see ticket #2129

File:
1 moved

Legend:

Unmodified
Added
Removed
  • utils/tools_AGRIF_CMEMS_2020/DOMAINcfg/src/prtctl.F90

    r10725 r10727  
    88   !!---------------------------------------------------------------------- 
    99   USE dom_oce          ! ocean space and time domain variables 
    10  
    11  
    12  
     10#if defined key_nemocice_decomp 
     11   USE ice_domain_size, only: nx_global, ny_global 
     12#endif 
    1313   USE in_out_manager   ! I/O manager 
    1414   USE lib_mpp          ! distributed memory computing 
    15    USE wrk_nemo         ! work arrays 
    1615 
    1716   IMPLICIT NONE 
     
    3736   !!---------------------------------------------------------------------- 
    3837   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
    39    !! $Id: prtctl.F90 5025 2015-01-12 15:53:50Z timgraham $  
    40    !! Software governed by the CeCILL licence     (./LICENSE) 
     38   !! $Id: prtctl.F90 10068 2018-08-28 14:09:04Z nicolasmartin $  
     39   !! Software governed by the CeCILL license (see ./LICENSE) 
    4140   !!---------------------------------------------------------------------- 
    4241CONTAINS 
    4342 
    4443   SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2,   & 
    45       &                                  mask2, clinfo2, ovlap, kdim, clinfo3 ) 
     44      &                                  mask2, clinfo2, kdim, clinfo3 ) 
    4645      !!---------------------------------------------------------------------- 
    4746      !!                     ***  ROUTINE prt_ctl  *** 
     
    7574      !!                    mask2   : mask (3D) to apply to the tab[23]d_2 array 
    7675      !!                    clinfo2 : information about the tab[23]d_2 array 
    77       !!                    ovlap   : overlap value 
    7876      !!                    kdim    : k- direction for 3D arrays  
    7977      !!                    clinfo3 : additional information  
     
    8785      REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL ::   mask2 
    8886      CHARACTER (len=*)         , INTENT(in), OPTIONAL ::   clinfo2 
    89       INTEGER                   , INTENT(in), OPTIONAL ::   ovlap 
    9087      INTEGER                   , INTENT(in), OPTIONAL ::   kdim 
    9188      CHARACTER (len=*)         , INTENT(in), OPTIONAL ::   clinfo3 
    9289      ! 
    9390      CHARACTER (len=15) :: cl2 
    94       INTEGER ::   overlap, jn, sind, eind, kdir,j_id 
     91      INTEGER ::  jn, sind, eind, kdir,j_id 
    9592      REAL(wp) :: zsum1, zsum2, zvctl1, zvctl2 
    96       REAL(wp), POINTER, DIMENSION(:,:)   :: ztab2d_1, ztab2d_2 
    97       REAL(wp), POINTER, DIMENSION(:,:,:) :: zmask1, zmask2, ztab3d_1, ztab3d_2 
    98       !!---------------------------------------------------------------------- 
    99  
    100       CALL wrk_alloc( jpi,jpj, ztab2d_1, ztab2d_2 ) 
    101       CALL wrk_alloc( jpi,jpj,jpk, zmask1, zmask2, ztab3d_1, ztab3d_2 ) 
     93      REAL(wp), DIMENSION(jpi,jpj)     :: ztab2d_1, ztab2d_2 
     94      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask1, zmask2, ztab3d_1, ztab3d_2 
     95      !!---------------------------------------------------------------------- 
    10296 
    10397      ! Arrays, scalars initialization  
    104       overlap   = 0 
    10598      kdir      = jpkm1 
    10699      cl2       = '' 
     
    118111      ! Control of optional arguments 
    119112      IF( PRESENT(clinfo2) )   cl2                  = clinfo2 
    120       IF( PRESENT(ovlap)   )   overlap              = ovlap 
    121113      IF( PRESENT(kdim)    )   kdir                 = kdim 
    122114      IF( PRESENT(tab2d_1) )   ztab2d_1(:,:)        = tab2d_1(:,:) 
     
    142134         IF( .NOT. lsp_area ) THEN 
    143135            IF (lk_mpp .AND. jpnij > 1)   THEN 
    144                nictls = MAX( 1, nlditl(jn) - overlap ) 
    145                nictle = nleitl(jn) + overlap * MIN( 1, nlcitl(jn) - nleitl(jn))  
    146                njctls = MAX( 1, nldjtl(jn) - overlap ) 
    147                njctle = nlejtl(jn) + overlap * MIN( 1, nlcjtl(jn) - nlejtl(jn)) 
     136               nictls = MAX(  1, nlditl(jn) ) 
     137               nictle = MIN(jpi, nleitl(jn) ) 
     138               njctls = MAX(  1, nldjtl(jn) ) 
     139               njctle = MIN(jpj, nlejtl(jn) ) 
    148140               ! Do not take into account the bound of the domain 
    149141               IF( ibonitl(jn) == -1 .OR. ibonitl(jn) == 2 ) nictls = MAX(2, nictls) 
     
    152144               IF( ibonjtl(jn) ==  1 .OR. ibonjtl(jn) == 2 ) njctle = MIN(njctle, nlejtl(jn) - 1) 
    153145            ELSE 
    154                nictls = MAX( 1, nimpptl(jn) + nlditl(jn) - 1 - overlap ) 
    155                nictle = nimpptl(jn) + nleitl(jn) - 1 + overlap * MIN( 1, nlcitl(jn) - nleitl(jn) )  
    156                njctls = MAX( 1, njmpptl(jn) + nldjtl(jn) - 1 - overlap ) 
    157                njctle = njmpptl(jn) + nlejtl(jn) - 1 + overlap * MIN( 1, nlcjtl(jn) - nlejtl(jn) )  
     146               nictls = MAX(  1, nimpptl(jn) - 1 + nlditl(jn) ) 
     147               nictle = MIN(jpi, nimpptl(jn) - 1 + nleitl(jn) ) 
     148               njctls = MAX(  1, njmpptl(jn) - 1 + nldjtl(jn) ) 
     149               njctle = MIN(jpj, njmpptl(jn) - 1 + nlejtl(jn) ) 
    158150               ! Do not take into account the bound of the domain 
    159151               IF( ibonitl(jn) == -1 .OR. ibonitl(jn) == 2 ) nictls = MAX(2, nictls) 
     
    207199 
    208200      ENDDO 
    209  
    210       CALL wrk_dealloc( jpi,jpj, ztab2d_1, ztab2d_2 ) 
    211       CALL wrk_dealloc( jpi,jpj,jpk, zmask1, zmask2, ztab3d_1, ztab3d_2 ) 
    212201      ! 
    213202   END SUBROUTINE prt_ctl 
     
    398387      !!                periodic 
    399388      !!                Type :         jperio global periodic condition 
    400       !!                               nperio local  periodic condition 
    401389      !! 
    402390      !! ** Action  : - set domain parameters 
    403391      !!                    nimpp     : longitudinal index  
    404392      !!                    njmpp     : latitudinal  index 
    405       !!                    nperio    : lateral condition type  
    406393      !!                    narea     : number for local area 
    407394      !!                    nlcil      : first dimension 
     
    425412         nrecil, nrecjl, nldil, nleil, nldjl, nlejl 
    426413 
    427       INTEGER, POINTER, DIMENSION(:,:) ::   iimpptl, ijmpptl, ilcitl, ilcjtl   ! workspace 
     414      INTEGER, DIMENSION(jpi,jpj) ::   iimpptl, ijmpptl, ilcitl, ilcjtl   ! workspace 
    428415      REAL(wp) ::   zidom, zjdom            ! temporary scalars 
    429       !!---------------------------------------------------------------------- 
    430  
    431       ! 
    432       CALL wrk_alloc( isplt, jsplt, ilcitl, ilcjtl, iimpptl, ijmpptl ) 
     416      INTEGER ::   inum                     ! local logical unit 
     417      !!---------------------------------------------------------------------- 
     418 
     419      ! 
    433420      ! 
    434421      !  1. Dimension arrays for subdomains 
     
    440427      !  array (cf. par_oce.F90). 
    441428 
    442  
    443  
    444  
    445  
    446       ijpi = ( jpiglo-2*jpreci + (isplt-1) ) / isplt + 2*jpreci 
    447       ijpj = ( jpjglo-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj 
    448  
    449  
    450  
    451       nrecil  = 2 * jpreci 
    452       nrecjl  = 2 * jprecj 
     429#if defined key_nemocice_decomp 
     430      ijpi = ( nx_global+2-2*nn_hls + (isplt-1) ) / isplt + 2*nn_hls 
     431      ijpj = ( ny_global+2-2*nn_hls + (jsplt-1) ) / jsplt + 2*nn_hls  
     432#else 
     433      ijpi = ( jpiglo-2*nn_hls + (isplt-1) ) / isplt + 2*nn_hls 
     434      ijpj = ( jpjglo-2*nn_hls + (jsplt-1) ) / jsplt + 2*nn_hls 
     435#endif 
     436 
     437 
     438      nrecil  = 2 * nn_hls 
     439      nrecjl  = 2 * nn_hls 
    453440      irestil = MOD( jpiglo - nrecil , isplt ) 
    454441      irestjl = MOD( jpjglo - nrecjl , jsplt ) 
    455442 
    456443      IF(  irestil == 0 )   irestil = isplt 
     444#if defined key_nemocice_decomp 
     445 
     446      ! In order to match CICE the size of domains in NEMO has to be changed 
     447      ! The last line of blocks (west) will have fewer points  
     448      DO jj = 1, jsplt  
     449         DO ji=1, isplt-1  
     450            ilcitl(ji,jj) = ijpi  
     451         END DO  
     452         ilcitl(isplt,jj) = jpiglo - (isplt - 1) * (ijpi - nrecil) 
     453      END DO  
     454 
     455#else  
    457456 
    458457      DO jj = 1, jsplt 
     
    465464      END DO 
    466465 
     466#endif 
    467467       
    468468      IF( irestjl == 0 )   irestjl = jsplt 
     469#if defined key_nemocice_decomp  
     470 
     471      ! Same change to domains in North-South direction as in East-West.  
     472      DO ji = 1, isplt  
     473         DO jj=1, jsplt-1  
     474            ilcjtl(ji,jj) = ijpj  
     475         END DO  
     476         ilcjtl(ji,jsplt) = jpjglo - (jsplt - 1) * (ijpj - nrecjl) 
     477      END DO  
     478 
     479#else  
    469480 
    470481      DO ji = 1, isplt 
     
    477488      END DO 
    478489 
     490#endif 
    479491      zidom = nrecil 
    480492      DO ji = 1, isplt 
     
    538550         ibonitl(jn) = nbondil 
    539551          
    540          nldil =  1   + jpreci 
    541          nleil = nlcil - jpreci 
     552         nldil =  1   + nn_hls 
     553         nleil = nlcil - nn_hls 
    542554         IF( nbondil == -1 .OR. nbondil == 2 )   nldil = 1 
    543555         IF( nbondil ==  1 .OR. nbondil == 2 )   nleil = nlcil 
    544          nldjl =  1   + jprecj 
    545          nlejl = nlcjl - jprecj 
     556         nldjl =  1   + nn_hls 
     557         nlejl = nlcjl - nn_hls 
    546558         IF( nbondjl == -1 .OR. nbondjl == 2 )   nldjl = 1 
    547559         IF( nbondjl ==  1 .OR. nbondjl == 2 )   nlejl = nlcjl 
     
    552564      END DO 
    553565      ! 
    554       ! 
    555       CALL wrk_dealloc( isplt, jsplt, ilcitl, ilcjtl, iimpptl, ijmpptl ) 
     566      ! Save processor layout in layout_prtctl.dat file  
     567      IF(lwp) THEN 
     568         CALL ctl_opn( inum, 'layout_prtctl.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 
     569         WRITE(inum,'(a)') 'nproc nlcil nlcjl nldil nldjl nleil nlejl nimpptl njmpptl ibonitl ibonjtl' 
     570         ! 
     571         DO jn = 1, ijsplt 
     572            WRITE(inum,'(i5,6i6,4i8)') jn-1,nlcitl(jn),  nlcjtl(jn), & 
     573               &                            nlditl(jn),  nldjtl(jn), & 
     574               &                            nleitl(jn),  nlejtl(jn), & 
     575               &                           nimpptl(jn), njmpptl(jn), & 
     576               &                           ibonitl(jn), ibonjtl(jn) 
     577         END DO 
     578         CLOSE(inum)    
     579      END IF 
    556580      ! 
    557581      ! 
Note: See TracChangeset for help on using the changeset viewer.