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

Changeset 8569


Ignore:
Timestamp:
2017-09-27T18:40:13+02:00 (7 years ago)
Author:
clem
Message:

Prather: allocate specific arrays only when prather is used

Location:
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r8564 r8569  
    106106   !! v_i         |      -      |    Ice volume per unit area     | m     | 
    107107   !! v_s         |      -      |    Snow volume per unit area    | m     | 
    108    !! sv_i       |      -      |    Sea ice salt content         | ppt.m | 
     108   !! sv_i        |      -      |    Sea ice salt content         | ppt.m | 
    109109   !! oa_i        !      -      !    Sea ice areal age content    | s     | 
    110110   !! e_i         !      -      !    Ice enthalpy                 | J/m2  |  
     
    356356 
    357357   !!---------------------------------------------------------------------- 
    358    !! * Moments for advection 
    359    !!---------------------------------------------------------------------- 
    360    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   sxopw, syopw, sxxopw, syyopw, sxyopw   !: open water in sea ice 
    361    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxice, syice, sxxice, syyice, sxyice   !: ice thickness  
    362    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxsn , sysn , sxxsn , syysn , sxysn    !: snow thickness 
    363    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxa  , sya  , sxxa  , syya  , sxya     !: lead fraction 
    364    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxc0 , syc0 , sxxc0 , syyc0 , sxyc0    !: snow thermal content 
    365    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxsal, sysal, sxxsal, syysal, sxysal   !: ice salinity 
    366    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxage, syage, sxxage, syyage, sxyage   !: ice age 
    367    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   sxe  , sye  , sxxe  , syye  , sxye     !: ice layers heat content 
    368    ! MV MP 2016 
    369    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxap , syap , sxxap , syyap , sxyap    !:  melt pond fraction 
    370    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxvp , syvp , sxxvp , syyvp , sxyvp    !:  melt pond volume 
    371    ! END MV MP 2016 
    372  
    373    !!---------------------------------------------------------------------- 
    374358   !! * Old values of global variables 
    375359   !!---------------------------------------------------------------------- 
     
    444428         &      wfx_snw(jpi,jpj) , wfx_snw_dyn(jpi,jpj) , wfx_snw_sum(jpi,jpj) , wfx_snw_sub(jpi,jpj) ,  & 
    445429         &      wfx_ice(jpi,jpj) , wfx_sub    (jpi,jpj) , wfx_ice_sub(jpi,jpj) , wfx_lam    (jpi,jpj) ,  & 
    446          ! MV MP 2016 
    447430         &      wfx_pnd(jpi,jpj) ,                                                              & 
    448          ! END MV MP 2016 
    449431         &      wfx_bog(jpi,jpj) , wfx_dyn(jpi,jpj) , wfx_bom(jpi,jpj) , wfx_sum(jpi,jpj) ,     & 
    450432         &      wfx_res(jpi,jpj) , wfx_sni(jpi,jpj) , wfx_opw(jpi,jpj) , wfx_spr(jpi,jpj) ,     & 
     
    477459      ALLOCATE( t_i(jpi,jpj,nlay_i,jpl) , e_i(jpi,jpj,nlay_i,jpl) , sz_i(jpi,jpj,nlay_i,jpl) , STAT=ierr(ii) ) 
    478460 
    479       ! MV MP 2016 
    480461      ii = ii + 1 
    481462      ALLOCATE( a_ip(jpi,jpj,jpl) , v_ip(jpi,jpj,jpl) , a_ip_frac(jpi,jpj,jpl) , & 
     
    483464      ii = ii + 1 
    484465      ALLOCATE( at_ip(jpi,jpj) , vt_ip(jpi,jpj) , STAT = ierr(ii) ) 
    485       ! END MV MP 2016 
    486  
    487       ! * Moments for advection 
    488       ii = ii + 1 
    489       ALLOCATE( sxopw(jpi,jpj) , syopw(jpi,jpj) , sxxopw(jpi,jpj) , syyopw(jpi,jpj) , sxyopw(jpi,jpj) , STAT=ierr(ii) ) 
    490       ii = ii + 1 
    491       ALLOCATE( sxice(jpi,jpj,jpl) , syice(jpi,jpj,jpl) , sxxice(jpi,jpj,jpl) , syyice(jpi,jpj,jpl) , sxyice(jpi,jpj,jpl) ,   & 
    492          &      sxsn (jpi,jpj,jpl) , sysn (jpi,jpj,jpl) , sxxsn (jpi,jpj,jpl) , syysn (jpi,jpj,jpl) , sxysn (jpi,jpj,jpl) ,   & 
    493          &      STAT=ierr(ii) ) 
    494       ii = ii + 1 
    495       ALLOCATE( sxa  (jpi,jpj,jpl) , sya  (jpi,jpj,jpl) , sxxa  (jpi,jpj,jpl) , syya  (jpi,jpj,jpl) , sxya  (jpi,jpj,jpl) ,   & 
    496          &      sxc0 (jpi,jpj,jpl) , syc0 (jpi,jpj,jpl) , sxxc0 (jpi,jpj,jpl) , syyc0 (jpi,jpj,jpl) , sxyc0 (jpi,jpj,jpl) ,   & 
    497          &      sxsal(jpi,jpj,jpl) , sysal(jpi,jpj,jpl) , sxxsal(jpi,jpj,jpl) , syysal(jpi,jpj,jpl) , sxysal(jpi,jpj,jpl) ,   & 
    498          &      sxage(jpi,jpj,jpl) , syage(jpi,jpj,jpl) , sxxage(jpi,jpj,jpl) , syyage(jpi,jpj,jpl) , sxyage(jpi,jpj,jpl) ,   & 
    499          &      STAT=ierr(ii) ) 
    500       ii = ii + 1 
    501       ALLOCATE( sxe (jpi,jpj,nlay_i,jpl) , sye (jpi,jpj,nlay_i,jpl) , sxxe(jpi,jpj,nlay_i,jpl) ,     & 
    502          &      syye(jpi,jpj,nlay_i,jpl) , sxye(jpi,jpj,nlay_i,jpl)                            , STAT=ierr(ii) ) 
    503  
    504       ! MV MP 2016 
    505       ii = ii + 1 
    506       ALLOCATE( sxap(jpi,jpj,jpl) , syap(jpi,jpj,jpl) , sxxap(jpi,jpj,jpl) , syyap(jpi,jpj,jpl) , sxyap(jpi,jpj,jpl) ,   & 
    507          &      sxvp(jpi,jpj,jpl) , syvp(jpi,jpj,jpl) , sxxvp(jpi,jpj,jpl) , syyvp(jpi,jpj,jpl) , sxyvp(jpi,jpj,jpl) ,   & 
    508          &      STAT = ierr(ii) ) 
    509       ! END MV MP 2016 
    510466 
    511467      ! * Old values of global variables 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icedyn_adv.F90

    r8564 r8569  
    111111      IF( iom_use('destrp') )   CALL iom_put( "destrp" , diag_trp_es )          ! advected snw enthalpy (W/m2) 
    112112 
    113       IF( lrst_ice ) THEN                       !* write Prather fields in the restart file 
    114          IF( ln_adv_Pra )   CALL adv_pra_rst( 'WRITE', kt ) 
    115       ENDIF 
    116                 
    117113      ! controls 
    118114      IF( ln_icediachk   )   CALL ice_cons_hsm(1, 'icedyn_adv', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation 
     
    165161      IF( ioptio /= 1 )   CALL ctl_stop( 'ice_dyn_adv_init: choose one and only one ice adv. scheme (ln_adv_Pra or ln_adv_UMx)' ) 
    166162      ! 
    167       IF( ln_adv_Pra )   CALL adv_pra_rst( 'READ' )  !* read or initialize all required files 
     163      IF( ln_adv_Pra )   CALL adv_pra_init  !* read or initialize all required files 
    168164      ! 
    169165   END SUBROUTINE ice_dyn_adv_init 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icedyn_adv_pra.F90

    r8564 r8569  
    2929 
    3030   PUBLIC   ice_dyn_adv_pra   ! called by icedyn_adv 
    31    PUBLIC   adv_pra_rst       ! called by icedyn_adv 
    32  
     31   PUBLIC   adv_pra_init      ! called by icedyn_adv 
     32 
     33   ! Moments for advection 
     34   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)     ::   sxopw, syopw, sxxopw, syyopw, sxyopw   ! open water in sea ice 
     35   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxice, syice, sxxice, syyice, sxyice   ! ice thickness  
     36   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxsn , sysn , sxxsn , syysn , sxysn    ! snow thickness 
     37   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxa  , sya  , sxxa  , syya  , sxya     ! lead fraction 
     38   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxc0 , syc0 , sxxc0 , syyc0 , sxyc0    ! snow thermal content 
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxsal, sysal, sxxsal, syysal, sxysal   ! ice salinity 
     40   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxage, syage, sxxage, syyage, sxyage   ! ice age 
     41   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxap , syap , sxxap , syyap , sxyap    ! melt pond fraction 
     42   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   ::   sxvp , syvp , sxxvp , syyvp , sxyvp    ! melt pond volume 
     43   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   sxe  , sye  , sxxe  , syye  , sxye     ! ice layers heat content 
     44   ! 
    3345   !! * Substitutions 
    3446#  include "vectopt_loop_substitute.h90" 
     
    246258      DEALLOCATE( zarea , z0opw , z0ice, z0snw , z0ai , z0es , z0smi , z0oi , z0ap , z0vp , z0ei ) 
    247259      ! 
     260      IF( lrst_ice )   CALL adv_pra_rst( 'WRITE', kt )   !* write Prather fields in the restart file 
     261      ! 
    248262   END SUBROUTINE ice_dyn_adv_pra 
    249263    
     
    594608   END SUBROUTINE adv_y 
    595609 
     610   SUBROUTINE adv_pra_init 
     611      !!------------------------------------------------------------------- 
     612      !!                  ***  ROUTINE adv_pra_init  *** 
     613      !! 
     614      !! ** Purpose :   allocate and initialize arrays for Prather advection  
     615      !!------------------------------------------------------------------- 
     616      INTEGER ::   ierr 
     617      !!------------------------------------------------------------------- 
     618      ALLOCATE( sxopw(jpi,jpj)     , syopw(jpi,jpj)     , sxxopw(jpi,jpj)     , syyopw(jpi,jpj)     , sxyopw(jpi,jpj)     ,   & 
     619         &      sxice(jpi,jpj,jpl) , syice(jpi,jpj,jpl) , sxxice(jpi,jpj,jpl) , syyice(jpi,jpj,jpl) , sxyice(jpi,jpj,jpl) ,   & 
     620         &      sxsn (jpi,jpj,jpl) , sysn (jpi,jpj,jpl) , sxxsn (jpi,jpj,jpl) , syysn (jpi,jpj,jpl) , sxysn (jpi,jpj,jpl) ,   & 
     621         &      sxa  (jpi,jpj,jpl) , sya  (jpi,jpj,jpl) , sxxa  (jpi,jpj,jpl) , syya  (jpi,jpj,jpl) , sxya  (jpi,jpj,jpl) ,   & 
     622         &      sxc0 (jpi,jpj,jpl) , syc0 (jpi,jpj,jpl) , sxxc0 (jpi,jpj,jpl) , syyc0 (jpi,jpj,jpl) , sxyc0 (jpi,jpj,jpl) ,   & 
     623         &      sxsal(jpi,jpj,jpl) , sysal(jpi,jpj,jpl) , sxxsal(jpi,jpj,jpl) , syysal(jpi,jpj,jpl) , sxysal(jpi,jpj,jpl) ,   & 
     624         &      sxage(jpi,jpj,jpl) , syage(jpi,jpj,jpl) , sxxage(jpi,jpj,jpl) , syyage(jpi,jpj,jpl) , sxyage(jpi,jpj,jpl) ,   & 
     625         &      sxap(jpi,jpj,jpl)  , syap (jpi,jpj,jpl) , sxxap (jpi,jpj,jpl) , syyap (jpi,jpj,jpl) , sxyap (jpi,jpj,jpl) ,   & 
     626         &      sxvp(jpi,jpj,jpl)  , syvp (jpi,jpj,jpl) , sxxvp (jpi,jpj,jpl) , syyvp (jpi,jpj,jpl) , sxyvp (jpi,jpj,jpl) ,   & 
     627         &      sxe (jpi,jpj,nlay_i,jpl) , sye (jpi,jpj,nlay_i,jpl) , sxxe(jpi,jpj,nlay_i,jpl) , & 
     628         &      syye(jpi,jpj,nlay_i,jpl) , sxye(jpi,jpj,nlay_i,jpl)                            , & 
     629         &      STAT = ierr ) 
     630      ! 
     631      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     632      IF( ierr /= 0 )   CALL ctl_stop('STOP', 'adv_pra_init : unable to allocate ice arrays for Prather advection scheme') 
     633      ! 
     634      CALL adv_pra_rst( 'READ' )  !* read or initialize all required files 
     635      ! 
     636   END SUBROUTINE adv_pra_init 
     637 
    596638   SUBROUTINE adv_pra_rst( cdrw, kt ) 
    597639      !!--------------------------------------------------------------------- 
     
    713755                  sxyage(:,:,jl)= z2d(:,:) 
    714756               END DO 
    715                ! MV MP 2016 
    716757               IF ( nn_pnd_scheme > 0 ) THEN 
    717758                  DO jl = 1, jpl  
     
    750791                  END DO 
    751792               ENDIF 
    752                ! END MV MP 2016 
    753793 
    754794               CALL iom_get( numrir, jpdom_autoglo, 'sxopw ' ,  sxopw  ) 
     
    793833               syyc0 (:,:,:) = 0._wp   ;   syye (:,:,:,:) = 0._wp   ;   syysal (:,:,:) = 0._wp   ;   syyage (:,:,:) = 0._wp 
    794834               sxyc0 (:,:,:) = 0._wp   ;   sxye (:,:,:,:) = 0._wp   ;   sxysal (:,:,:) = 0._wp   ;   sxyage (:,:,:) = 0._wp 
    795                ! MV MP 2016 
    796835               IF ( nn_pnd_scheme > 0 ) THEN 
    797836                  sxap  (:,:,:) = 0._wp    ; sxvp  (:,:,:) = 0._wp  
     
    801840                  sxyap (:,:,:) = 0._wp    ; sxyvp (:,:,:) = 0._wp 
    802841               ENDIF 
    803                ! END MV MP 2016 
    804842            ENDIF 
    805843         ELSE                                   !* Start from rest 
     
    816854            syyc0 (:,:,:) = 0._wp   ;   syye (:,:,:,:) = 0._wp   ;   syysal (:,:,:) = 0._wp   ;   syyage (:,:,:) = 0._wp 
    817855            sxyc0 (:,:,:) = 0._wp   ;   sxye (:,:,:,:) = 0._wp   ;   sxysal (:,:,:) = 0._wp   ;   sxyage (:,:,:) = 0._wp 
    818             ! MV MP 2016 
    819856            IF ( nn_pnd_scheme > 0 ) THEN 
    820857               sxap  (:,:,:) = 0._wp    ; sxvp  (:,:,:) = 0._wp  
     
    824861               sxyap (:,:,:) = 0._wp    ; sxyvp (:,:,:) = 0._wp 
    825862            ENDIF 
    826             ! END MV MP 2016 
    827863         ENDIF 
    828864         ! 
     
    953989            END DO 
    954990         END DO 
    955          ! MV MP 2016 
    956991         IF ( nn_pnd_scheme > 0 ) THEN 
    957992            DO jl = 1, jpl  
Note: See TracChangeset for help on using the changeset viewer.