Changeset 14952 for utils/tools/DOMAINcfg/src/domzgr.F90
- Timestamp:
- 2021-06-04T17:42:50+02:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
utils/tools/DOMAINcfg/src/domzgr.F90
r14630 r14952 560 560 REAL(wp) :: r_bump , h_bump , h_oce ! bump characteristics 561 561 REAL(wp) :: zi, zj, zh, zhmin ! local scalars 562 INTEGER , ALLOCATABLE, DIMENSION(:,:) :: idta ! global domain integer data563 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zdta ! global domain scalar data564 562 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zrand 565 563 !!---------------------------------------------------------------------- … … 571 569 IF( ntopo == 0 .OR. ntopo == -1 ) THEN ! defined by hand ! 572 570 ! ! ================== ! 573 ! ! global domain level and meter bathymetry (idta,zdta)574 571 ! 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' )579 572 ! 580 573 IF( ntopo == 0 ) THEN ! flat basin … … 583 576 IF( rn_bathy > 0.01 ) THEN 584 577 IF(lwp) WRITE(numout,*) ' Depth = rn_bathy read in namelist' 585 zdta(:,:) = rn_bathy586 IF( ln_sco ) THEN ! s-coordinate (zsc ): idta()=jpk587 idta(:,:) = jpkm1578 bathy(:,:) = rn_bathy 579 IF( ln_sco ) THEN ! s-coordinate (zsc ): 580 mbathy(:,:) = jpkm1 588 581 ELSE ! z-coordinate (zco or zps): step-like topography 589 idta(:,:) = jpkm1582 mbathy(:,:) = jpkm1 590 583 DO jk = 1, jpkm1 591 WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) ) idta(:,:) = jk584 WHERE( gdept_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= gdept_1d(jk+1) ) mbathy(:,:) = jk 592 585 END DO 593 586 ENDIF 594 587 ELSE 595 588 IF(lwp) WRITE(numout,*) ' Depth = depthw(jpkm1)' 596 idta(:,:) = jpkm1 ! before last level597 zdta(:,:)= gdepw_1d(jpk) ! last w-point depth598 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) 599 592 ENDIF 600 ELSE ! bump centered in the basin593 ELSE ! flat basin with random noise 601 594 IF(lwp) WRITE(numout,*) 602 ! IF(lwp) WRITE(numout,*) ' bathymetry field: flat basin with a bump'603 595 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' ) 608 598 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_bump611 ! 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'614 599 ! 615 600 CALL RANDOM_SEED() 616 601 CALL RANDOM_NUMBER(zrand) 617 DO jj = 1, jpjglo ! zdta :618 DO ji = 1, jpiglo619 ! 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. ) )) 623 608 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 ! 626 620 IF( ln_sco ) THEN ! s-coordinate (zsc ): idta()=jpk 627 idta(:,:) = jpkm1621 mbathy(:,:) = jpkm1 628 622 ELSE ! z-coordinate (zco or zps): step-like topography 629 idta(:,:) = jpkm1623 mbathy(:,:) = jpkm1 630 624 DO jk = 1, jpkm1 631 WHERE( gdept_1d(jk) < zdta(:,:) .AND. zdta(:,:) <= gdept_1d(jk+1) ) idta(:,:) = jk625 WHERE( gdept_1d(jk) < bathy(:,:) .AND. bathy(:,:) <= gdept_1d(jk+1) ) mbathy(:,:) = jk 632 626 END DO 633 627 ENDIF 634 628 ENDIF 635 629 ! 636 ! ! set GLOBAL boundary conditions637 IF( jperio == 1 .OR. jperio == 4 .OR. jperio == 6 ) THEN638 idta( : , 1 ) = -1 ; zdta( : , 1 ) = -1._wp639 idta( : ,jpjglo) = 0 ; zdta( : ,jpjglo) = 0._wp640 ELSEIF( jperio == 2 ) THEN641 idta( : , 1 ) = idta( : , 3 ) ; zdta( : , 1 ) = zdta( : , 3 )642 idta( : ,jpjglo) = 0 ; zdta( : ,jpjglo) = 0._wp643 idta( 1 , : ) = 0 ; zdta( 1 , : ) = 0._wp644 idta(jpiglo, : ) = 0 ; zdta(jpiglo, : ) = 0._wp645 ELSE646 ih = 0 ; zh = 0._wp647 IF( ln_sco ) ih = jpkm1 ; IF( ln_sco ) zh = h_oce648 idta( : , 1 ) = ih ; zdta( : , 1 ) = zh649 idta( : ,jpjglo) = ih ; zdta( : ,jpjglo) = zh650 idta( 1 , : ) = ih ; zdta( 1 , : ) = zh651 idta(jpiglo, : ) = ih ; zdta(jpiglo, : ) = zh652 ENDIF653 654 ! ! local domain level and meter bathymetries (mbathy,bathy)655 mbathy(:,:) = 0 ! set to zero extra halo points656 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_2D661 630 risfdep(:,:)=0.e0 662 631 misfdep(:,:)=1 663 !664 DEALLOCATE( idta, zdta , zrand)665 632 ! 666 633 ! ! ================ !
Note: See TracChangeset
for help on using the changeset viewer.