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 2618 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf_iso.F90 – NEMO

Ignore:
Timestamp:
2011-02-26T13:31:38+01:00 (13 years ago)
Author:
gm
Message:

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

File:
1 edited

Legend:

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

    r2590 r2618  
    44   !! Ocean dynamics:  lateral viscosity trend 
    55   !!====================================================================== 
     6   !! History :  OPA  !  97-07  (G. Madec)  Original code 
     7   !!  NEMO      1.0  !  2002-08  (G. Madec)  F90: Free form and module 
     8   !!             -   !  2004-08  (C. Talandier) New trends organization 
     9   !!            2.0  !  2005-11  (G. Madec)  s-coordinate: horizontal diffusion 
     10   !!---------------------------------------------------------------------- 
    611#if defined key_ldfslp   ||   defined key_esopa 
    712   !!---------------------------------------------------------------------- 
     
    1217   !!                  tal s-coordinate laplacian operator. 
    1318   !!---------------------------------------------------------------------- 
    14    !! * Modules used 
    1519   USE oce             ! ocean dynamics and tracers 
    1620   USE dom_oce         ! ocean space and time domain 
     
    2832   PRIVATE 
    2933 
    30    !! * Routine accessibility 
    31    PUBLIC dyn_ldf_iso           ! called by step.F90 
    32    PUBLIC dyn_ldf_iso_alloc     ! called by nemogcm.F90 
    33  
    34    ! These are just workspace arrays but because they are (jpi,jpk) in extent 
    35    ! we can't use the arrays in wrk_nemo for them 
    36    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u 
    37    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v 
     34   PUBLIC   dyn_ldf_iso           ! called by step.F90 
     35   PUBLIC   dyn_ldf_iso_alloc     ! called by nemogcm.F90 
     36 
     37   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u   ! 2D workspace (dyn_ldf_iso)  
     38   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v   !  -      - 
    3839 
    3940   !! * Substitutions 
     
    4243#  include "vectopt_loop_substitute.h90" 
    4344   !!---------------------------------------------------------------------- 
    44    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     45   !! NEMO/OPA 3.3 , NEMO Consortium (2011) 
    4546   !! $Id$ 
    46    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    47    !!---------------------------------------------------------------------- 
    48  
     47   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     48   !!---------------------------------------------------------------------- 
    4949CONTAINS 
    5050 
    51    FUNCTION dyn_ldf_iso_alloc() 
     51   INTEGER FUNCTION dyn_ldf_iso_alloc() 
    5252      !!---------------------------------------------------------------------- 
    5353      !!                  ***  ROUTINE dyn_ldf_iso_alloc  *** 
    5454      !!---------------------------------------------------------------------- 
    55       INTEGER :: dyn_ldf_iso_alloc 
    56       !!---------------------------------------------------------------------- 
    57  
    58       ALLOCATE(zfuw(jpi,jpk), zdiu(jpi,jpk), zdju(jpi,jpk), zdj1u(jpi,jpk), &  
    59                zfvw(jpi,jpk), zdiv(jpi,jpk), zdjv(jpi,jpk), zdj1v(jpi,jpk), & 
    60                Stat=dyn_ldf_iso_alloc) 
    61  
    62       IF(dyn_ldf_iso_alloc /= 0)THEN 
    63          CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') 
    64       END IF 
    65  
     55      ! 
     56      ALLOCATE( zfuw(jpi,jpk) , zdiu(jpi,jpk) , zdju(jpi,jpk) , zdj1u(jpi,jpk) ,     &  
     57         &      zfvw(jpi,jpk) , zdiv(jpi,jpk) , zdjv(jpi,jpk) , zdj1v(jpi,jpk) , STAT=dyn_ldf_iso_alloc) 
     58         ! 
     59      IF( dyn_ldf_iso_alloc /= 0 )   CALL ctl_warn('dyn_ldf_iso_alloc: array allocate failed.') 
     60      ! 
    6661   END FUNCTION dyn_ldf_iso_alloc 
    6762 
     
    110105      !!        Update (avmu,avmv) to accompt for the diagonal vertical component 
    111106      !!      of the rotated operator in dynzdf module 
    112       !! 
    113       !! History : 
    114       !!   8.0  !  97-07  (G. Madec)  Original code 
    115       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    116       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    117       !!        !  05-11  (G. Madec)  s-coordinate: horizontal diffusion 
    118107      !!---------------------------------------------------------------------- 
    119       USE wrk_nemo, ONLY: wrk_use, wrk_release 
    120       USE wrk_nemo, ONLY: ziut => wrk_2d_1, zjuf  => wrk_2d_2, & ! temporary workspace 
    121                           zjvt => wrk_2d_3, zivf  => wrk_2d_4, &  
    122                           zdku => wrk_2d_5, zdk1u => wrk_2d_6, & 
    123                           zdkv => wrk_2d_7, zdk1v => wrk_2d_8 
    124       !! 
    125       !! * Arguments 
    126       INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
    127  
    128       !! * Local declarations 
    129       INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    130       REAL(wp) ::   & 
    131          zabe1, zabe2, zcof1, zcof2,   &  ! temporary scalars 
    132          zmskt, zmskf, zbu, zbv,       & 
    133          zuah, zvah 
    134  
    135       REAL(wp) ::   & 
    136          zcoef0, zcoef3, zcoef4, zmkt, zmkf,   & 
    137          zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    138  
     108      USE wrk_nemo, ONLY:   wrk_use, wrk_release 
     109      USE wrk_nemo, ONLY:   ziut  => wrk_2d_1 , zjuf  => wrk_2d_2 , zjvt => wrk_2d_3    ! 2D workspace 
     110      USE wrk_nemo, ONLY:   zivf  => wrk_2d_4 , zdku  => wrk_2d_5 , zdkv => wrk_2d_6    ! 2D workspace 
     111      USE wrk_nemo, ONLY:   zdk1u => wrk_2d_7 , zdk1v => wrk_2d_8 
     112      ! 
     113      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     114      ! 
     115      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     116      REAL(wp) ::   zabe1, zabe2, zcof1, zcof2                       ! local scalars 
     117      REAL(wp) ::   zmskt, zmskf, zbu, zbv, zuah, zvah               !   -      - 
     118      REAL(wp) ::   zcoef0, zcoef3, zcoef4, zmkt, zmkf               !   -      - 
     119      REAL(wp) ::   zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj   !   -      - 
    139120      !!---------------------------------------------------------------------- 
    140121 
    141       IF( .NOT. wrk_use(2, 1,2,3,4,5,6,7,8))THEN 
    142          CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable.') 
    143          RETURN 
     122      IF( .NOT. wrk_use(2, 1,2,3,4,5,6,7,8) ) THEN 
     123         CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable.')   ;   RETURN 
    144124      END IF 
    145125 
     
    148128         IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 
    149129         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   s-coordinate horizontal diffusive operator' 
     130         !                                      ! allocate dyn_ldf_bilap arrays 
     131         IF( dyn_ldf_iso_alloc() /= 0 )   CALL ctl_stop('STOP', 'dyn_ldf_iso: failed to allocate arrays') 
    150132      ENDIF 
    151133 
    152 !     ! s-coordinate: Iso-level diffusion on momentum but not on tracer 
     134      ! s-coordinate: Iso-level diffusion on momentum but not on tracer 
    153135      IF( ln_dynldf_hor .AND. ln_traldf_iso ) THEN 
    154   
    155          ! set the slopes of iso-level 
    156          DO jk = 1, jpk 
     136         ! 
     137         DO jk = 1, jpk         ! set the slopes of iso-level 
    157138            DO jj = 2, jpjm1 
    158139               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    164145            END DO 
    165146         END DO 
    166   
    167147         ! Lateral boundary conditions on the slopes 
    168148         CALL lbc_lnk( uslp , 'U', -1. )      ;      CALL lbc_lnk( vslp , 'V', -1. ) 
     
    170150  
    171151!!bug 
    172          if( kt == nit000 ) then 
    173             IF(lwp) WRITE(numout,*) ' max slop: u',SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)),  & 
    174                &                             ' wi', sqrt(MAXVAL(wslpi)), ' wj', sqrt(MAXVAL(wslpj)) 
     152         IF( kt == nit000 ) then 
     153            IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)),  & 
     154               &                             ' wi', sqrt(MAXVAL(wslpi))     , ' wj', sqrt(MAXVAL(wslpj)) 
    175155         endif 
    176156!!end 
Note: See TracChangeset for help on using the changeset viewer.