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 9209 for branches/2017 – NEMO

Changeset 9209 for branches/2017


Ignore:
Timestamp:
2018-01-10T17:34:05+01:00 (6 years ago)
Author:
davestorkey
Message:

Alternative bug fixes for closea bugs if ln_read_cfg=.false.
See https://forge.ipsl.jussieu.fr/nemo/ticket/2000#comment:3
Also correct typo in zdfdrg.F90

Location:
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DOM/closea.F90

    r9169 r9209  
    101101      IF(lwp) WRITE(numout,*)'~~~~~~~' 
    102102      ! 
    103       ! read the closed seas masks (if they exist) from domain_cfg file 
    104       ! --------------------------------------------------------------- 
    105       ! 
    106       CALL iom_open( cn_domcfg, inum ) 
    107  
    108       id = iom_varid(inum, 'closea_mask', ldstop = .false.) 
    109       IF( id > 0 ) THEN  
    110          l_sbc_clo = .true. 
    111          ALLOCATE( closea_mask(jpi,jpj) , STAT=ierr ) 
    112          IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask array') 
    113          zdata_in(:,:) = 0.0 
    114          CALL iom_get ( inum, jpdom_data, 'closea_mask', zdata_in ) 
    115          closea_mask(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
    116          ! number of closed seas = global maximum value in closea_mask field 
    117          jncs = maxval(closea_mask(:,:)) 
    118          IF( lk_mpp ) CALL mpp_max(jncs) 
    119          IF( jncs > 0 ) THEN 
    120             IF( lwp ) WRITE(numout,*) 'Number of closed seas : ',jncs 
    121          ELSE 
    122             CALL ctl_stop( 'Problem with closea_mask field in domain_cfg file. Has no values > 0 so no closed seas defined.') 
    123          ENDIF 
    124       ELSE  
    125          IF( lwp ) WRITE(numout,*) 
    126          IF( lwp ) WRITE(numout,*) '   ==>>>   closea_mask field not found in domain_cfg file.' 
    127          IF( lwp ) WRITE(numout,*) '           No closed seas defined.' 
    128          IF( lwp ) WRITE(numout,*) 
    129          l_sbc_clo = .false. 
    130          jncs = 0  
    131       ENDIF 
    132  
    133       l_clo_rnf = .false. 
    134  
    135       IF( l_sbc_clo ) THEN ! No point reading in closea_mask_rnf or closea_mask_empmr fields if no closed seas defined. 
    136  
    137          id = iom_varid(inum, 'closea_mask_rnf', ldstop = .false.) 
     103      ! read the closed seas masks (if they exist) from domain_cfg file (if it exists) 
     104      ! ------------------------------------------------------------------------------ 
     105      ! 
     106      IF( ln_read_cfg) THEN 
     107         ! 
     108         CALL iom_open( cn_domcfg, inum ) 
     109         ! 
     110         id = iom_varid(inum, 'closea_mask', ldstop = .false.) 
    138111         IF( id > 0 ) THEN  
    139             l_clo_rnf = .true.             
    140             ALLOCATE( closea_mask_rnf(jpi,jpj) , STAT=ierr ) 
    141             IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask_rnf array') 
    142             CALL iom_get ( inum, jpdom_data, 'closea_mask_rnf', zdata_in ) 
    143             closea_mask_rnf(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
    144             ! number of closed seas rnf mappings = global maximum in closea_mask_rnf field 
    145             jncsr = maxval(closea_mask_rnf(:,:)) 
    146             IF( lk_mpp ) CALL mpp_max(jncsr) 
    147             IF( jncsr > 0 ) THEN 
    148                IF( lwp ) WRITE(numout,*) 'Number of closed seas rnf mappings : ',jncsr 
     112            l_sbc_clo = .true. 
     113            ALLOCATE( closea_mask(jpi,jpj) , STAT=ierr ) 
     114            IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask array') 
     115            zdata_in(:,:) = 0.0 
     116            CALL iom_get ( inum, jpdom_data, 'closea_mask', zdata_in ) 
     117            closea_mask(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
     118            ! number of closed seas = global maximum value in closea_mask field 
     119            jncs = maxval(closea_mask(:,:)) 
     120            IF( lk_mpp ) CALL mpp_max(jncs) 
     121            IF( jncs > 0 ) THEN 
     122               IF( lwp ) WRITE(numout,*) 'Number of closed seas : ',jncs 
    149123            ELSE 
    150                CALL ctl_stop( 'Problem with closea_mask_rnf field in domain_cfg file. Has no values > 0 so no closed seas rnf mappings defined.') 
     124               CALL ctl_stop( 'Problem with closea_mask field in domain_cfg file. Has no values > 0 so no closed seas defined.') 
    151125            ENDIF 
    152126         ELSE  
    153             IF( lwp ) WRITE(numout,*) 'closea_mask_rnf field not found in domain_cfg file. No closed seas rnf mappings defined.' 
    154             jncsr = 0 
    155          ENDIF 
     127            IF( lwp ) WRITE(numout,*) 
     128            IF( lwp ) WRITE(numout,*) '   ==>>>   closea_mask field not found in domain_cfg file.' 
     129            IF( lwp ) WRITE(numout,*) '           No closed seas defined.' 
     130            IF( lwp ) WRITE(numout,*) 
     131            l_sbc_clo = .false. 
     132            jncs = 0  
     133         ENDIF 
     134 
     135         l_clo_rnf = .false. 
     136 
     137         IF( l_sbc_clo ) THEN ! No point reading in closea_mask_rnf or closea_mask_empmr fields if no closed seas defined. 
     138 
     139            id = iom_varid(inum, 'closea_mask_rnf', ldstop = .false.) 
     140            IF( id > 0 ) THEN  
     141               l_clo_rnf = .true.             
     142               ALLOCATE( closea_mask_rnf(jpi,jpj) , STAT=ierr ) 
     143               IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask_rnf array') 
     144               CALL iom_get ( inum, jpdom_data, 'closea_mask_rnf', zdata_in ) 
     145               closea_mask_rnf(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
     146               ! number of closed seas rnf mappings = global maximum in closea_mask_rnf field 
     147               jncsr = maxval(closea_mask_rnf(:,:)) 
     148               IF( lk_mpp ) CALL mpp_max(jncsr) 
     149               IF( jncsr > 0 ) THEN 
     150                  IF( lwp ) WRITE(numout,*) 'Number of closed seas rnf mappings : ',jncsr 
     151               ELSE 
     152                  CALL ctl_stop( 'Problem with closea_mask_rnf field in domain_cfg file. Has no values > 0 so no closed seas rnf mappings defined.') 
     153               ENDIF 
     154            ELSE  
     155               IF( lwp ) WRITE(numout,*) 'closea_mask_rnf field not found in domain_cfg file. No closed seas rnf mappings defined.' 
     156               jncsr = 0 
     157            ENDIF 
    156158  
    157          id = iom_varid(inum, 'closea_mask_empmr', ldstop = .false.) 
    158          IF( id > 0 ) THEN  
    159             l_clo_rnf = .true.             
    160             ALLOCATE( closea_mask_empmr(jpi,jpj) , STAT=ierr ) 
    161             IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask_empmr array') 
    162             CALL iom_get ( inum, jpdom_data, 'closea_mask_empmr', zdata_in ) 
    163             closea_mask_empmr(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
    164             ! number of closed seas empmr mappings = global maximum value in closea_mask_empmr field 
    165             jncse = maxval(closea_mask_empmr(:,:)) 
    166             IF( lk_mpp ) CALL mpp_max(jncse) 
    167             IF( jncse > 0 ) THEN  
    168                IF( lwp ) WRITE(numout,*) 'Number of closed seas empmr mappings : ',jncse 
    169             ELSE 
    170                CALL ctl_stop( 'Problem with closea_mask_empmr field in domain_cfg file. Has no values > 0 so no closed seas empmr mappings defined.') 
     159            id = iom_varid(inum, 'closea_mask_empmr', ldstop = .false.) 
     160            IF( id > 0 ) THEN  
     161               l_clo_rnf = .true.             
     162               ALLOCATE( closea_mask_empmr(jpi,jpj) , STAT=ierr ) 
     163               IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'dom_clo: failed to allocate closea_mask_empmr array') 
     164               CALL iom_get ( inum, jpdom_data, 'closea_mask_empmr', zdata_in ) 
     165               closea_mask_empmr(:,:) = NINT(zdata_in(:,:)) * tmask(:,:,1) 
     166               ! number of closed seas empmr mappings = global maximum value in closea_mask_empmr field 
     167               jncse = maxval(closea_mask_empmr(:,:)) 
     168               IF( lk_mpp ) CALL mpp_max(jncse) 
     169               IF( jncse > 0 ) THEN  
     170                  IF( lwp ) WRITE(numout,*) 'Number of closed seas empmr mappings : ',jncse 
     171               ELSE 
     172                  CALL ctl_stop( 'Problem with closea_mask_empmr field in domain_cfg file. Has no values > 0 so no closed seas empmr mappings defined.') 
     173               ENDIF 
     174            ELSE  
     175               IF( lwp ) WRITE(numout,*) 'closea_mask_empmr field not found in domain_cfg file. No closed seas empmr mappings defined.' 
     176               jncse = 0 
    171177            ENDIF 
    172          ELSE  
    173             IF( lwp ) WRITE(numout,*) 'closea_mask_empmr field not found in domain_cfg file. No closed seas empmr mappings defined.' 
    174             jncse = 0 
    175          ENDIF 
    176  
    177       ENDIF ! l_sbc_clo 
    178       ! 
    179       CALL iom_close( inum ) 
     178 
     179         ENDIF ! l_sbc_clo 
     180         ! 
     181         CALL iom_close( inum ) 
     182         ! 
     183      ELSE ! ln_read_cfg = .false. so no domain_cfg file 
     184         IF( lwp ) WRITE(numout,*) 'No domain_cfg file so no closed seas defined.' 
     185         l_sbc_clo = .false. 
     186         l_clo_rnf = .false. 
     187      ENDIF 
    180188      ! 
    181189   END SUBROUTINE dom_clo 
     
    447455      ENDIF 
    448456      ! 
    449       CALL iom_open( cn_domcfg, inum ) 
    450       ! 
    451       id = iom_varid(inum, 'closea_mask', ldstop = .false.)       
    452       IF( id > 0 ) THEN 
    453          IF( lwp ) WRITE(numout,*) 'Suppressing closed seas in bathymetry based on closea_mask field,' 
    454          CALL iom_get ( inum, jpdom_data, 'closea_mask', zdata_in ) 
    455          closea_mask(:,:) = NINT(zdata_in(:,:)) 
    456          WHERE( closea_mask(:,:) > 0 ) 
    457             k_top(:,:) = 0    
    458             k_bot(:,:) = 0    
    459          ENDWHERE 
     457      IF( ln_read_cfg ) THEN 
     458         ! 
     459         CALL iom_open( cn_domcfg, inum ) 
     460         ! 
     461         id = iom_varid(inum, 'closea_mask', ldstop = .false.)       
     462         IF( id > 0 ) THEN 
     463            IF( lwp ) WRITE(numout,*) 'Suppressing closed seas in bathymetry based on closea_mask field,' 
     464            CALL iom_get ( inum, jpdom_data, 'closea_mask', zdata_in ) 
     465            closea_mask(:,:) = NINT(zdata_in(:,:)) 
     466            WHERE( closea_mask(:,:) > 0 ) 
     467               k_top(:,:) = 0    
     468               k_bot(:,:) = 0    
     469            ENDWHERE 
     470         ELSE 
     471            IF( lwp ) WRITE(numout,*) 'No closea_mask field found in domain_cfg file. No suppression of closed seas.' 
     472         ENDIF 
     473         ! 
     474         CALL iom_close(inum) 
     475         ! 
    460476      ELSE 
    461          IF( lwp ) WRITE(numout,*) 'No closea_mask field found in domain_cfg file. No suppression of closed seas.' 
     477         IF( lwp ) WRITE(numout,*) 'No domain_cfg file => no suppression of closed seas.' 
    462478      ENDIF 
    463479      ! 
     
    466482      l_clo_rnf = .false. 
    467483      ! 
    468       CALL iom_close(inum) 
    469       ! 
    470484   END SUBROUTINE clo_bat 
    471485 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r9201 r9209  
    120120      CALL dom_zgr( ik_top, ik_bot )   ! Vertical mesh and bathymetry 
    121121      CALL dom_msk( ik_top, ik_bot )   ! Masks 
    122       IF( ln_closea .AND. ln_read_cfg )   CALL dom_clo   ! ln_closea=T : closed seas included in the simulation 
     122      IF( ln_closea )   CALL dom_clo   ! ln_closea=T : closed seas included in the simulation 
    123123                                       ! Read in masks to define closed seas and lakes  
    124124      ! 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r9198 r9209  
    9696            &              k_top   , k_bot            )                  ! 1st & last ocean level 
    9797            ! 
    98          ! Any closed seas (defined by closea_mask > 0 in domain_cfg file) to be filled  
    99          ! in at runtime if ln_closea=.false. 
    100          IF( .NOT.ln_closea )   CALL clo_bat( k_top, k_bot ) 
    101          ! 
    10298      ELSE                          !==  User defined configuration  ==! 
    10399         IF(lwp) WRITE(numout,*) 
     
    119115         gde3w_0(:,:,jk) = gde3w_0(:,:,jk-1) + e3w_0(:,:,jk) 
    120116      END DO 
     117      ! 
     118      ! Any closed seas (defined by closea_mask > 0 in domain_cfg file) to be filled  
     119      ! in at runtime if ln_closea=.false. 
     120      IF( .NOT.ln_closea )   CALL clo_bat( k_top, k_bot ) 
    121121      ! 
    122122      IF(lwp) THEN                     ! Control print 
  • branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfdrg.F90

    r9190 r9209  
    249249         cl_namcfg  = 'namdrg_bot  in configuration namelist' 
    250250         cl_file    = 'bfr_coef.nc' 
    251          cl_varname = 'tfr_coef' 
     251         cl_varname = 'bfr_coef' 
    252252      CASE DEFAULT 
    253253         CALL ctl_stop( 'drg_init: bad value for cd_topbot ' ) 
Note: See TracChangeset for help on using the changeset viewer.