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 2590 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF – NEMO

Ignore:
Timestamp:
2011-02-18T13:49:27+01:00 (13 years ago)
Author:
trackstand2
Message:

Merge branch 'dynamic_memory' into master-svn-dyn

Location:
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn.F90

    r2528 r2590  
    207207      REAL(wp), INTENT(in   )                         ::   pwam       ! width of inflection 
    208208      REAL(wp), INTENT(in   )                         ::   pbot       ! bottom value (0<pbot<= 1) 
    209       REAL(wp), INTENT(in   ), DIMENSION        (jpk) ::   pdep       ! depth of the gridpoint (T, U, V, F) 
    210       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pah        ! adimensional vertical profile 
     209      REAL(wp), INTENT(in   ), DIMENSION          (:) ::   pdep       ! depth of the gridpoint (T, U, V, F) 
     210      REAL(wp), INTENT(inout), DIMENSION      (:,:,:) ::   pah        ! adimensional vertical profile 
    211211      !! 
    212212      INTEGER  ::   jk           ! dummy loop indices 
     
    249249      REAL(wp), INTENT(in   )                         ::   pwam       ! width of inflection 
    250250      REAL(wp), INTENT(in   )                         ::   pbot       ! bottom value (0<pbot<= 1) 
    251       REAL(wp), INTENT(in   ), DIMENSION(jpi,jpj,jpk) ::   pdep       ! dep of the gridpoint (T, U, V, F) 
    252       REAL(wp), INTENT(inout), DIMENSION(jpi,jpj,jpk) ::   pah        ! adimensional vertical profile 
     251      REAL(wp), INTENT(in   ), DIMENSION      (:,:,:) ::   pdep       ! dep of the gridpoint (T, U, V, F) 
     252      REAL(wp), INTENT(inout), DIMENSION      (:,:,:) ::   pah        ! adimensional vertical profile 
    253253      !! 
    254254      INTEGER  ::   jk           ! dummy loop indices 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c2d.h90

    r2528 r2590  
    145145      !! * Modules used 
    146146      USE ldftra_oce, ONLY : aht0 
    147  
     147      USE wrk_nemo, ONLY: iwrk_use, iwrk_release 
     148      USE wrk_nemo, ONLY: icof => iwrk_2d_1 
    148149      !! * Arguments 
    149150      LOGICAL, INTENT (in) ::   ld_print   ! If true, output arrays on numout 
     
    155156      INTEGER ::   ifreq, il1, il2, ij, ii 
    156157      INTEGER, DIMENSION(jpidta,jpidta) ::   idata 
    157       INTEGER, DIMENSION(jpi   ,jpj   ) ::   icof 
    158158 
    159159      REAL(wp) ::   zahmeq, zcoft, zcoff, zmsk 
     
    161161      CHARACTER (len=15) ::   clexp 
    162162      !!---------------------------------------------------------------------- 
     163 
     164      IF(.not. iwrk_use(2, 1))THEN 
     165         CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: requested workspace array is unavailable.') 
     166         RETURN 
     167      END IF 
    163168 
    164169      IF(lwp) WRITE(numout,*) 
     
    288293      ENDIF 
    289294 
     295      IF(.not. iwrk_release(2, 1))THEN 
     296         CALL ctl_stop('ldf_dyn_c2d_orca: ERROR: failed to release workspace array.') 
     297      END IF 
     298 
    290299   END SUBROUTINE ldf_dyn_c2d_orca 
    291300 
     
    307316      !! * Modules used 
    308317      USE ldftra_oce, ONLY : aht0 
     318      USE wrk_nemo, ONLY: iwrk_use, iwrk_release 
     319      USE wrk_nemo, ONLY: icof => iwrk_2d_1 
    309320 
    310321      !! * Arguments 
     
    317328      INTEGER ::   ifreq, il1, il2, ij, ii 
    318329      INTEGER, DIMENSION(jpidta,jpidta) ::   idata 
    319       INTEGER, DIMENSION(jpi   ,jpj   ) ::   icof 
    320330 
    321331      REAL(wp) ::   zahmeq, zcoft, zcoff, zmsk, zam20s 
     
    323333      CHARACTER (len=15) ::   clexp 
    324334      !!---------------------------------------------------------------------- 
     335 
     336      IF(.not. iwrk_use(2, 1))THEN 
     337         CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: requested workspace array is unavailable.') 
     338         RETURN 
     339      END IF 
    325340 
    326341      IF(lwp) WRITE(numout,*) 
     
    457472      ENDIF 
    458473 
     474      IF(.not. iwrk_release(2, 1))THEN 
     475         CALL ctl_stop('ldf_dyn_c2d_orca_R1: ERROR: failed to release workspace array.') 
     476      END IF 
     477 
    459478   END SUBROUTINE ldf_dyn_c2d_orca_R1 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_c3d.h90

    r2528 r2590  
    2727      !!---------------------------------------------------------------------- 
    2828      USE ldftra_oce, ONLY : aht0 
     29      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     30      USE wrk_nemo, ONLY: zcoef => wrk_1d_2 
    2931      !! 
    3032      LOGICAL, INTENT (in) :: ld_print   ! If true, output arrays on numout 
     
    4042         zetmax, zefmax, & 
    4143         zeumax, zevmax    
    42       REAL(wp), DIMENSION(jpk) ::   zcoef   ! temporary workspace 
    43       !!---------------------------------------------------------------------- 
     44      !!---------------------------------------------------------------------- 
     45 
     46      IF(.not. wrk_use(1,2))THEN 
     47         CALL ctl_stop('ldf_dyn_c3d: ERROR: requested workspace array unavailable.') 
     48         RETURN 
     49      END IF 
    4450 
    4551      IF(lwp) WRITE(numout,*) 
     
    182188      ENDIF 
    183189 
     190      IF(.not. wrk_release(1,2))THEN 
     191         CALL ctl_stop('ldf_dyn_c3d: ERROR: failed to release workspace array.') 
     192      END IF 
     193 
    184194   END SUBROUTINE ldf_dyn_c3d 
    185195 
     
    194204      !!---------------------------------------------------------------------- 
    195205      USE ldftra_oce, ONLY : aht0 
     206      USE wrk_nemo, ONLY: wrk_use, wrk_release, iwrk_use, iwrk_release 
     207      USE wrk_nemo, ONLY:  icof => iwrk_2d_1 
     208      USE wrk_nemo, ONLY: zahm0 =>  wrk_2d_1 
     209      USE wrk_nemo, ONLY: zcoef =>  wrk_1d_1 
    196210      !! 
    197211      LOGICAL, INTENT (in) :: ld_print   ! If true, output arrays on numout 
     
    203217      INTEGER ::   ifreq, il1, il2, ij, ii 
    204218      INTEGER, DIMENSION(jpidta, jpjdta) ::   idata 
    205       INTEGER, DIMENSION(jpi   , jpj   ) ::   icof 
    206219 
    207220      REAL(wp) ::   & 
    208221         zahmeq, zcoff, zcoft, zmsk,   & ! ??? 
    209222         zemax, zemin, zeref, zahmm 
    210       REAL(wp), DIMENSION(jpi,jpj) ::   zahm0 
    211       REAL(wp), DIMENSION(jpk) ::   zcoef 
    212223 
    213224      CHARACTER (len=15) ::   clexp 
    214225      !!---------------------------------------------------------------------- 
     226 
     227      IF( (.not. iwrk_use(2,1)) .OR. (.not. wrk_use(2,1)) .OR. & 
     228          (.not. wrk_use(1,1)))THEN 
     229         CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: requested workspace arrays are unavailable.') 
     230         RETURN 
     231      END IF 
    215232 
    216233      IF(lwp) WRITE(numout,*) 
     
    457474      ENDIF 
    458475 
     476      IF( (.not. iwrk_release(2,1)) .OR. (.not. wrk_release(2,1)) .OR. & 
     477          (.not. wrk_release(1,1)))THEN 
     478         CALL ctl_stop('ldf_dyn_c3d_orca: ERROR: failed to release workspace arrays.') 
     479      END IF 
     480 
    459481   END SUBROUTINE ldf_dyn_c3d_orca 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfdyn_oce.F90

    r2528 r2590  
    2323 
    2424#if defined key_dynldf_c3d 
    25    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   ahm1, ahm2, ahm3, ahm4  ! ** 3D coefficients ** 
     25   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahm1, ahm2, ahm3, ahm4  ! ** 3D coefficients ** 
    2626#elif defined key_dynldf_c2d 
    27    REAL(wp), PUBLIC, DIMENSION(jpi,jpj)    ::   ahm1, ahm2, ahm3, ahm4  ! ** 2D coefficients ** 
     27   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) ::   ahm1, ahm2, ahm3, ahm4  ! ** 2D coefficients ** 
    2828#elif defined key_dynldf_c1d 
    2929   REAL(wp), PUBLIC, DIMENSION(jpk)         ::   ahm1, ahm2, ahm3, ahm4  ! ** 2D coefficients ** 
     
    3737   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    3838   !!====================================================================== 
     39CONTAINS 
     40 
     41  FUNCTION ldfdyn_oce_alloc() 
     42    !!---------------------------------------------------------------------- 
     43    !!---------------------------------------------------------------------- 
     44    IMPLICIT none 
     45    INTEGER :: ldfdyn_oce_alloc 
     46 
     47    ldfdyn_oce_alloc = 0 
     48 
     49#if defined key_dynldf_c3d 
     50    ALLOCATE(ahm1(jpi,jpj,jpk), ahm2(jpi,jpj,jpk), ahm3(jpi,jpj,jpk), & 
     51             ahm4(jpi,jpj,jpk), Stat=ldfdyn_oce_alloc) 
     52#elif defined key_dynldf_c2d 
     53    ALLOCATE(ahm1(jpi,jpj), ahm2(jpi,jpj), ahm3(jpi,jpj),             & 
     54             ahm4(jpi,jpj),     Stat=ldfdyn_oce_alloc) 
     55#elif defined key_dynldf_c1d 
     56    ALLOCATE(ahm1(jpk), ahm2(jpk), ahm3(jpk),                         & 
     57             ahm4(jpk),         Stat=ldfdyn_oce_alloc) 
     58#endif 
     59 
     60  END FUNCTION ldfdyn_oce_alloc 
     61 
     62  !!---------------------------------------------------------------------- 
     63 
    3964END MODULE ldfdyn_oce 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfeiv.F90

    r2528 r2590  
    5353      !!             - wslpi, wslpj : i- and j-slopes of neutral surfaces at w-points.  
    5454      !!---------------------------------------------------------------------- 
     55      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     56      USE wrk_nemo, ONLY: zn  => wrk_2d_1, zah   => wrk_2d_2, & 
     57                          zhw => wrk_2d_3, zross => wrk_2d_4 
     58      !! 
    5559      INTEGER, INTENT(in) ::   kt   ! ocean time-step inedx 
    5660      !! 
    5761      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    5862      REAL(wp) ::   zfw, ze3w, zn2, zf20, zaht, zaht_min      ! temporary scalars 
    59       REAL(wp), DIMENSION(jpi,jpj) ::   zn, zah, zhw, zross   ! 2D workspace 
    6063      !!---------------------------------------------------------------------- 
    6164       
     65      IF(.not. wrk_use(2, 1,2,3,4))THEN 
     66         CALL ctl_stop('ldf_eiv: ERROR: requested workspace arrays are unavailable.') 
     67         RETURN 
     68      END IF 
     69 
    6270      IF( kt == nit000 ) THEN 
    6371         IF(lwp) WRITE(numout,*) 
     
    235243      CALL iom_put( "aht2d"    , ahtw )   ! lateral eddy diffusivity 
    236244      CALL iom_put( "aht2d_eiv", aeiw )   ! EIV lateral eddy diffusivity 
     245      !   
     246      IF(.not. wrk_release(2, 1,2,3,4))THEN 
     247         CALL ctl_stop('ldf_eiv: ERROR: failed to release workspace arrays.') 
     248      END IF 
    237249      ! 
    238250   END SUBROUTINE ldf_eiv 
     
    244256CONTAINS 
    245257   SUBROUTINE ldf_eiv( kt )       ! Empty routine 
     258      INTEGER :: kt 
    246259      WRITE(*,*) 'ldf_eiv: You should not have seen this print! error?', kt 
    247260   END SUBROUTINE ldf_eiv 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r2528 r2590  
    3838   PUBLIC   ldf_slp_grif   ! routine called by step.F90 
    3939   PUBLIC   ldf_slp_init   ! routine called by opa.F90 
     40   PUBLIC   ldf_slp_alloc  ! routine called by nemo_init->nemo_alloc 
    4041 
    4142   LOGICAL , PUBLIC, PARAMETER ::   lk_ldfslp = .TRUE.     !: slopes flag 
    4243   !                                                                             !! Madec operator 
    43    REAL(wp), PUBLIC, DIMENSION(:,:,:)    , ALLOCATABLE ::   uslp, wslpi          !: i_slope at U- and W-points 
    44    REAL(wp), PUBLIC, DIMENSION(:,:,:)    , ALLOCATABLE ::   vslp, wslpj          !: j-slope at V- and W-points 
    45    !                                                                             !! Griffies operator 
    46    REAL(wp), PUBLIC, DIMENSION(:,:,:)    , ALLOCATABLE ::   wslp2                !: wslp**2 from Griffies quarter cells 
    47    REAL(wp), PUBLIC, DIMENSION(:,:,:,:,:), ALLOCATABLE ::   triadi_g, triadj_g   !: skew flux  slopes relative to geopotentials  
    48    REAL(wp), PUBLIC, DIMENSION(:,:,:,:,:), ALLOCATABLE ::   triadi  , triadj     !: isoneutral slopes relative to model-coordinate 
     44   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)    ::   uslp, wslpi          !: i_slope at U- and W-points 
     45   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)    ::   vslp, wslpj          !: j-slope at V- and W-points 
     46   !                                                                !! Griffies operator 
     47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)    ::   wslp2                !: wslp**2 from Griffies quarter cells 
     48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) ::   triadi_g, triadj_g   !: skew flux  slopes relative to geopotentials  
     49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) ::   triadi  , triadj     !: isoneutral slopes relative to model-coordinate 
    4950 
    5051   !                                                              !! Madec operator 
    51    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   omlmask           ! mask of the surface mixed layer at T-pt 
    52    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE ::   uslpml, wslpiml   ! i_slope at U- and W-points just below the mixed layer 
    53    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE ::   vslpml, wslpjml   ! j_slope at V- and W-points just below the mixed layer 
     52   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   omlmask           ! mask of the surface mixed layer at T-pt 
     53   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)  ::   uslpml, wslpiml   ! i_slope at U- and W-points just below the mixed layer 
     54   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)  ::   vslpml, wslpjml   ! j_slope at V- and W-points just below the mixed layer 
    5455 
    5556   REAL(wp) ::   repsln = 1.e-25_wp       ! tiny value used as minium of di(rho), dj(rho) and dk(rho) 
     57 
     58   ! Workspace arrays for ldf_slp_grif. These could be replaced by several 3D and 2D workspace 
     59   ! arrays from the wrk_nemo module with a bit of code re-writing. The 4D workspace  
     60   ! arrays can't be used here because of the zero-indexing of some of the ranks. ARPDBG. 
     61   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   zdzrho, zdyrho, zdxrho     ! Horizontal and vertical density gradients 
     62   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   zti_mlb, ztj_mlb 
    5663 
    5764   !! * Substitutions 
     
    6673   !!---------------------------------------------------------------------- 
    6774CONTAINS 
     75 
     76   FUNCTION ldf_slp_alloc() 
     77      !!---------------------------------------------------------------------- 
     78      !!              ***  ROUTINE ldf_slp_alloc  *** 
     79      !!---------------------------------------------------------------------- 
     80      IMPLICIT none 
     81      INTEGER               :: ldf_slp_alloc 
     82      INTEGER, DIMENSION(3) :: ierr 
     83      !!---------------------------------------------------------------------- 
     84 
     85      ALLOCATE(uslp(jpi,jpj,jpk), wslpi(jpi,jpj,jpk), & 
     86               vslp(jpi,jpj,jpk), wslpj(jpi,jpj,jpk), Stat=ierr(1)) 
     87      ! 
     88      ALLOCATE(omlmask(jpi,jpj,jpk),                  & 
     89               uslpml(jpi,jpj), wslpiml(jpi,jpj),     & 
     90               vslpml(jpi,jpj), wslpjml(jpi,jpj), Stat=ierr(2)) 
     91      ! 
     92      ALLOCATE(zdzrho(jpi,jpj,jpk,0:1),  zdyrho(jpi,jpj,jpk,0:1),  & 
     93               zdxrho(jpi,jpj,jpk,0:1),  zti_mlb(jpi,jpj,0:1,0:1), & 
     94               ztj_mlb(jpi,jpj,0:1,0:1), Stat=ierr(3)) 
     95 
     96      ldf_slp_alloc = MAXVAL(ierr) 
     97 
     98   END FUNCTION ldf_slp_alloc 
     99 
    68100 
    69101   SUBROUTINE ldf_slp( kt, prd, pn2 ) 
     
    96128      USE oce , zww   => ta   ! use ta as workspace 
    97129      USE oce , zwz   => sa   ! use sa as workspace 
    98       !! 
    99       INTEGER , INTENT(in)                         ::   kt    ! ocean time-step index 
    100       REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) ::   prd   ! in situ density 
    101       REAL(wp), INTENT(in), DIMENSION(jpi,jpj,jpk) ::   pn2   ! Brunt-Vaisala frequency (locally ref.) 
     130      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     131      USE wrk_nemo, ONLY: zdzr => wrk_3d_1 
     132      !! 
     133      INTEGER , INTENT(in)                   ::   kt    ! ocean time-step index 
     134      REAL(wp), INTENT(in), DIMENSION(:,:,:) ::   prd   ! in situ density 
     135      REAL(wp), INTENT(in), DIMENSION(:,:,:) ::   pn2   ! Brunt-Vaisala frequency (locally ref.) 
    102136      !! 
    103137      INTEGER  ::   ji , jj , jk    ! dummy loop indices 
     
    108142      REAL(wp) ::   zcj, zfj, zav, zbv, zaj, zbj   !   -      - 
    109143      REAL(wp) ::   zck, zfk,      zbw             !   -      - 
    110       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zdzr   ! 3D workspace 
    111       !!---------------------------------------------------------------------- 
    112        
     144      !!---------------------------------------------------------------------- 
     145 
     146      IF(.not. wrk_use(3, 1))THEN 
     147         CALL ctl_stop('ldf_slp: ERROR: requested workspace arrays are unavailable.') 
     148         RETURN 
     149      END IF 
     150 
    113151      zeps   =  1.e-20_wp        !==   Local constant initialization   ==! 
    114152      z1_16  =  1.0_wp / 16._wp 
     
    354392      ENDIF 
    355393      ! 
     394      IF(.not. wrk_release(3, 1))THEN 
     395         CALL ctl_stop('ldf_slp: ERROR: failed to release workspace arrays.') 
     396      END IF 
     397      ! 
    356398   END SUBROUTINE ldf_slp 
    357399    
     
    375417      USE oce,   zdjt  => ta   ! use ta as workspace 
    376418      USE oce,   zdjs  => sa   ! use sa as workspace 
     419      USE wrk_nemo, ONLY: wrk_use, wrk_release 
     420      USE wrk_nemo, ONLY: zdkt   => wrk_3d_2, zdks  => wrk_3d_3, & 
     421                          zalpha => wrk_3d_4, zbeta => wrk_3d_5    ! alpha, beta at T points, at depth fsgdept 
     422      USE wrk_nemo, ONLY: z1_mlbw => wrk_2d_1 
    377423      !! 
    378424      INTEGER, INTENT( in ) ::   kt         ! ocean time-step index 
     
    385431      REAL(wp) ::   zdyrho_raw, ztj_coord, ztj_raw, ztj_lim, ztj_lim2, ztj_g_raw, ztj_g_lim 
    386432      REAL(wp) ::   zdzrho_raw 
    387       REAL(wp), DIMENSION(jpi,jpj,jpk,0:1) ::   zdzrho, zdyrho, zdxrho     ! Horizontal and vertical density gradients 
    388       REAL(wp), DIMENSION(jpi,jpj,0:1,0:1) ::   zti_mlb, ztj_mlb 
    389       REAL(wp), DIMENSION(jpi,jpj,jpk)     ::   zdkt, zdks 
    390       REAL(wp), DIMENSION(jpi,jpj,jpk)     ::   zalpha, zbeta       ! alpha, beta at T points, at depth fsgdept 
    391       REAL(wp), DIMENSION(jpi,jpj)         ::   z1_mlbw 
    392       !!---------------------------------------------------------------------- 
     433      !!---------------------------------------------------------------------- 
     434 
     435      IF( (.not. wrk_use(3, 2,3,4,5)) .OR. (.not. wrk_use(2, 1)) )THEN 
     436         CALL ctl_stop('ldf_slp_grif: ERROR: requested workspace arrays are unavailable.') 
     437         RETURN 
     438      END IF 
    393439 
    394440      !--------------------------------! 
     
    572618      CALL lbc_lnk( wslp2, 'W', 1. )      ! lateral boundary confition on wslp2 only   ==>>> gm : necessary ? to be checked 
    573619      ! 
     620      IF( (.not. wrk_release(3, 2,3,4,5)) .OR. (.not. wrk_release(2, 1)) )THEN 
     621         CALL ctl_stop('ldf_slp_grif: ERROR: failed to release workspace arrays.') 
     622      END IF 
     623      ! 
    574624   END SUBROUTINE ldf_slp_grif 
    575625 
     
    591641      !!                omlmask         :  mixed layer mask 
    592642      !!---------------------------------------------------------------------- 
    593       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   prd            ! in situ density 
    594       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   pn2            ! Brunt-Vaisala frequency (locally ref.) 
    595       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   p_gru, p_grv   ! i- & j-gradient of density (u- & v-pts) 
    596       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   p_dzr          ! z-gradient of density      (T-point) 
     643      REAL(wp), DIMENSION(:,:,:), INTENT(in) ::   prd            ! in situ density 
     644      REAL(wp), DIMENSION(:,:,:), INTENT(in) ::   pn2            ! Brunt-Vaisala frequency (locally ref.) 
     645      REAL(wp), DIMENSION(:,:,:), INTENT(in) ::   p_gru, p_grv   ! i- & j-gradient of density (u- & v-pts) 
     646      REAL(wp), DIMENSION(:,:,:), INTENT(in) ::   p_dzr          ! z-gradient of density      (T-point) 
    597647      !! 
    598648      INTEGER  ::   ji , jj , jk         ! dummy loop indices 
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra_oce.F90

    r2528 r2590  
    1010   IMPLICIT NONE 
    1111   PRIVATE 
     12 
     13   PUBLIC ldftra_oce_alloc ! called by nemo_init->nemo_alloc, nemogcm.F90 
    1214 
    1315   !!---------------------------------------------------------------------- 
     
    3234 
    3335#if defined key_traldf_c3d 
    34    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   ahtt, ahtu, ahtv, ahtw   !: ** 3D coefficients ** at T-, U-, V-, W-points 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ahtt, ahtu, ahtv, ahtw   !: ** 3D coefficients ** at T-, U-, V-, W-points 
    3537#elif defined key_traldf_c2d 
    36    REAL(wp), PUBLIC, DIMENSION(jpi,jpj)     ::   ahtt, ahtu, ahtv, ahtw   !: ** 2D coefficients ** at T-, U-, V-, W-points 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   ahtt, ahtu, ahtv, ahtw   !: ** 2D coefficients ** at T-, U-, V-, W-points 
    3739#elif defined key_traldf_c1d 
    38    REAL(wp), PUBLIC, DIMENSION(jpk)         ::   ahtt, ahtu, ahtv, ahtw   !: ** 1D coefficients ** at T-, U-, V-, W-points 
     40   REAL(wp), PUBLIC, DIMENSION(jpk)         ::   ahtt, ahtu, ahtv, ahtw   !: ** 1D coefficients ** at T-, U-, V-, W-points ARPDBGjpk 
    3941#else 
    4042   REAL(wp), PUBLIC                         ::   ahtt, ahtu, ahtv, ahtw   !: ** 0D coefficients ** at T-, U-, V-, W-points 
     
    4951       
    5052# if defined key_traldf_c3d 
    51    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   aeiu, aeiv, aeiw  !: ** 3D coefficients ** at U-, V-, W-points  [m2/s] 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aeiu, aeiv, aeiw  !: ** 3D coefficients ** at U-, V-, W-points  [m2/s] 
    5254# elif defined key_traldf_c2d 
    53    REAL(wp), PUBLIC, DIMENSION(jpi,jpj)    ::   aeiu, aeiv, aeiw  !: ** 2D coefficients ** at U-, V-, W-points  [m2/s] 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) ::   aeiu, aeiv, aeiw  !: ** 2D coefficients ** at U-, V-, W-points  [m2/s] 
    5456# elif defined key_traldf_c1d 
    55    REAL(wp), PUBLIC, DIMENSION(jpk)        ::   aeiu, aeiv, aeiw  !: ** 1D coefficients ** at U-, V-, W-points  [m2/s] 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,     DIMENSION(:) ::   aeiu, aeiv, aeiw  !: ** 1D coefficients ** at U-, V-, W-points  [m2/s] 
    5658# else 
    5759   REAL(wp), PUBLIC                         ::   aeiu, aeiv, aeiw  !: ** 0D coefficients ** at U-, V-, W-points  [m2/s] 
    5860# endif 
    5961# if defined key_diaeiv 
    60    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   u_eiv, v_eiv, w_eiv   !: eddy induced velocity [m/s] 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   u_eiv, v_eiv, w_eiv   !: eddy induced velocity [m/s] 
    6163# endif 
    6264 
     
    7476   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    7577   !!===================================================================== 
     78CONTAINS 
     79 
     80   FUNCTION ldftra_oce_alloc() 
     81     !!---------------------------------------------------------------------- 
     82     !!---------------------------------------------------------------------- 
     83     IMPLICIT None 
     84     INTEGER               :: ldftra_oce_alloc 
     85     INTEGER, DIMENSION(3) :: ierr 
     86     !!---------------------------------------------------------------------- 
     87     ierr(:) = 0 
     88 
     89#if defined key_traldf_c3d 
     90     ALLOCATE(ahtt(jpi,jpj,jpk), ahtu(jpi,jpj,jpk), ahtv(jpi,jpj,jpk), & 
     91              ahtw(jpi,jpj,jpk), Stat=ierr(1)) 
     92#elif defined key_traldf_c2d 
     93     ALLOCATE(ahtt(jpi,jpj), ahtu(jpi,jpj), ahtv(jpi,jpj), & 
     94              ahtw(jpi,jpj), Stat=ierr(1)) 
     95#elif defined key_traldf_c1d 
     96     ! No need to allocate arrays where extent only depends on jpk ARPDBGjpk 
     97#endif 
     98 
     99#if defined key_traldf_eiv 
     100 
     101#if defined key_traldf_c3d 
     102     ALLOCATE(aeiu(jpi,jpj,jpk), aeiv(jpi,jpj,jpk), aeiw(jpi,jpj,jpk), &  
     103              Stat=ierr(2)) 
     104#elif defined key_traldf_c2d 
     105     ALLOCATE(aeiu(jpi,jpj), aeiv(jpi,jpj), aeiw(jpi,jpj), Stat=ierr(2)) 
     106#elif defined key_traldf_c1d 
     107     ALLOCATE(aeiu(jpk), aeiv(jpk), aeiw(jpk), Stat=ierr(2)) 
     108#endif 
     109 
     110# if defined key_diaeiv 
     111     ALLOCATE(u_eiv(jpi,jpj,jpk), v_eiv(jpi,jpj,jpk), w_eiv(jpi,jpj,jpk), & 
     112              Stat=ierr(3)) 
     113# endif 
     114 
     115#endif 
     116      
     117     ldftra_oce_alloc = MAXVAL(ierr) 
     118 
     119   END FUNCTION ldftra_oce_alloc 
     120 
     121   !!---------------------------------------------------------------------- 
     122 
    76123END MODULE ldftra_oce 
Note: See TracChangeset for help on using the changeset viewer.