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 7153 for branches/2016/dev_r6999_CONFIGMAN_1/NEMOGCM/TOOLS/SIREN/src/create_meshmask.f90 – NEMO

Ignore:
Timestamp:
2016-10-28T11:13:57+02:00 (8 years ago)
Author:
jpaul
Message:

see ticket #1781

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6999_CONFIGMAN_1/NEMOGCM/TOOLS/SIREN/src/create_meshmask.f90

    r7025 r7153  
    99!> @brief  
    1010!>  This program creates the NetCDF file(s) which contain(s) all the 
    11 !>  ocean domain informations (mesh and mask arrays). 
     11!>  ocean domain informations. 
     12!>  It allows to create the domain_cfg.nc file needed to run NEMO, or  
     13!>  the mesh_mask file(s). 
    1214!> 
    1315!> @details 
     
    2628!> 
    2729!> @section sec2 how to 
    28 !>    to create meshmask file:<br/> 
     30!>    to create domain_cfg or meshmask file:<br/> 
    2931!> @code{.sh} 
    3032!>    ./SIREN/bin/create_meshmask create_meshmask.nam 
     
    3436!>    you could find a template of the namelist in templates directory. 
    3537!> 
    36 !>    create_meshmask.nam contains 15 namelists:<br/> 
     38!>    create_meshmask.nam contains 13 namelists:<br/> 
    3739!>       - logger namelist (namlog) 
    3840!>       - config namelist (namcfg) 
     
    4446!>       - partial step namelist (namzps) 
    4547!>       - sigma or hybrid namelist (namsco) 
    46 !>       - cross land advection namelist (namcla) 
     48!       - cross land advection namelist (namcla) 
    4749!>       - lateral boundary condition namelist (namlbc) 
    4850!>       - wetting and dryong namelist (namwd) 
    4951!>       - grid namelist (namgrd) 
    50 !>       - zoom namelist (namzoom) 
     52!       - zoom namelist (namzoom) 
    5153!>       - output namelist (namout) 
    5254!> 
     
    138140!>          - dn_zb_b      : Offset for Zb 
    139141!> 
    140 !>    * _cross land advection namelist (namcla)_:<br/> 
    141 !>       - in_cla : =1 cross land advection for exchanges through some straits (only for ORCA2) 
    142 !> 
     142!    * _cross land advection namelist (namcla)_:<br/> 
     143!       - in_cla : =1 cross land advection for exchanges through some straits (only for ORCA2) 
     144! 
    143145!>    * _lateral boundary condition namelist (namlbc)_:<br/> 
    144146!>       - rn_shlat : lateral boundary conditions at the coast (modify fmask) 
     
    156158!>     
    157159!>    * _grid namelist (namgrd)_:<br/> 
    158 !>       - cn_cfg    : name of the configuration 
    159 !>       - in_cfg    : resolution of the configuration 
    160 !>       - in_bench  : benchmark parameter (in_mshhgr = 5 ).<br/> 
    161 !>                     if /= 0 : forced the resolution to be about 100 km 
    162 !>       - ln_zoom   : use zoom (namzoom) 
     160!       - cn_cfg    : name of the configuration 
     161!>       - in_cfg    : inverse resolution of the configuration (1/4° => 4) 
     162!>       - ln_bench  : GYRE (in_mshhgr = 5 ) used as Benchmark.<br/> 
     163!>                     => forced the resolution to be about 100 km 
     164!       - ln_zoom   : use zoom (namzoom) 
    163165!>       - ln_c1d    : use configuration 1D 
    164 !> 
    165 !>    * _zoom namelist (namzoom)_:<br/> 
    166 !>       - cn_cfz       : name of the zoom of configuration 
    167 !>       - in_izoom     : left bottom i-indices of the zoom in data domain indices 
    168 !>       - in_jzoom     : left bottom j-indices of the zoom in data domain indices 
    169 !>       - ln_zoom_s    : South zoom type flag 
    170 !>       - ln_zoom_e    : East  zoom type flag 
    171 !>       - ln_zoom_w    : West  zoom type flag 
    172 !>       - ln_zoom_n    : North zoom type flag 
    173 !> 
     166! 
     167!    * _zoom namelist (namzoom)_:<br/> 
     168!       - cn_cfz       : name of the zoom of configuration 
     169!       - in_izoom     : left bottom i-indices of the zoom in data domain indices 
     170!       - in_jzoom     : left bottom j-indices of the zoom in data domain indices 
     171!       - ln_zoom_s    : South zoom type flag 
     172!       - ln_zoom_e    : East  zoom type flag 
     173!       - ln_zoom_w    : West  zoom type flag 
     174!       - ln_zoom_n    : North zoom type flag 
     175! 
    174176!>    * _output namelist (namout)_:<br/> 
    175 !>       - in_msh       : number of output file and contain (1-9) 
     177!>       - in_msh       : number of output file and contain (0-9) 
    176178!>       - in_nproc     : number of processor to be used 
    177179!>       - in_niproc    : i-direction number of processor 
     
    179181!> 
    180182!>    @note 
    181 !>        MOD(in_msh, 3) = 1  :   '<b>mesh_mask.nc</b>' file 
    182 !>                       = 2  :   '<b>mesh.nc</b>' and '<b>mask.nc</b>' files 
    183 !>                       = 0  :   '<b>mesh_hgr.nc</b>', '<b>mesh_zgr.nc</b>' and '<b>mask.nc</b>' files 
     183!>        if     in_msh == 0  : write '<b>domain_cfg.nc</b>' file 
     184!>        MOD(in_msh, 3) = 1  :       '<b>mesh_mask.nc</b>' file 
     185!>                       = 2  :       '<b>mesh.nc</b>' and '<b>mask.nc</b>' files 
     186!>                       = 0  :       '<b>mesh_hgr.nc</b>', '<b>mesh_zgr.nc</b>' and '<b>mask.nc</b>' files 
    184187!> 
    185188!>        For huge size domain, use option 2 or 3 depending on your vertical coordinate. 
     
    197200!> @date October, 2016 
    198201!> - update from trunk (revision 6961): add wetting and drying, ice sheet coupling.. 
     202!> @date October, 2016 
     203!> - dimension to be used select from configuration file 
     204!> - do not use anymore special case for ORCA grid 
     205!> - allow to write domain_cfg file 
    199206!> 
    200207!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    224231   CHARACTER(LEN=lc)                              :: cl_date 
    225232 
     233   INTEGER(i1), DIMENSION(:)        , ALLOCATABLE :: bl_tmp 
     234 
    226235   INTEGER(i4)                                    :: il_narg 
    227236   INTEGER(i4)                                    :: il_status 
     
    232241   INTEGER(i4)                                    :: jpj 
    233242   INTEGER(i4)                                    :: jpk 
     243   INTEGER(i4), DIMENSION(:)        , ALLOCATABLE :: il_tmp 
    234244   INTEGER(i4), DIMENSION(:,:)      , ALLOCATABLE :: il_mask 
    235245 
    236246   LOGICAL                                        :: ll_exist 
     247   LOGICAL                                        :: ll_domcfg 
    237248 
    238249   REAL(dp)   , DIMENSION(:,:)      , ALLOCATABLE :: dl_tmp2D 
     
    241252   TYPE(TATT)                                     :: tl_att 
    242253   TYPE(TATT) , DIMENSION(:)        , ALLOCATABLE :: tl_gatt 
     254 
     255   TYPE(TDIM)                                     :: tl_dim 
    243256    
    244257   TYPE(TVAR)                                     :: tl_bathy 
     
    249262   TYPE(TVAR)                                     :: tl_hdept 
    250263   TYPE(TVAR)                                     :: tl_hdepw 
     264   TYPE(TVAR)                                     :: tl_scalar 
    251265 
    252266   TYPE(TNAMH)                                    :: tl_namh 
     
    278292 
    279293   ! namcfg 
    280    CHARACTER(LEN=lc) :: cn_varcfg   = 'variable.cfg'  
    281    CHARACTER(LEN=lc) :: cn_dumcfg   = 'dummy.cfg' 
     294   CHARACTER(LEN=lc) :: cn_varcfg   = './cfg/variable.cfg'  
     295   CHARACTER(LEN=lc) :: cn_dimcfg   = './cfg/dimension.cfg' 
     296   CHARACTER(LEN=lc) :: cn_dumcfg   = './cfg/dummy.cfg' 
    282297 
    283298   ! namin 
     
    301316 
    302317   ! namout 
    303    INTEGER(i4)       :: in_msh      = 1  
     318   INTEGER(i4)       :: in_msh      = 0  
    304319   CHARACTER(LEN=lc) :: cn_type     = 'cdf' 
    305320   INTEGER(i4)       :: in_nproc    = 0 
     
    314329   NAMELIST /namcfg/ &  !< configuration namelist 
    315330   &  cn_varcfg, &       !< variable configuration file 
     331   &  cn_dimcfg, &       !< dimension configuration file 
    316332   &  cn_dumcfg          !< dummy configuration file 
    317333 
     
    379395      CALL var_def_extra(TRIM(cn_varcfg)) 
    380396 
     397      ! get dimension allowed 
     398      CALL dim_def_extra(TRIM(cn_dimcfg)) 
     399 
    381400      ! get dummy variable 
    382401      CALL var_get_dummy(TRIM(cn_dumcfg)) 
     
    405424 
    406425   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     426   ll_domcfg=.FALSE. 
     427   IF( in_msh == 0 )THEN 
     428      ll_domcfg=.TRUE. 
     429   ENDIF 
    407430 
    408431   ! open file 
     
    443466        & tl_bathy%d_value(:,:,1,1) < 0._dp ) 
    444467      tl_bathy%d_value(:,:,1,1) = 0._dp 
    445   END WHERE 
     468   END WHERE 
    446469  
    447470   IF ( ln_isfcav ) THEN 
     
    495518 
    496519   ! init Horizontal grid global variable 
    497    CALL grid_hgr_init(jpi,jpj,jpk) 
     520   CALL grid_hgr_init(jpi,jpj,jpk,ll_domcfg) 
    498521 
    499522   ! compute horizontal mesh 
    500523   WRITE(*,*) "COMPUTE HORIZONTAL MESH" 
    501    CALL grid_hgr_fill(tl_namh,jpi,jpj)       
     524   CALL grid_hgr_fill(tl_namh,jpi,jpj,ll_domcfg)       
    502525 
    503526   ! Vertyical  mesh (dom_zgr) ------------------------------------------------- 
     
    505528 
    506529   ! init Vertical grid global variable 
    507    CALL grid_zgr_init(jpi,jpj,jpk) 
     530   CALL grid_zgr_init(jpi,jpj,jpk,ln_sco) 
    508531   IF( ln_zps    ) CALL grid_zgr_zps_init(jpi,jpj) 
    509532   IF( ln_sco    ) CALL grid_zgr_sco_init(jpi,jpj)  
     
    515538   ! compute masks 
    516539   WRITE(*,*) "COMPUTE MASK" 
    517    CALL create__mask(tl_namh,jpi,jpj,jpk) 
     540   CALL create__mask(tl_namh,jpi,jpj,jpk,ll_domcfg) 
    518541 
    519542   ! Maximum stiffness ratio/hydrostatic consistency 
     
    534557 
    535558   WRITE(*,*) "WRITE FILE(S)" 
    536    SELECT CASE ( MOD(in_msh, 3) ) 
    537       !                                  ! ============================ 
    538    CASE ( 1 )                            !  create 'mesh_mask.nc' file 
    539       !                                  ! ============================ 
    540       tl_mppout0=mpp_init( 'mesh_mask', tg_tmask, & 
    541       &                    in_niproc, in_njproc, in_nproc, & 
    542       &                    cd_type=cn_type ) 
    543  
    544       tl_mppmsk=>tl_mppout0 
    545       tl_mpphgr=>tl_mppout0 
    546       tl_mppzgr=>tl_mppout0 
     559   IF( ll_domcfg )THEN 
     560         !                                  ! ============================ 
     561         !                                  ! create 'domain_cfg.nc' file 
     562         !                                  ! ============================ 
     563         tl_mppout0=mpp_init( 'domain_cfg', tg_tmask, & 
     564         &                    in_niproc, in_njproc, in_nproc, & 
     565         &                    cd_type=cn_type ) 
     566 
     567         tl_mppmsk=>tl_mppout0 
     568         tl_mpphgr=>tl_mppout0 
     569         tl_mppzgr=>tl_mppout0 
     570 
     571   ELSE 
     572      SELECT CASE ( MOD(in_msh, 3) ) 
     573         !                                  ! ============================ 
     574      CASE ( 1 )                            !  create 'mesh_mask.nc' file 
     575         !                                  ! ============================ 
     576         tl_mppout0=mpp_init( 'mesh_mask', tg_tmask, & 
     577         &                    in_niproc, in_njproc, in_nproc, & 
     578         &                    cd_type=cn_type ) 
     579 
     580         tl_mppmsk=>tl_mppout0 
     581         tl_mpphgr=>tl_mppout0 
     582         tl_mppzgr=>tl_mppout0 
     583          
     584         !                                  ! ============================ 
     585      CASE ( 2 )                            !  create 'mesh.nc' and  
     586         !                                  !         'mask.nc' files 
     587         !                                  ! ============================ 
     588         tl_mppout0=mpp_init( 'mask', tg_tmask, & 
     589         &                    in_niproc, in_njproc, in_nproc, & 
     590         &                    cd_type=cn_type ) 
     591         tl_mppout1=mpp_init( 'mesh', tg_tmask, & 
     592         &                    in_niproc, in_njproc, in_nproc, & 
     593         &                    cd_type=cn_type ) 
     594 
     595         tl_mppmsk=>tl_mppout0 
     596         tl_mpphgr=>tl_mppout1 
     597         tl_mppzgr=>tl_mppout1 
     598 
     599         !                                  ! ============================ 
     600      CASE ( 0 )                            !  create 'mesh_hgr.nc' 
     601         !                                  !         'mesh_zgr.nc' and 
     602         !                                  !         'mask.nc'     files 
     603         !                                  ! ============================ 
     604         tl_mppout0=mpp_init( 'mask', tg_tmask, & 
     605         &                    in_niproc, in_njproc, in_nproc, & 
     606         &                    cd_type=cn_type ) 
     607         tl_mppout1=mpp_init( 'mesh_hgr', tg_tmask, & 
     608         &                    in_niproc, in_njproc, in_nproc, & 
     609         &                    cd_type=cn_type ) 
     610         tl_mppout2=mpp_init( 'mesh_zgr', tg_tmask, & 
     611         &                    in_niproc, in_njproc, in_nproc, & 
     612         &                    cd_type=cn_type ) 
     613         ! 
     614 
     615         tl_mppmsk=>tl_mppout0 
     616         tl_mpphgr=>tl_mppout1 
     617         tl_mppzgr=>tl_mppout2 
     618 
     619      END SELECT 
     620   ENDIF 
     621 
     622   ! add variables 
     623   IF( ll_domcfg )THEN 
     624      ALLOCATE(il_tmp(1)) 
     625      tl_dim%l_use=.FALSE. 
     626 
     627      il_tmp(:)=jpi 
     628      tl_scalar=var_init('jpiglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 
     629      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     630 
     631      il_tmp(:)=jpj 
     632      tl_scalar=var_init('jpjglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 
     633      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     634 
     635      il_tmp(:)=jpk 
     636      tl_scalar=var_init('jpkglo', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 
     637      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
    547638       
    548       !                                  ! ============================ 
    549    CASE ( 2 )                            !  create 'mesh.nc' and  
    550       !                                  !         'mask.nc' files 
    551       !                                  ! ============================ 
    552       tl_mppout0=mpp_init( 'mask', tg_tmask, & 
    553       &                    in_niproc, in_njproc, in_nproc, & 
    554       &                    cd_type=cn_type ) 
    555       tl_mppout1=mpp_init( 'mesh', tg_tmask, & 
    556       &                    in_niproc, in_njproc, in_nproc, & 
    557       &                    cd_type=cn_type ) 
    558  
    559       tl_mppmsk=>tl_mppout0 
    560       tl_mpphgr=>tl_mppout1 
    561       tl_mppzgr=>tl_mppout1 
    562  
    563       !                                  ! ============================ 
    564    CASE ( 0 )                            !  create 'mesh_hgr.nc' 
    565       !                                  !         'mesh_zgr.nc' and 
    566       !                                  !         'mask.nc'     files 
    567       !                                  ! ============================ 
    568       tl_mppout0=mpp_init( 'mask', tg_tmask, & 
    569       &                    in_niproc, in_njproc, in_nproc, & 
    570       &                    cd_type=cn_type ) 
    571       tl_mppout1=mpp_init( 'mesh_hgr', tg_tmask, & 
    572       &                    in_niproc, in_njproc, in_nproc, & 
    573       &                    cd_type=cn_type ) 
    574       tl_mppout2=mpp_init( 'mesh_zgr', tg_tmask, & 
    575       &                    in_niproc, in_njproc, in_nproc, & 
    576       &                    cd_type=cn_type ) 
    577       ! 
    578  
    579       tl_mppmsk=>tl_mppout0 
    580       tl_mpphgr=>tl_mppout1 
    581       tl_mppzgr=>tl_mppout2 
    582  
    583    END SELECT 
    584  
    585    ! add variables 
     639      il_tmp(:)=tl_mppout0%i_perio 
     640      tl_scalar=var_init('jperio', il_tmp(:), id_type=NF90_INT, td_dim=tl_dim) 
     641      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     642 
     643      DEALLOCATE(il_tmp) 
     644      ALLOCATE(bl_tmp(1)) 
     645 
     646      bl_tmp(:)=0 
     647      IF( ln_zco ) bl_tmp(:)=1 
     648      tl_scalar=var_init('ln_zco',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 
     649      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     650 
     651      bl_tmp(:)=0 
     652      IF( ln_zps ) bl_tmp(:)=1 
     653      tl_scalar=var_init('ln_zps',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 
     654      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     655 
     656      bl_tmp(:)=0 
     657      IF( ln_sco ) bl_tmp(:)=1 
     658      tl_scalar=var_init('ln_sco',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 
     659      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     660 
     661      bl_tmp(:)=0 
     662      IF( ln_isfcav ) bl_tmp(:)=1 
     663      tl_scalar=var_init('ln_isfcav',bl_tmp(:), id_type=NF90_BYTE, td_dim=tl_dim) 
     664      CALL mpp_add_var(tl_mppmsk, tl_scalar) 
     665 
     666      DEALLOCATE(bl_tmp) 
     667      CALL var_clean(tl_scalar) 
     668   ENDIF 
     669 
    586670   !!! mask (msk) 
    587671   !!!---------------------- 
    588  
    589    ! tmask 
    590    CALL mpp_add_var(tl_mppmsk, tg_tmask) 
    591    CALL var_clean(tg_tmask) 
    592    ! umask 
    593    CALL mpp_add_var(tl_mppmsk, tg_umask) 
    594    CALL var_clean(tg_umask) 
    595    ! vmask 
    596    CALL mpp_add_var(tl_mppmsk, tg_vmask) 
    597    CALL var_clean(tg_vmask) 
    598    ! fmask 
    599    CALL mpp_add_var(tl_mppmsk, tg_fmask) 
    600    CALL var_clean(tg_fmask) 
    601  
    602    !!! VOIR CAS TMASKUTIL ??? 
    603     
     672   IF( .NOT. ll_domcfg )THEN 
     673      ! tmask 
     674      CALL mpp_add_var(tl_mppmsk, tg_tmask) 
     675      CALL var_clean(tg_tmask) 
     676      ! umask 
     677      CALL mpp_add_var(tl_mppmsk, tg_umask) 
     678      CALL var_clean(tg_umask) 
     679      ! vmask 
     680      CALL mpp_add_var(tl_mppmsk, tg_vmask) 
     681      CALL var_clean(tg_vmask) 
     682      ! fmask 
     683      CALL mpp_add_var(tl_mppmsk, tg_fmask) 
     684      CALL var_clean(tg_fmask) 
     685   ENDIF 
     686 
    604687   !!! horizontal mesh (hgr) 
    605688   !!!---------------------- 
     
    662745 
    663746   ! coriolis factor 
    664    ! ff 
    665    CALL mpp_add_var(tl_mpphgr, tg_ff) 
    666    CALL var_clean(tg_ff) 
     747   ! ff_t 
     748   CALL mpp_add_var(tl_mpphgr, tg_ff_t) 
     749   CALL var_clean(tg_ff_t) 
     750   ! ff_f 
     751   CALL mpp_add_var(tl_mpphgr, tg_ff_f) 
     752   CALL var_clean(tg_ff_f) 
    667753 
    668754   ! angles 
    669    ! cost 
    670    CALL mpp_add_var(tl_mpphgr, tg_gcost) 
    671    CALL var_clean(tg_gcost) 
    672    ! cosu 
    673    CALL mpp_add_var(tl_mpphgr, tg_gcosu) 
    674    CALL var_clean(tg_gcosu) 
    675    ! cosv 
    676    CALL mpp_add_var(tl_mpphgr, tg_gcosv) 
    677    CALL var_clean(tg_gcosv) 
    678    ! cosf 
    679    CALL mpp_add_var(tl_mpphgr, tg_gcosf) 
    680    CALL var_clean(tg_gcosf) 
    681     
    682    ! sint 
    683    CALL mpp_add_var(tl_mpphgr, tg_gsint) 
    684    CALL var_clean(tg_gsint) 
    685    ! sinu 
    686    CALL mpp_add_var(tl_mpphgr, tg_gsinu) 
    687    CALL var_clean(tg_gsinu) 
    688    ! sinv 
    689    CALL mpp_add_var(tl_mpphgr, tg_gsinv) 
    690    CALL var_clean(tg_gsinv) 
    691    ! sinf 
    692    CALL mpp_add_var(tl_mpphgr, tg_gsinf) 
    693    CALL var_clean(tg_gsinf) 
     755   IF( .NOT. ll_domcfg )THEN 
     756      ! cost 
     757      CALL mpp_add_var(tl_mpphgr, tg_gcost) 
     758      CALL var_clean(tg_gcost) 
     759      ! cosu 
     760      CALL mpp_add_var(tl_mpphgr, tg_gcosu) 
     761      CALL var_clean(tg_gcosu) 
     762      ! cosv 
     763      CALL mpp_add_var(tl_mpphgr, tg_gcosv) 
     764      CALL var_clean(tg_gcosv) 
     765      ! cosf 
     766      CALL mpp_add_var(tl_mpphgr, tg_gcosf) 
     767      CALL var_clean(tg_gcosf) 
     768       
     769      ! sint 
     770      CALL mpp_add_var(tl_mpphgr, tg_gsint) 
     771      CALL var_clean(tg_gsint) 
     772      ! sinu 
     773      CALL mpp_add_var(tl_mpphgr, tg_gsinu) 
     774      CALL var_clean(tg_gsinu) 
     775      ! sinv 
     776      CALL mpp_add_var(tl_mpphgr, tg_gsinv) 
     777      CALL var_clean(tg_gsinv) 
     778      ! sinf 
     779      CALL mpp_add_var(tl_mpphgr, tg_gsinf) 
     780      CALL var_clean(tg_gsinf) 
     781   ENDIF 
    694782    
    695783   !!! vertical mesh (zgr) 
    696784   !!!---------------------- 
    697  
    698785   ! note that mbkt is set to 1 over land ==> use surface tmask 
    699786   !  
    700787   ! mbathy 
    701788   tg_mbathy%d_value(:,:,:,:) = tg_ssmask%d_value(:,:,:,:) * & 
    702       &                         tg_mbkt%d_value(:,:,:,:) 
     789   &                            tg_mbkt%d_value(:,:,:,:) 
    703790   ! 
     791   IF( ll_domcfg ) tg_mbathy%c_name='bottom_level' 
    704792   CALL mpp_add_var(tl_mppzgr, tg_mbathy) 
    705793   CALL var_clean(tg_mbathy) 
     
    709797   dl_tmp2D(:,:)=dp_fill 
    710798 
    711    tl_misf =var_init('misf    ',dl_tmp2D(:,:), id_type=NF90_INT) 
     799   tl_misf =var_init('misf     ',dl_tmp2D(:,:), id_type=NF90_INT) 
    712800 
    713801   DEALLOCATE(dl_tmp2D) 
    714802   tl_misf%d_value(:,:,1,1) = tg_ssmask%d_value(:,:,1,1) * & 
    715       &                       tg_mikt%d_value(:,:,1,1) 
     803   &                          tg_mikt%d_value(:,:,1,1) 
    716804   ! 
     805   IF( ll_domcfg ) tl_misf%c_name='top_level' 
    717806   CALL mpp_add_var(tl_mppzgr, tl_misf) 
    718807   CALL var_clean(tl_misf) 
    719808 
    720    ! isfdraft 
    721    tl_risfdep%d_value(:,:,:,:) = tl_risfdep%d_value(:,:,:,:) * & 
    722       &                          tg_mikt%d_value(:,:,:,:) 
    723    CALL mpp_add_var(tl_mppzgr, tl_risfdep) 
    724    CALL var_clean(tl_risfdep) 
     809   IF( .NOT. ll_domcfg )THEN 
     810      ! isfdraft 
     811      tl_risfdep%d_value(:,:,:,:) = tl_risfdep%d_value(:,:,:,:) * & 
     812      &                             tg_mikt%d_value(:,:,:,:) 
     813  
     814      CALL mpp_add_var(tl_mppzgr, tl_risfdep) 
     815      CALL var_clean(tl_risfdep) 
     816   ENDIF 
    725817 
    726818   IF( ln_sco ) THEN ! s-coordinate 
    727819 
    728       ! hbatt 
    729       CALL mpp_add_var(tl_mppzgr, tg_hbatt) 
    730       CALL var_clean(tg_hbatt) 
    731       ! hbatu 
    732       CALL mpp_add_var(tl_mppzgr, tg_hbatu) 
    733       CALL var_clean(tg_hbatu) 
    734       ! hbatv 
    735       CALL mpp_add_var(tl_mppzgr, tg_hbatv) 
    736       CALL var_clean(tg_hbatv) 
    737       ! hbatf 
    738       CALL mpp_add_var(tl_mppzgr, tg_hbatf) 
    739       CALL var_clean(tg_hbatf) 
    740  
    741       ! scaling coef. 
    742       IF( .NOT. (tl_namz%l_s_sh94 .OR. tl_namz%l_s_sf12) )THEN 
    743          ! gsigt 
    744          CALL mpp_add_var(tl_mppzgr, tg_gsigt) 
    745          CALL var_clean(tg_gsigt) 
    746          ! gsigw 
    747          CALL mpp_add_var(tl_mppzgr, tg_gsigw) 
    748          CALL var_clean(tg_gsigw) 
    749          ! gsi3w 
    750          CALL mpp_add_var(tl_mppzgr, tg_gsi3w) 
    751          CALL var_clean(tg_gsi3w) 
    752          ! esigt 
    753          CALL mpp_add_var(tl_mppzgr, tg_esigt) 
    754          CALL var_clean(tg_esigt) 
    755          ! esigw 
    756          CALL mpp_add_var(tl_mppzgr, tg_esigw) 
    757          CALL var_clean(tg_esigw) 
     820      IF( .NOT. ll_domcfg )THEN 
     821         ! hbatt 
     822         CALL mpp_add_var(tl_mppzgr, tg_hbatt) 
     823         CALL var_clean(tg_hbatt) 
     824         ! hbatu 
     825         CALL mpp_add_var(tl_mppzgr, tg_hbatu) 
     826         CALL var_clean(tg_hbatu) 
     827         ! hbatv 
     828         CALL mpp_add_var(tl_mppzgr, tg_hbatv) 
     829         CALL var_clean(tg_hbatv) 
     830         ! hbatf 
     831         CALL mpp_add_var(tl_mppzgr, tg_hbatf) 
     832         CALL var_clean(tg_hbatf) 
     833 
     834         ! scaling coef. 
     835         IF( .NOT. (tl_namz%l_s_sh94 .OR. tl_namz%l_s_sf12) )THEN 
     836            ! gsigt 
     837            CALL mpp_add_var(tl_mppzgr, tg_gsigt) 
     838            CALL var_clean(tg_gsigt) 
     839            ! gsigw 
     840            CALL mpp_add_var(tl_mppzgr, tg_gsigw) 
     841            CALL var_clean(tg_gsigw) 
     842            ! gsi3w 
     843            CALL mpp_add_var(tl_mppzgr, tg_gsi3w) 
     844            CALL var_clean(tg_gsi3w) 
     845            ! esigt 
     846            CALL mpp_add_var(tl_mppzgr, tg_esigt) 
     847            CALL var_clean(tg_esigt) 
     848            ! esigw 
     849            CALL mpp_add_var(tl_mppzgr, tg_esigw) 
     850            CALL var_clean(tg_esigw) 
     851         ENDIF 
    758852      ENDIF 
    759853 
     
    774868      ! Max. grid stiffness ratio 
    775869      ! rx1 
     870      IF( ll_domcfg ) tg_rx1%c_name='stiffness' 
    776871      CALL mpp_add_var(tl_mppzgr, tg_rx1) 
    777872      CALL var_clean(tg_rx1) 
     
    796891   IF( ln_zps ) THEN ! z-coordinate - partial steps 
    797892 
    798       IF( in_msh <= 6 ) THEN ! 3D vertical scale factors 
     893      IF( ll_domcfg .OR. in_msh <= 6 ) THEN ! 3D vertical scale factors 
    799894 
    800895         ! e3t_0 
     
    831926      ENDIF ! 3D vertical scale factors 
    832927 
    833       IF( in_msh <= 3 ) THEN ! 3D depth 
     928      IF( ll_domcfg .OR. in_msh <= 3 ) THEN ! 3D depth 
    834929          
    835930         ! gdept_0 
     
    837932       
    838933         ! gdepu, gdepv 
    839          ALLOCATE(dl_tmp3D(jpi,jpj,jpk)) 
    840          dl_tmp3D(:,:,:)=dp_fill 
    841  
    842          tl_gdepu=var_init('gdepu',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 
    843          tl_gdepv=var_init('gdepv',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 
    844  
    845          DEALLOCATE(dl_tmp3D) 
    846          DO jk = 1,jpk    
    847             DO jj = 1, jpj-1    
    848                DO ji = 1, jpi-1   ! vector opt. 
    849                   tl_gdepu%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji  ,jj  ,jk,1) , & 
    850                      &                                tg_gdept_0%d_value(ji+1,jj  ,jk,1) ) 
    851  
    852                   tl_gdepv%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji  ,jj  ,jk,1) , & 
    853                      &                                tg_gdept_0%d_value(ji  ,jj+1,jk,1) ) 
     934         IF( .NOT. ll_domcfg )THEN 
     935            ALLOCATE(dl_tmp3D(jpi,jpj,jpk)) 
     936            dl_tmp3D(:,:,:)=dp_fill 
     937 
     938            tl_gdepu=var_init('gdepu',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 
     939            tl_gdepv=var_init('gdepv',dl_tmp3D(:,:,:), id_type=NF90_FLOAT) 
     940 
     941            DEALLOCATE(dl_tmp3D) 
     942            DO jk = 1,jpk    
     943               DO jj = 1, jpj-1    
     944                  DO ji = 1, jpi-1   ! vector opt. 
     945                     tl_gdepu%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji  ,jj  ,jk,1) , & 
     946                        &                                tg_gdept_0%d_value(ji+1,jj  ,jk,1) ) 
     947 
     948                     tl_gdepv%d_value(ji,jj,jk,1) = MIN( tg_gdept_0%d_value(ji  ,jj  ,jk,1) , & 
     949                        &                                tg_gdept_0%d_value(ji  ,jj+1,jk,1) ) 
     950                  END DO    
    854951               END DO    
    855             END DO    
    856          END DO          
    857          CALL lbc_lnk( tl_gdepu%d_value(:,:,:,1), 'U', in_perio, 1._dp ) 
    858          CALL lbc_lnk( tl_gdepv%d_value(:,:,:,1), 'V', in_perio, 1._dp ) 
    859  
    860          ! gdepu 
    861          CALL mpp_add_var(tl_mppzgr, tl_gdepu) 
    862          CALL var_clean(tl_gdepu) 
    863          ! gdepv 
    864          CALL mpp_add_var(tl_mppzgr, tl_gdepv) 
    865          CALL var_clean(tl_gdepv) 
     952            END DO          
     953            CALL lbc_lnk( tl_gdepu%d_value(:,:,:,1), 'U', in_perio, 1._dp ) 
     954            CALL lbc_lnk( tl_gdepv%d_value(:,:,:,1), 'V', in_perio, 1._dp ) 
     955 
     956            ! gdepu 
     957            CALL mpp_add_var(tl_mppzgr, tl_gdepu) 
     958            CALL var_clean(tl_gdepu) 
     959            ! gdepv 
     960            CALL mpp_add_var(tl_mppzgr, tl_gdepv) 
     961            CALL var_clean(tl_gdepv) 
     962         ENDIF 
    866963 
    867964         ! clean 
     
    11331230   DEALLOCATE(tl_gatt) 
    11341231 
    1135    CALL grid_hgr_clean() 
    1136    CALL grid_zgr_clean() 
     1232   CALL grid_hgr_clean(ll_domcfg) 
     1233   CALL grid_zgr_clean(ln_sco) 
    11371234   IF( ln_zps    ) CALL grid_zgr_zps_clean() 
    11381235   IF( ln_sco    ) CALL grid_zgr_sco_clean() 
     1236   CALL var_clean_extra() 
    11391237 
    11401238   ! close log file 
     
    11981296   !> @author J.Paul 
    11991297   !> @date September, 2015 - rewrite from dom_msk 
     1298   !> @date October, 2016 
     1299   !> - do not use anymore special case for ORCA grid 
    12001300   !> 
    12011301   !> @param[in] td_nam 
     
    12041304   !> @param[in] jpk 
    12051305   !------------------------------------------------------------------- 
    1206    SUBROUTINE create__mask(td_nam,jpi,jpj,jpk)  
     1306   SUBROUTINE create__mask(td_nam,jpi,jpj,jpk,ld_domcfg)  
    12071307      IMPLICIT NONE 
    12081308      ! Argument       
    1209       TYPE(TNAMH), INTENT(IN   ) :: td_nam 
    1210       INTEGER(i4), INTENT(IN   ) :: jpi 
    1211       INTEGER(i4), INTENT(IN   ) :: jpj 
    1212       INTEGER(i4), INTENT(IN   ) :: jpk 
     1309      TYPE(TNAMH), INTENT(IN) :: td_nam 
     1310      INTEGER(i4), INTENT(IN) :: jpi 
     1311      INTEGER(i4), INTENT(IN) :: jpj 
     1312      INTEGER(i4), INTENT(IN) :: jpk 
     1313      LOGICAL    , INTENT(IN) :: ld_domcfg 
    12131314 
    12141315      ! local variable 
    1215       INTEGER(i4)  ::   ii0, ii1  ! local integers 
    1216       INTEGER(i4)  ::   ij0, ij1 
    1217       INTEGER(i4)  ::   isrow 
     1316!      INTEGER(i4)  ::   ii0, ii1  ! local integers 
     1317!      INTEGER(i4)  ::   ij0, ij1 
     1318!      INTEGER(i4)  ::   isrow 
    12181319 
    12191320!      INTEGER(i4), DIMENSION(:,:), ALLOCATABLE ::  imsk 
     
    12301331 
    12311332!      ALLOCATE( imsk(jpi,jpj) ) 
    1232       ALLOCATE( zwf(jpi,jpj) ) 
    12331333 
    12341334!      ALLOCATE( dl_tpol(jpi) ) 
     
    13041404!      ENDIF 
    13051405 
     1406      IF( .NOT. ld_domcfg )THEN 
    13061407      ! 2. Ocean/land mask at u-,  v-, and z-points (computed from tmask) 
    13071408      ! ------------------------------------------- 
     
    13661467      ! Lateral boundary conditions on velocity (modify fmask) 
    13671468      ! ---------------------------------------      
     1469      ALLOCATE( zwf(jpi,jpj) ) 
    13681470      DO jk = 1, jpk 
    13691471         zwf(:,:) = tg_fmask%d_value(:,:,jk,1)          
     
    13981500         END DO 
    13991501      END DO 
    1400  
    1401       IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 2 )THEN   ! ORCA_R2 configuration 
    1402          !                                                 ! Increased lateral friction near of some straits 
    1403          IF( td_nam%i_cla == 0 ) THEN 
    1404             ! Gibraltar strait  : partial slip (fmask=0.5) 
    1405             ij0 = 101   ;   ij1 = 101 
    1406             ii0 = 139   ;   ii1 = 140    
    1407             tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  0.5_dp 
    1408  
    1409             ij0 = 102   ;   ij1 = 102 
    1410             ii0 = 139   ;   ii1 = 140 
    1411             tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  0.5_dp 
    1412             ! 
    1413             !Bab el Mandeb : partial slip (fmask=1) 
    1414             ij0 =  87   ;   ij1 =  88 
    1415             ii0 = 160   ;   ii1 = 160 
    1416             tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  1._dp 
    1417  
    1418             ij0 =  88   ;   ij1 =  88 
    1419             ii0 = 159   ;   ii1 = 159 
    1420             tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  1._dp 
    1421             ! 
    1422          ENDIF 
    1423       ENDIF 
    1424       ! 
    1425       IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 1 )THEN   ! ORCA R1 configuration 
    1426          ! Increased lateral friction near of some straits 
    1427          ! This dirty section will be suppressed by simplification process: 
    1428          ! all this will come back in input files 
    1429          ! Currently these hard-wired indices relate to configuration with 
    1430          ! extend grid (jpjglo=332) 
    1431          ! 
    1432          isrow = 332 - jpj 
    1433          ! Gibraltar Strait 
    1434          ii0 = 282           ;   ii1 = 283  
    1435          ij0 = 201 + isrow   ;   ij1 = 241 - isrow 
    1436          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 2._dp   
    1437  
    1438          ! Bhosporus Strait 
    1439          ii0 = 314           ;   ii1 = 315 
    1440          ij0 = 208 + isrow   ;   ij1 = 248 - isrow  
    1441          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
    1442  
    1443          ! Makassar Strait (Top)  
    1444          ii0 =  48           ;   ii1 =  48 
    1445          ij0 = 149 + isrow   ;   ij1 = 190 - isrow 
    1446          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
    1447  
    1448          ! Lombok Strait 
    1449          ii0 =  44           ;   ii1 =  44 
    1450          ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
    1451          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
    1452  
    1453          ! Ombai Strait 
    1454          ii0 =  53           ;   ii1 =  53 
    1455          ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
    1456          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
    1457  
    1458          ! Timor Passage 
    1459          ii0 =  56           ;   ii1 =  56 
    1460          ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
    1461          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
    1462  
    1463          ! West Halmahera Strait 
    1464          ii0 =  58           ;   ii1 =  58 
    1465          ij0 = 141 + isrow   ;   ij1 = 182 - isrow 
    1466          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
    1467  
    1468          ! East Halmahera Strait 
    1469          ii0 =  55           ;   ii1 =  55 
    1470          ij0 = 141 + isrow   ;   ij1 = 182 - isrow 
    1471          tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
    1472          ! 
    1473       ENDIF 
     1502      DEALLOCATE( zwf ) 
     1503 
     1504!      IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 2 )THEN   ! ORCA_R2 configuration 
     1505!         !                                                 ! Increased lateral friction near of some straits 
     1506!         IF( td_nam%i_cla == 0 ) THEN 
     1507!            ! Gibraltar strait  : partial slip (fmask=0.5) 
     1508!            ij0 = 101   ;   ij1 = 101 
     1509!            ii0 = 139   ;   ii1 = 140    
     1510!            tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  0.5_dp 
     1511! 
     1512!            ij0 = 102   ;   ij1 = 102 
     1513!            ii0 = 139   ;   ii1 = 140 
     1514!            tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  0.5_dp 
     1515!            ! 
     1516!            !Bab el Mandeb : partial slip (fmask=1) 
     1517!            ij0 =  87   ;   ij1 =  88 
     1518!            ii0 = 160   ;   ii1 = 160 
     1519!            tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  1._dp 
     1520! 
     1521!            ij0 =  88   ;   ij1 =  88 
     1522!            ii0 = 159   ;   ii1 = 159 
     1523!            tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) =  1._dp 
     1524!            ! 
     1525!         ENDIF 
     1526!      ENDIF 
     1527!      ! 
     1528!      IF( td_nam%c_cfg == "orca" .AND. td_nam%i_cfg == 1 )THEN   ! ORCA R1 configuration 
     1529!         ! Increased lateral friction near of some straits 
     1530!         ! This dirty section will be suppressed by simplification process: 
     1531!         ! all this will come back in input files 
     1532!         ! Currently these hard-wired indices relate to configuration with 
     1533!         ! extend grid (jpjglo=332) 
     1534!         ! 
     1535!         isrow = 332 - jpj 
     1536!         ! Gibraltar Strait 
     1537!         ii0 = 282           ;   ii1 = 283  
     1538!         ij0 = 201 + isrow   ;   ij1 = 241 - isrow 
     1539!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1) = 2._dp   
     1540! 
     1541!         ! Bhosporus Strait 
     1542!         ii0 = 314           ;   ii1 = 315 
     1543!         ij0 = 208 + isrow   ;   ij1 = 248 - isrow  
     1544!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
     1545! 
     1546!         ! Makassar Strait (Top)  
     1547!         ii0 =  48           ;   ii1 =  48 
     1548!         ij0 = 149 + isrow   ;   ij1 = 190 - isrow 
     1549!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
     1550! 
     1551!         ! Lombok Strait 
     1552!         ii0 =  44           ;   ii1 =  44 
     1553!         ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
     1554!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
     1555! 
     1556!         ! Ombai Strait 
     1557!         ii0 =  53           ;   ii1 =  53 
     1558!         ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
     1559!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
     1560! 
     1561!         ! Timor Passage 
     1562!         ii0 =  56           ;   ii1 =  56 
     1563!         ij0 = 124 + isrow   ;   ij1 = 165 - isrow 
     1564!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 2._dp   
     1565! 
     1566!         ! West Halmahera Strait 
     1567!         ii0 =  58           ;   ii1 =  58 
     1568!         ij0 = 141 + isrow   ;   ij1 = 182 - isrow 
     1569!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
     1570! 
     1571!         ! East Halmahera Strait 
     1572!         ii0 =  55           ;   ii1 =  55 
     1573!         ij0 = 141 + isrow   ;   ij1 = 182 - isrow 
     1574!         tg_fmask%d_value(ii0:ii1,ij0:ij1,1:jpk,1 ) = 3._dp   
     1575!         ! 
     1576!      ENDIF 
    14741577      ! 
    14751578      CALL lbc_lnk( tg_fmask%d_value(:,:,:,1), 'F', td_nam%i_perio, 1._dp )      ! Lateral boundary conditions on fmask 
    14761579 
    14771580!      DEALLOCATE( imsk ) 
    1478       DEALLOCATE( zwf ) 
     1581      ENDIF ! ld_domcfg 
    14791582 
    14801583!      DEALLOCATE( dl_tpol ) 
Note: See TracChangeset for help on using the changeset viewer.