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

Ignore:
Timestamp:
2012-01-28T17:44:18+01:00 (12 years ago)
Author:
rblod
Message:

Merge of 3.4beta into the trunk

File:
1 edited

Legend:

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

    r2950 r3294  
    3838   USE lbclnk            ! ocean lateral boundary conditions (or mpp link) 
    3939   USE lib_mpp           ! distributed memory computing library 
     40   USE wrk_nemo        ! Memory allocation 
     41   USE timing          ! Timing 
    4042 
    4143   IMPLICIT NONE 
     
    8688      NAMELIST/namzgr/ ln_zco, ln_zps, ln_sco 
    8789      !!---------------------------------------------------------------------- 
    88  
     90      ! 
     91      IF( nn_timing == 1 )  CALL timing_start('dom_zgr') 
     92      ! 
    8993      REWIND( numnam )                 ! Read Namelist namzgr : vertical coordinate' 
    9094      READ  ( numnam, namzgr ) 
     
    139143      ENDIF 
    140144      ! 
     145      IF( nn_timing == 1 )  CALL timing_stop('dom_zgr') 
     146      ! 
    141147   END SUBROUTINE dom_zgr 
    142148 
     
    170176      REAL(wp) ::   za2, zkth2, zacr2      ! Values for optional double tanh function set from parameters  
    171177      !!---------------------------------------------------------------------- 
    172  
     178      ! 
     179      IF( nn_timing == 1 )  CALL timing_start('zgr_z') 
     180      ! 
    173181      ! Set variables from parameters 
    174182      ! ------------------------------ 
     
    280288      END DO 
    281289      ! 
     290      IF( nn_timing == 1 )  CALL timing_stop('zgr_z') 
     291      ! 
    282292   END SUBROUTINE zgr_z 
    283293 
     
    319329      REAL(wp) ::   r_bump , h_bump , h_oce   ! bump characteristics  
    320330      REAL(wp) ::   zi, zj, zh, zhmin         ! local scalars 
    321       INTEGER , DIMENSION(jpidta,jpjdta) ::   idta   ! global domain integer data 
    322       REAL(wp), DIMENSION(jpidta,jpjdta) ::   zdta   ! global domain scalar data 
    323       !!---------------------------------------------------------------------- 
    324  
     331      INTEGER , POINTER, DIMENSION(:,:) ::   idta   ! global domain integer data 
     332      REAL(wp), POINTER, DIMENSION(:,:) ::   zdta   ! global domain scalar data 
     333      !!---------------------------------------------------------------------- 
     334      ! 
     335      IF( nn_timing == 1 )  CALL timing_start('zgr_bat') 
     336      ! 
     337      CALL wrk_alloc( jpidta, jpjdta, idta ) 
     338      CALL wrk_alloc( jpidta, jpjdta, zdta ) 
     339      ! 
    325340      IF(lwp) WRITE(numout,*) 
    326341      IF(lwp) WRITE(numout,*) '    zgr_bat : defines level and meter bathymetry' 
     
    440455            CALL iom_close( inum ) 
    441456            !                                                ! ===================== 
    442             IF( cp_cfg == "orca" .AND. jp_cfg == 1 ) THEN    ! ORCA R1 configuration 
    443                ii0 =  51   ;   ii1 =  53                      
    444                ij0 = 142   ;   ij1 = 142                     ! ===================== 
    445                DO ji = mi0(ii0), mi1(ii1)                    ! Close Halmera Strait 
    446                   DO jj = mj0(ij0), mj1(ij1) 
    447                      bathy(ji,jj) = 0._wp 
    448                   END DO 
    449                END DO 
    450                IF(lwp) WRITE(numout,*) 
    451                IF(lwp) WRITE(numout,*) '      orca_r1: Halmera strait closed at i=',ii0,' j=',ij0,'->',ij1 
    452             ENDIF 
    453             !                                                ! ===================== 
    454457            IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN    ! ORCA R2 configuration 
    455458               !                                             ! ===================== 
     
    512515      ENDIF 
    513516      ! 
     517      CALL wrk_dealloc( jpidta, jpjdta, idta ) 
     518      CALL wrk_dealloc( jpidta, jpjdta, zdta ) 
     519      ! 
     520      IF( nn_timing == 1 )  CALL timing_stop('zgr_bat') 
     521      ! 
    514522   END SUBROUTINE zgr_bat 
    515523 
     
    589597      !!              - update bathy : meter bathymetry (in meters) 
    590598      !!---------------------------------------------------------------------- 
    591       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    592       USE wrk_nemo, ONLY:   zbathy => wrk_2d_1 
    593599      !! 
    594600      INTEGER ::   ji, jj, jl                    ! dummy loop indices 
    595601      INTEGER ::   icompt, ibtest, ikmax         ! temporary integers 
    596       !!---------------------------------------------------------------------- 
    597  
    598       IF( wrk_in_use(2, 1) ) THEN 
    599          CALL ctl_stop('zgr_bat_ctl: requested workspace array unavailable')   ;   RETURN 
    600       ENDIF 
    601  
     602      REAL(wp), POINTER, DIMENSION(:,:) ::  zbathy 
     603      !!---------------------------------------------------------------------- 
     604      ! 
     605      IF( nn_timing == 1 )  CALL timing_start('zgr_bat_ctl') 
     606      ! 
     607      CALL wrk_alloc( jpi, jpj, zbathy ) 
     608      ! 
    602609      IF(lwp) WRITE(numout,*) 
    603610      IF(lwp) WRITE(numout,*) '    zgr_bat_ctl : check the bathymetry' 
     
    702709      ENDIF 
    703710      ! 
    704       IF( wrk_not_released(2, 1) )   CALL ctl_stop('zgr_bat_ctl: failed to release workspace array') 
     711      CALL wrk_dealloc( jpi, jpj, zbathy ) 
     712      ! 
     713      IF( nn_timing == 1 )  CALL timing_stop('zgr_bat_ctl') 
    705714      ! 
    706715   END SUBROUTINE zgr_bat_ctl 
     
    719728      !!                                     (min value = 1 over land) 
    720729      !!---------------------------------------------------------------------- 
    721       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    722       USE wrk_nemo, ONLY:   zmbk => wrk_2d_1 
    723730      !! 
    724731      INTEGER ::   ji, jj   ! dummy loop indices 
    725       !!---------------------------------------------------------------------- 
    726       ! 
    727       IF( wrk_in_use(2, 1) ) THEN 
    728          CALL ctl_stop('zgr_bot_level: requested 2D workspace unavailable')   ;   RETURN 
    729       ENDIF 
     732      REAL(wp), POINTER, DIMENSION(:,:) ::  zmbk 
     733      !!---------------------------------------------------------------------- 
     734      ! 
     735      IF( nn_timing == 1 )  CALL timing_start('zgr_bot_level') 
     736      ! 
     737      CALL wrk_alloc( jpi, jpj, zmbk ) 
    730738      ! 
    731739      IF(lwp) WRITE(numout,*) 
     
    745753      zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk(zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    746754      ! 
    747       IF( wrk_not_released(2, 1) )   CALL ctl_stop('zgr_bot_level: failed to release workspace array') 
     755      CALL wrk_dealloc( jpi, jpj, zmbk ) 
     756      ! 
     757      IF( nn_timing == 1 )  CALL timing_stop('zgr_bot_level') 
    748758      ! 
    749759   END SUBROUTINE zgr_bot_level 
     
    761771      !!---------------------------------------------------------------------- 
    762772      ! 
     773      IF( nn_timing == 1 )  CALL timing_start('zgr_zco') 
     774      ! 
    763775      DO jk = 1, jpk 
    764          fsdept(:,:,jk) = gdept_0(jk) 
    765          fsdepw(:,:,jk) = gdepw_0(jk) 
    766          fsde3w(:,:,jk) = gdepw_0(jk) 
    767          fse3t (:,:,jk) = e3t_0(jk) 
    768          fse3u (:,:,jk) = e3t_0(jk) 
    769          fse3v (:,:,jk) = e3t_0(jk) 
    770          fse3f (:,:,jk) = e3t_0(jk) 
    771          fse3w (:,:,jk) = e3w_0(jk) 
    772          fse3uw(:,:,jk) = e3w_0(jk) 
    773          fse3vw(:,:,jk) = e3w_0(jk) 
    774       END DO 
     776            gdept(:,:,jk) = gdept_0(jk) 
     777            gdepw(:,:,jk) = gdepw_0(jk) 
     778            gdep3w(:,:,jk) = gdepw_0(jk) 
     779            e3t (:,:,jk) = e3t_0(jk) 
     780            e3u (:,:,jk) = e3t_0(jk) 
     781            e3v (:,:,jk) = e3t_0(jk) 
     782            e3f (:,:,jk) = e3t_0(jk) 
     783            e3w (:,:,jk) = e3w_0(jk) 
     784            e3uw(:,:,jk) = e3w_0(jk) 
     785            e3vw(:,:,jk) = e3w_0(jk) 
     786      END DO 
     787      ! 
     788      IF( nn_timing == 1 )  CALL timing_stop('zgr_zco') 
    775789      ! 
    776790   END SUBROUTINE zgr_zco 
     
    822836      !!  Reference :   Pacanowsky & Gnanadesikan 1997, Mon. Wea. Rev., 126, 3248-3270. 
    823837      !!---------------------------------------------------------------------- 
    824       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    825       USE wrk_nemo, ONLY:   zprt => wrk_3d_1 
    826838      !! 
    827839      INTEGER  ::   ji, jj, jk       ! dummy loop indices 
     
    833845      REAL(wp) ::   zdiff            ! temporary scalar 
    834846      REAL(wp) ::   zrefdep          ! temporary scalar 
     847      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zprt 
    835848      !!--------------------------------------------------------------------- 
    836       !  
    837       IF( wrk_in_use(3, 1) ) THEN 
    838          CALL ctl_stop('zgr_zps: requested workspace unavailable.')   ;   RETURN 
    839       ENDIF 
    840  
     849      ! 
     850      IF( nn_timing == 1 )  CALL timing_start('zgr_zps') 
     851      ! 
     852      CALL wrk_alloc( jpi, jpj, jpk, zprt ) 
     853      ! 
    841854      IF(lwp) WRITE(numout,*) 
    842855      IF(lwp) WRITE(numout,*) '    zgr_zps : z-coordinate with partial steps' 
     
    10171030         WRITE(numout,*) 'domzgr e3t(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10181031         WRITE(numout,*) 
    1019          WRITE(numout,*) 'domzgr e3w(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     1032         WRITE(numout,*) 'domzgr e3w(mbathy)'      ;   CALL prihre(zprt(:,:,2),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10201033         WRITE(numout,*) 
    1021          WRITE(numout,*) 'domzgr e3u(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     1034         WRITE(numout,*) 'domzgr e3u(mbathy)'      ;   CALL prihre(zprt(:,:,3),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10221035         WRITE(numout,*) 
    1023          WRITE(numout,*) 'domzgr e3v(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     1036         WRITE(numout,*) 'domzgr e3v(mbathy)'      ;   CALL prihre(zprt(:,:,4),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10241037         WRITE(numout,*) 
    1025          WRITE(numout,*) 'domzgr e3f(mbathy)'      ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     1038         WRITE(numout,*) 'domzgr e3f(mbathy)'      ;   CALL prihre(zprt(:,:,5),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10261039         WRITE(numout,*) 
    1027          WRITE(numout,*) 'domzgr gdep3w(mbathy)'   ;   CALL prihre(zprt(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
     1040         WRITE(numout,*) 'domzgr gdep3w(mbathy)'   ;   CALL prihre(zprt(:,:,6),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout) 
    10281041      ENDIF   
    10291042      ! 
    1030       IF( wrk_not_released(3, 1) )   CALL ctl_stop('zgr_zps: failed to release workspace') 
     1043      CALL wrk_dealloc( jpi, jpj, jpk, zprt ) 
     1044      ! 
     1045      IF( nn_timing == 1 )  CALL timing_stop('zgr_zps') 
    10311046      ! 
    10321047   END SUBROUTINE zgr_zps 
     
    11161131      !! Reference : Madec, Lott, Delecluse and Crepon, 1996. JPO, 26, 1393-1408. 
    11171132      !!---------------------------------------------------------------------- 
    1118       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    1119       USE wrk_nemo, ONLY:   zenv => wrk_2d_1 , ztmp => wrk_2d_2 , zmsk  => wrk_2d_3 
    1120       USE wrk_nemo, ONLY:   zri  => wrk_2d_4 , zrj  => wrk_2d_5 , zhbat => wrk_2d_6 
    1121       USE wrk_nemo, ONLY:   gsigw3  => wrk_3d_1 
    1122       USE wrk_nemo, ONLY:   gsigt3  => wrk_3d_2 
    1123       USE wrk_nemo, ONLY:   gsi3w3  => wrk_3d_3 
    1124       USE wrk_nemo, ONLY:   esigt3  => wrk_3d_4 
    1125       USE wrk_nemo, ONLY:   esigw3  => wrk_3d_5 
    1126       USE wrk_nemo, ONLY:   esigtu3 => wrk_3d_6 
    1127       USE wrk_nemo, ONLY:   esigtv3 => wrk_3d_7 
    1128       USE wrk_nemo, ONLY:   esigtf3 => wrk_3d_8 
    1129       USE wrk_nemo, ONLY:   esigwu3 => wrk_3d_9 
    1130       USE wrk_nemo, ONLY:   esigwv3 => wrk_3d_10 
    11311133      ! 
    11321134      INTEGER  ::   ji, jj, jk, jl           ! dummy loop argument 
     
    11341136      REAL(wp) ::   zcoeft, zcoefw, zrmax, ztaper   ! temporary scalars 
    11351137      ! 
     1138      REAL(wp), POINTER, DIMENSION(:,:  ) :: zenv, ztmp, zmsk, zri, zrj, zhbat 
     1139      REAL(wp), POINTER, DIMENSION(:,:,:) :: gsigw3, gsigt3, gsi3w3 
     1140      REAL(wp), POINTER, DIMENSION(:,:,:) :: esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3            
    11361141 
    11371142      NAMELIST/namzgr_sco/ rn_sbot_max, rn_sbot_min, rn_theta, rn_thetb, rn_rmax, ln_s_sigma, rn_bb, rn_hc 
    11381143      !!---------------------------------------------------------------------- 
    1139  
    1140       IF( wrk_in_use(2, 1,2,3,4,5,6) .OR. wrk_in_use(3, 1,2,3,4,5,6,7,8,9,10) ) THEN 
    1141          CALL ctl_stop('zgr_sco: ERROR - requested workspace arrays unavailable')   ;   RETURN 
    1142       ENDIF 
    1143  
     1144      ! 
     1145      IF( nn_timing == 1 )  CALL timing_start('zgr_sco') 
     1146      ! 
     1147      CALL wrk_alloc( jpi, jpj,      zenv, ztmp, zmsk, zri, zrj, zhbat                           ) 
     1148      CALL wrk_alloc( jpi, jpj, jpk, gsigw3, gsigt3, gsi3w3                                      ) 
     1149      CALL wrk_alloc( jpi, jpj, jpk, esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3 ) 
     1150      ! 
    11441151      REWIND( numnam )                       ! Read Namelist namzgr_sco : sigma-stretching parameters 
    11451152      READ  ( numnam, namzgr_sco ) 
     
    14941501 
    14951502      ! 
    1496 !!    H. Liu, POL. April 2009. Added for passing the scale check for the new released vvl code. 
     1503      where (e3t   (:,:,:).eq.0.0)  e3t(:,:,:) = 1.0 
     1504      where (e3u   (:,:,:).eq.0.0)  e3u(:,:,:) = 1.0 
     1505      where (e3v   (:,:,:).eq.0.0)  e3v(:,:,:) = 1.0 
     1506      where (e3f   (:,:,:).eq.0.0)  e3f(:,:,:) = 1.0 
     1507      where (e3w   (:,:,:).eq.0.0)  e3w(:,:,:) = 1.0 
     1508      where (e3uw  (:,:,:).eq.0.0)  e3uw(:,:,:) = 1.0 
     1509      where (e3vw  (:,:,:).eq.0.0)  e3vw(:,:,:) = 1.0 
     1510 
    14971511 
    14981512      fsdept(:,:,:) = gdept (:,:,:) 
     
    15901604!!gm bug    #endif 
    15911605      ! 
    1592       IF( wrk_not_released(2, 1,2,3,4,5,6) .OR. wrk_not_released(3, 1,2,3,4,5,6,7,8,9,10) )  & 
    1593         &  CALL ctl_stop('dom:zgr_sco: failed to release workspace arrays') 
     1606      CALL wrk_dealloc( jpi, jpj,      zenv, ztmp, zmsk, zri, zrj, zhbat                           ) 
     1607      CALL wrk_dealloc( jpi, jpj, jpk, gsigw3, gsigt3, gsi3w3                                      ) 
     1608      CALL wrk_dealloc( jpi, jpj, jpk, esigt3, esigw3, esigtu3, esigtv3, esigtf3, esigwu3, esigwv3 ) 
     1609      ! 
     1610      IF( nn_timing == 1 )  CALL timing_stop('zgr_sco') 
    15941611      ! 
    15951612   END SUBROUTINE zgr_sco 
Note: See TracChangeset for help on using the changeset viewer.