Changeset 2689


Ignore:
Timestamp:
2011-03-15T15:49:11+01:00 (10 years ago)
Author:
gm
Message:

dynamic mem: #785 ; bug correction (sshn_b allocated twice) + style in time splitting case

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_oce.F90

    r2684 r2689  
    33   !!                       ***  MODULE dynspg_oce  *** 
    44   !!        
    5    !! Ocean dynamics: Define in memory surface pressure gradient variables 
     5   !! Ocean dynamics: Define in memory some surface pressure gradient variables 
    66   !!====================================================================== 
    77   !! History :  1.0  ! 2005-12  (C. Talandier, G. Madec)  Original code 
     
    99   !!---------------------------------------------------------------------- 
    1010   USE par_oce        ! ocean parameters 
     11   USE lib_mpp        ! MPP library 
    1112 
    1213   IMPLICIT NONE 
    1314   PUBLIC            
    1415 
     16   PUBLIC   dynspg_oce_alloc   ! called in dynspg.F90 
     17    
    1518   !                                                       !!! Surface pressure gradient logicals 
    1619#if   defined key_dynspg_exp  ||  defined key_esopa 
     
    3033#endif 
    3134 
    32 #if   defined key_dynspg_ts   ||   defined key_vvl   ||   defined key_esopa  
    33   !                                                                !!! Time splitting scheme (sub-time step variables)  
     35  !                                                                         !!! Time splitting scheme (key_dynspg_ts)  
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshn_e, ssha_e   ! sea surface heigth (now, after, average) 
    3437   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ua_e  , va_e     ! barotropic velocities (after) 
    35    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshn_e, ssha_e   ! sea surface heigth (now, after, average) 
    3638   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hu_e  , hv_e     ! now ocean depth ( = Ho+sshn_e ) 
    37    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hur_e , hvr_e    ! inverse of the now depth ( = 1/(Ho+sshn_e) ) 
    38 #endif    !!---------------------------------------------------------------------- 
     39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hur_e , hvr_e    ! inverse of hu_e and hv_e 
     40   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshn_b       ! before field without time-filter 
    3941 
    40    !! NEMO/OPA 4.0 , LODYC-IPSL  (2011) 
    41    !! $Id$  
     42   !!---------------------------------------------------------------------- 
     43   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
     44   !! $Id$ 
    4245   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     46   !!---------------------------------------------------------------------- 
     47CONTAINS 
     48 
     49   INTEGER FUNCTION dynspg_oce_alloc() 
     50      !!---------------------------------------------------------------------- 
     51      !!                  ***  routine dynspg_oce_alloc  *** 
     52      !!---------------------------------------------------------------------- 
     53      ALLOCATE( sshn_e(jpi,jpj) , ua_e(jpi,jpj) , hu_e(jpi,jpj) , hur_e(jpi,jpj) ,      & 
     54         &      ssha_e(jpi,jpj) , va_e(jpi,jpj) , hv_e(jpi,jpj) , hvr_e(jpi,jpj) ,      & 
     55         &      sshn_b(jpi,jpj)                                                  , STAT = dynspg_oce_alloc ) 
     56         ! 
     57      IF( lk_mpp                )   CALL mpp_sum ( dynspg_oce_alloc ) 
     58      IF( dynspg_oce_alloc /= 0 )   CALL ctl_warn('dynspg_oce_alloc: failed to allocate arrays') 
     59      ! 
     60   END FUNCTION dynspg_oce_alloc 
     61 
    4362   !!====================================================================== 
    4463END MODULE dynspg_oce 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r2684 r2689  
    5353   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::  ftsw, ftse   ! (only used with een vorticity scheme) 
    5454 
    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 
     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 
     
    7070      !!                  ***  routine dyn_spg_ts_alloc  *** 
    7171      !!---------------------------------------------------------------------- 
    72       ! 
    73       ALLOCATE( ftnw  (jpi,jpj) , ftne  (jpi,jpj) , ftsw  (jpi,jpj) , ftse (jpi,jpj) ,                                       & 
    74          &      un_b  (jpi,jpj) , vn_b  (jpi,jpj) , ub_b  (jpi,jpj) , vb_b (jpi,jpj) , ua_e  (jpi,jpj) , va_e  (jpi,jpj) ,   & 
    75          &      sshn_e(jpi,jpj) , ssha_e(jpi,jpj) , sshn_b(jpi,jpj) ,                                                        & 
    76          &      hu_e  (jpi,jpj) , hv_e  (jpi,jpj) , hur_e (jpi,jpj) , hvr_e(jpi,jpj) , STAT=dyn_spg_ts_alloc ) 
    77       IF(lk_mpp)   CALL mpp_sum( dyn_spg_ts_alloc ) 
     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') 
    7877      ! 
    7978   END FUNCTION dyn_spg_ts_alloc 
     
    107106      !! References : Griffies et al., (2003): A technical guide to MOM4. NOAA/GFDL 
    108107      !!--------------------------------------------------------------------- 
    109       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    110       USE wrk_nemo, ONLY: zhdiv => wrk_2d_1, zsshb_e => wrk_2d_2 
    111       USE wrk_nemo, ONLY: zbfru => wrk_2d_3  , zbfrv => wrk_2d_4  
    112       USE wrk_nemo, ONLY: zsshun_e => wrk_2d_5, zsshvn_e => wrk_2d_6 
    113       USE wrk_nemo, ONLY: zcu => wrk_2d_7, zwx => wrk_2d_8, zua => wrk_2d_9, zun => wrk_2d_10 
    114       USE wrk_nemo, ONLY: zcv => wrk_2d_11, zwy => wrk_2d_12, zva => wrk_2d_13, zvn => wrk_2d_14 
    115       USE wrk_nemo, ONLY: zun_e => wrk_2d_15, zub_e => wrk_2d_16, zu_sum => wrk_2d_17 
    116       USE wrk_nemo, ONLY: zvn_e => wrk_2d_18, zvb_e => wrk_2d_19, zv_sum => wrk_2d_20 
    117       USE wrk_nemo, ONLY: zssh_sum => wrk_2d_21 
    118       !! 
     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      ! 
    119116      INTEGER, INTENT(in)  ::   kt   ! ocean time-step index 
    120       !! 
     117      ! 
    121118      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    122119      INTEGER  ::   icycle           ! local scalar 
     
    128125      !!---------------------------------------------------------------------- 
    129126 
    130       IF( wrk_in_use(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,        & 
     127      IF( wrk_in_use(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,     & 
    131128         &              11,12,13,14,15,16,17,18,19,20,21 ) ) THEN 
    132129         CALL ctl_stop( 'dyn_spg_ts: requested workspace arrays unavailable' )   ;   RETURN 
    133       END IF 
     130      ENDIF 
    134131 
    135132      IF( kt == nit000 ) THEN             !* initialisation 
     
    567564      IF( wrk_not_released(2,  1, 2, 3, 4, 5, 6, 7, 8, 9,10,         & 
    568565         &                    11,12,13,14,15,16,17,18,19,20,21) )    & 
    569          CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays.') 
     566         CALL ctl_stop('dyn_spg_ts: failed to release workspace arrays') 
    570567      ! 
    571568   END SUBROUTINE dyn_spg_ts 
     
    642639 
    643640         IF( iom_varid( numror, 'sshn_b', ldstop = .FALSE. ) > 0 ) THEN 
    644             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 
    645642         ELSE 
    646             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    
    647644         ENDIF  
    648645      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/oce.F90

    r2636 r2689  
    1818   LOGICAL, PUBLIC ::   l_traldf_rot = .FALSE.  !: rotated laplacian operator for lateral diffusion 
    1919 
    20    !! dynamics and tracer fields                           ! before ! now    ! after   ! the after trends becomes the fields 
    21    !! --------------------------                           ! fields ! fields ! trends ! only after tra_zdf and dyn_spg 
    22    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ub   ,  un    , ua      !: i-horizontal velocity        [m/s] 
    23    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   vb   ,  vn    , va      !: j-horizontal velocity        [m/s] 
    24    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::           wn              !: vertical velocity            [m/s] 
    25    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rotb ,  rotn            !: relative vorticity           [s-1] 
    26    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hdivb,  hdivn           !: horizontal divergence        [s-1] 
    27    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tb   ,  tn    , ta      !: potential temperature    [Celcius] 
    28    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sb   ,  sn    , sa      !: salinity                     [psu] 
    29    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: tsb  ,  tsn   , tsa     !: 4D T-S fields        [Celcius,psu]  
    30    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rn2b ,  rn2             !: brunt-vaisala frequency**2   [s-2] 
     20   !! dynamics and tracer fields                            ! before ! now    ! after  ! the after trends becomes the fields 
     21   !! --------------------------                            ! fields ! fields ! trends ! only after tra_zdf and dyn_spg 
     22   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   ub   ,  un    , ua     !: i-horizontal velocity        [m/s] 
     23   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   vb   ,  vn    , va     !: j-horizontal velocity        [m/s] 
     24   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::           wn             !: vertical velocity            [m/s] 
     25   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   rotb ,  rotn           !: relative vorticity           [s-1] 
     26   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   hdivb,  hdivn          !: horizontal divergence        [s-1] 
     27   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   tb   ,  tn    , ta     !: potential temperature    [Celcius] 
     28   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sb   ,  sn    , sa     !: salinity                     [psu] 
     29   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   tsb  ,  tsn   , tsa    !: 4D T-S fields        [Celcius,psu]  
     30   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   rn2b ,  rn2            !: brunt-vaisala frequency**2   [s-2] 
    3131   ! 
    3232   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhd    !: in situ density anomalie rhd=(rho-rau0)/rau0  [no units] 
    3333   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   rhop   !: potential volumic mass                           [kg/m3] 
    3434 
    35    !! free surface                                      !  before  !  now     !  after   ! 
    36    !! ------------                                      !  fields  !  fields  !  trends  ! 
    37    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshb   ,  sshn    ,  ssha    !: sea surface height at t-point [m] 
    38    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshu_b ,  sshu_n  ,  sshu_a  !: sea surface height at u-point [m] 
    39    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshv_b ,  sshv_n  ,  sshv_a  !: sea surface height at u-point [m] 
    40    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::             sshf_n             !: sea surface height at f-point [m] 
    41    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshn_b                       !: before field without time-filter 
     35   !! free surface                                      !  before  ! now    ! after  ! 
     36   !! ------------                                      !  fields  ! fields ! trends ! 
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshb   , sshn   , ssha   !: sea surface height at t-point [m] 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshu_b , sshu_n , sshu_a !: sea surface height at u-point [m] 
     39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sshv_b , sshv_n , sshv_a !: sea surface height at u-point [m] 
     40   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::            sshf_n          !: sea surface height at f-point [m] 
    4241   ! 
    43    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   spgu, spgv                   !: horizontal surface pressure gradient 
     42   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   spgu, spgv               !: horizontal surface pressure gradient 
    4443 
    4544   !! interpolated gradient (only used in zps case) 
     
    7877         &     sshv_b(jpi,jpj)   , sshv_n(jpi,jpj) , sshv_a(jpi,jpj) ,     & 
    7978         &                         sshf_n(jpi,jpj) ,                       & 
    80          &     sshn_b(jpi,jpj)   ,                                         & 
    8179         &     spgu  (jpi,jpj)   , spgv(jpi,jpj)   ,                       & 
    8280         &     gtsu(jpi,jpj,jpts), gtsv(jpi,jpj,jpts),                     & 
Note: See TracChangeset for help on using the changeset viewer.