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 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRA/eosbn2.F90

    r2528 r2715  
    3333   USE dom_oce         ! ocean space and time domain 
    3434   USE phycst          ! physical constants 
     35   USE zdfddm          ! vertical physics: double diffusion 
    3536   USE in_out_manager  ! I/O manager 
    36    USE zdfddm          ! vertical physics: double diffusion 
     37   USE lib_mpp         ! MPP library 
    3738   USE prtctl          ! Print control 
    3839 
     
    107108      !! References :   Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 
    108109      !!---------------------------------------------------------------------- 
    109       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    110       !                                                               ! 2 : salinity               [psu] 
    111       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   prd   ! in situ density  
     110      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     111      USE wrk_nemo, ONLY:   zws => wrk_3d_1   ! 3D workspace 
     112      !! 
     113      REAL(wp), DIMENSION(:,:,:,:), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
     114      !                                                      ! 2 : salinity               [psu] 
     115      REAL(wp), DIMENSION(:,:,:)  , INTENT(  out) ::   prd   ! in situ density            [-] 
    112116      !! 
    113117      INTEGER  ::   ji, jj, jk           ! dummy loop indices 
    114       REAL(wp) ::   zt , zs , zh , zsr   ! temporary scalars 
    115       REAL(wp) ::   zr1, zr2, zr3, zr4   !    -         - 
    116       REAL(wp) ::   zrhop, ze, zbw, zb   !    -         - 
    117       REAL(wp) ::   zd , zc , zaw, za    !    -         - 
    118       REAL(wp) ::   zb1, za1, zkw, zk0   !    -         - 
    119       REAL(wp) ::   zrau0r               !    -         - 
    120       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zws   ! temporary workspace 
    121       !!---------------------------------------------------------------------- 
     118      REAL(wp) ::   zt , zs , zh , zsr   ! local scalars 
     119      REAL(wp) ::   zr1, zr2, zr3, zr4   !   -      - 
     120      REAL(wp) ::   zrhop, ze, zbw, zb   !   -      - 
     121      REAL(wp) ::   zd , zc , zaw, za    !   -      - 
     122      REAL(wp) ::   zb1, za1, zkw, zk0   !   -      - 
     123      REAL(wp) ::   zrau0r               !   -      - 
     124      !!---------------------------------------------------------------------- 
     125 
     126      IF( wrk_in_use(3, 1) ) THEN 
     127         CALL ctl_stop('eos_insitu: requested workspace array unavailable')   ;   RETURN 
     128      ENDIF 
    122129 
    123130      SELECT CASE( nn_eos ) 
     
    183190      ! 
    184191      IF(ln_ctl)   CALL prt_ctl( tab3d_1=prd, clinfo1=' eos  : ', ovlap=1, kdim=jpk ) 
     192      ! 
     193      IF( wrk_not_released(3, 1) )   CALL ctl_stop('eos_insitu: failed to release workspace array') 
    185194      ! 
    186195   END SUBROUTINE eos_insitu 
     
    233242      !!                Brown and Campana, Mon. Weather Rev., 1978 
    234243      !!---------------------------------------------------------------------- 
    235       REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    236       !                                                               ! 2 : salinity               [psu] 
    237       REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prd    ! in situ density  
     244      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     245      USE wrk_nemo, ONLY:   zws => wrk_3d_1 ! 3D workspace 
     246      !! 
     247      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts    ! 1 : potential temperature  [Celcius] 
     248      !                                                                ! 2 : salinity               [psu] 
     249      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prd    ! in situ density            [-] 
    238250      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(  out) ::   prhop  ! potential density (surface referenced) 
    239  
     251      ! 
    240252      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    241       REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw   ! temporary scalars 
    242       REAL(wp) ::   zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zrau0r       !    -         - 
    243       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zws   ! 3D workspace 
    244       !!---------------------------------------------------------------------- 
     253      REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw   ! local scalars 
     254      REAL(wp) ::   zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zrau0r       !   -      - 
     255      !!---------------------------------------------------------------------- 
     256 
     257      IF( wrk_in_use(3, 1) ) THEN 
     258         CALL ctl_stop('eos_insitu_pot: requested workspace array unavailable')   ;   RETURN 
     259      ENDIF 
    245260 
    246261      SELECT CASE ( nn_eos ) 
     
    311326      ! 
    312327      IF(ln_ctl)   CALL prt_ctl( tab3d_1=prd, clinfo1=' eos-p: ', tab3d_2=prhop, clinfo2=' pot : ', ovlap=1, kdim=jpk ) 
     328      ! 
     329      IF( wrk_not_released(3, 1) )   CALL ctl_stop('eos_insitu_pot: failed to release workspace array') 
    313330      ! 
    314331   END SUBROUTINE eos_insitu_pot 
     
    351368      !! References :   Jackett and McDougall, J. Atmos. Ocean. Tech., 1994 
    352369      !!---------------------------------------------------------------------- 
     370      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     371      USE wrk_nemo, ONLY:   zws => wrk_2d_5 ! 2D workspace 
     372      !! 
    353373      REAL(wp), DIMENSION(jpi,jpj,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    354374      !                                                           ! 2 : salinity               [psu] 
     
    359379      REAL(wp) ::   zt, zs, zh, zsr, zr1, zr2, zr3, zr4, zrhop, ze, zbw   ! temporary scalars 
    360380      REAL(wp) ::   zb, zd, zc, zaw, za, zb1, za1, zkw, zk0, zmask        !    -         - 
    361       REAL(wp), DIMENSION(jpi,jpj) ::   zws   ! 2D workspace 
    362       !!---------------------------------------------------------------------- 
    363  
    364       prd(:,:) = 0.e0 
     381      !!---------------------------------------------------------------------- 
     382 
     383      IF( wrk_in_use(2, 5) ) THEN 
     384         CALL ctl_stop('eos_insitu_2d: requested workspace array unavailable')   ;   RETURN 
     385      ENDIF 
     386 
     387      prd(:,:) = 0._wp 
    365388 
    366389      SELECT CASE( nn_eos ) 
     
    434457      IF(ln_ctl)   CALL prt_ctl( tab2d_1=prd, clinfo1=' eos2d: ' ) 
    435458      ! 
     459      IF( wrk_not_released(2, 5) )   CALL ctl_stop('eos_insitu_2d: failed to release workspace array') 
     460      ! 
    436461   END SUBROUTINE eos_insitu_2d 
    437462 
     
    469494      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts   ! 1 : potential temperature  [Celcius] 
    470495      !                                                               ! 2 : salinity               [psu] 
    471       REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pn2    ! Brunt-Vaisala frequency [s-1] 
     496      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   pn2   ! Brunt-Vaisala frequency    [s-1] 
    472497      !! 
    473498      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    474       REAL(wp) ::   zgde3w, zt, zs, zh, zalbet, zbeta   ! temporary scalars  
     499      REAL(wp) ::   zgde3w, zt, zs, zh, zalbet, zbeta   ! local scalars  
    475500#if defined key_zdfddm 
    476       REAL(wp) ::   zds   ! temporary scalars 
     501      REAL(wp) ::   zds   ! local scalars 
    477502#endif 
    478503      !!---------------------------------------------------------------------- 
     
    488513               DO ji = 1, jpi 
    489514                  zgde3w = grav / fse3w(ji,jj,jk) 
    490                   zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) )          ! potential temperature at w-point 
    491                   zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35.0   ! salinity anomaly (s-35) at w-point 
    492                   zh = fsdepw(ji,jj,jk)                                     ! depth in meters  at w-point 
     515                  zt = 0.5 * ( pts(ji,jj,jk,jp_tem) + pts(ji,jj,jk-1,jp_tem) )         ! potential temperature at w-pt 
     516                  zs = 0.5 * ( pts(ji,jj,jk,jp_sal) + pts(ji,jj,jk-1,jp_sal) ) - 35.0  ! salinity anomaly (s-35) at w-pt 
     517                  zh = fsdepw(ji,jj,jk)                                                ! depth in meters  at w-point 
    493518                  ! 
    494519                  zalbet = ( ( ( - 0.255019e-07_wp * zt + 0.298357e-05_wp ) * zt   &   ! ratio alpha/beta 
     
    586611      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts), INTENT(in   ) ::   pts            ! pot. temperature & salinity 
    587612      REAL(wp), DIMENSION(jpi,jpj,jpk)     , INTENT(  out) ::   palph, pbeta   ! thermal & haline expansion coeff. 
    588       !! 
     613      ! 
    589614      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    590615      REAL(wp) ::   zt, zs, zh   ! local scalars  
     
    661686      !!---------------------------------------------------------------------- 
    662687      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   psal   ! salinity             [psu] 
     688      ! Leave result array automatic rather than making explicitly allocated 
    663689      REAL(wp), DIMENSION(jpi,jpj)                ::   ptf    ! freezing temperature [Celcius] 
    664690      !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.