MODULE limvar !!---------------------------------------------------------------------- !! 'key_lim3' LIM3 sea-ice model !!---------------------------------------------------------------------- !!====================================================================== !! *** MODULE limvar *** !! Different sets of ice model variables !! how to switch from one to another !! !! There are three sets of variables !! VGLO : global variables of the model !! - v_i (jpi,jpj,jpl) !! - v_s (jpi,jpj,jpl) !! - a_i (jpi,jpj,jpl) !! - t_s (jpi,jpj,jpl) !! - e_i (jpi,jpj,nlay_i,jpl) !! - smv_i(jpi,jpj,jpl) !! - oa_i (jpi,jpj,jpl) !! VEQV : equivalent variables sometimes used in the model !! - ht_i(jpi,jpj,jpl) !! - ht_s(jpi,jpj,jpl) !! - t_i (jpi,jpj,nlay_i,jpl) !! ... !! VAGG : aggregate variables, averaged/summed over all !! thickness categories !! - vt_i(jpi,jpj) !! - vt_s(jpi,jpj) !! - at_i(jpi,jpj) !! - et_s(jpi,jpj) !total snow heat content !! - et_i(jpi,jpj) !total ice thermal content !! - smt_i(jpi,jpj) !mean ice salinity !! - ot_i(jpi,jpj) !average ice age !!====================================================================== #if defined key_lim3 !!---------------------------------------------------------------------- !! * Modules used USE dom_ice USE par_oce ! ocean parameters USE phycst ! physical constants (ocean directory) USE ice_oce ! ice variables USE sbc_oce ! Surface boundary condition: ocean fields USE thd_ice USE in_out_manager USE ice USE par_ice IMPLICIT NONE PRIVATE !! * Routine accessibility PUBLIC lim_var_agg PUBLIC lim_var_glo2eqv PUBLIC lim_var_eqv2glo PUBLIC lim_var_salprof PUBLIC lim_var_bv PUBLIC lim_var_salprof1d !! * Module variables REAL(wp) :: & ! constant values epsi20 = 1e-20 , & epsi13 = 1e-13 , & zzero = 0.e0 , & zone = 1.e0 !!---------------------------------------------------------------------- !! LIM3.0, UCL-ASTR-LOCEAN-IPSL (2008) !! (c) UCL-ASTR and Martin Vancoppenolle !!---------------------------------------------------------------------- CONTAINS SUBROUTINE lim_var_agg(n) !!------------------------------------------------------------------ !! *** ROUTINE lim_var_agg *** !! ** Purpose : !! This routine aggregates ice-thickness-category variables to !! all-ice variables !! i.e. it turns VGLO into VAGG !! ** Method : !! !! ** Arguments : !! kideb , kiut : Starting and ending points on which the !! the computation is applied !! !! ** Inputs / Ouputs : (global commons) !! ** Arguments : n = 1, at_i vt_i only !! n = 2 everything !! !! ** External : !! !! ** References : !! !! ** History : !! (01-2006) Martin Vancoppenolle, UCL-ASTR !! !! note : you could add an argument when you need only at_i, vt_i !! and when you need everything !!------------------------------------------------------------------ !! * Arguments !! * Local variables INTEGER :: ji, & ! spatial dummy loop index jj, & ! spatial dummy loop index jk, & ! vertical layering dummy loop index jl ! ice category dummy loop index REAL :: zeps, epsi16, zinda, epsi06 INTEGER, INTENT( in ) :: n ! describes what is needed !!-- End of declarations !!---------------------------------------------------------------------------------------------- zeps = 1.0e-13 epsi16 = 1.0e-16 epsi06 = 1.0e-6 !------------------ ! Zero everything !------------------ vt_i(:,:) = 0.0 vt_s(:,:) = 0.0 at_i(:,:) = 0.0 ato_i(:,:) = 1.0 IF ( n .GT. 1 ) THEN et_s(:,:) = 0.0 ot_i(:,:) = 0.0 smt_i(:,:) = 0.0 et_i(:,:) = 0.0 ENDIF !-------------------- ! Compute variables !-------------------- DO jl = 1, jpl DO jj = 1, jpj DO ji = 1, jpi vt_i(ji,jj) = vt_i(ji,jj) + v_i(ji,jj,jl) ! ice volume vt_s(ji,jj) = vt_s(ji,jj) + v_s(ji,jj,jl) ! snow volume at_i(ji,jj) = at_i(ji,jj) + a_i(ji,jj,jl) ! ice concentration zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) ) icethi(ji,jj) = vt_i(ji,jj) / MAX(at_i(ji,jj),epsi16)*zinda ! ice thickness END DO END DO END DO DO jj = 1, jpj DO ji = 1, jpi ato_i(ji,jj) = MAX(1.0 - at_i(ji,jj), 0.0) ! open water fraction END DO END DO IF ( n .GT. 1 ) THEN DO jl = 1, jpl DO jj = 1, jpj DO ji = 1, jpi et_s(ji,jj) = et_s(ji,jj) + & ! snow heat content e_s(ji,jj,1,jl) zinda = MAX( zzero , SIGN( zone , vt_i(ji,jj) - 0.10 ) ) smt_i(ji,jj) = smt_i(ji,jj) + & ! ice salinity smv_i(ji,jj,jl) / MAX( vt_i(ji,jj) , zeps ) * & zinda zinda = MAX( zzero , SIGN( zone , at_i(ji,jj) - 0.10 ) ) ot_i(ji,jj) = ot_i(ji,jj) + & ! ice age oa_i(ji,jj,jl) / MAX( at_i(ji,jj) , zeps ) * & zinda END DO END DO END DO DO jl = 1, jpl DO jk = 1, nlay_i DO jj = 1, jpj DO ji = 1, jpi et_i(ji,jj) = et_i(ji,jj) + e_i(ji,jj,jk,jl) ! ice heat ! content END DO END DO END DO END DO ENDIF ! n .GT. 1 END SUBROUTINE lim_var_agg !============================================================================== SUBROUTINE lim_var_glo2eqv !!------------------------------------------------------------------ !! *** ROUTINE lim_var_glo2eqv ***' !! ** Purpose : !! This routine computes equivalent variables as function of !! global variables !! i.e. it turns VGLO into VEQV !! ** Method : !! !! ** Arguments : !! kideb , kiut : Starting and ending points on which the !! the computation is applied !! !! ** Inputs / Ouputs : !! !! ** External : !! !! ** References : !! !! ** History : !! (01-2006) Martin Vancoppenolle, UCL-ASTR !! !!------------------------------------------------------------------ !! * Local variables INTEGER :: ji, & ! spatial dummy loop index jj, & ! spatial dummy loop index jk, & ! vertical layering dummy loop index jl ! ice category dummy loop index REAL :: zq_i, zaaa, zbbb, zccc, zdiscrim, & ztmelts, zindb, zq_s, zfac1, zfac2 REAL :: zeps, epsi06 zeps = 1.0e-10 epsi06 = 1.0e-06 !!-- End of declarations !!------------------------------------------------------------------------------ !------------------------------------------------------- ! Ice thickness, snow thickness, ice salinity, ice age !------------------------------------------------------- !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi zindb = 1.0-MAX(0.0,SIGN(1.0,- a_i(ji,jj,jl))) !0 if no ice and 1 if yes ht_i(ji,jj,jl) = v_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , zeps ) * zindb ht_s(ji,jj,jl) = v_s(ji,jj,jl) / MAX( a_i(ji,jj,jl) , zeps ) * zindb o_i(ji,jj,jl) = oa_i(ji,jj,jl) / MAX( a_i(ji,jj,jl) , zeps ) * zindb END DO END DO END DO IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )THEN !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi zindb = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes sm_i(ji,jj,jl) = smv_i(ji,jj,jl) / MAX(v_i(ji,jj,jl),zeps) * zindb END DO END DO END DO ENDIF ! salinity profile CALL lim_var_salprof !------------------- ! Ice temperatures !------------------- !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jk = 1, nlay_i !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi !Energy of melting q(S,T) [J.m-3] zq_i = e_i(ji,jj,jk,jl) / area(ji,jj) / & MAX( v_i(ji,jj,jl) , epsi06 ) * nlay_i ! zindb = 0 if no ice and 1 if yes zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) ) ) !convert units ! very important that this line is here zq_i = zq_i * unit_fac * zindb !Ice layer melt temperature ztmelts = -tmut*s_i(ji,jj,jk,jl) + rtt !Conversion q(S,T) -> T (second order equation) zaaa = cpic zbbb = ( rcp - cpic ) * ( ztmelts - rtt ) + & zq_i / rhoic - lfus zccc = lfus * (ztmelts-rtt) zdiscrim = SQRT( MAX(zbbb*zbbb - 4.0*zaaa*zccc,0.0) ) t_i(ji,jj,jk,jl) = rtt + zindb *( - zbbb - zdiscrim ) / & ( 2.0 *zaaa ) t_i(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_i(ji,jj,jk,jl) ) ) END DO END DO END DO END DO !-------------------- ! Snow temperatures !-------------------- zfac1 = 1. / ( rhosn * cpic ) zfac2 = lfus / cpic !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jk = 1, nlay_s !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi !Energy of melting q(S,T) [J.m-3] zq_s = e_s(ji,jj,jk,jl) / area(ji,jj) / & MAX( v_s(ji,jj,jl) , epsi06 ) * nlay_s ! zindb = 0 if no ice and 1 if yes zindb = 1.0 - MAX( 0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) ) ) !convert units ! very important that this line is here zq_s = zq_s * unit_fac * zindb t_s(ji,jj,jk,jl) = rtt + zindb * ( - zfac1 * zq_s + zfac2 ) t_s(ji,jj,jk,jl) = MIN( rtt, MAX(173.15, t_s(ji,jj,jk,jl) ) ) END DO END DO END DO END DO !------------------- ! Mean temperature !------------------- tm_i(:,:) = 0.0 !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jk = 1, nlay_i !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi zindb = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) zindb = zindb*1.0-MAX(0.0,SIGN(1.0,-v_i(ji,jj,jl))) tm_i(ji,jj) = tm_i(ji,jj) + t_i(ji,jj,jk,jl)*v_i(ji,jj,jl) / & REAL(nlay_i) / MAX( vt_i(ji,jj) , zeps ) END DO END DO END DO END DO END SUBROUTINE lim_var_glo2eqv !=============================================================================== SUBROUTINE lim_var_eqv2glo !!------------------------------------------------------------------ !! *** ROUTINE lim_var_eqv2glo ***' !! ** Purpose : !! This routine computes global variables as function of !! equivalent variables !! i.e. it turns VEQV into VGLO !! ** Method : !! !! ** Arguments : !! !! ** Inputs / Ouputs : (global commons) !! !! ** External : !! !! ** References : !! !! ** History : !! (01-2006) Martin Vancoppenolle, UCL-ASTR !! Take it easy man !! Life is just a simple game, between !! ups / and downs \ :@) !! !!------------------------------------------------------------------ v_i(:,:,:) = ht_i(:,:,:) * a_i(:,:,:) v_s(:,:,:) = ht_s(:,:,:) * a_i(:,:,:) smv_i(:,:,:) = sm_i(:,:,:) * v_i(:,:,:) oa_i (:,:,:) = o_i (:,:,:) * a_i(:,:,:) END SUBROUTINE lim_var_eqv2glo !=============================================================================== SUBROUTINE lim_var_salprof !!------------------------------------------------------------------ !! *** ROUTINE lim_var_salprof ***' !! ** Purpose : !! This routine computes salinity profile in function of !! bulk salinity !! !! ** Method : If bulk salinity greater than s_i_1, !! the profile is assumed to be constant (S_inf) !! If bulk salinity lower than s_i_0, !! the profile is linear with 0 at the surface (S_zero) !! If it is between s_i_0 and s_i_1, it is a !! alpha-weighted linear combination of s_inf and s_zero !! !! ** References : Vancoppenolle et al., 2007 (in preparation) !! !! ** History : !! (08-2006) Martin Vancoppenolle, UCL-ASTR !! Take it easy man !! Life is just a simple game, between ups !! / and downs \ :@) !! !!------------------------------------------------------------------ !! * Arguments !! * Local variables INTEGER :: & ji , & !: spatial dummy loop index jj , & !: spatial dummy loop index jk , & !: vertical layering dummy loop index jl !: ice category dummy loop index REAL(wp) :: & dummy_fac0 , & !: dummy factor used in computations dummy_fac1 , & !: dummy factor used in computations dummy_fac , & !: dummy factor used in computations zind0 , & !: switch, = 1 if sm_i lt s_i_0 zind01 , & !: switch, = 1 if sm_i between s_i_0 and s_i_1 zindbal , & !: switch, = 1, if 2*sm_i gt sss_m zargtemp !: dummy factor REAL(wp), DIMENSION(nlay_i) :: & zs_zero !: linear salinity profile for salinities under !: s_i_0 REAL(wp), DIMENSION(jpi,jpj,jpl) :: & z_slope_s , & !: slope of the salinity profile zalpha !: weight factor for s between s_i_0 and s_i_1 !!-- End of declarations !!------------------------------------------------------------------------------ !--------------------------------------- ! Vertically constant, constant in time !--------------------------------------- IF ( num_sal .EQ. 1 ) THEN s_i(:,:,:,:) = bulk_sal ENDIF !----------------------------------- ! Salinity profile, varying in time !----------------------------------- IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) )THEN DO jk = 1, nlay_i s_i(:,:,jk,:) = sm_i(:,:,:) END DO ! jk ! Slope of the linear profile zs_zero !------------------------------------- DO jl = 1, jpl DO jj = 1, jpj DO ji = 1, jpi z_slope_s(ji,jj,jl) = 2.0 * sm_i(ji,jj,jl) / MAX( 0.01 & , ht_i(ji,jj,jl) ) END DO ! ji END DO ! jj END DO ! jl ! Weighting factor between zs_zero and zs_inf !--------------------------------------------- dummy_fac0 = 1. / ( ( s_i_0 - s_i_1 ) ) dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) zalpha(:,:,:) = 0.0 !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise zind0 = MAX( 0.0 , SIGN( 1.0 , s_i_0 - sm_i(ji,jj,jl) ) ) ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws zind01 = ( 1.0 - zind0 ) * & MAX( 0.0 , SIGN( 1.0 , s_i_1 - sm_i(ji,jj,jl) ) ) ! If 2.sm_i GE sss_m then zindbal = 1 zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i(ji,jj,jl) - & sss_m(ji,jj) ) ) zalpha(ji,jj,jl) = zind0 * 1.0 & + zind01 * ( sm_i(ji,jj,jl) * dummy_fac0 + & dummy_fac1 ) zalpha(ji,jj,jl) = zalpha(ji,jj,jl) * ( 1.0 - zindbal ) END DO END DO END DO ! Computation of the profile !---------------------------- dummy_fac = 1. / nlay_i DO jl = 1, jpl DO jk = 1, nlay_i DO jj = 1, jpj DO ji = 1, jpi ! linear profile with 0 at the surface zs_zero(jk) = z_slope_s(ji,jj,jl) * ( jk - 1./2. ) * & ht_i(ji,jj,jl) * dummy_fac ! weighting the profile s_i(ji,jj,jk,jl) = zalpha(ji,jj,jl) * zs_zero(jk) + & ( 1.0 - zalpha(ji,jj,jl) ) * sm_i(ji,jj,jl) END DO ! ji END DO ! jj END DO ! jk END DO ! jl ENDIF ! num_sal !------------------------------------------------------- ! Vertically varying salinity profile, constant in time !------------------------------------------------------- ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) IF ( num_sal .EQ. 3 ) THEN sm_i(:,:,:) = 2.30 !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jk = 1, nlay_i !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi zargtemp = ( jk - 0.5 ) / nlay_i s_i(ji,jj,jk,jl) = 1.6 - 1.6 * COS( 3.14169265 * & ( zargtemp**(0.407/ & ( 0.573 + zargtemp ) ) ) ) END DO ! ji END DO ! jj END DO ! jk END DO ! jl ENDIF ! num_sal END SUBROUTINE lim_var_salprof !=============================================================================== SUBROUTINE lim_var_bv !!------------------------------------------------------------------ !! *** ROUTINE lim_var_bv ***' !! ** Purpose : !! This routine computes mean brine volume (%) in sea ice !! !! ** Method : e = - 0.054 * S (ppt) / T (C) !! !! ** Arguments : !! !! ** Inputs / Ouputs : (global commons) !! !! ** External : !! !! ** References : Vancoppenolle et al., JGR, 2007 !! !! ** History : !! (08-2006) Martin Vancoppenolle, UCL-ASTR !! !!------------------------------------------------------------------ !! * Arguments !! * Local variables INTEGER :: ji, & ! spatial dummy loop index jj, & ! spatial dummy loop index jk, & ! vertical layering dummy loop index jl ! ice category dummy loop index REAL :: zbvi, & ! brine volume for a single ice category zeps, & ! very small value zindb ! is there ice or not !!-- End of declarations !!------------------------------------------------------------------------------ zeps = 1.0e-13 bv_i(:,:) = 0.0 !CDIR NOVERRCHK DO jl = 1, jpl !CDIR NOVERRCHK DO jk = 1, nlay_i !CDIR NOVERRCHK DO jj = 1, jpj !CDIR NOVERRCHK DO ji = 1, jpi zindb = 1.0-MAX(0.0,SIGN(1.0,-a_i(ji,jj,jl))) !0 if no ice and 1 if yes zbvi = - zindb * tmut *s_i(ji,jj,jk,jl) / & MIN( t_i(ji,jj,jk,jl) - 273.15 , zeps ) & * v_i(ji,jj,jl) / REAL(nlay_i) bv_i(ji,jj) = bv_i(ji,jj) + zbvi & / MAX( vt_i(ji,jj) , zeps ) END DO END DO END DO END DO END SUBROUTINE lim_var_bv !=============================================================================== SUBROUTINE lim_var_salprof1d(kideb,kiut) !!------------------------------------------------------------------- !! *** ROUTINE lim_thd_salprof1d *** !! !! ** Purpose : 1d computation of the sea ice salinity profile !! Works with 1d vectors and is used by thermodynamic !! modules !! !! history : !! 3.0 ! May 2007 M. Vancoppenolle Original code !!------------------------------------------------------------------- INTEGER, INTENT(in) :: & kideb, kiut ! thickness category index INTEGER :: & ji, jk, & ! geographic and layer index zji, zjj REAL(wp) :: & dummy_fac0, & ! dummy factors dummy_fac1, & dummy_fac2, & zalpha , & ! weighting factor zind0 , & ! switches as in limvar zind01 , & ! switch zindbal , & ! switch if in freshwater area zargtemp REAL(wp), DIMENSION(jpij) :: & z_slope_s REAL(wp), DIMENSION(jpij,jkmax) :: & zs_zero !!------------------------------------------------------------------- !--------------------------------------- ! Vertically constant, constant in time !--------------------------------------- IF ( num_sal .EQ. 1 ) THEN s_i_b(:,:) = bulk_sal ENDIF !------------------------------------------------------ ! Vertically varying salinity profile, varying in time !------------------------------------------------------ IF ( ( num_sal .EQ. 2 ) .OR. ( num_sal .EQ. 4 ) ) THEN ! Slope of the linear profile zs_zero !------------------------------------- !CDIR NOVERRCHK DO ji = kideb, kiut z_slope_s(ji) = 2.0 * sm_i_b(ji) / MAX( 0.01 & , ht_i_b(ji) ) END DO ! ji ! Weighting factor between zs_zero and zs_inf !--------------------------------------------- dummy_fac0 = 1. / ( ( s_i_0 - s_i_1 ) ) dummy_fac1 = s_i_1 / ( s_i_1 - s_i_0 ) dummy_fac2 = 1. / nlay_i !CDIR NOVERRCHK DO jk = 1, nlay_i !CDIR NOVERRCHK DO ji = kideb, kiut zji = MOD( npb(ji) - 1, jpi ) + 1 zjj = ( npb(ji) - 1 ) / jpi + 1 zalpha = 0.0 ! zind0 = 1 if sm_i le s_i_0 and 0 otherwise zind0 = MAX( 0.0 , SIGN( 1.0 , s_i_0 - sm_i_b(ji) ) ) ! zind01 = 1 if sm_i is between s_i_0 and s_i_1 and 0 othws zind01 = ( 1.0 - zind0 ) * & MAX( 0.0 , SIGN( 1.0 , s_i_1 - sm_i_b(ji) ) ) ! if 2.sm_i GE sss_m then zindbal = 1 zindbal = MAX( 0.0 , SIGN( 1.0 , 2. * sm_i_b(ji) - & sss_m(zji,zjj) ) ) zalpha = zind0 * 1.0 & + zind01 * ( sm_i_b(ji) * dummy_fac0 + & dummy_fac1 ) zalpha = zalpha * ( 1.0 - zindbal ) zs_zero(ji,jk) = z_slope_s(ji) * ( jk - 1./2. ) * & ht_i_b(ji) * dummy_fac2 ! weighting the profile s_i_b(ji,jk) = zalpha * zs_zero(ji,jk) + & ( 1.0 - zalpha ) * sm_i_b(ji) END DO ! ji END DO ! jk ENDIF ! num_sal !------------------------------------------------------- ! Vertically varying salinity profile, constant in time !------------------------------------------------------- ! Schwarzacher (1959) multiyear salinity profile (mean = 2.30) IF ( num_sal .EQ. 3 ) THEN sm_i_b(:) = 2.30 !CDIR NOVERRCHK DO ji = kideb, kiut !CDIR NOVERRCHK DO jk = 1, nlay_i zargtemp = ( jk - 0.5 ) / nlay_i s_i_b(ji,jk) = 1.6 - 1.6*cos(3.14169265*(zargtemp**(0.407/ & (0.573+zargtemp)))) END DO ! jk END DO ! ji ENDIF ! num_sal END SUBROUTINE lim_var_salprof1d !=============================================================================== #else !!====================================================================== !! *** MODULE limvar *** !! no sea ice model !!====================================================================== CONTAINS SUBROUTINE lim_var_agg ! Empty routines END SUBROUTINE lim_var_agg SUBROUTINE lim_var_glo2eqv ! Empty routines END SUBROUTINE lim_var_glo2eqv SUBROUTINE lim_var_eqv2glo ! Empty routines END SUBROUTINE lim_var_eqv2glo SUBROUTINE lim_var_salprof ! Empty routines END SUBROUTINE lim_var_salprof SUBROUTINE lim_var_bv ! Emtpy routines END SUBROUTINE lim_var_bv SUBROUTINE lim_var_salprof1d ! Emtpy routines END SUBROUTINE lim_var_salprof1d #endif END MODULE limvar