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/DYN/dynspg_ts.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/DYN/dynspg_ts.F90

    r2564 r2715  
    3838   USE prtctl          ! Print control 
    3939   USE in_out_manager  ! I/O manager 
    40    USE iom 
     40   USE iom             ! IOM library 
    4141   USE restart         ! only for lrst_oce 
    4242   USE zdf_oce 
     
    4545   PRIVATE 
    4646 
    47    PUBLIC dyn_spg_ts  ! routine called by step.F90 
    48    PUBLIC ts_rst      ! routine called by istate.F90 
    49  
    50  
    51    REAL(wp), DIMENSION(jpi,jpj) ::  ftnw, ftne   ! triad of coriolis parameter 
    52    REAL(wp), DIMENSION(jpi,jpj) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
    53  
    54    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   un_b, vn_b   ! now    averaged velocity 
    55    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   ub_b, vb_b   ! before averaged velocity 
    56  
     47   PUBLIC dyn_spg_ts        ! routine called by step.F90 
     48   PUBLIC ts_rst            ! routine called by istate.F90 
     49   PUBLIC dyn_spg_ts_alloc  ! routine called by dynspg.F90 
     50 
     51 
     52   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftnw, ftne   ! triad of coriolis parameter 
     53   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
     54 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_b, vn_b   ! now    averaged velocity 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub_b, vb_b   ! before averaged velocity 
    5757 
    5858   !! * Substitutions 
    5959#  include "domzgr_substitute.h90" 
    6060#  include "vectopt_loop_substitute.h90" 
    61    !!------------------------------------------------------------------------- 
    62    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     61   !!---------------------------------------------------------------------- 
     62   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    6363   !! $Id$ 
    64    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    65    !!------------------------------------------------------------------------- 
    66  
     64   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     65   !!---------------------------------------------------------------------- 
    6766CONTAINS 
     67 
     68   INTEGER FUNCTION dyn_spg_ts_alloc() 
     69      !!---------------------------------------------------------------------- 
     70      !!                  ***  routine dyn_spg_ts_alloc  *** 
     71      !!---------------------------------------------------------------------- 
     72      ALLOCATE( ftnw  (jpi,jpj) , ftne(jpi,jpj) , un_b(jpi,jpj) , vn_b(jpi,jpj) ,     & 
     73         &      ftsw  (jpi,jpj) , ftse(jpi,jpj) , ub_b(jpi,jpj) , vb_b(jpi,jpj) , STAT= dyn_spg_ts_alloc ) 
     74         ! 
     75      IF( lk_mpp                )   CALL mpp_sum( dyn_spg_ts_alloc ) 
     76      IF( dyn_spg_ts_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays') 
     77      ! 
     78   END FUNCTION dyn_spg_ts_alloc 
     79 
    6880 
    6981   SUBROUTINE dyn_spg_ts( kt ) 
     
    94106      !! References : Griffies et al., (2003): A technical guide to MOM4. NOAA/GFDL 
    95107      !!--------------------------------------------------------------------- 
     108      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     109      USE wrk_nemo, ONLY:   zsshun_e => wrk_2d_1 , zsshb_e  => wrk_2d_2  , zhdiv => wrk_2d_3 
     110      USE wrk_nemo, ONLY:   zsshvn_e => wrk_2d_4 , zssh_sum => wrk_2d_5 
     111      USE wrk_nemo, ONLY:   zcu => wrk_2d_6  , zwx   => wrk_2d_7  , zua   => wrk_2d_8  , zbfru  => wrk_2d_9 
     112      USE wrk_nemo, ONLY:   zcv => wrk_2d_10 , zwy   => wrk_2d_11 , zva   => wrk_2d_12 , zbfrv  => wrk_2d_13 
     113      USE wrk_nemo, ONLY:   zun => wrk_2d_14 , zun_e => wrk_2d_15 , zub_e => wrk_2d_16 , zu_sum => wrk_2d_17 
     114      USE wrk_nemo, ONLY:   zvn => wrk_2d_18 , zvn_e => wrk_2d_19 , zvb_e => wrk_2d_20 , zv_sum => wrk_2d_21 
     115      ! 
    96116      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
    97       !! 
     117      ! 
    98118      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    99       INTEGER  ::   icycle           ! temporary scalar 
    100  
    101       REAL(wp) ::   zraur, zcoef, z2dt_e, z2dt_b     ! temporary scalars 
    102       REAL(wp) ::   z1_8, zx1, zy1                   !    -         - 
    103       REAL(wp) ::   z1_4, zx2, zy2                   !     -         - 
    104       REAL(wp) ::   zu_spg, zu_cor, zu_sld, zu_asp   !     -         - 
    105       REAL(wp) ::   zv_spg, zv_cor, zv_sld, zv_asp   !     -         - 
    106       !! 
    107       REAL(wp), DIMENSION(jpi,jpj) ::   zhdiv, zsshb_e 
    108       !! 
    109       REAL(wp), DIMENSION(jpi,jpj) ::   zbfru  , zbfrv     ! 2D workspace 
    110       !! 
    111       REAL(wp), DIMENSION(jpi,jpj) ::   zsshun_e, zsshvn_e   ! 2D workspace 
    112       !! 
    113       REAL(wp), DIMENSION(jpi,jpj) ::   zcu, zwx, zua, zun   ! 2D workspace 
    114       REAL(wp), DIMENSION(jpi,jpj) ::   zcv, zwy, zva, zvn   !  -      - 
    115       REAL(wp), DIMENSION(jpi,jpj) ::   zun_e, zub_e, zu_sum      ! 2D workspace 
    116       REAL(wp), DIMENSION(jpi,jpj) ::   zvn_e, zvb_e, zv_sum      !  -      - 
    117       REAL(wp), DIMENSION(jpi,jpj) ::   zssh_sum                  !  -      - 
     119      INTEGER  ::   icycle           ! local scalar 
     120      REAL(wp) ::   zraur, zcoef, z2dt_e, z2dt_b     ! local scalars 
     121      REAL(wp) ::   z1_8, zx1, zy1                   !   -      - 
     122      REAL(wp) ::   z1_4, zx2, zy2                   !   -      - 
     123      REAL(wp) ::   zu_spg, zu_cor, zu_sld, zu_asp   !   -      - 
     124      REAL(wp) ::   zv_spg, zv_cor, zv_sld, zv_asp   !   -      - 
    118125      !!---------------------------------------------------------------------- 
     126 
     127      IF( wrk_in_use(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,     & 
     128         &              11,12,13,14,15,16,17,18,19,20,21 ) ) THEN 
     129         CALL ctl_stop( 'dyn_spg_ts: requested workspace arrays unavailable' )   ;   RETURN 
     130      ENDIF 
    119131 
    120132      IF( kt == nit000 ) THEN             !* initialisation 
     
    465477         !                                                      !         - Correct the velocity 
    466478 
    467          IF( lk_obc               )   CALL obc_fla_ts 
     479         IF( lk_obc               )   CALL obc_fla_ts ( ua_e, va_e, sshn_e, ssha_e ) 
    468480         IF( lk_bdy .OR. ln_tides )   CALL bdy_dyn_fla( sshn_e )  
    469481         ! 
     
    550562      ! 
    551563      ! 
     564      IF( wrk_not_released(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,         & 
     565         &                    11,12,13,14,15,16,17,18,19,20,21) )    & 
     566         CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays') 
     567      ! 
    552568   END SUBROUTINE dyn_spg_ts 
    553569 
     
    623639 
    624640         IF( iom_varid( numror, 'sshn_b', ldstop = .FALSE. ) > 0 ) THEN 
    625             CALL iom_get( numror, jpdom_autoglo, 'sshn_b' , sshn_b (:,:) )   ! filtered extrenal ssh 
     641            CALL iom_get( numror, jpdom_autoglo, 'sshn_b' , sshn_b (:,:) )   ! filtered ssh 
    626642         ELSE 
    627             sshn_b(:,:)=sshb(:,:)   ! if not in restart set previous time mean to current baroclinic before value    
     643            sshn_b(:,:) = sshb(:,:)   ! if not in restart set previous time mean to current baroclinic before value    
    628644         ENDIF  
    629645      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
     
    640656   !!---------------------------------------------------------------------- 
    641657CONTAINS 
    642    SUBROUTINE dyn_spg_ts( kt )       ! Empty routine 
     658   INTEGER FUNCTION dyn_spg_ts_alloc()    ! Dummy function 
     659      dyn_spg_ts_alloc = 0 
     660   END FUNCTION dyn_spg_ts_alloc 
     661   SUBROUTINE dyn_spg_ts( kt )            ! Empty routine 
     662      INTEGER, INTENT(in) :: kt 
    643663      WRITE(*,*) 'dyn_spg_ts: You should not have seen this print! error?', kt 
    644664   END SUBROUTINE dyn_spg_ts 
    645    SUBROUTINE ts_rst( kt, cdrw )     ! Empty routine 
     665   SUBROUTINE ts_rst( kt, cdrw )          ! Empty routine 
    646666      INTEGER         , INTENT(in) ::   kt         ! ocean time-step 
    647667      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
Note: See TracChangeset for help on using the changeset viewer.