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 12101 for utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domcfg.f90 – NEMO

Ignore:
Timestamp:
2019-12-06T18:45:39+01:00 (4 years ago)
Author:
mathiot
Message:

merge ENHANCE-03_domcfg and ENHANCE-02_ISF_nemo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • utils/tools_UKMO_MERGE_2019/DOMAINcfg/src/domcfg.f90

    r9598 r12101  
    1515   USE in_out_manager  ! I/O manager 
    1616   USE lib_mpp         ! distributed memory computing library 
    17    USE timing          ! Timing 
    1817 
    1918   IMPLICIT NONE 
     
    3635      !! 
    3736      !!---------------------------------------------------------------------- 
    38       ! 
    39       IF( nn_timing == 1 )  CALL timing_start('dom_cfg') 
    4037      ! 
    4138      IF(lwp) THEN                   ! Control print 
     
    6057      CALL dom_glo                   ! global domain versus zoom and/or local domain 
    6158      ! 
    62       IF( nn_timing == 1 )  CALL timing_stop('dom_cfg') 
    63       ! 
    6459   END SUBROUTINE dom_cfg 
    65  
    6660 
    6761   SUBROUTINE dom_glo 
     
    6963      !!                     ***  ROUTINE dom_glo  *** 
    7064      !! 
    71       !! ** Purpose :   initialization for global domain, zoom and local domain 
     65      !! ** Purpose :   initialization of global domain <--> local domain indices 
    7266      !! 
    7367      !! ** Method  :    
    7468      !! 
    75       !! ** Action  : - mig  , mjg :  
    76       !!              - mi0  , mi1   : 
    77       !!              - mj0, , mj1   : 
     69      !! ** Action  : - mig , mjg : local  domain indices ==> global domain indices 
     70      !!              - mi0 , mi1 : global domain indices ==> local  domain indices 
     71      !!              - mj0,, mj1   (global point not in the local domain ==> mi0>mi1 and/or mj0>mj1) 
    7872      !!---------------------------------------------------------------------- 
    7973      INTEGER ::   ji, jj   ! dummy loop argument 
    8074      !!---------------------------------------------------------------------- 
    81       !                              ! recalculate jpizoom/jpjzoom given lat/lon 
    8275      ! 
    83       !                        ! ============== ! 
    84       !                        !  Local domain  !  
    85       !                        ! ============== ! 
    86       DO ji = 1, jpi                 ! local domain indices ==> data domain indices 
    87         mig(ji) = ji + jpizoom - 1 + nimpp - 1 
     76      DO ji = 1, jpi                 ! local domain indices ==> global domain indices 
     77        mig(ji) = ji + nimpp - 1 
    8878      END DO 
    8979      DO jj = 1, jpj 
    90         mjg(jj) = jj + jpjzoom - 1 + njmpp - 1 
     80        mjg(jj) = jj + njmpp - 1 
    9181      END DO 
    92       ! 
    93       !                              ! data domain indices ==> local domain indices 
     82      !                              ! global domain indices ==> local domain indices 
    9483      !                                   ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the  
    95       !                                   !local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
    96       DO ji = 1, jpidta 
    97         mi0(ji) = MAX( 1, MIN( ji - jpizoom + 1 - nimpp + 1, jpi+1 ) ) 
    98         mi1(ji) = MAX( 0, MIN( ji - jpizoom + 1 - nimpp + 1, jpi   ) ) 
     84      !                                   ! local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
     85      DO ji = 1, jpiglo 
     86        mi0(ji) = MAX( 1 , MIN( ji - nimpp + 1, jpi+1 ) ) 
     87        mi1(ji) = MAX( 0 , MIN( ji - nimpp + 1, jpi   ) ) 
    9988      END DO 
    100       DO jj = 1, jpjdta 
    101         mj0(jj) = MAX( 1, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj+1 ) ) 
    102         mj1(jj) = MAX( 0, MIN( jj - jpjzoom + 1 - njmpp + 1, jpj   ) ) 
     89      DO jj = 1, jpjglo 
     90        mj0(jj) = MAX( 1 , MIN( jj - njmpp + 1, jpj+1 ) ) 
     91        mj1(jj) = MAX( 0 , MIN( jj - njmpp + 1, jpj   ) ) 
    10392      END DO 
    10493      IF(lwp) THEN                   ! control print 
    10594         WRITE(numout,*) 
    106          WRITE(numout,*) 'dom_glo : domain: data / local ' 
     95         WRITE(numout,*) 'dom_glo : domain: global <<==>> local ' 
    10796         WRITE(numout,*) '~~~~~~~ ' 
    108          WRITE(numout,*) '          data input domain    : jpidta = ', jpidta,   & 
    109             &                                            ' jpjdta = ', jpjdta, ' jpkdta = ', jpkdta 
    110          WRITE(numout,*) '          global or zoom domain: jpiglo = ', jpiglo,   & 
    111             &                                            ' jpjglo = ', jpjglo, ' jpk    = ', jpk 
    112          WRITE(numout,*) '          local domain         : jpi    = ', jpi   ,   & 
    113             &                                            ' jpj    = ', jpj   , ' jpk    = ', jpk 
     97         WRITE(numout,*) '   global domain:   jpiglo = ', jpiglo, ' jpjglo = ', jpjglo, ' jpkglo = ', jpkglo 
     98         WRITE(numout,*) '   local  domain:   jpi    = ', jpi   , ' jpj    = ', jpj   , ' jpk    = ', jpk 
    11499         WRITE(numout,*) 
    115          WRITE(numout,*) '          south-west indices    jpizoom = ', jpizoom,   & 
    116             &                                           ' jpjzoom = ', jpjzoom 
     100         WRITE(numout,*) '   conversion from local to global domain indices (and vise versa) done' 
    117101         IF( nn_print >= 1 ) THEN 
    118102            WRITE(numout,*) 
    119             WRITE(numout,*) '          conversion local  ==> data i-index domain' 
     103            WRITE(numout,*) '          conversion local  ==> global i-index domain (mig)' 
    120104            WRITE(numout,25)              (mig(ji),ji = 1,jpi) 
    121105            WRITE(numout,*) 
    122             WRITE(numout,*) '          conversion data  ==> local  i-index domain' 
    123             WRITE(numout,*) '             starting index' 
    124             WRITE(numout,25)              (mi0(ji),ji = 1,jpidta) 
    125             WRITE(numout,*) '             ending index' 
    126             WRITE(numout,25)              (mi1(ji),ji = 1,jpidta) 
     106            WRITE(numout,*) '          conversion global ==> local  i-index domain' 
     107            WRITE(numout,*) '             starting index (mi0)' 
     108            WRITE(numout,25)              (mi0(ji),ji = 1,jpiglo) 
     109            WRITE(numout,*) '             ending index (mi1)' 
     110            WRITE(numout,25)              (mi1(ji),ji = 1,jpiglo) 
    127111            WRITE(numout,*) 
    128             WRITE(numout,*) '          conversion local  ==> data j-index domain' 
     112            WRITE(numout,*) '          conversion local  ==> global j-index domain (mjg)' 
    129113            WRITE(numout,25)              (mjg(jj),jj = 1,jpj) 
    130114            WRITE(numout,*) 
    131             WRITE(numout,*) '          conversion data  ==> local j-index domain' 
    132             WRITE(numout,*) '             starting index' 
    133             WRITE(numout,25)              (mj0(jj),jj = 1,jpjdta) 
    134             WRITE(numout,*) '             ending index' 
    135             WRITE(numout,25)              (mj1(jj),jj = 1,jpjdta) 
     115            WRITE(numout,*) '          conversion global ==> local j-index domain' 
     116            WRITE(numout,*) '             starting index (mj0)' 
     117            WRITE(numout,25)              (mj0(jj),jj = 1,jpjglo) 
     118            WRITE(numout,*) '             ending index (mj1)' 
     119            WRITE(numout,25)              (mj1(jj),jj = 1,jpjglo) 
    136120         ENDIF 
    137121      ENDIF 
    138122 25   FORMAT( 100(10x,19i4,/) ) 
    139  
    140       !                        ! ============== ! 
    141       !                        !  Zoom domain   ! 
    142       !                        ! ============== ! 
    143       !                              ! zoom control 
    144       IF( jpiglo + jpizoom - 1  >  jpidta .OR.   & 
    145           jpjglo + jpjzoom - 1  >  jpjdta      ) & 
    146           &   CALL ctl_stop( ' global or zoom domain exceed the data domain ! ' ) 
    147  
    148       !                              ! set zoom flag 
    149       IF( jpiglo < jpidta .OR. jpjglo < jpjdta )   lzoom = .TRUE. 
    150  
    151       !                              ! set zoom type flags 
    152       IF( lzoom .AND. jpizoom /= 1 )   lzoom_w = .TRUE.                     !  
    153       IF( lzoom .AND. jpjzoom /= 1 )   lzoom_s = .TRUE. 
    154       IF( lzoom .AND. jpiglo + jpizoom -1 /= jpidta )   lzoom_e = .TRUE. 
    155       IF( lzoom .AND. jpjglo + jpjzoom -1 /= jpjdta )   lzoom_n = .TRUE. 
    156       IF(lwp) THEN 
    157          WRITE(numout,*) 
    158          WRITE(numout,*) '          zoom flags : ' 
    159          WRITE(numout,*) '             lzoom   = ', lzoom  , ' (T = zoom, F = global )' 
    160          WRITE(numout,*) '             lzoom_e = ', lzoom_e, ' (T = forced closed east  boundary)' 
    161          WRITE(numout,*) '             lzoom_w = ', lzoom_w, ' (T = forced closed west  boundary)' 
    162          WRITE(numout,*) '             lzoom_s = ', lzoom_s, ' (T = forced closed South boundary)' 
    163          WRITE(numout,*) '             lzoom_n = ', lzoom_n, ' (T = forced closed North boundary)' 
    164       ENDIF 
    165       IF(  ( lzoom_e .OR. lzoom_w )  .AND.  ( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 )  )   & 
    166            &   CALL ctl_stop( ' Your zoom choice is inconsistent with east-west cyclic boundary condition' ) 
    167       IF(  lzoom_n  .AND.  ( 3 <= jperio .AND. jperio <= 6 )  )   & 
    168            &   CALL ctl_stop( ' Your zoom choice is inconsistent with North fold boundary condition' ) 
    169  
    170       !                              ! Pre-defined arctic/antarctic zoom of ORCA configuration flag 
    171       IF( cp_cfg == "orca" ) THEN 
    172          SELECT CASE ( jp_cfg ) 
    173          CASE ( 2 )                               !  ORCA_R2 configuration 
    174             IF(  cp_cfz == "arctic"    .AND. jpiglo  == 142    .AND. jpjglo  ==  53 .AND.   & 
    175                & jpizoom ==  21    .AND. jpjzoom ==  97         )   THEN 
    176               IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom ' 
    177             ENDIF 
    178             IF(  cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  ==  50 .AND.   & 
    179                & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN 
    180               IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom ' 
    181             ENDIF 
    182             !                              
    183          CASE ( 05 )                              !  ORCA_R05 configuration 
    184             IF(    cp_cfz == "arctic"    .AND. jpiglo  == 562    .AND. jpjglo  == 202 .AND.   & 
    185                & jpizoom ==  81    .AND. jpjzoom == 301         )   THEN 
    186               IF(lwp) WRITE(numout,*) '          ORCA configuration: arctic zoom ' 
    187             ENDIF 
    188             IF(    cp_cfz == "antarctic" .AND. jpiglo  == jpidta .AND. jpjglo  == 187 .AND.   & 
    189                & jpizoom ==   1    .AND. jpjzoom ==   1         )   THEN 
    190               IF(lwp) WRITE(numout,*) '          ORCA configuration: antarctic zoom ' 
    191             ENDIF 
    192          END SELECT 
    193          ! 
    194       ENDIF 
    195123      ! 
    196124   END SUBROUTINE dom_glo 
    197  
    198125   !!====================================================================== 
    199126END MODULE domcfg 
Note: See TracChangeset for help on using the changeset viewer.