- Timestamp:
- 2014-06-17T17:06:59+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90
r4649 r4672 40 40 CONTAINS 41 41 42 SUBROUTINE lim_thd_dif( kideb , kiut , jl)42 SUBROUTINE lim_thd_dif( kideb , kiut ) 43 43 !!------------------------------------------------------------------ 44 44 !! *** ROUTINE lim_thd_dif *** … … 93 93 !!------------------------------------------------------------------ 94 94 INTEGER , INTENT(in) :: kideb, kiut ! Start/End point on which the the computation is applied 95 INTEGER , INTENT(in) :: jl ! Thickness cateogry number96 95 97 96 !! * Local variables … … 146 145 REAL(wp), POINTER, DIMENSION(:,:) :: zdiagbis 147 146 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrid ! tridiagonal system terms 147 ! diag errors on heat 148 REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini 149 REAL(wp) :: zhfx_err 148 150 !!------------------------------------------------------------------ 149 151 ! … … 155 157 CALL wrk_alloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 156 158 CALL wrk_alloc( jpij, jkmax+2, 3, ztrid ) 159 160 CALL wrk_alloc( jpij, zdq, zq_ini ) 161 162 ! --- diag error on heat diffusion - PART 1 --- ! 163 zdq(:) = 0._wp ; zq_ini(:) = 0._wp 164 DO ji = kideb, kiut 165 zq_ini(ji) = ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + & 166 & SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 167 END DO 157 168 158 169 !------------------------------------------------------------------------------! … … 671 682 DO layer = 1, nlay_s 672 683 DO ji = kideb , kiut 673 ii = MOD( npb(ji) - 1, jpi ) + 1674 ij = ( npb(ji) - 1 ) / jpi + 1675 684 t_s_b(ji,layer) = MAX( MIN( t_s_b(ji,layer), rtt ), 190._wp ) 676 685 zerrit(ji) = MAX(zerrit(ji),ABS(t_s_b(ji,layer) - ztstemp(ji,layer))) … … 722 731 IF( t_su_b(ji) < rtt ) THEN ! case T_su < 0degC 723 732 hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( qns_ice_1d(ji) + qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 724 ELSE 733 ELSE ! case T_su = 0degC 725 734 hfx_dif_1d(ji) = hfx_dif_1d(ji) + ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) ) * a_i_b(ji) 726 735 ENDIF 727 736 END DO 728 737 738 ! --- computes sea ice energy of melting compulsory for limthd_dh --- ! 739 CALL lim_thd_enmelt( kideb, kiut ) 740 741 ! --- diag error on heat diffusion - PART 2 --- ! 742 DO ji = kideb, kiut 743 zdq(ji) = - zq_ini(ji) + ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + & 744 & SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 745 zhfx_err = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - zradtr_i(ji,nlay_i) - fc_bo_i(ji) + zdq(ji) * r1_rdtice ) 746 hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_b(ji) 747 ! --- correction of qns_ice and surface conduction flux --- ! 748 qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err 749 fc_su (ji) = fc_su (ji) - zhfx_err 750 ! --- Heat flux at the ice surface in W.m-2 --- ! 751 ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 752 hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 753 END DO 754 729 755 ! 730 756 CALL wrk_dealloc( jpij, numeqmin, numeqmax, isnow ) … … 735 761 CALL wrk_dealloc( jpij, jkmax+2, zindterm, zindtbis, zdiagbis ) 736 762 CALL wrk_dealloc( jpij, jkmax+2, 3, ztrid ) 763 CALL wrk_dealloc( jpij, zdq, zq_ini ) 737 764 738 765 END SUBROUTINE lim_thd_dif 766 767 SUBROUTINE lim_thd_enmelt( kideb, kiut ) 768 !!----------------------------------------------------------------------- 769 !! *** ROUTINE lim_thd_enmelt *** 770 !! 771 !! ** Purpose : Computes sea ice energy of melting q_i (J.m-3) from temperature 772 !! 773 !! ** Method : Formula (Bitz and Lipscomb, 1999) 774 !!------------------------------------------------------------------- 775 INTEGER, INTENT(in) :: kideb, kiut ! bounds for the spatial loop 776 ! 777 INTEGER :: ji, jk ! dummy loop indices 778 REAL(wp) :: ztmelts, zindb ! local scalar 779 !!------------------------------------------------------------------- 780 ! 781 DO jk = 1, nlay_i ! Sea ice energy of melting 782 DO ji = kideb, kiut 783 ztmelts = - tmut * s_i_b(ji,jk) + rtt 784 zindb = MAX( 0._wp , SIGN( 1._wp , -(t_i_b(ji,jk) - rtt) - epsi10 ) ) 785 q_i_b(ji,jk) = rhoic * ( cpic * ( ztmelts - t_i_b(ji,jk) ) & 786 & + lfus * ( 1.0 - zindb * ( ztmelts-rtt ) / MIN( t_i_b(ji,jk)-rtt, -epsi10 ) ) & 787 & - rcp * ( ztmelts-rtt ) ) 788 END DO 789 END DO 790 DO jk = 1, nlay_s ! Snow energy of melting 791 DO ji = kideb, kiut 792 q_s_b(ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 793 END DO 794 END DO 795 ! 796 END SUBROUTINE lim_thd_enmelt 739 797 740 798 #else
Note: See TracChangeset
for help on using the changeset viewer.