- Timestamp:
- 2011-11-17T17:28:07+01:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_NEMO_MERGE_2011/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90
r2777 r3148 21 21 USE par_ice ! LIM parameters 22 22 USE thd_ice ! LIM thermodynamics 23 USE wrk_nemo ! workspace manager24 23 USE in_out_manager ! I/O manager 25 24 USE lib_mpp ! MPP library 25 USE wrk_nemo_2 ! work arrays 26 26 27 27 IMPLICIT NONE … … 76 76 INTEGER :: i_ice_switch ! ice thickness above a certain treshold or not 77 77 INTEGER :: iter 78 INTEGER :: num_iter_max, numce_dh 79 80 REAL(wp) :: meance_dh 78 81 79 REAL(wp) :: zzfmass_i, zihgnew ! local scalar 82 80 REAL(wp) :: zzfmass_s, zhsnew, ztmelts ! local scalar … … 93 91 REAL(wp) :: ztform ! bottom formation temperature 94 92 ! 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 102 125 !!------------------------------------------------------------------ 103 126 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 ) 134 131 135 132 zfsalt_melt(:) = 0._wp … … 699 696 END DO !ji 700 697 ! 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 ) 703 702 ! 704 703 END SUBROUTINE lim_thd_dh
Note: See TracChangeset
for help on using the changeset viewer.