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 14952 for utils/tools/DOMAINcfg/src/domzgr.F90 – NEMO

Ignore:
Timestamp:
2021-06-04T17:42:50+02:00 (3 years ago)
Author:
jchanut
Message:

#2638, closed domains AGRIF new convention + various add ons

File:
1 edited

Legend:

Unmodified
Added
Removed
  • utils/tools/DOMAINcfg/src/domzgr.F90

    r14630 r14952  
    560560      REAL(wp) ::   r_bump , h_bump , h_oce   ! bump characteristics  
    561561      REAL(wp) ::   zi, zj, zh, zhmin         ! local scalars 
    562       INTEGER , ALLOCATABLE, DIMENSION(:,:) ::   idta   ! global domain integer data 
    563       REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zdta   ! global domain scalar data 
    564562      REAL(wp), ALLOCATABLE, DIMENSION(:,:) ::   zrand  
    565563      !!---------------------------------------------------------------------- 
     
    571569      IF( ntopo == 0 .OR. ntopo == -1 ) THEN          !   defined by hand  ! 
    572570         !                                            ! ================== ! 
    573          !                                            ! global domain level and meter bathymetry (idta,zdta) 
    574571         ! 
    575          ALLOCATE( idta(jpiglo,jpjglo), STAT=ierror ) 
    576          IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate idta array' ) 
    577          ALLOCATE( zdta(jpiglo,jpjglo), zrand(jpiglo,jpjglo), STAT=ierror ) 
    578          IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate zdta array' ) 
    579572         ! 
    580573         IF( ntopo == 0 ) THEN                        ! flat basin 
     
    583576            IF( rn_bathy > 0.01 ) THEN  
    584577               IF(lwp) WRITE(numout,*) '         Depth = rn_bathy read in namelist' 
    585                zdta(:,:) = rn_bathy 
    586                IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ): idta()=jpk 
    587                   idta(:,:) = jpkm1 
     578               bathy(:,:) = rn_bathy 
     579               IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ):  
     580                  mbathy(:,:) = jpkm1 
    588581               ELSE                                                ! z-coordinate (zco or zps): step-like topography 
    589                   idta(:,:) = jpkm1 
     582                  mbathy(:,:) = jpkm1 
    590583                  DO jk = 1, jpkm1 
    591                      WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
     584                     WHERE( gdept_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= gdept_1d(jk+1) )   mbathy(:,:) = jk 
    592585                  END DO 
    593586               ENDIF 
    594587            ELSE 
    595588               IF(lwp) WRITE(numout,*) '         Depth = depthw(jpkm1)' 
    596                idta(:,:) = jpkm1                            ! before last level 
    597                zdta(:,:) = gdepw_1d(jpk)                     ! last w-point depth 
    598                h_oce     = gdepw_1d(jpk) 
     589               mbathy(:,:) = jpkm1                            ! before last level 
     590               bathy(:,:) = gdepw_1d(jpk)                     ! last w-point depth 
     591               h_oce       = gdepw_1d(jpk) 
    599592            ENDIF 
    600          ELSE                                         ! bump centered in the basin 
     593         ELSE                                 ! flat basin with random noise 
    601594            IF(lwp) WRITE(numout,*) 
    602 !            IF(lwp) WRITE(numout,*) '         bathymetry field: flat basin with a bump' 
    603595            IF(lwp) WRITE(numout,*) '         bathymetry field: flat basin with random noise' 
    604             ii_bump = jpiglo / 2                           ! i-index of the bump center 
    605             ij_bump = jpjglo / 2                           ! j-index of the bump center 
    606             r_bump  = 50000._wp                            ! bump radius (meters)        
    607             h_bump  =  2700._wp                            ! bump height (meters) 
     596            ALLOCATE( zrand(jpiglo,jpjglo), STAT=ierror ) 
     597            IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'zgr_bat: unable to allocate zrand array' ) 
    608598            h_oce   = gdepw_1d(jpk)                        ! background ocean depth (meters) 
    609 !            IF(lwp) WRITE(numout,*) '            bump characteristics: ' 
    610 !            IF(lwp) WRITE(numout,*) '               bump center (i,j)   = ', ii_bump, ii_bump 
    611 !            IF(lwp) WRITE(numout,*) '               bump height         = ', h_bump , ' meters' 
    612 !            IF(lwp) WRITE(numout,*) '               bump radius         = ', r_bump , ' index' 
    613 !            IF(lwp) WRITE(numout,*) '            background ocean depth = ', h_oce  , ' meters' 
    614599            !                                         
    615600            CALL RANDOM_SEED() 
    616601            CALL RANDOM_NUMBER(zrand) 
    617             DO jj = 1, jpjglo                              ! zdta : 
    618                DO ji = 1, jpiglo 
    619 !                  zi = FLOAT( ji - ii_bump ) * ppe1_m / r_bump 
    620 !                  zj = FLOAT( jj - ij_bump ) * ppe2_m / r_bump 
    621 !                  zdta(ji,jj) = h_oce - h_bump * EXP( -( zi*zi + zj*zj ) ) 
    622                   zdta(ji,jj) = h_oce + 0.1_wp *h_oce * (zrand(ji,jj)-1._wp)  
     602            DO_2D( 0, 0, 0, 0 ) 
     603               bathy(ji,jj) = h_oce + 0.1_wp *h_oce * (zrand(mig(ji),mjg(jj))-1._wp)  
     604            END_2D 
     605            IF ( cp_cfg=='OVERFLOW' ) THEN 
     606               DO jj=1,jpj 
     607                  bathy(:,jj) = +(  500. + 0.5 * 1500. * ( 1.0 + tanh( (glamt(:,3) - 40.) / 7. ) )) 
    623608               END DO 
    624             END DO 
    625             !                                              ! idta : 
     609            ENDIF 
     610            IF ( cp_cfg=='DOME' ) THEN 
     611               bathy(:,:) = MIN(3600._wp, MAX( 600._wp,  600._wp -gphit(:,:)*1.e3*0.01 )) 
     612               WHERE (gphit(:,:) >0._wp) bathy(:,:) = 0._wp 
     613               ! Dig inlet: 
     614               WHERE ((gphit(:,:)>0._wp).AND.(glamt(:,:)>-50._wp).AND.(glamt(:,:)<50._wp)) bathy(:,:) = 600._wp 
     615            ENDIF 
     616!            CALL lbc_lnk( 'zgr_bat', bathy, 'T', 1._wp ) 
     617            ! 
     618            DEALLOCATE(zrand) 
     619            !                                               
    626620            IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ): idta()=jpk 
    627                idta(:,:) = jpkm1 
     621               mbathy(:,:) = jpkm1 
    628622            ELSE                                                ! z-coordinate (zco or zps): step-like topography 
    629                idta(:,:) = jpkm1 
     623               mbathy(:,:) = jpkm1 
    630624               DO jk = 1, jpkm1 
    631                   WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) )   idta(:,:) = jk 
     625                  WHERE( gdept_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= gdept_1d(jk+1) )   mbathy(:,:) = jk 
    632626               END DO 
    633627            ENDIF 
    634628         ENDIF 
    635629         ! 
    636          !                                            ! set GLOBAL boundary conditions  
    637          IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN 
    638             idta( :    , 1    ) = -1                ;      zdta( :    , 1    ) = -1._wp 
    639             idta( :    ,jpjglo) =  0                ;      zdta( :    ,jpjglo) =  0._wp 
    640          ELSEIF( jperio == 2 ) THEN 
    641             idta( :    , 1    ) = idta( : ,  3  )   ;      zdta( :    , 1    ) = zdta( : ,  3  ) 
    642             idta( :    ,jpjglo) = 0                 ;      zdta( :    ,jpjglo) =  0._wp 
    643             idta( 1    , :    ) = 0                 ;      zdta( 1    , :    ) =  0._wp 
    644             idta(jpiglo, :    ) = 0                 ;      zdta(jpiglo, :    ) =  0._wp 
    645          ELSE 
    646             ih = 0                                  ;      zh = 0._wp 
    647             IF( ln_sco )   ih = jpkm1               ;      IF( ln_sco )   zh = h_oce 
    648             idta( :    , 1    ) = ih                ;      zdta( :    , 1    ) =  zh 
    649             idta( :    ,jpjglo) = ih                ;      zdta( :    ,jpjglo) =  zh 
    650             idta( 1    , :    ) = ih                ;      zdta( 1    , :    ) =  zh 
    651             idta(jpiglo, :    ) = ih                ;      zdta(jpiglo, :    ) =  zh 
    652          ENDIF 
    653  
    654          !                                            ! local domain level and meter bathymetries (mbathy,bathy) 
    655          mbathy(:,:) = 0                                   ! set to zero extra halo points 
    656          bathy (:,:) = 0._wp                               ! (require for mpp case) 
    657          DO_2D( 0, 0, 0, 0 ) 
    658                mbathy(ji,jj) = idta( mig(ji), mjg(jj) ) 
    659                bathy (ji,jj) = zdta( mig(ji), mjg(jj) ) 
    660          END_2D 
    661630         risfdep(:,:)=0.e0 
    662631         misfdep(:,:)=1 
    663          ! 
    664          DEALLOCATE( idta, zdta , zrand) 
    665632         ! 
    666633         !                                            ! ================ ! 
Note: See TracChangeset for help on using the changeset viewer.