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 389 for trunk/NEMO/OPA_SRC/DOM/domzgr.F90 – NEMO

Ignore:
Timestamp:
2006-03-09T18:22:04+01:00 (18 years ago)
Author:
opalod
Message:

RB:nemo_v1_update_038: first integration of Agrif :

  • configuration parameters are just integer when agrif is used
  • add call to agrif routines with key_agrif
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DOM/domzgr.F90

    r381 r389  
    289289 
    290290      !! * Local declarations 
    291       CHARACTER (len=15) ::   clname    ! temporary characters 
     291      CHARACTER (len=18) ::   clname    ! temporary characters 
    292292      LOGICAL ::   llbon                ! check the existence of bathy files 
    293293      INTEGER ::   ji, jj, jl, jk       ! dummy loop indices 
     
    380380         !  EEL R5 configuration with east and west open boundaries. 
    381381         !  Two rows of zeroes are needed at the south and north for OBCs 
    382          !  This is for compatibility with the rigid lid option.  
    383382           
    384383         IF( cp_cfg == "eel" .AND. jp_cfg == 5 ) THEN 
     
    390389      ELSEIF( ntopo == 1 ) THEN                       !   read in file  ! 
    391390         !                                            ! =============== ! 
    392          IF( lk_zco ) THEN 
    393             clname = 'bathy_level.nc'                       ! Level bathymetry 
    394             INQUIRE( FILE=clname, EXIST=llbon ) 
    395             IF( llbon ) THEN 
    396                IF(lwp) WRITE(numout,*) 
    397                IF(lwp) WRITE(numout,*) '         read level bathymetry in ', clname 
    398                IF(lwp) WRITE(numout,*) 
    399                itime = 1 
    400                ipi = jpidta 
    401                ipj = jpjdta 
    402                ipk = 1 
    403                zdt = rdt 
    404                CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE.,   & 
    405                               ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 
    406                CALL flinget( inum, 'Bathy_level', jpidta, jpjdta, 1,   & 
    407                              itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 
    408                idta(:,:) = zdta(:,:) 
    409                CALL flinclo( inum ) 
    410  
    411             ELSE 
    412                IF(lwp) WRITE(numout,cform_err) 
    413                IF(lwp) WRITE(numout,*)'    zgr_bat : unable to read the file', clname 
    414                nstop = nstop + 1 
    415             ENDIF    
    416    
    417          ELSEIF( lk_zps ) THEN 
    418             clname = 'bathy_meter.nc'                       ! meter bathymetry 
    419             INQUIRE( FILE=clname, EXIST=llbon ) 
    420             IF( llbon ) THEN 
    421                IF(lwp) WRITE(numout,*) 
    422                IF(lwp) WRITE(numout,*) '         read meter bathymetry in ', clname 
    423                IF(lwp) WRITE(numout,*) 
    424                itime = 1 
    425                ipi = jpidta 
    426                ipj = jpjdta 
    427                ipk = 1 
    428                zdt = rdt 
    429                CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE.,   &     
    430                               ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 
    431                CALL flinget( inum, 'Bathymetry', jpidta, jpjdta, 1,   & 
    432                              itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) )  
    433                CALL flinclo( inum ) 
    434             ELSE 
     391 
     392         clname = 'bathy_level.nc'                       ! Level bathymetry 
     393#if defined key_AGRIF 
     394      if ( .NOT. Agrif_Root() ) then 
     395         clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 
     396      endif 
     397#endif          
     398         INQUIRE( FILE=clname, EXIST=llbon ) 
     399         IF( llbon ) THEN 
     400            IF(lwp) WRITE(numout,*) 
     401            IF(lwp) WRITE(numout,*) '         read level bathymetry in ', clname 
     402            IF(lwp) WRITE(numout,*) 
     403            itime = 1 
     404            ipi = jpidta 
     405            ipj = jpjdta 
     406            ipk = 1 
     407            zdt = rdt 
     408            CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE.,   & 
     409                           ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 
     410            CALL flinget( inum, 'Bathy_level', jpidta, jpjdta, 1,   & 
     411                          itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 
     412            idta(:,:) = zdta(:,:) 
     413            CALL flinclo( inum ) 
     414 
     415         ELSE 
     416            IF(lwp) WRITE(numout,cform_err) 
     417            IF(lwp) WRITE(numout,*)'    zgr_bat : unable to read the file', clname 
     418            nstop = nstop + 1 
     419         ENDIF      
     420 
     421         clname = 'bathy_meter.nc'                       ! meter bathymetry 
     422#if defined key_AGRIF 
     423      if ( .NOT. Agrif_Root() ) then 
     424         clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 
     425      endif 
     426#endif        
     427         INQUIRE( FILE=clname, EXIST=llbon ) 
     428         IF( llbon ) THEN 
     429            IF(lwp) WRITE(numout,*) 
     430            IF(lwp) WRITE(numout,*) '         read meter bathymetry in ', clname 
     431            IF(lwp) WRITE(numout,*) 
     432            itime = 1 
     433            ipi = jpidta 
     434            ipj = jpjdta 
     435            ipk = 1 
     436            zdt = rdt 
     437            CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE.,   &     
     438                           ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 
     439            CALL flinget( inum, 'Bathymetry', jpidta, jpjdta, 1,   & 
     440                          itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) )  
     441            CALL flinclo( inum ) 
     442         ELSE 
     443            IF( lk_zps .OR. lk_sco ) THEN 
    435444               IF(lwp) WRITE(numout,cform_err)        
    436445               IF(lwp) WRITE(numout,*)'    zgr_bat : unable to read the file', clname 
    437446               nstop = nstop + 1 
     447            ELSE 
     448               zdta(:,:) = 0.e0 
     449               IF(lwp) WRITE(numout,*)'    zgr_bat : bathy_meter not found, but not used, bathy array set to zero' 
    438450            ENDIF 
    439451         ENDIF 
     
    593605      IF( .NOT. lk_cfg_1d )   THEN 
    594606 
    595          ! Suppress isolated ocean grid points 
    596  
     607      ! Suppress isolated ocean grid points 
     608 
     609      IF(lwp) WRITE(numout,*) 
     610      IF(lwp) WRITE(numout,*)'                   suppress isolated ocean grid points' 
     611      IF(lwp) WRITE(numout,*)'                   -----------------------------------' 
     612 
     613      icompt = 0 
     614       
     615      DO jl = 1, 2 
     616 
     617         IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
     618            mbathy( 1 ,:) = mbathy(jpim1,:) 
     619            mbathy(jpi,:) = mbathy(  2  ,:) 
     620         ENDIF 
     621         DO jj = 2, jpjm1 
     622            DO ji = 2, jpim1 
     623               ibtest = MAX( mbathy(ji-1,jj), mbathy(ji+1,jj),   & 
     624                  mbathy(ji,jj-1),mbathy(ji,jj+1) ) 
     625               IF( ibtest < mbathy(ji,jj) ) THEN 
     626                  IF(lwp) WRITE(numout,*) ' the number of ocean level at ',   & 
     627                     'grid-point (i,j) =  ',ji,jj,' is changed from ',   & 
     628                     mbathy(ji,jj),' to ', ibtest 
     629                  mbathy(ji,jj) = ibtest 
     630                  icompt = icompt + 1 
     631               ENDIF 
     632            END DO 
     633         END DO 
     634 
     635      END DO 
     636      IF( icompt == 0 ) THEN 
     637         IF(lwp) WRITE(numout,*)'     no isolated ocean grid points' 
     638      ELSE 
     639         IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points suppressed' 
     640      ENDIF 
     641      IF( lk_mpp ) THEN 
     642         zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     643         CALL lbc_lnk( zbathy, 'T', 1. ) 
     644         mbathy(:,:) = INT( zbathy(:,:) ) 
     645      ENDIF 
     646 
     647      ! 3.2 East-west cyclic boundary conditions 
     648 
     649      IF( nperio == 0 ) THEN 
     650         IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west',   & 
     651            ' boundary: nperio = ', nperio 
     652         IF( lk_mpp ) THEN 
     653            IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
     654               IF( jperio /= 1 )   mbathy(1,:) = 0 
     655            ENDIF 
     656            IF( nbondi == 1 .OR. nbondi == 2 ) THEN 
     657               IF( jperio /= 1 )   mbathy(nlci,:) = 0 
     658            ENDIF 
     659         ELSE 
     660            mbathy( 1 ,:) = 0 
     661            mbathy(jpi,:) = 0 
     662         ENDIF 
     663      ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio ==  6 ) THEN 
     664         IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions',   & 
     665            ' on mbathy: nperio = ', nperio 
     666         mbathy( 1 ,:) = mbathy(jpim1,:) 
     667         mbathy(jpi,:) = mbathy(  2  ,:) 
     668      ELSEIF( nperio == 2 ) THEN 
     669         IF(lwp) WRITE(numout,*) '   equatorial boundary conditions',   & 
     670            ' on mbathy: nperio = ', nperio 
     671      ELSE 
     672         IF(lwp) WRITE(numout,*) '    e r r o r' 
     673         IF(lwp) WRITE(numout,*) '    parameter , nperio = ', nperio 
     674         !         STOP 'dom_mba' 
     675      ENDIF 
     676 
     677      ! Set to zero mbathy over islands if necessary  (lk_isl=F) 
     678      IF( .NOT. lk_isl ) THEN    ! No island 
    597679         IF(lwp) WRITE(numout,*) 
    598          IF(lwp) WRITE(numout,*)'                   suppress isolated ocean grid points' 
    599          IF(lwp) WRITE(numout,*)'                   -----------------------------------' 
    600  
    601          icompt = 0 
    602  
    603          DO jl = 1, 2 
    604  
    605             IF( nperio == 1 .OR. nperio  ==  4 .OR. nperio  ==  6 ) THEN 
    606                mbathy( 1 ,:) = mbathy(jpim1,:) 
    607                mbathy(jpi,:) = mbathy(  2  ,:) 
    608             ENDIF 
    609             DO jj = 2, jpjm1 
    610                DO ji = 2, jpim1 
    611                   ibtest = MAX( mbathy(ji-1,jj), mbathy(ji+1,jj),   & 
    612                      mbathy(ji,jj-1),mbathy(ji,jj+1) ) 
    613                   IF( ibtest < mbathy(ji,jj) ) THEN 
    614                      IF(lwp) WRITE(numout,*) ' the number of ocean level at ',   & 
    615                         'grid-point (i,j) =  ',ji,jj,' is changed from ',   & 
    616                         mbathy(ji,jj),' to ', ibtest 
    617                      mbathy(ji,jj) = ibtest 
    618                      icompt = icompt + 1 
    619                   ENDIF 
    620                END DO 
    621             END DO 
    622  
    623          END DO 
    624          IF( icompt == 0 ) THEN 
    625             IF(lwp) WRITE(numout,*)'     no isolated ocean grid points' 
    626          ELSE 
    627             IF(lwp) WRITE(numout,*)'    ',icompt,' ocean grid points suppressed' 
    628          ENDIF 
    629          IF( lk_mpp ) THEN 
    630             zbathy(:,:) = FLOAT( mbathy(:,:) ) 
     680         IF(lwp) WRITE(numout,*) '         mbathy set to 0 over islands' 
     681         IF(lwp) WRITE(numout,*) '         ----------------------------' 
     682 
     683         mbathy(:,:) = MAX( 0, mbathy(:,:) ) 
     684 
     685         !  Boundary condition on mbathy 
     686         IF( .NOT.lk_mpp ) THEN  
     687             
     688       !!bug ???  y reflechir! 
     689            !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
     690             
     691       zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    631692            CALL lbc_lnk( zbathy, 'T', 1. ) 
    632693            mbathy(:,:) = INT( zbathy(:,:) ) 
    633694         ENDIF 
    634695 
    635          ! 3.2 East-west cyclic boundary conditions 
    636  
    637          IF( nperio == 0 ) THEN 
    638             IF(lwp) WRITE(numout,*) ' mbathy set to 0 along east and west',   & 
    639                ' boundary: nperio = ', nperio 
    640             IF( lk_mpp ) THEN 
    641                IF( nbondi == -1 .OR. nbondi == 2 ) THEN 
    642                   IF( jperio /= 1 )   mbathy(1,:) = 0 
    643                ENDIF 
    644                IF( nbondi == 1 .OR. nbondi == 2 ) THEN 
    645                   IF( jperio /= 1 )   mbathy(nlci,:) = 0 
    646                ENDIF 
    647             ELSE 
    648                mbathy( 1 ,:) = 0 
    649                mbathy(jpi,:) = 0 
    650             ENDIF 
    651          ELSEIF( nperio == 1 .OR. nperio == 4 .OR. nperio ==  6 ) THEN 
    652             IF(lwp) WRITE(numout,*)' east-west cyclic boundary conditions',   & 
    653                ' on mbathy: nperio = ', nperio 
    654             mbathy( 1 ,:) = mbathy(jpim1,:) 
    655             mbathy(jpi,:) = mbathy(  2  ,:) 
    656          ELSEIF( nperio == 2 ) THEN 
    657             IF(lwp) WRITE(numout,*) '   equatorial boundary conditions',   & 
    658                ' on mbathy: nperio = ', nperio 
    659          ELSE 
    660             IF(lwp) WRITE(numout,*) '    e r r o r' 
    661             IF(lwp) WRITE(numout,*) '    parameter , nperio = ', nperio 
    662             !         STOP 'dom_mba' 
    663          ENDIF 
    664  
    665          ! Set to zero mbathy over islands if necessary  (lk_isl=F) 
    666          IF( .NOT. lk_isl ) THEN    ! No island 
    667             IF(lwp) WRITE(numout,*) 
    668             IF(lwp) WRITE(numout,*) '         mbathy set to 0 over islands' 
    669             IF(lwp) WRITE(numout,*) '         ----------------------------' 
    670  
    671             mbathy(:,:) = MAX( 0, mbathy(:,:) ) 
    672  
    673             !  Boundary condition on mbathy 
    674             IF( .NOT.lk_mpp ) THEN  
    675                !!bug ???  y reflechir! 
    676                !   ... mono- or macro-tasking: T-point, >0, 2D array, no slab 
    677                zbathy(:,:) = FLOAT( mbathy(:,:) ) 
    678                CALL lbc_lnk( zbathy, 'T', 1. ) 
    679                mbathy(:,:) = INT( zbathy(:,:) ) 
    680             ENDIF 
    681  
    682          ENDIF 
     696      ENDIF 
    683697 
    684698      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.