Changeset 13109


Ignore:
Timestamp:
2020-06-16T12:07:28+02:00 (7 weeks ago)
Author:
rblod
Message:

ticket #2129 : major corrections in domcfg

Location:
utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/namelist_ref

    r13056 r13109  
    2424&namdom        !   space and time domain (bathymetry, mesh, timestep) 
    2525!----------------------------------------------------------------------- 
     26   ln_read_cfg = .false.   !  Read from a domain_cfg file 
    2627   nn_bathy    =    1      !  compute analyticaly (=0) or read (=1) the bathymetry file 
    2728                           !  or compute (2) from external bathymetry 
    2829   nn_interp   =    1                          ! type of interpolation (nn_bathy =2) 
     30   cn_domcfg   = ' '       ! Name of the domain_cfg input file 
    2931   cn_topo     =  'bathymetry_ORCA12_V3.3.nc'  ! external topo file (nn_bathy =2) 
    3032   cn_bath     =  'Bathymetry'                 ! topo name in file  (nn_bathy =2) 
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/agrif_connect.F90

    r13104 r13109  
    2929      ALLOCATE(e3t_interp(jpi,jpj,jpk)) 
    3030      e3t_interp = -10. 
    31       Agrif_UseSpecialValue = .TRUE. 
     31      Agrif_UseSpecialValue = .FALSE. 
    3232      Agrif_SpecialValue = 0. 
    3333      CALL Agrif_Bc_variable(e3t_connect_id, procname = connect_e3t_connect) 
     
    9090      !!----------------------------------------------------------------------  
    9191      INTEGER :: ji, jj, jk  
    92       REAL(wp), DIMENSION(i1:i2,j1:j2) :: bathy_local    
     92      REAL(wp), DIMENSION(i1:i2,j1:j2) :: bathy_local, bathy_interp 
     93      REAL(wp) :: zdepth, zmax  
    9394      ! 
    9495      IF( before) THEN 
     
    114115            DO ji=i1,i2 
    115116               bathy_local (ji,jj) = SUM ( e3t_0(ji,jj, 1:mbkt(ji,jj) ) ) * ssmask(ji,jj) 
    116             END DO 
    117          END DO 
     117               bathy_interp (ji,jj) = ptab(ji,jj,jpk+1) 
     118 
     119        ! Connected bathymetry 
     120               bathy_local(ji,jj)=(1.-ztabramp(ji,jj))*bathy_local(ji,jj)+ztabramp(ji,jj)*bathy_interp(ji,jj) 
     121            END DO 
     122         END DO 
     123 
     124        ! Update mbkt and ssmask 
     125         zmax = gdepw_1d(jpk) + e3t_1d(jpk) 
     126         bathy_local(:,:) = MAX(MIN(zmax,bathy_local(:,:)),0._wp) 
     127         WHERE( bathy_local(i1:i2,j1:j2) == 0._wp); mbathy(i1:i2,j1:j2) = 0 
     128         ELSE WHERE                       ; mbathy(i1:i2,j1:j2) = jpkm1 
     129         END WHERE 
     130 
     131         DO jk=jpkm1,1,-1 
     132           zdepth = gdepw_1d(jk)+MIN(e3zps_min,e3t_1d(jk)*e3zps_rat) 
     133           WHERE( 0._wp < bathy_local(:,:) .AND. bathy_local(:,:) <= zdepth ) mbathy(i1:i2,j1:j2) = jk-1 
     134         ENDDO 
     135 
     136         WHERE (mbathy(i1:i2,j1:j2) == 0); ssmask(i1:i2,j1:j2) = 0 
     137         ELSE WHERE                      ; ssmask(i1:i2,j1:j2) = 1. 
     138         END WHERE 
     139          
     140         mbkt(i1:i2,j1:j2) = MAX( mbathy(i1:i2,j1:j2), 1 ) 
     141 
    118142         ! 
    119143         DO jk=1,jpk 
     
    125149                     e3t_0(ji,jj,jk) = ( 1. - ztabramp(ji,jj) )*e3t_0(ji,jj,jk) + ztabramp(ji,jj)*e3t_interp(ji,jj,jk) 
    126150                  ENDIF 
     151                  IF( jk > mbkt(ji,jj)) THEN 
     152                    e3t_0(ji,jj,jk) = e3t_1d(jk) 
     153                  ENDIF 
    127154             END DO 
    128155           END DO 
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/agrif_dom_update.F90

    r13056 r13109  
    2222      IF( Agrif_Root() ) return 
    2323 
    24       CALL agrif_update_variable(bottom_level_id,locupdate=(/npt_copy,0/),procname = update_bottom_level) 
     24      CALL agrif_update_variable(bottom_level_id,procname = update_bottom_level) 
    2525      ! 
    2626      Agrif_UseSpecialValueInUpdate = .TRUE. 
     
    4141      ! 
    4242      !!----------------------------------------------------------------------  
     43      REAL(WP),DIMENSION(jpi,jpj) :: zk 
    4344      ! 
    4445      IF( before) THEN 
     
    4950         WHERE ( mbkt(i1:i2,j1:j2) .EQ. 0 ) 
    5051            ssmask(i1:i2,j1:j2) = 0. 
     52            mbkt(i1:i2,j1:j2)   = 1 
    5153         ELSEWHERE 
    5254            ssmask(i1:i2,j1:j2) = 1. 
    53          END WHERE            
     55         END WHERE  
     56         zk(:,:) = REAL(mbkt(:,:),wp); CALL lbc_lnk('update_bottom',zk,'T',1.); mbkt(:,:) = MAX(NINT(zk(:,:)),1) 
     57         CALL lbc_lnk('update_bottom',ssmask,'T',1.)           
    5458      ENDIF 
    5559      ! 
     
    7175            DO jj=j1,j2 
    7276               DO ji=i1,i2 
    73                    IF( mbkt(ji,jj) .LE. jk ) THEN 
     77                   IF( mbkt(ji,jj) .GE. jk ) THEN 
    7478                      tabres(ji,jj,jk) = e3t_0(ji,jj,jk) 
    7579                   ELSE 
     
    8387            DO jj=j1,j2 
    8488               DO ji=i1,i2 
    85                    IF( mbkt(ji,jj) .LE.jk ) THEN 
     89                   IF( mbkt(ji,jj) .GE. jk ) THEN 
    8690                      e3t_0(ji,jj,jk) = MAX(tabres(ji,jj,jk),MIN(e3zps_min,e3t_1d(jk)*e3zps_rat)) 
    8791                   ELSE 
     
    9195            END DO 
    9296         END DO 
     97 
     98         CALL lbc_lnk('update_e3t',e3t_0,'T',1.) 
    9399         ! 
    94100      ENDIF 
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/domain.F90

    r13056 r13109  
    108108         &             ln_cfmeta, ln_iscpl 
    109109 
    110       NAMELIST/namdom/ nn_bathy, cn_topo, cn_bath, cn_lon, cn_lat, rn_scale, nn_interp, & 
     110      NAMELIST/namdom/ ln_read_cfg, nn_bathy, cn_domcfg, cn_topo, cn_bath, cn_lon, cn_lat, rn_scale, nn_interp, & 
    111111         &              rn_bathy , rn_e3zps_min, rn_e3zps_rat, nn_msh, rn_hmin,            & 
    112112         &             rn_atfp , rn_rdt   ,  ln_crs      , jphgr_msh ,                               & 
     
    405405      CALL iom_rstput( 0, 0, inum, 'top_level'    , REAL( mikt, wp )*ssmask , ktype = jp_i4 )   ! nb of ocean T-points (ISF) 
    406406      CALL iom_rstput( 0, 0, inum, 'isf_draft'    , risfdep , ktype = jp_r8 ) 
    407       CALL iom_rstput( 0, 0, inum, 'bathy_metry'  , bathy   , ktype = jp_r8 ) 
     407      DO jj = 1,jpj 
     408         DO ji = 1,jpi 
     409            z2d (ji,jj) = SUM ( e3t_0(ji,jj, 1:mbkt(ji,jj) ) ) * ssmask(ji,jj)  
     410         END DO 
     411      END DO 
     412      CALL iom_rstput( 0, 0, inum, 'bathy_metry'   , z2d , ktype = jp_r8 ) 
    408413      ! 
    409414      !                              !== closed sea ==! 
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/domzgr.F90

    r13056 r13109  
    204204                          CALL zgr_top_level    ! shallowest ocean level for T-, U-, V- points 
    205205                          k_top = mikt 
    206  
     206                          WHERE( bathy(:,:) <= 0._wp )  k_top(:,:) = 0  ! set k_top to zero over land 
    207207      ENDIF 
    208208      ! 
  • utils/tools_dev_r12970_AGRIF_CMEMS/DOMAINcfg/src/mppini.F90

    r13056 r13109  
    278278#if defined key_agrif 
    279279      IF( .NOT. Agrif_Root() ) THEN       ! AGRIF children: specific setting (cf. agrif_user.F90) 
    280          IF( jpiglo /= nbcellsx + 2 + 2*nbghostcells ) THEN 
     280         CALL agrif_nemo_init 
     281         IF( jpiglo /= nbcellsx + 2 + 2*nbghostcells_x ) THEN 
    281282            IF(lwp) THEN 
    282283               WRITE(numout,*) 
    283                WRITE(numout,*) 'jpiglo should be: ', nbcellsx + 2 + 2*nbghostcells 
     284               WRITE(numout,*) 'jpiglo should be: ', nbcellsx + 2 + 2*nbghostcells_x 
    284285            ENDIF         
    285286            CALL ctl_stop( 'STOP', 'mpp_init: Agrif children requires jpiglo == nbcellsx + 2 + 2*nbghostcells' ) 
    286287         ENDIF    
    287          IF( jpjglo /= nbcellsy + 2 + 2*nbghostcells ) THEN 
     288         IF( jpjglo /= nbcellsy + 2 + nbghostcells_y_s + nbghostcells_y_n ) THEN 
    288289            IF(lwp) THEN 
    289290               WRITE(numout,*) 
    290                WRITE(numout,*) 'jpjglo shoud be: ', nbcellsy + 2 + 2*nbghostcells 
     291               WRITE(numout,*) 'jpjglo shoud be: ', nbcellsy + 2 + nbghostcells_y_s + nbghostcells_y_n 
    291292            ENDIF         
    292             CALL ctl_stop( 'STOP', 'mpp_init: Agrif children requires jpjglo == nbcellsy + 2 + 2*nbghostcells' ) 
     293            CALL ctl_stop( 'STOP', & 
     294               'mpp_init: Agrif children requires jpjglo == nbcellsy + 2 + nbghostcells_y_s + nbghostcells_y_n' ) 
    293295         ENDIF    
    294296         IF( ln_use_jattr )   CALL ctl_stop( 'STOP', 'mpp_init:Agrif children requires ln_use_jattr = .false. ' ) 
Note: See TracChangeset for help on using the changeset viewer.