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 3148 for branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90 – NEMO

Ignore:
Timestamp:
2011-11-17T17:28:07+01:00 (12 years ago)
Author:
smasson
Message:

dev_NEMO_MERGE_2011: new dynamical allocation in LIM3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r2777 r3148  
    2121   USE par_ice          ! LIM parameters 
    2222   USE thd_ice          ! LIM thermodynamics 
    23    USE wrk_nemo         ! workspace manager 
    2423   USE in_out_manager   ! I/O manager 
    2524   USE lib_mpp          ! MPP library 
     25   USE wrk_nemo_2       ! work arrays 
    2626 
    2727   IMPLICIT NONE 
     
    7676      INTEGER  ::   i_ice_switch   ! ice thickness above a certain treshold or not 
    7777      INTEGER  ::   iter 
    78       INTEGER  ::   num_iter_max, numce_dh 
    79  
    80       REAL(wp) ::   meance_dh 
     78 
    8179      REAL(wp) ::   zzfmass_i, zihgnew                     ! local scalar 
    8280      REAL(wp) ::   zzfmass_s, zhsnew, ztmelts             ! local scalar 
     
    9391      REAL(wp) ::   ztform       ! bottom formation temperature 
    9492      ! 
    95       REAL(wp), POINTER, DIMENSION(:) ::   zh_i, ztfs  , zqfont_su, zqprec  , zhgnew 
    96       REAL(wp), POINTER, DIMENSION(:) ::   zh_s, zhsold, zqfont_bo, z_f_surf, zfmass_i 
    97       REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_mel, zdh_s_sub  , zfdt_init , zqt_i, zqt_dummy, zdq_i 
    98       REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_pre, zfsalt_melt, zfdt_final, zqt_s, zfbase   , zinnermelt 
    99       ! 
    100       REAL(wp), DIMENSION(jpij,jkmax) ::   zdeltah 
    101       REAL(wp), DIMENSION(jpij,jkmax) ::   zqt_i_lay   ! total ice heat content 
     93      REAL(wp), POINTER, DIMENSION(:) ::   zh_i        ! ice layer thickness 
     94      REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
     95      REAL(wp), POINTER, DIMENSION(:) ::   ztfs        ! melting point 
     96      REAL(wp), POINTER, DIMENSION(:) ::   zhsold      ! old snow thickness 
     97      REAL(wp), POINTER, DIMENSION(:) ::   zqprec      ! energy of fallen snow 
     98      REAL(wp), POINTER, DIMENSION(:) ::   zqfont_su   ! incoming, remaining surface energy 
     99      REAL(wp), POINTER, DIMENSION(:) ::   zqfont_bo   ! incoming, bottom energy 
     100      REAL(wp), POINTER, DIMENSION(:) ::   z_f_surf    ! surface heat for ablation 
     101      REAL(wp), POINTER, DIMENSION(:) ::   zhgnew      ! new ice thickness 
     102      REAL(wp), POINTER, DIMENSION(:) ::   zfmass_i    !  
     103 
     104      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_mel     ! snow melt  
     105      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_pre     ! snow precipitation  
     106      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_sub     ! snow sublimation 
     107      REAL(wp), POINTER, DIMENSION(:) ::   zfsalt_melt   ! salt flux due to ice melt 
     108 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   zdeltah 
     110 
     111      ! Pathological cases 
     112      REAL(wp), POINTER, DIMENSION(:) ::   zfdt_init   ! total incoming heat for ice melt 
     113      REAL(wp), POINTER, DIMENSION(:) ::   zfdt_final  ! total remaing heat for ice melt 
     114      REAL(wp), POINTER, DIMENSION(:) ::   zqt_i       ! total ice heat content 
     115      REAL(wp), POINTER, DIMENSION(:) ::   zqt_s       ! total snow heat content 
     116      REAL(wp), POINTER, DIMENSION(:) ::   zqt_dummy   ! dummy heat content 
     117 
     118      REAL(wp), POINTER, DIMENSION(:,:) ::   zqt_i_lay   ! total ice heat content 
     119 
     120      ! Heat conservation  
     121      INTEGER  ::   num_iter_max, numce_dh 
     122      REAL(wp) ::   meance_dh 
     123      REAL(wp), POINTER, DIMENSION(:) ::   zinnermelt 
     124      REAL(wp), POINTER, DIMENSION(:) ::   zfbase, zdq_i 
    102125      !!------------------------------------------------------------------ 
    103126 
    104       IF( wrk_in_use(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) ) THEN 
    105          CALL ctl_stop('lim_thd_dh: requestead workspace arrays unavailable')   ;   RETURN 
    106       ENDIF 
    107       ! Set-up pointers to sub-arrays of workspace arrays 
    108       zh_i        => wrk_1d_1 (1:jpij)   ! ice layer thickness 
    109       zh_s        => wrk_1d_2 (1:jpij)   ! snow layer thickness 
    110       ztfs        => wrk_1d_3 (1:jpij)   ! melting point 
    111       zhsold      => wrk_1d_4 (1:jpij)   ! old snow thickness 
    112       zqprec      => wrk_1d_5 (1:jpij)   ! energy of fallen snow 
    113       zqfont_su   => wrk_1d_6 (1:jpij)   ! incoming, remaining surface energy 
    114       zqfont_bo   => wrk_1d_7 (1:jpij)   ! incoming, bottom energy 
    115       z_f_surf    => wrk_1d_8 (1:jpij)   ! surface heat for ablation 
    116       zhgnew      => wrk_1d_9 (1:jpij)   ! new ice thickness 
    117       zfmass_i    => wrk_1d_10(1:jpij)   !  
    118       ! 
    119       zdh_s_mel   => wrk_1d_11(1:jpij)   ! snow melt  
    120       zdh_s_pre   => wrk_1d_12(1:jpij)   ! snow precipitation  
    121       zdh_s_sub   => wrk_1d_13(1:jpij)   ! snow sublimation 
    122       zfsalt_melt => wrk_1d_14(1:jpij)   ! salt flux due to ice melt 
    123       ! 
    124       !                              ! Pathological cases 
    125       zfdt_init   => wrk_1d_15(1:jpij)   ! total incoming heat for ice melt 
    126       zfdt_final  => wrk_1d_16(1:jpij)   ! total remaing heat for ice melt 
    127       zqt_i       => wrk_1d_17(1:jpij)   ! total ice heat content 
    128       zqt_s       => wrk_1d_18(1:jpij)   ! total snow heat content 
    129       zqt_dummy   => wrk_1d_19(1:jpij)   ! dummy heat content 
    130             
    131       zfbase      => wrk_1d_20(1:jpij)         
    132       zdq_i       => wrk_1d_21(1:jpij)  
    133       zinnermelt  => wrk_1d_22(1:jpij)  
     127      CALL wrk_alloc( jpij, zh_i, zh_s, ztfs, zhsold, zqprec, zqfont_su, zqfont_bo, z_f_surf, zhgnew, zfmass_i ) 
     128      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zfsalt_melt, zfdt_init, zfdt_final, zqt_i, zqt_s, zqt_dummy ) 
     129      CALL wrk_alloc( jpij, zinnermelt, zfbase, zdq_i ) 
     130      CALL wrk_alloc( jpij, jkmax, zdeltah, zqt_i_lay ) 
    134131 
    135132      zfsalt_melt(:)  = 0._wp 
     
    699696      END DO !ji 
    700697      ! 
    701       IF( wrk_not_released(1, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22) )   & 
    702           CALL ctl_stop('lim_thd_dh : failed to release workspace arrays') 
     698      CALL wrk_dealloc( jpij, zh_i, zh_s, ztfs, zhsold, zqprec, zqfont_su, zqfont_bo, z_f_surf, zhgnew, zfmass_i ) 
     699      CALL wrk_dealloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zfsalt_melt, zfdt_init, zfdt_final, zqt_i, zqt_s, zqt_dummy ) 
     700      CALL wrk_dealloc( jpij, zinnermelt, zfbase, zdq_i ) 
     701      CALL wrk_dealloc( jpij, jkmax, zdeltah, zqt_i_lay ) 
    703702      ! 
    704703   END SUBROUTINE lim_thd_dh 
Note: See TracChangeset for help on using the changeset viewer.