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 2621 – NEMO

Changeset 2621


Ignore:
Timestamp:
2011-02-27T11:24:06+01:00 (13 years ago)
Author:
gm
Message:

dynamic mem: #785 ; DYN: move dyn allocation from nemogcm to module when possible (continuation)

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

Legend:

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

    r2590 r2621  
    2424   PRIVATE 
    2525 
    26    PUBLIC   dyn_zdf_exp       ! called by step.F90 
    27    PUBLIC   dyn_zdf_exp_alloc ! called by nemogcm.F90 
    28  
    29    ! 2D workspaces. Not replaced with wrk_nemo arrays because these 
    30    ! have shape (jpi,jpk). 
    31    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zwx, zwy, zwz, zww  
     26   PUBLIC   dyn_zdf_exp   ! called by step.F90 
    3227    
    3328   !! * Substitutions 
     
    3732   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3833   !! $Id$ 
    39    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     34   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    4035   !!---------------------------------------------------------------------- 
    41  
    4236CONTAINS 
    43  
    44    FUNCTION dyn_zdf_exp_alloc() 
    45       !!---------------------------------------------------------------------- 
    46       !!                ***  ROUTINE dyn_zdf_exp_alloc  *** 
    47       !!---------------------------------------------------------------------- 
    48       INTEGER :: dyn_zdf_exp_alloc 
    49       !!---------------------------------------------------------------------- 
    50  
    51       ALLOCATE(zwx(jpi,jpk), zwy(jpi,jpk), zwz(jpi,jpk), zww(jpi,jpk), & 
    52                Stat=dyn_zdf_exp_alloc) 
    53  
    54       IF(dyn_zdf_exp_alloc /= 0)THEN 
    55          CALL ctl_warn('dyn_zdf_exp_alloc: failed to allocate arrays.') 
    56       END IF 
    57  
    58    END FUNCTION dyn_zdf_exp_alloc 
    59  
    6037 
    6138   SUBROUTINE dyn_zdf_exp( kt, p2dt ) 
     
    7552      !! ** Action : - Update (ua,va) with the vertical diffusive trend 
    7653      !!--------------------------------------------------------------------- 
     54      USE wrk_nemo, ONLY:   wrk_use, wrk_release 
     55      USE oce     , ONLY :  zwx => ta       , zwy => sa         ! (ta,sa) used as 3D workspace 
     56      USE wrk_nemo, ONLY:   zwz => wrk_3d_1 , zww => wrk_3d_1   ! 3D workspace 
     57      ! 
    7758      INTEGER , INTENT(in) ::   kt     ! ocean time-step index 
    7859      REAL(wp), INTENT(in) ::   p2dt   ! time-step  
    79       !! 
     60      ! 
    8061      INTEGER ::   ji, jj, jk, jl                            ! dummy loop indices 
    8162      REAL(wp) ::   zrau0r, zlavmr, zua, zva                 ! temporary scalars 
    8263      !!---------------------------------------------------------------------- 
    8364 
    84       IF( kt == nit000 ) THEN 
    85          IF(lwp) WRITE(numout,*) 
    86          IF(lwp) WRITE(numout,*) 'dyn_zdf_exp : vertical momentum diffusion - explicit operator' 
    87          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 
     65      IF( kt == nit000 .AND. lwp ) THEN 
     66         WRITE(numout,*) 
     67         WRITE(numout,*) 'dyn_zdf_exp : vertical momentum diffusion - explicit operator' 
     68         WRITE(numout,*) '~~~~~~~~~~~ ' 
    8869      ENDIF 
    8970 
    90       zrau0r = 1. / rau0                              ! Local constant initialization 
     71      zrau0r = 1. / rau0               ! Local constant initialization 
    9172      zlavmr = 1. / REAL( nn_zdfexp ) 
    9273 
    93       !                                               ! =============== 
    94       DO jj = 2, jpjm1                                !  Vertical slab 
    95          !                                            ! =============== 
    96          DO ji = 2, jpim1         ! Surface boundary condition 
    97             zwy(ji,1) = ( utau_b(ji,jj) + utau(ji,jj) ) * zrau0r 
    98             zww(ji,1) = ( vtau_b(ji,jj) + vtau(ji,jj) ) * zrau0r 
     74 
     75      DO jj = 2, jpjm1                 ! Surface boundary condition 
     76         DO ji = 2, jpim1 
     77            zwy(ji,jj,1) = ( utau_b(ji,jj) + utau(ji,jj) ) * zrau0r 
     78            zww(ji,jj,1) = ( vtau_b(ji,jj) + vtau(ji,jj) ) * zrau0r 
    9979         END DO   
    100          DO jk = 1, jpk         ! Initialization of x, z and contingently trends array 
     80      END DO   
     81      DO jk = 1, jpk                   ! Initialization of x, z and contingently trends array 
     82         DO jj = 2, jpjm1  
    10183            DO ji = 2, jpim1 
    102                zwx(ji,jk) = ub(ji,jj,jk) 
    103                zwz(ji,jk) = vb(ji,jj,jk) 
     84               zwx(ji,jj,jk) = ub(ji,jj,jk) 
     85               zwz(ji,jj,jk) = vb(ji,jj,jk) 
     86            END DO   
     87         END DO   
     88      END DO   
     89      ! 
     90      DO jl = 1, nn_zdfexp             ! Time splitting loop 
     91         ! 
     92         DO jk = 2, jpk                      ! First vertical derivative 
     93            DO jj = 2, jpjm1  
     94               DO ji = 2, jpim1 
     95                  zwy(ji,jj,jk) = avmu(ji,jj,jk) * ( zwx(ji,jj,jk-1) - zwx(ji,jj,jk) ) / fse3uw(ji,jj,jk)  
     96                  zww(ji,jj,jk) = avmv(ji,jj,jk) * ( zwz(ji,jj,jk-1) - zwz(ji,jj,jk) ) / fse3vw(ji,jj,jk) 
     97               END DO   
     98            END DO   
     99         END DO   
     100         DO jk = 1, jpkm1                    ! Second vertical derivative and trend estimation at kt+l*rdt/nn_zdfexp 
     101            DO jj = 2, jpjm1  
     102               DO ji = 2, jpim1 
     103                  zua = zlavmr * ( zwy(ji,jj,jk) - zwy(ji,jj,jk+1) ) / fse3u(ji,jj,jk) 
     104                  zva = zlavmr * ( zww(ji,jj,jk) - zww(ji,jj,jk+1) ) / fse3v(ji,jj,jk) 
     105                  ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
     106                  va(ji,jj,jk) = va(ji,jj,jk) + zva 
     107                  ! 
     108                  zwx(ji,jj,jk) = zwx(ji,jj,jk) + p2dt * zua * umask(ji,jj,jk) 
     109                  zwz(ji,jj,jk) = zwz(ji,jj,jk) + p2dt * zva * vmask(ji,jj,jk) 
     110               END DO   
    104111            END DO   
    105112         END DO   
    106113         ! 
    107          DO jl = 1, nn_zdfexp     ! Time splitting loop 
    108             ! 
    109             DO jk = 2, jpk            ! First vertical derivative 
    110                DO ji = 2, jpim1 
    111                   zwy(ji,jk) = avmu(ji,jj,jk) * ( zwx(ji,jk-1) - zwx(ji,jk) ) / fse3uw(ji,jj,jk)  
    112                   zww(ji,jk) = avmv(ji,jj,jk) * ( zwz(ji,jk-1) - zwz(ji,jk) ) / fse3vw(ji,jj,jk) 
    113                END DO   
    114             END DO   
    115             DO jk = 1, jpkm1          ! Second vertical derivative and trend estimation at kt+l*rdt/nn_zdfexp 
    116                DO ji = 2, jpim1 
    117                   zua = zlavmr * ( zwy(ji,jk) - zwy(ji,jk+1) ) / fse3u(ji,jj,jk) 
    118                   zva = zlavmr * ( zww(ji,jk) - zww(ji,jk+1) ) / fse3v(ji,jj,jk) 
    119                   ua(ji,jj,jk) = ua(ji,jj,jk) + zua 
    120                   va(ji,jj,jk) = va(ji,jj,jk) + zva 
    121                   ! 
    122                   zwx(ji,jk) = zwx(ji,jk) + p2dt * zua * umask(ji,jj,jk) 
    123                   zwz(ji,jk) = zwz(ji,jk) + p2dt * zva * vmask(ji,jj,jk) 
    124                END DO   
    125             END DO   
    126             ! 
    127          END DO   
    128          !                                            ! =============== 
    129       END DO                                          !   End of slab 
    130       !                                               ! =============== 
     114      END DO                           ! End of time splitting 
     115      ! 
    131116   END SUBROUTINE dyn_zdf_exp 
    132117 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r2620 r2621  
    471471 
    472472      
    473      USE dynzdf_exp,   ONLY: dyn_zdf_exp_alloc 
    474473#if   defined key_mpp_mpi   
    475474     USE lib_mpp,      ONLY: lib_mpp_alloc 
     
    555554 
    556555 
    557       ierr = ierr + dyn_zdf_exp_alloc() 
    558556#if defined key_mpp_mpi  
    559557      ierr = ierr + lib_mpp_alloc() 
Note: See TracChangeset for help on using the changeset viewer.