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/dynldf_iso.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/dynldf_iso.F90

    r2528 r2715  
    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 
     
    2327   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2428   USE in_out_manager  ! I/O manager 
     29   USE lib_mpp         ! MPP library 
    2530   USE prtctl          ! Print control 
    2631 
     
    2833   PRIVATE 
    2934 
    30    !! * Routine accessibility 
    31    PUBLIC dyn_ldf_iso           ! called by step.F90 
     35   PUBLIC   dyn_ldf_iso           ! called by step.F90 
     36   PUBLIC   dyn_ldf_iso_alloc     ! called by nemogcm.F90 
     37 
     38   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfuw, zdiu, zdju, zdj1u   ! 2D workspace (dyn_ldf_iso)  
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zfvw, zdiv, zdjv, zdj1v   !  -      - 
    3240 
    3341   !! * Substitutions 
     
    3644#  include "vectopt_loop_substitute.h90" 
    3745   !!---------------------------------------------------------------------- 
    38    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     46   !! NEMO/OPA 3.3 , NEMO Consortium (2011) 
    3947   !! $Id$ 
    40    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    41    !!---------------------------------------------------------------------- 
    42  
     48   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     49   !!---------------------------------------------------------------------- 
    4350CONTAINS 
     51 
     52   INTEGER FUNCTION dyn_ldf_iso_alloc() 
     53      !!---------------------------------------------------------------------- 
     54      !!                  ***  ROUTINE dyn_ldf_iso_alloc  *** 
     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   END FUNCTION dyn_ldf_iso_alloc 
     61 
    4462 
    4563   SUBROUTINE dyn_ldf_iso( kt ) 
     
    86104      !!        Update (avmu,avmv) to accompt for the diagonal vertical component 
    87105      !!      of the rotated operator in dynzdf module 
    88       !! 
    89       !! History : 
    90       !!   8.0  !  97-07  (G. Madec)  Original code 
    91       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    92       !!   9.0  !  04-08  (C. Talandier) New trends organization 
    93       !!        !  05-11  (G. Madec)  s-coordinate: horizontal diffusion 
    94106      !!---------------------------------------------------------------------- 
    95       !! * Arguments 
    96       INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
    97  
    98       !! * Local declarations 
    99       INTEGER  ::   ji, jj, jk            ! dummy loop indices 
    100       REAL(wp) ::   & 
    101          zabe1, zabe2, zcof1, zcof2,   &  ! temporary scalars 
    102          zmskt, zmskf, zbu, zbv,       & 
    103          zuah, zvah 
    104       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    105          ziut, zjuf, zjvt, zivf,        & ! temporary workspace 
    106          zdku, zdk1u, zdkv, zdk1v 
    107  
    108       REAL(wp) ::   & 
    109          zcoef0, zcoef3, zcoef4, zmkt, zmkf,   & 
    110          zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj 
    111       REAL(wp), DIMENSION(jpi,jpk) ::        & 
    112          zfuw, zdiu, zdju, zdj1u,            & !    "        " 
    113          zfvw, zdiv, zdjv, zdj1v 
    114  
     107      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     108      USE wrk_nemo, ONLY:   ziut  => wrk_2d_1 , zjuf  => wrk_2d_2 , zjvt => wrk_2d_3    ! 2D workspace 
     109      USE wrk_nemo, ONLY:   zivf  => wrk_2d_4 , zdku  => wrk_2d_5 , zdkv => wrk_2d_6    ! 2D workspace 
     110      USE wrk_nemo, ONLY:   zdk1u => wrk_2d_7 , zdk1v => wrk_2d_8 
     111      ! 
     112      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     113      ! 
     114      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
     115      REAL(wp) ::   zabe1, zabe2, zcof1, zcof2                       ! local scalars 
     116      REAL(wp) ::   zmskt, zmskf, zbu, zbv, zuah, zvah               !   -      - 
     117      REAL(wp) ::   zcoef0, zcoef3, zcoef4, zmkt, zmkf               !   -      - 
     118      REAL(wp) ::   zuav, zvav, zuwslpi, zuwslpj, zvwslpi, zvwslpj   !   -      - 
    115119      !!---------------------------------------------------------------------- 
     120 
     121      IF( wrk_in_use(2, 1,2,3,4,5,6,7,8) ) THEN 
     122         CALL ctl_stop('dyn_ldf_iso: requested workspace arrays unavailable')   ;   RETURN 
     123      END IF 
    116124 
    117125      IF( kt == nit000 ) THEN 
     
    119127         IF(lwp) WRITE(numout,*) 'dyn_ldf_iso : iso-neutral laplacian diffusive operator or ' 
    120128         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   s-coordinate horizontal diffusive operator' 
     129         !                                      ! allocate dyn_ldf_bilap arrays 
     130         IF( dyn_ldf_iso_alloc() /= 0 )   CALL ctl_stop('STOP', 'dyn_ldf_iso: failed to allocate arrays') 
    121131      ENDIF 
    122132 
    123 !     ! s-coordinate: Iso-level diffusion on momentum but not on tracer 
     133      ! s-coordinate: Iso-level diffusion on momentum but not on tracer 
    124134      IF( ln_dynldf_hor .AND. ln_traldf_iso ) THEN 
    125   
    126          ! set the slopes of iso-level 
    127          DO jk = 1, jpk 
     135         ! 
     136         DO jk = 1, jpk         ! set the slopes of iso-level 
    128137            DO jj = 2, jpjm1 
    129138               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    135144            END DO 
    136145         END DO 
    137   
    138146         ! Lateral boundary conditions on the slopes 
    139147         CALL lbc_lnk( uslp , 'U', -1. )      ;      CALL lbc_lnk( vslp , 'V', -1. ) 
     
    141149  
    142150!!bug 
    143          if( kt == nit000 ) then 
    144             IF(lwp) WRITE(numout,*) ' max slop: u',SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)),  & 
    145                &                             ' wi', sqrt(MAXVAL(wslpi)), ' wj', sqrt(MAXVAL(wslpj)) 
     151         IF( kt == nit000 ) then 
     152            IF(lwp) WRITE(numout,*) ' max slop: u', SQRT( MAXVAL(uslp*uslp)), ' v ', SQRT(MAXVAL(vslp)),  & 
     153               &                             ' wi', sqrt(MAXVAL(wslpi))     , ' wj', sqrt(MAXVAL(wslpj)) 
    146154         endif 
    147155!!end 
     
    420428      !                                                ! =============== 
    421429 
     430      IF( wrk_not_released(2, 1,2,3,4,5,6,7,8) )   CALL ctl_stop('dyn_ldf_iso: failed to release workspace arrays') 
     431      ! 
    422432   END SUBROUTINE dyn_ldf_iso 
    423433 
     
    428438CONTAINS 
    429439   SUBROUTINE dyn_ldf_iso( kt )               ! Empty routine 
     440      INTEGER, INTENT(in) :: kt 
    430441      WRITE(*,*) 'dyn_ldf_iso: You should not have seen this print! error?', kt 
    431442   END SUBROUTINE dyn_ldf_iso 
Note: See TracChangeset for help on using the changeset viewer.