Changeset 4634


Ignore:
Timestamp:
2014-05-12T22:46:18+02:00 (6 years ago)
Author:
clem
Message:

major changes in heat budget

Location:
branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM
Files:
41 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/field_def.xml

    r4345 r4634  
    2929         <field id="mldr10_1"     long_name="Mixed Layer Depth 0.01 ref.10m"            unit="m"                        /> 
    3030         <field id="rhop"         long_name="potential density (sigma0)"                unit="kg/m3" grid_ref="grid_T_3D"/> 
     31         <field id="heatc"        long_name="Heat content vertically integrated"        unit="J/m2"                      /> 
     32         <field id="saltc"        long_name="Salt content vertically integrated"        unit="PSU*kg/m2"                /> 
    3133         <!-- next variables available with key_diahth --> 
    3234         <field id="mlddzt"       long_name="Thermocline Depth (max dT/dz)"             unit="m"                        /> 
     
    186188         <field id="ice_cover"    long_name="Ice fraction"                                                 unit="1"        /> 
    187189 
    188          <field id="ioceflxb"     long_name="Oceanic flux at the ice base"                                 unit="W/m2"     /> 
    189190         <field id="qsr_ai_cea"   long_name="Air-Ice downward solar heat flux (cell average)"              unit="W/m2"     /> 
    190191         <field id="qns_ai_cea"   long_name="Air-Ice downward non-solar heat flux (cell average)"          unit="W/m2"     /> 
     
    214215          
    215216         <field id="iceconc"      long_name="ice concentration"                                            unit="%"        /> 
    216          <field id="icebopr"      long_name="daily bottom thermo ice prod."                                unit="m/day"   /> 
    217          <field id="icedypr"      long_name="daily  dynamic ice prod."                                     unit="m/day"   /> 
    218     <field id="ioceflxb"     long_name="Oceanic flux at the ice base"                                 unit="W/m2"     /> 
    219217         <field id="uice_ipa"     long_name="Ice velocity along i-axis at I-point (ice presence average)"  unit="m/s"      /> 
    220218         <field id="vice_ipa"     long_name="Ice velocity along j-axis at I-point (ice presence average)"  unit="m/s"      /> 
     
    224222         <field id="qsr_oce"      long_name="solar heat flux at ocean surface"                             unit="W/m2"     /> 
    225223         <field id="qns_oce"      long_name="non-solar heat flux at ocean surface"                         unit="W/m2"     /> 
    226          <field id="hfbri"        long_name="heat flux due to brine release"                               unit="W/m2"     /> 
    227224         <field id="utau_ice"     long_name="Wind stress along i-axis over the ice at i-point"             unit="N/m2"     /> 
    228225         <field id="vtau_ice"     long_name="Wind stress along j-axis over the ice at i-point"             unit="N/m2"     /> 
     
    231228         <field id="micesalt"     long_name="Mean ice salinity"                                            unit="psu"      /> 
    232229         <field id="miceage"      long_name="Mean ice age"                                                 unit="years"    /> 
    233          <field id="icelapr"      long_name="daily lateral thermo ice prod."                               unit="m/day"   /> 
    234          <field id="icesipr"      long_name="daily snowice ice prod."                                      unit="m/day"   /> 
     230 
     231         <field id="iceage_cat"   long_name="Ice age for categories"                                       unit="days"   axis_ref="ncatice" /> 
     232         <field id="iceconc_cat"  long_name="Ice concentration for categories"                             unit="%"      axis_ref="ncatice" /> 
     233         <field id="icethic_cat"  long_name="Ice thickness for categories"                                 unit="m"      axis_ref="ncatice" /> 
     234         <field id="snowthic_cat" long_name="Snow thicknessi for categories"                               unit="m"      axis_ref="ncatice" /> 
     235         <field id="salinity_cat" long_name="Sea-Ice Bulk salinity for categories"                         unit="ppt"    axis_ref="ncatice" /> 
     236         <field id="brinevol_cat" long_name="Brine volume for categories"                                  unit="%"      axis_ref="ncatice" /> 
     237 
    235238         <field id="micet"        long_name="Mean ice temperature"                                         unit="degC"     /> 
    236239         <field id="icehc"        long_name="ice total heat content"                                       unit="10^9 J"   />  
    237240         <field id="isnowhc"      long_name="snow total heat content"                                      unit="10^9J"    /> 
    238241         <field id="icest"        long_name="ice surface temperature"                                      unit="degC"     /> 
    239          <field id="sfxbri"       long_name="brine salt flux"                                              unit="psu*kg/m2/day" /> 
    240          <field id="sfxthd"       long_name="equivalent FW salt flux"                                      unit="psu*kg/m2/day" /> 
    241242         <field id="ibrinv"       long_name="brine volume"                                                 unit="%"        /> 
    242243         <field id="icecolf"      long_name="frazil ice collection thickness"                              unit="m"        /> 
    243244         <field id="icestr"       long_name="ice strength"                                                 unit="N/m"      /> 
    244245         <field id="icevel"       long_name="ice velocity"                                                 unit="m/s"      /> 
    245          <field id="isume"        long_name="surface melt"                                                 unit="m/day"   /> 
    246          <field id="ibome"        long_name="bottom melt"                                                  unit="m/day"   /> 
    247246         <field id="idive"        long_name="divergence"                                                   unit="10-8s-1"  /> 
    248247         <field id="ishear"       long_name="shear"                                                        unit="10-8s-1"  /> 
    249          <field id="icerepr"      long_name="daily resultant ice prod./melting from limupdate"             unit="m/day"   /> 
    250248         <field id="icevolu"      long_name="ice volume"                                                   unit="m"      /> 
    251249         <field id="snowvol"      long_name="snow volume"                                                  unit="m"      /> 
    252          <field id="sfxmec"       long_name="salt flux from ridging rafting"                               unit="psu*kg/m2/day" /> 
     250 
     251         <field id="icetrp"       long_name="ice volume transport"                                         unit="m/day"   /> 
     252         <field id="snwtrp"       long_name="snw volume transport"                                         unit="m/day"   /> 
     253         <field id="deitrp"       long_name="advected ice enhalpy"                                         unit="W/2"   /> 
     254         <field id="destrp"       long_name="advected snw enhalpy"                                         unit="W/2"   /> 
     255 
     256         <field id="sfxbri"       long_name="brine salt flux"                                              unit="psu*kg/m2/day" /> 
     257         <field id="sfxdyn"       long_name="salt flux from ridging rafting"                               unit="psu*kg/m2/day" /> 
    253258         <field id="sfxres"       long_name="salt flux from lipupdate (resultant)"                         unit="psu*kg/m2/day" /> 
    254          <field id="icetrp"       long_name="ice volume transport"                                         unit="m/day"   /> 
    255  
     259         <field id="sfxbog"       long_name="salt flux from bot growth"                                    unit="psu*kg/m2/day" /> 
     260         <field id="sfxbom"       long_name="salt flux from bot melt"                                      unit="psu*kg/m2/day" /> 
     261         <field id="sfxsum"       long_name="salt flux from surf melt"                                     unit="psu*kg/m2/day" /> 
     262         <field id="sfxsni"       long_name="salt flux from snow-ice formation"                            unit="psu*kg/m2/day" /> 
     263         <field id="sfxopw"       long_name="salt flux from open water ice formation"                      unit="psu*kg/m2/day" /> 
     264         <field id="sfx"          long_name="salt flux total"                                              unit="psu*kg/m2/day" /> 
     265 
     266         <field id="vfxbog"       long_name="daily bottom thermo ice prod."                                unit="m/day"   /> 
     267         <field id="vfxdyn"       long_name="daily  dynamic ice prod."                                     unit="m/day"   /> 
     268         <field id="vfxopw"       long_name="daily lateral thermo ice prod."                               unit="m/day"   /> 
     269         <field id="vfxsni"       long_name="daily snowice ice prod."                                      unit="m/day"   /> 
     270         <field id="vfxsum"       long_name="surface melt"                                                 unit="m/day"   /> 
     271         <field id="vfxbom"       long_name="bottom melt"                                                  unit="m/day"   /> 
     272         <field id="vfxres"       long_name="daily resultant ice prod./melting from limupdate"             unit="m/day"   /> 
     273         <field id="vfxice"       long_name="ice melt/growth"                                              unit="m/day"   /> 
     274         <field id="vfxsnw"       long_name="snw melt/growth"                                              unit="m/day"   /> 
     275         <field id="vfxsub"       long_name="snw sublimation"                                              unit="m/day"   /> 
     276 
     277         <field id="hfxdhc1"   long_name="Heat content variation in snow and ice"   unit="W/m2" /> 
     278         <field id="hfxspr"    long_name="Heat content of snow precip"              unit="W/m2" /> 
     279         <field id="hfxqsr"    long_name="solar fluxes given to ocean"             unit="W/m2"  /> 
     280         <field id="hfxqns"    long_name="non solar fluxes given to ocean"         unit="W/m2"  /> 
     281 
     282         <field id="hfxthd"   long_name="heat fluxes from ice-ocean exchange during thermo"              unit="W/m2"  /> 
     283         <field id="hfxdyn"   long_name="heat fluxes from ice-ocean exchange during dynamic"             unit="W/m2"  /> 
     284         <field id="hfxres"   long_name="heat fluxes from ice-ocean exchange during resultant"           unit="W/m2"  /> 
     285         <field id="hfxsnw"   long_name="heat fluxes from snow-ocean exchange"                           unit="W/m2"  /> 
     286         <field id="hfxsub"   long_name="heat fluxes from sublimation"                                   unit="W/m2"  /> 
     287         <field id="hfxerr"   long_name="heat fluxes error after heat diffusion"                         unit="W/m2"  /> 
     288         <field id="hfxerr_rem" long_name="heat fluxes error after remapping"                         unit="W/m2"  /> 
     289         <field id="hfxtot"   long_name="heat fluxes total used by ice"                                  unit="W/m2"  /> 
     290         <field id="hfxout"   long_name="non solar heat fluxes received by the ocean"             unit="W/m2"  /> 
     291         <field id="hfxin"    long_name="total     heat fluxes at the ice surface"             unit="W/m2"  /> 
    256292 
    257293      </field_group> 
     
    272308         <field id="u_masstr"     long_name="ocean eulerian mass transport along i-axis"  unit="kg/s" grid_ref="grid_U_3D" /> 
    273309         <field id="u_heattr"     long_name="ocean eulerian heat transport along i-axis"  unit="W"    /> 
     310         <field id="u_salttr"     long_name="ocean eulerian salt transport along i-axis"  unit="PSU*kg/s"    /> 
    274311         <field id="ueiv_heattr"  long_name="ocean bolus heat transport along i-axis"     unit="W"    /> 
    275312         <field id="udiff_heattr" long_name="ocean diffusion heat transport along i-axis" unit="W"    /> 
     
    291328         <field id="v_masstr"     long_name="ocean eulerian mass transport along j-axis"  unit="kg/s" grid_ref="grid_V_3D" /> 
    292329         <field id="v_heattr"     long_name="ocean eulerian heat transport along j-axis"  unit="W"     /> 
     330         <field id="v_salttr"     long_name="ocean eulerian salt transport along i-axis"  unit="PSU*kg/s"    /> 
    293331         <field id="veiv_heattr"  long_name="ocean bolus heat transport along j-axis"     unit="W"     /> 
    294332         <field id="vdiff_heattr" long_name="ocean diffusion heat transport along j-axis" unit="W"     /> 
     
    324362 
    325363      <field_group id="scalar"  domain_ref="1point" > 
    326          <field id="voltot"     long_name="global mean volume"                         unit="m3"   /> 
    327          <field id="sshtot"     long_name="global mean ssh"                            unit="m"    /> 
    328          <field id="sshsteric"  long_name="global mean ssh steric"                     unit="m"    /> 
    329          <field id="sshthster"  long_name="global mean ssh thermosteric"               unit="m"    /> 
    330          <field id="masstot"    long_name="global mean mass"                           unit="kg"   /> 
    331          <field id="temptot"    long_name="global mean temperature"                    unit="degC" /> 
    332          <field id="saltot"     long_name="global mean salinity"                       unit="psu"  /> 
    333          <field id="fram_trans" long_name="Sea Ice Mass Transport Through Fram Strait" unit="kg/s" /> 
     364     <field id="voltot"     long_name="global mean volume"                         unit="m3"   /> 
     365     <field id="sshtot"     long_name="global mean ssh"                            unit="m"    /> 
     366     <field id="sshsteric"  long_name="global mean ssh steric"                     unit="m"    /> 
     367     <field id="sshthster"  long_name="global mean ssh thermosteric"               unit="m"    /> 
     368     <field id="masstot"    long_name="global mean mass"                           unit="kg"   /> 
     369     <field id="temptot"    long_name="global mean temperature"                    unit="degC" /> 
     370     <field id="saltot"     long_name="global mean salinity"                       unit="psu"  /> 
     371     <field id="fram_trans" long_name="Sea Ice Mass Transport Through Fram Strait" unit="kg/s" /> 
    334372       <!-- available with ln_diahsb --> 
    335373    <field id="bgtemper" long_name="global mean temperature variation"            unit="degC"/> 
     
    357395    <field id="ibgsaltco"    long_name="global mean ice salt content"             unit="psu*km3"   /> 
    358396 
    359     <field id="ibgemp"       long_name="global mean volume flux (emp)"               unit="m/day"   /> 
    360     <field id="ibgempbog"    long_name="global mean volume flux (bottom growth)"     unit="m/day"   /> 
    361     <field id="ibgemplag"    long_name="global mean volume flux (open water growth)" unit="m/day"   /> 
    362     <field id="ibgempsig"    long_name="global mean volume flux (snow-ice growth)"   unit="m/day"   /> 
    363     <field id="ibgempdyg"    long_name="global mean volume flux (dynamic growth)"    unit="m/day"   /> 
    364     <field id="ibgempbom"    long_name="global mean volume flux (bottom melt)"       unit="m/day"   /> 
    365     <field id="ibgempsum"    long_name="global mean volume flux (surface melt)"      unit="m/day"   /> 
    366     <field id="ibgempres"    long_name="global mean volume flux (resultant)"         unit="m/day"   /> 
     397    <field id="ibgvfx"       long_name="global mean volume flux (emp)"               unit="m/day"   /> 
     398    <field id="ibgvfxbog"    long_name="global mean volume flux (bottom growth)"     unit="m/day"   /> 
     399    <field id="ibgvfxopw"    long_name="global mean volume flux (open water growth)" unit="m/day"   /> 
     400    <field id="ibgvfxsni"    long_name="global mean volume flux (snow-ice growth)"   unit="m/day"   /> 
     401    <field id="ibgvfxdyn"    long_name="global mean volume flux (dynamic growth)"    unit="m/day"   /> 
     402    <field id="ibgvfxbom"    long_name="global mean volume flux (bottom melt)"       unit="m/day"   /> 
     403    <field id="ibgvfxsum"    long_name="global mean volume flux (surface melt)"      unit="m/day"   /> 
     404    <field id="ibgvfxres"    long_name="global mean volume flux (resultant)"         unit="m/day"   /> 
    367405 
    368406    <field id="ibgsfx"       long_name="global mean salt flux (total)"            unit="psu*m/day"   /> 
    369407    <field id="ibgsfxbri"    long_name="global mean salt flux (brines)"           unit="psu*m/day"   /> 
    370     <field id="ibgsfxthd"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
    371     <field id="ibgsfxmec"    long_name="global mean salt flux (dynamic)"          unit="psu*m/day"   /> 
     408    <field id="ibgsfxdyn"    long_name="global mean salt flux (dynamic)"          unit="psu*m/day"   /> 
    372409    <field id="ibgsfxres"    long_name="global mean salt flux (resultant)"        unit="psu*m/day"   /> 
     410    <field id="ibgsfxbog"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
     411    <field id="ibgsfxopw"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
     412    <field id="ibgsfxsni"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
     413    <field id="ibgsfxbom"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
     414    <field id="ibgsfxsum"    long_name="global mean salt flux (thermo)"           unit="psu*m/day"   /> 
     415 
     416 
     417        <field id="ibghfxdhc1"   long_name="Heat content variation in snow and ice"   unit="W" /> 
     418        <field id="ibghfxspr"    long_name="Heat content of snow precip"              unit="W" /> 
     419        <field id="ibghfxqsr"    long_name="solar fluxes given to ocean"             unit="W"  /> 
     420        <field id="ibghfxqns"    long_name="non solar fluxes given to ocean"         unit="W"  /> 
     421 
     422        <field id="ibghfxthd"   long_name="heat fluxes from ice-ocean exchange during thermo"              unit="W"  /> 
     423        <field id="ibghfxdyn"   long_name="heat fluxes from ice-ocean exchange during dynamic"             unit="W"  /> 
     424        <field id="ibghfxres"   long_name="heat fluxes from ice-ocean exchange during resultant"           unit="W"  /> 
     425        <field id="ibghfxsub"   long_name="heat fluxes from sublimation"                                   unit="W"  /> 
     426        <field id="ibghfxsnw"   long_name="heat fluxes from snow-ocean exchange"                           unit="W"  /> 
     427        <field id="ibghfxtot"   long_name="heat fluxes total used by ice"                                  unit="W"  /> 
     428        <field id="ibghfxout"   long_name="non solar heat fluxes received by the ocean"                    unit="W"  /> 
     429        <field id="ibghfxin"    long_name="total heat fluxes at the ice surface"                           unit="W"  /> 
    373430 
    374431    <field id="ibgfrcvol"    long_name="global mean forcing volume (emp)"         unit="km3"      /> 
    375432    <field id="ibgfrcsfx"    long_name="global mean forcing salt   (sfx)"         unit="psu*km3"   /> 
    376     <field id="ibggrme"      long_name="global mean ice growth+melt volume"       unit="km3"      /> 
     433    <field id="ibgvolgrm"    long_name="global mean ice growth+melt volume"       unit="km3"      /> 
    377434      </field_group> 
    378435   
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/iodef.xml

    r4350 r4634  
    4747     <field field_ref="mldkz5"       /> 
    4848     <field field_ref="mldr10_1"     /> 
     49          <field field_ref="heatc"        name="heatc"    long_name="Heat content vertically integrated"            /> 
     50          <field field_ref="saltc"        name="saltc"    long_name="Salt content vertically integrated"            /> 
    4951   </file> 
    5052 
    5153   <file id="file2" name_suffix="_SBC" description="surface fluxes variables" > <!-- time step automaticaly defined based on nn_fsbc --> 
    5254     <field field_ref="empmr"        name="wfo"      long_name="water_flux_into_sea_water"                     /> 
    53      <field field_ref="qsr"          name="rsntds"   long_name="surface_net_downward_shortwave_flux"           /> 
    54      <field field_ref="qt"           name="tohfls"   long_name="surface_net_downward_total_heat_flux"          /> 
    55      <field field_ref="saltflx"      name="sosflxdo"  /> 
     55     <field field_ref="qsr"          name="hfxqsr"   long_name="surface_net_downward_shortwave_flux"           /> 
     56     <field field_ref="qt"           name="hfxtot"   long_name="surface_net_downward_total_heat_flux"          /> 
     57     <field field_ref="saltflx"      name="sfx"  /> 
    5658     <field field_ref="taum"         name="taum" /> 
    57      <field field_ref="wspd"         name="sowindsp"  /> 
    58           <field field_ref="precip"       name="soprecip" /> 
     59     <field field_ref="wspd"         name="windsp"  /> 
     60          <field field_ref="precip"       name="precip" /> 
    5961     <!-- ice and snow --> 
    6062     <field field_ref="snowpre"      /> 
     63          <field field_ref="utau_ice"         name="utau_ice" /> 
     64          <field field_ref="vtau_ice"         name="vtau_ice" /> 
     65     <!-- clem 
    6166          <field field_ref="qsr_io"           name="iicesflx" /> 
    6267          <field field_ref="qns_io"           name="iicenflx" /> 
    63           <field field_ref="utau_ice"         name="iicestru" /> 
    64           <field field_ref="vtau_ice"         name="iicestrv" /> 
     68     --> 
    6569 
    6670   </file> 
     
    7377     <field field_ref="u_masstr"     name="vozomatr"  /> 
    7478     <field field_ref="u_heattr"     name="sozohetr"  /> 
     79          <field field_ref="u_salttr"     name="sozosatr"  /> 
    7580   </file> 
    7681    
     
    8287     <field field_ref="v_masstr"     name="vomematr"  /> 
    8388     <field field_ref="v_heattr"     name="somehetr"  /> 
     89          <field field_ref="v_salttr"     name="somesatr"  /> 
    8490   </file> 
    8591    
     
    9096   </file> 
    9197 
    92    <file id="file6" name_suffix="_icemod" description="ice variables" > 
    93  
     98   <file id="file6" name_suffix="_icemod" description="ice variables" enabled=".true." > 
    9499     <field field_ref="snowthic_cea"     name="sndept"     long_name="surface_snow_thickness"   /> 
    95100     <field field_ref="icethic_cea"      name="sithic"     long_name="sea_ice_thickness"        /> 
     
    98103          <field field_ref="iceconc"          name="siconc"  /> 
    99104 
    100           <field field_ref="icebopr"          name="sibopr" /> 
    101           <field field_ref="icedypr"          name="sidypr" /> 
    102           <field field_ref="icelapr"          name="silapr" /> 
    103           <field field_ref="icesipr"          name="sisipr" /> 
    104           <field field_ref="isume"            name="sisume" /> 
    105           <field field_ref="ibome"            name="sibome" /> 
    106           <field field_ref="icerepr"          name="sirepr" /> 
     105          <field field_ref="vfxbog"          name="vfxbog" /> 
     106          <field field_ref="vfxdyn"          name="vfxdyn" /> 
     107          <field field_ref="vfxopw"          name="vfxopw" /> 
     108          <field field_ref="vfxsni"          name="vfxsni" /> 
     109          <field field_ref="vfxsum"          name="vfxsum" /> 
     110          <field field_ref="vfxbom"          name="vfxbom" /> 
     111          <field field_ref="vfxres"          name="vfxres" /> 
     112          <field field_ref="vfxice"          name="vfxice" /> 
     113          <field field_ref="vfxsnw"          name="vfxsnw" /> 
     114          <field field_ref="vfxsub"          name="vfxsub" /> 
     115 
     116          <field field_ref="icetrp"          name="sivtrp" /> 
     117          <field field_ref="snwtrp"          name="snvtrp" /> 
     118          <field field_ref="deitrp"          name="deitrp" /> 
     119          <field field_ref="destrp"          name="destrp" /> 
    107120 
    108121          <field field_ref="sfxbri"           name="sfxbri" /> 
    109           <field field_ref="sfxthd"           name="sfxthd" /> 
    110           <field field_ref="sfxmec"           name="sfxmec" /> 
     122          <field field_ref="sfxdyn"           name="sfxdyn" /> 
    111123          <field field_ref="sfxres"           name="sfxres" /> 
     124          <field field_ref="sfxbog"           name="sfxbog" /> 
     125          <field field_ref="sfxbom"           name="sfxbom" /> 
     126          <field field_ref="sfxsum"           name="sfxsum" /> 
     127          <field field_ref="sfxsni"           name="sfxsni" /> 
     128          <field field_ref="sfxopw"           name="sfxopw" /> 
     129          <field field_ref="sfx"              name="sfx" /> 
     130 
     131          <field field_ref="hfxdhc1"          name="hfxdhc1"    /> 
     132          <field field_ref="hfxspr"           name="hfxspr"    /> 
     133          <field field_ref="hfxqsr"           name="hfxqsr"    /> 
     134          <field field_ref="hfxqns"           name="hfxqns"    /> 
     135 
     136          <field field_ref="hfxthd"          name="hfxthd"    /> 
     137          <field field_ref="hfxdyn"          name="hfxdyn"    /> 
     138          <field field_ref="hfxres"          name="hfxres"    /> 
     139          <field field_ref="hfxout"          name="hfxout"    /> 
     140          <field field_ref="hfxin"           name="hfxin"    /> 
     141          <field field_ref="hfxtot"          name="hfxtot"    /> 
     142          <field field_ref="hfxsnw"          name="hfxsnw"    /> 
     143          <field field_ref="hfxsub"          name="hfxsub"    /> 
     144          <field field_ref="hfxerr"          name="hfxerr"    /> 
     145          <field field_ref="hfxerr_rem"      name="hfxerr_rem"    /> 
    112146 
    113147          <field field_ref="isst"             name="sst" /> 
     
    115149          <field field_ref="micesalt"         name="sisali" /> 
    116150          <field field_ref="micet"            name="sitemp" /> 
    117           <field field_ref="icest"            name="sisurt" /> 
     151          <field field_ref="icest"            name="sistem" /> 
    118152          <field field_ref="icehc"            name="siheco" /> 
    119153          <field field_ref="isnowhc"          name="snheco" /> 
    120154          <field field_ref="miceage"          name="siages" /> 
    121           <field field_ref="ioceflxb"         name="ioceflxb" /> 
    122155 
    123156          <field field_ref="uice_ipa"         name="sivelu" /> 
     
    126159          <field field_ref="idive"            name="sidive" /> 
    127160          <field field_ref="ishear"           name="sishea" /> 
    128           <field field_ref="icetrp"           name="sivtrp" /> 
    129161          <field field_ref="icestr"           name="sistre" /> 
    130162 
     
    132164          <field field_ref="icecolf"          name="sicolf" /> 
    133165 
    134    </file> 
    135  
    136         <file id="file7" name_suffix="_scalar" description="scalar variables" > 
     166          <field field_ref="iceage_cat"       name="siagecat"/> 
     167          <field field_ref="iceconc_cat"      name="siconcat"/> 
     168          <field field_ref="icethic_cat"      name="sithicat"/> 
     169          <field field_ref="snowthic_cat"     name="sndeptcat"/> 
     170          <field field_ref="salinity_cat"     name="salincat"/> 
     171          <field field_ref="brinevol_cat"     name="sibrincat"/> 
     172 
     173   </file> 
     174 
     175        <file id="file7" name_suffix="_scalar" description="scalar variables" enabled=".true." > 
    137176          <field field_ref="voltot"       name="scvoltot"  /> 
    138177          <field field_ref="sshtot"       name="scsshtot"  /> 
     
    152191          <field field_ref="bgfrctem"     name="bgfrctem"    /> 
    153192          <field field_ref="bgfrcsal"     name="bgfrcsal"    /> 
     193     <!-- 
    154194          <field field_ref="bgmistem"     name="bgmistem"    /> 
    155195          <field field_ref="bgmissal"     name="bgmissal"    /> 
     196     --> 
    156197        </file> 
    157198 
    158         <file id="file8" name_suffix="_SBC_scalar" description="scalar variables" > 
     199        <file id="file8" name_suffix="_SBC_scalar" description="scalar variables" enabled=".true." > 
    159200          <field field_ref="ibgvoltot"    name="ibgvoltot"   /> 
    160201          <field field_ref="sbgvoltot"    name="sbgvoltot"   /> 
     
    166207          <field field_ref="ibgsaltco"    name="ibgsaltco"   /> 
    167208 
    168           <field field_ref="ibgemp"       name="ibgemp"      /> 
    169           <field field_ref="ibgempbog"    name="ibgempbog"      /> 
    170           <field field_ref="ibgemplag"    name="ibgemplag"      /> 
    171           <field field_ref="ibgempsig"    name="ibgempsig"      /> 
    172           <field field_ref="ibgempdyg"    name="ibgempdyg"      /> 
    173           <field field_ref="ibgempbom"    name="ibgempbom"      /> 
    174           <field field_ref="ibgempsum"    name="ibgempsum"      /> 
    175           <field field_ref="ibgempres"    name="ibgempres"      /> 
     209          <field field_ref="ibgvfx"       name="ibgvfx"      /> 
     210          <field field_ref="ibgvfxbog"    name="ibgvfxbog"      /> 
     211          <field field_ref="ibgvfxopw"    name="ibgvfxopw"      /> 
     212          <field field_ref="ibgvfxsni"    name="ibgvfxsni"      /> 
     213          <field field_ref="ibgvfxdyn"    name="ibgvfxdyn"      /> 
     214          <field field_ref="ibgvfxbom"    name="ibgvfxbom"      /> 
     215          <field field_ref="ibgvfxsum"    name="ibgvfxsum"      /> 
     216          <field field_ref="ibgvfxres"    name="ibgvfxres"      /> 
    176217 
    177218          <field field_ref="ibgsfx"       name="ibgsfx"     /> 
    178219          <field field_ref="ibgsfxbri"    name="ibgsfxbri"    /> 
    179           <field field_ref="ibgsfxthd"    name="ibgsfxthd"    /> 
    180           <field field_ref="ibgsfxmec"    name="ibgsfxmec" /> 
     220          <field field_ref="ibgsfxdyn"    name="ibgsfxdyn" /> 
    181221          <field field_ref="ibgsfxres"    name="ibgsfxres" /> 
     222          <field field_ref="ibgsfxbog"    name="ibgsfxbog"      /> 
     223          <field field_ref="ibgsfxopw"    name="ibgsfxopw"      /> 
     224          <field field_ref="ibgsfxsni"    name="ibgsfxsni"      /> 
     225          <field field_ref="ibgsfxbom"    name="ibgsfxbom"      /> 
     226          <field field_ref="ibgsfxsum"    name="ibgsfxsum"      /> 
     227 
     228          <field field_ref="ibghfxdhc1"    name="ibghfxdhc1"    /> 
     229          <field field_ref="ibghfxspr"    name="ibghfxspr"    /> 
     230          <field field_ref="ibghfxqsr"    name="ibghfxqsr"    /> 
     231          <field field_ref="ibghfxqns"    name="ibghfxqns"    /> 
     232 
     233          <field field_ref="ibghfxres"    name="ibghfxres"    /> 
     234          <field field_ref="ibghfxsub"    name="ibghfxsub"    /> 
     235          <field field_ref="ibghfxdyn"    name="ibghfxdyn"    /> 
     236          <field field_ref="ibghfxthd"    name="ibghfxthd"    /> 
     237          <field field_ref="ibghfxout"    name="ibghfxout"    /> 
     238          <field field_ref="ibghfxin"    name="ibghfxin"    /> 
     239          <field field_ref="ibghfxtot"    name="ibghfxtot"    /> 
     240          <field field_ref="ibghfxsnw"    name="ibghfxsnw"    /> 
    182241 
    183242          <field field_ref="ibgfrcvol"    name="ibgfrcvol"   /> 
    184243          <field field_ref="ibgfrcsfx"    name="ibgfrcsfx"  /> 
    185           <field field_ref="ibggrme"      name="ibggrme"    /> 
     244          <field field_ref="ibgvolgrm"    name="ibgvolgrm"    /> 
    186245        </file> 
    187246 
     
    219278      <axis id="nfloat" long_name="Float number"      unit="-"  /> 
    220279      <axis id="icbcla" long_name="Iceberg class"     unit="-"  /> 
     280      <axis id="ncatice" long_name="Ice categories"   unit="-"  /> 
    221281   </axis_definition>  
    222282     
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/iodef_default.xml

    r4345 r4634  
    4747     <field field_ref="mldkz5"       /> 
    4848     <field field_ref="mldr10_1"     /> 
     49          <field field_ref="heatc"        name="heatc"    long_name="Heat content vertically integrated"            /> 
     50          <field field_ref="saltc"        name="saltc"    long_name="Salt content vertically integrated"            /> 
    4951   </file> 
    5052 
    5153   <file id="file2" name_suffix="_SBC" description="surface fluxes variables" > <!-- time step automaticaly defined based on nn_fsbc --> 
    5254     <field field_ref="empmr"        name="wfo"      long_name="water_flux_into_sea_water"                     /> 
    53      <field field_ref="qsr"          name="rsntds"   long_name="surface_net_downward_shortwave_flux"           /> 
    54      <field field_ref="qt"           name="tohfls"   long_name="surface_net_downward_total_heat_flux"          /> 
    55      <field field_ref="saltflx"      name="sosflxdo"  /> 
     55     <field field_ref="qsr"          name="hfxqsr"   long_name="surface_net_downward_shortwave_flux"           /> 
     56     <field field_ref="qt"           name="hfxtot"   long_name="surface_net_downward_total_heat_flux"          /> 
     57     <field field_ref="saltflx"      name="sfx"  /> 
    5658     <field field_ref="taum"         name="taum" /> 
    57      <field field_ref="wspd"         name="sowindsp"  /> 
    58           <field field_ref="precip"       name="soprecip" /> 
     59     <field field_ref="wspd"         name="windsp"  /> 
     60          <field field_ref="precip"       name="precip" /> 
    5961     <!-- ice and snow --> 
    6062     <field field_ref="snowpre"      /> 
     63          <field field_ref="utau_ice"         name="utau_ice" /> 
     64          <field field_ref="vtau_ice"         name="vtau_ice" /> 
     65     <!-- clem 
    6166          <field field_ref="qsr_io"           name="iicesflx" /> 
    6267          <field field_ref="qns_io"           name="iicenflx" /> 
    63           <field field_ref="utau_ice"         name="iicestru" /> 
    64           <field field_ref="vtau_ice"         name="iicestrv" /> 
     68     --> 
    6569 
    6670   </file> 
     
    7377     <field field_ref="u_masstr"     name="vozomatr"  /> 
    7478     <field field_ref="u_heattr"     name="sozohetr"  /> 
     79          <field field_ref="u_salttr"     name="sozosatr"  /> 
    7580   </file> 
    7681    
     
    8287     <field field_ref="v_masstr"     name="vomematr"  /> 
    8388     <field field_ref="v_heattr"     name="somehetr"  /> 
     89          <field field_ref="v_salttr"     name="somesatr"  /> 
    8490   </file> 
    8591    
     
    9096   </file> 
    9197 
    92    <file id="file6" name_suffix="_icemod" description="ice variables" > 
    93      <field field_ref="snowthic_cea" name="snd"     long_name="surface_snow_thickness"   /> 
    94      <field field_ref="icethic_cea"  name="sit"     long_name="sea_ice_thickness"        /> 
    95           <field field_ref="icevolu"      name="iicevolu" /> 
    96           <field field_ref="snowvol"      name="isnowvol" /> 
    97           <field field_ref="iceconc"      name="iiceconc"  /> 
    98  
    99           <field field_ref="icebopr"          name="iicebopr" /> 
    100           <field field_ref="icedypr"          name="iicedypr" /> 
    101           <field field_ref="ioceflxb"         name="ioceflxb" /> 
    102           <field field_ref="uice_ipa"         name="iicevelu" /> 
    103           <field field_ref="vice_ipa"         name="iicevelv" /> 
    104           <field field_ref="isst"             name="isstempe" /> 
    105           <field field_ref="isss"             name="isssalin" /> 
    106           <field field_ref="micesalt"         name="iicesali" /> 
    107           <field field_ref="miceage"          name="iiceages" /> 
    108           <field field_ref="icelapr"          name="iicelapr" /> 
    109           <field field_ref="icesipr"          name="iicesipr" /> 
    110           <field field_ref="micet"            name="iicetemp" /> 
    111           <field field_ref="icehc"            name="iiceheco" /> 
    112           <field field_ref="isnowhc"          name="isnoheco" /> 
    113           <field field_ref="icest"            name="iicesurt" /> 
    114           <field field_ref="sfxbri"            name="iicefsbr" /> 
    115           <field field_ref="sfxthd"            name="iicefseq" /> 
    116           <field field_ref="ibrinv"           name="ibrinvol" /> 
    117           <field field_ref="icecolf"          name="iicecolf" /> 
    118           <field field_ref="icestr"           name="iicestre" /> 
    119           <field field_ref="icevel"           name="iicevelo" /> 
    120           <field field_ref="isume"            name="iicesume" /> 
    121           <field field_ref="ibome"            name="iicebome" /> 
    122           <field field_ref="idive"            name="iicedive" /> 
    123           <field field_ref="ishear"           name="iiceshea" /> 
    124           <field field_ref="icerepr"          name="iicerepr" /> 
    125           <field field_ref="sfxmec"            name="iicefsrp" /> 
    126           <field field_ref="sfxres"            name="iicefsre" /> 
    127           <field field_ref="icetrp"           name="iicevtrp" /> 
     98   <file id="file6" name_suffix="_icemod" description="ice variables" enabled=".true." > 
     99     <field field_ref="snowthic_cea"     name="sndept"     long_name="surface_snow_thickness"   /> 
     100     <field field_ref="icethic_cea"      name="sithic"     long_name="sea_ice_thickness"        /> 
     101          <field field_ref="icevolu"          name="sivolu" /> 
     102          <field field_ref="snowvol"          name="snvolu" /> 
     103          <field field_ref="iceconc"          name="siconc"  /> 
     104 
     105          <field field_ref="vfxbog"          name="vfxbog" /> 
     106          <field field_ref="vfxdyn"          name="vfxdyn" /> 
     107          <field field_ref="vfxopw"          name="vfxopw" /> 
     108          <field field_ref="vfxsni"          name="vfxsni" /> 
     109          <field field_ref="vfxsum"          name="vfxsum" /> 
     110          <field field_ref="vfxbom"          name="vfxbom" /> 
     111          <field field_ref="vfxres"          name="vfxres" /> 
     112          <field field_ref="vfxice"          name="vfxice" /> 
     113          <field field_ref="vfxsnw"          name="vfxsnw" /> 
     114          <field field_ref="vfxsub"          name="vfxsub" /> 
     115 
     116          <field field_ref="icetrp"          name="sivtrp" /> 
     117          <field field_ref="snwtrp"          name="snvtrp" /> 
     118          <field field_ref="deitrp"          name="deitrp" /> 
     119          <field field_ref="destrp"          name="destrp" /> 
     120 
     121          <field field_ref="sfxbri"           name="sfxbri" /> 
     122          <field field_ref="sfxdyn"           name="sfxdyn" /> 
     123          <field field_ref="sfxres"           name="sfxres" /> 
     124          <field field_ref="sfxbog"           name="sfxbog" /> 
     125          <field field_ref="sfxbom"           name="sfxbom" /> 
     126          <field field_ref="sfxsum"           name="sfxsum" /> 
     127          <field field_ref="sfxsni"           name="sfxsni" /> 
     128          <field field_ref="sfxopw"           name="sfxopw" /> 
     129          <field field_ref="sfx"              name="sfx" /> 
     130 
     131          <field field_ref="hfxdhc1"          name="hfxdhc1"    /> 
     132          <field field_ref="hfxspr"           name="hfxspr"    /> 
     133          <field field_ref="hfxqsr"           name="hfxqsr"    /> 
     134          <field field_ref="hfxqns"           name="hfxqns"    /> 
     135 
     136          <field field_ref="hfxthd"          name="hfxthd"    /> 
     137          <field field_ref="hfxdyn"          name="hfxdyn"    /> 
     138          <field field_ref="hfxres"          name="hfxres"    /> 
     139          <field field_ref="hfxout"          name="hfxout"    /> 
     140          <field field_ref="hfxin"           name="hfxin"    /> 
     141          <field field_ref="hfxtot"          name="hfxtot"    /> 
     142          <field field_ref="hfxsnw"          name="hfxsnw"    /> 
     143          <field field_ref="hfxsub"          name="hfxsub"    /> 
     144          <field field_ref="hfxerr"          name="hfxerr"    /> 
     145          <field field_ref="hfxerr_rem"      name="hfxerr_rem"    /> 
     146 
     147          <field field_ref="isst"             name="sst" /> 
     148          <field field_ref="isss"             name="sss" /> 
     149          <field field_ref="micesalt"         name="sisali" /> 
     150          <field field_ref="micet"            name="sitemp" /> 
     151          <field field_ref="icest"            name="sistem" /> 
     152          <field field_ref="icehc"            name="siheco" /> 
     153          <field field_ref="isnowhc"          name="snheco" /> 
     154          <field field_ref="miceage"          name="siages" /> 
     155 
     156          <field field_ref="uice_ipa"         name="sivelu" /> 
     157          <field field_ref="vice_ipa"         name="sivelv" /> 
     158          <field field_ref="icevel"           name="sivelo" /> 
     159          <field field_ref="idive"            name="sidive" /> 
     160          <field field_ref="ishear"           name="sishea" /> 
     161          <field field_ref="icestr"           name="sistre" /> 
     162 
     163          <field field_ref="ibrinv"           name="sibrin" /> 
     164          <field field_ref="icecolf"          name="sicolf" /> 
     165 
     166          <field field_ref="iceage_cat"       name="siagecat"/> 
     167          <field field_ref="iceconc_cat"      name="siconcat"/> 
     168          <field field_ref="icethic_cat"      name="sithicat"/> 
     169          <field field_ref="snowthic_cat"     name="sndeptcat"/> 
     170          <field field_ref="salinity_cat"     name="salincat"/> 
     171          <field field_ref="brinevol_cat"     name="sibrincat"/> 
     172 
    128173   </file> 
    129174 
     
    146191          <field field_ref="bgfrctem"     name="bgfrctem"    /> 
    147192          <field field_ref="bgfrcsal"     name="bgfrcsal"    /> 
     193     <!-- 
    148194          <field field_ref="bgmistem"     name="bgmistem"    /> 
    149195          <field field_ref="bgmissal"     name="bgmissal"    /> 
     196     --> 
    150197        </file> 
    151198 
     
    160207          <field field_ref="ibgsaltco"    name="ibgsaltco"   /> 
    161208 
    162           <field field_ref="ibgemp"       name="ibgemp"      /> 
    163           <field field_ref="ibgempbog"    name="ibgempbog"      /> 
    164           <field field_ref="ibgemplag"    name="ibgemplag"      /> 
    165           <field field_ref="ibgempsig"    name="ibgempsig"      /> 
    166           <field field_ref="ibgempdyg"    name="ibgempdyg"      /> 
    167           <field field_ref="ibgempbom"    name="ibgempbom"      /> 
    168           <field field_ref="ibgempsum"    name="ibgempsum"      /> 
    169           <field field_ref="ibgempres"    name="ibgempres"      /> 
     209          <field field_ref="ibgvfx"       name="ibgvfx"      /> 
     210          <field field_ref="ibgvfxbog"    name="ibgvfxbog"      /> 
     211          <field field_ref="ibgvfxopw"    name="ibgvfxopw"      /> 
     212          <field field_ref="ibgvfxsni"    name="ibgvfxsni"      /> 
     213          <field field_ref="ibgvfxdyn"    name="ibgvfxdyn"      /> 
     214          <field field_ref="ibgvfxbom"    name="ibgvfxbom"      /> 
     215          <field field_ref="ibgvfxsum"    name="ibgvfxsum"      /> 
     216          <field field_ref="ibgvfxres"    name="ibgvfxres"      /> 
    170217 
    171218          <field field_ref="ibgsfx"       name="ibgsfx"     /> 
    172219          <field field_ref="ibgsfxbri"    name="ibgsfxbri"    /> 
    173           <field field_ref="ibgsfxthd"    name="ibgsfxthd"    /> 
    174           <field field_ref="ibgsfxmec"    name="ibgsfxmec" /> 
     220          <field field_ref="ibgsfxdyn"    name="ibgsfxdyn" /> 
    175221          <field field_ref="ibgsfxres"    name="ibgsfxres" /> 
     222          <field field_ref="ibgsfxbog"    name="ibgsfxbog"      /> 
     223          <field field_ref="ibgsfxopw"    name="ibgsfxopw"      /> 
     224          <field field_ref="ibgsfxsni"    name="ibgsfxsni"      /> 
     225          <field field_ref="ibgsfxbom"    name="ibgsfxbom"      /> 
     226          <field field_ref="ibgsfxsum"    name="ibgsfxsum"      /> 
     227 
     228          <field field_ref="ibghfxdhc1"    name="ibghfxdhc1"    /> 
     229          <field field_ref="ibghfxspr"    name="ibghfxspr"    /> 
     230          <field field_ref="ibghfxqsr"    name="ibghfxqsr"    /> 
     231          <field field_ref="ibghfxqns"    name="ibghfxqns"    /> 
     232 
     233          <field field_ref="ibghfxres"    name="ibghfxres"    /> 
     234          <field field_ref="ibghfxsub"    name="ibghfxsub"    /> 
     235          <field field_ref="ibghfxdyn"    name="ibghfxdyn"    /> 
     236          <field field_ref="ibghfxthd"    name="ibghfxthd"    /> 
     237          <field field_ref="ibghfxout"    name="ibghfxout"    /> 
     238          <field field_ref="ibghfxin"    name="ibghfxin"    /> 
     239          <field field_ref="ibghfxtot"    name="ibghfxtot"    /> 
     240          <field field_ref="ibghfxsnw"    name="ibghfxsnw"    /> 
    176241 
    177242          <field field_ref="ibgfrcvol"    name="ibgfrcvol"   /> 
    178243          <field field_ref="ibgfrcsfx"    name="ibgfrcsfx"  /> 
    179           <field field_ref="ibggrme"      name="ibggrme"    /> 
     244          <field field_ref="ibgvolgrm"    name="ibgvolgrm"    /> 
    180245        </file> 
    181246 
     
    213278      <axis id="nfloat" long_name="Float number"      unit="-"  /> 
    214279      <axis id="icbcla" long_name="Iceberg class"     unit="-"  /> 
     280      <axis id="ncatice" long_name="Ice categories"   unit="-"  /> 
    215281   </axis_definition>  
    216282     
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/namelist_ice

    r4345 r4634  
    2727&namiceini     !   ice initialisation 
    2828!----------------------------------------------------------------------- 
    29    ttest       =  2.0      !  threshold water temperature for initial sea ice 
    30    hninn       =  0.3      !  initial snow thickness in the north 
    31    hnins       =  0.1      !        "            "          south 
    32    hginn       =  3.50     !  initial undeformed ice thickness in the north 
    33    hgins       =  1.0      !        "            "              "     south 
    34    aginn       =  0.95     !  initial undeformed ice concentration in the north 
    35    agins       =  0.9      !        "            "              "         south 
    36    sinn        =  6.301    !  initial salinity in the north 
    37    sins        =  6.301    !        "            "    south 
     29   ln_limini   = .true.    !  activate ice initialization (T) or not (F) 
     30   thres_sst   =  2.0      !  threshold water temperature for initial sea ice 
     31   hts_ini_n   =  0.3      !  initial snow thickness in the north 
     32   hts_ini_s   =  0.1      !        "            "          south 
     33   hti_ini_n   =  3.50     !  initial ice thickness in the north 
     34   hti_ini_s   =  1.0      !        "            "         south 
     35   ati_ini_n   =  0.95     !  initial ice concentration in the north 
     36   ati_ini_s   =  0.9      !        "            "             south 
     37   smi_ini_n   =  6.301    !  initial ice salinity in the north 
     38   smi_ini_s   =  6.301    !        "            "    south 
     39   tmi_ini_n   =  270.     !  initial ice/snw temp in the north 
     40   tmi_ini_s   =  270.     !  initial ice/snw temp in the south 
    3841/ 
    3942!----------------------------------------------------------------------- 
     
    5861   telast      =9600.0     !  timescale for elastic waves, SB, 720.0 
    5962   alphaevp    =   1.0     !  coefficient for the solution of internal ice stresses 
    60    hminrhg     =   0.001   !  ice thickness (m) below which ice velocity equal ocean velocity 
     63   hminrhg     =   0.001   !  ice volume (a*h in m) below which ice velocity equal ocean velocity 
    6164/ 
    6265!----------------------------------------------------------------------- 
     
    149152&namiceout     !   parameters for outputs 
    150153!----------------------------------------------------------------------- 
    151    noumef      =   43      !  number of fields 
    152    add_diag_swi=    1      !  1 -> diagnose distribution in thickness space 
    153                            !  0 -> only simple diagnostics 
     154!   noumef      =   43      !  number of fields 
     155!SF   add_diag_swi=    1      !  1 -> diagnose distribution in thickness space 
     156!SF                           !  0 -> only simple diagnostics 
    154157! 
    155158!           !         title of the field           !  name     !   units   !  save  ! multipl. ! additive ! 
    156159!           !                                      !           !           ! or not !  factor  !  factor  ! 
    157    field_1  = 'Ice concentration                  ', 'iiceconc', '%       ',    1   ,  1.0     ,    0.0 
    158    field_2  = 'Ice thickness                      ', 'iicethic', 'm       ',    1   ,  1.0     ,    0.0 
    159    field_3  = 'Snow thickness                     ', 'isnowthi', 'm       ',    1   ,  1.0     ,    0.0 
    160    field_4  = 'Daily bottom thermo ice production ', 'iicebopr', 'km3/day ',    1   , 1.0e-9   ,    0.0 
    161    field_5  = 'Daily dynamic ice production       ', 'iicedypr', 'km3/day ',    1   , 1.0e-9   ,    0.0 
    162    field_6  = 'Oceanic flux at the ice base       ', 'ioceflxb', 'w/m2    ',    1   ,  1.0     ,    0.0 
    163    field_7  = 'Ice velocity u                     ', 'iicevelu', 'm/s     ',    1   ,  1.0     ,    0.0 
    164    field_8  = 'Ice velocity v                     ', 'iicevelv', 'm/s     ',    1   ,  1.0     ,    0.0 
    165    field_9  = 'Sea surface temperature            ', 'isstempe', 'C       ',    1   ,  1.0     , -273.15 
    166    field_10 = 'Sea surface salinity               ', 'isssalin', 'PSU     ',    1   ,  1.0     ,    0.0 
    167    field_11 = 'Total flux at ocean surface        ', 'iocetflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    168    field_12 = 'Solar flux at ocean surface        ', 'iocesflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    169    field_13 = 'Non-solar flux at ocean surface    ', 'iocwnsfl', 'w/m2    ',    1   ,  1.0     ,    0.0 
    170    field_14 = 'Heat flux due to brine release     ', 'iocehebr', 'w/m2    ',    1   ,  1.0     ,    0.0 
    171    field_15 = 'Wind stress u                      ', 'iocestru', 'Pa      ',    1   ,  1.0     ,    0.0 
    172    field_16 = 'Wind stress v                      ', 'iocestrv', 'Pa      ',    1   ,  1.0     ,    0.0  
    173    field_17 = 'Solar flux at ice/ocean surface    ', 'iicesflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    174    field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    175    field_19 = 'Snow precipitation                 ', 'isnowpre', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    176    field_20 = 'Mean ice salinity                  ', 'iicesali', 'psu     ',    1   ,  1.0     ,    0.0 
    177    field_21 = 'Mean ice age                       ', 'iiceages', 'years   ',    1   ,  0.002739,    0.0 
    178    field_22 = 'Daily lateral thermo ice prod.     ', 'iicelapr', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    179    field_23 = 'Daily snowice ice production       ', 'iicesipr', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    180    field_24 = 'Mean ice temperature               ', 'iicetemp', 'C       ',    1   ,  1.0     , -273.15 
    181    field_25 = 'Ice total heat content             ', 'iiceheco', '10^9 J  ',    1   ,  1.0     ,    0.0 
    182    field_26 = 'Ice surface temperature            ', 'iicesurt', 'C       ',    1   ,  1.0     , -273.15 
    183    field_27 = 'Snow temperature                   ', 'isnotem2', 'C       ',    1   ,  1.0     , -273.15 
    184    field_28 = 'Fsbri - brine salt flux            ', 'iicefsbr', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    185    field_29 = 'Fseqv - equivalent FW salt flux    ', 'iicefseq', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    186    field_30 = 'Brine volume                       ', 'ibrinvol', '%       ',    1   ,  100.0   ,    0.0 
    187    field_31 = 'Frazil ice collection thickness    ', 'iicecolf', 'm       ',    1   ,  1.0     ,    0.0 
    188    field_32 = 'Ice strength                       ', 'iicestre', 'N/m     ',    1   ,  0.001   ,    0.0 
    189    field_33 = 'Ice velocity                       ', 'iicevelo', 'm/s     ',    1   ,  1.0     ,    0.0 
    190    field_34 = 'Surface melt                       ', 'iicesume', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    191    field_35 = 'Bottom melt                        ', 'iicebome', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    192    field_36 = 'Divergence                         ', 'iicedive', '10-8s-1 ',    1   ,  1.0e8   ,    0.0 
    193    field_37 = 'Shear                              ', 'iiceshea', '10-8s-1 ',    1   ,  1.0e8   ,    0.0 
    194    field_38 = 'Daily resultant ice prod/melt      ', 'iicerepr', 'km3/day ',    1   ,  1.0e-9  ,    0.0 
    195    field_39 = 'Ice volume                         ', 'iicevolu', 'km3     ',    1   ,  1.0e-9  ,    0.0 
    196    field_40 = 'Snow volume                        ', 'isnowvol', 'km3     ',    1   ,  1.0e-9  ,    0.0 
    197    field_41 = 'Fsrpo - salt flux from ridg/raft   ', 'iicefsrp', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    198    field_42 = 'Fsres - salt flux from limupdate   ', 'iicefsre', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    199    field_43 = 'Ice volume transport               ', 'iicevtrp', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    200160/  
    201161 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/ORCA2_LIM3/EXP00/namelist_ice_lim3

    r4345 r4634  
    2727&namiceini     !   ice initialisation 
    2828!----------------------------------------------------------------------- 
    29    ttest       =  2.0      !  threshold water temperature for initial sea ice 
    30    hninn       =  0.3      !  initial snow thickness in the north 
    31    hnins       =  0.1      !        "            "          south 
    32    hginn       =  3.50     !  initial undeformed ice thickness in the north 
    33    hgins       =  1.0      !        "            "              "     south 
    34    aginn       =  0.95     !  initial undeformed ice concentration in the north 
    35    agins       =  0.9      !        "            "              "         south 
    36    sinn        =  6.301    !  initial salinity in the north 
    37    sins        =  6.301    !        "            "    south 
     29   ln_limini   = .true.    !  activate ice initialization (T) or not (F) 
     30   thres_sst   =  2.0      !  threshold water temperature for initial sea ice 
     31   hts_ini_n   =  0.3      !  initial snow thickness in the north 
     32   hts_ini_s   =  0.1      !        "            "          south 
     33   hti_ini_n   =  3.50     !  initial ice thickness in the north 
     34   hti_ini_s   =  1.0      !        "            "         south 
     35   ati_ini_n   =  0.95     !  initial ice concentration in the north 
     36   ati_ini_s   =  0.9      !        "            "             south 
     37   smi_ini_n   =  6.301    !  initial ice salinity in the north 
     38   smi_ini_s   =  6.301    !        "            "    south 
     39   tmi_ini_n   =  270.     !  initial ice/snw temp in the north 
     40   tmi_ini_s   =  270.     !  initial ice/snw temp in the south 
    3841/ 
    3942!----------------------------------------------------------------------- 
     
    149152&namiceout     !   parameters for outputs 
    150153!----------------------------------------------------------------------- 
    151    noumef      =   43      !  number of fields 
    152    add_diag_swi=    1      !  1 -> diagnose distribution in thickness space 
    153                            !  0 -> only simple diagnostics 
     154!   noumef      =   43      !  number of fields 
     155!SF   add_diag_swi=    1      !  1 -> diagnose distribution in thickness space 
     156!SF                           !  0 -> only simple diagnostics 
    154157! 
    155158!           !         title of the field           !  name     !   units   !  save  ! multipl. ! additive ! 
    156159!           !                                      !           !           ! or not !  factor  !  factor  ! 
    157    field_1  = 'Ice concentration                  ', 'iiceconc', '%       ',    1   ,  1.0     ,    0.0 
    158    field_2  = 'Ice thickness                      ', 'iicethic', 'm       ',    1   ,  1.0     ,    0.0 
    159    field_3  = 'Snow thickness                     ', 'isnowthi', 'm       ',    1   ,  1.0     ,    0.0 
    160    field_4  = 'Daily bottom thermo ice production ', 'iicebopr', 'km3/day ',    1   , 1.0e-9   ,    0.0 
    161    field_5  = 'Daily dynamic ice production       ', 'iicedypr', 'km3/day ',    1   , 1.0e-9   ,    0.0 
    162    field_6  = 'Oceanic flux at the ice base       ', 'ioceflxb', 'w/m2    ',    1   ,  1.0     ,    0.0 
    163    field_7  = 'Ice velocity u                     ', 'iicevelu', 'm/s     ',    1   ,  1.0     ,    0.0 
    164    field_8  = 'Ice velocity v                     ', 'iicevelv', 'm/s     ',    1   ,  1.0     ,    0.0 
    165    field_9  = 'Sea surface temperature            ', 'isstempe', 'C       ',    1   ,  1.0     , -273.15 
    166    field_10 = 'Sea surface salinity               ', 'isssalin', 'PSU     ',    1   ,  1.0     ,    0.0 
    167    field_11 = 'Total flux at ocean surface        ', 'iocetflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    168    field_12 = 'Solar flux at ocean surface        ', 'iocesflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    169    field_13 = 'Non-solar flux at ocean surface    ', 'iocwnsfl', 'w/m2    ',    1   ,  1.0     ,    0.0 
    170    field_14 = 'Heat flux due to brine release     ', 'iocehebr', 'w/m2    ',    1   ,  1.0     ,    0.0 
    171    field_15 = 'Wind stress u                      ', 'iocestru', 'Pa      ',    1   ,  1.0     ,    0.0 
    172    field_16 = 'Wind stress v                      ', 'iocestrv', 'Pa      ',    1   ,  1.0     ,    0.0  
    173    field_17 = 'Solar flux at ice/ocean surface    ', 'iicesflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    174    field_18 = 'Non-solar flux at ice/ocean surface', 'iicenflx', 'w/m2    ',    1   ,  1.0     ,    0.0 
    175    field_19 = 'Snow precipitation                 ', 'isnowpre', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    176    field_20 = 'Mean ice salinity                  ', 'iicesali', 'psu     ',    1   ,  1.0     ,    0.0 
    177    field_21 = 'Mean ice age                       ', 'iiceages', 'years   ',    1   ,  0.002739,    0.0 
    178    field_22 = 'Daily lateral thermo ice prod.     ', 'iicelapr', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    179    field_23 = 'Daily snowice ice production       ', 'iicesipr', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    180    field_24 = 'Mean ice temperature               ', 'iicetemp', 'C       ',    1   ,  1.0     , -273.15 
    181    field_25 = 'Ice total heat content             ', 'iiceheco', '10^9 J  ',    1   ,  1.0     ,    0.0 
    182    field_26 = 'Ice surface temperature            ', 'iicesurt', 'C       ',    1   ,  1.0     , -273.15 
    183    field_27 = 'Snow temperature                   ', 'isnotem2', 'C       ',    1   ,  1.0     , -273.15 
    184    field_28 = 'Fsbri - brine salt flux            ', 'iicefsbr', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    185    field_29 = 'Fseqv - equivalent FW salt flux    ', 'iicefseq', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    186    field_30 = 'Brine volume                       ', 'ibrinvol', '%       ',    1   ,  100.0   ,    0.0 
    187    field_31 = 'Frazil ice collection thickness    ', 'iicecolf', 'm       ',    1   ,  1.0     ,    0.0 
    188    field_32 = 'Ice strength                       ', 'iicestre', 'N/m     ',    1   ,  0.001   ,    0.0 
    189    field_33 = 'Ice velocity                       ', 'iicevelo', 'm/s     ',    1   ,  1.0     ,    0.0 
    190    field_34 = 'Surface melt                       ', 'iicesume', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    191    field_35 = 'Bottom melt                        ', 'iicebome', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    192    field_36 = 'Divergence                         ', 'iicedive', '10-8s-1 ',    1   ,  1.0e8   ,    0.0 
    193    field_37 = 'Shear                              ', 'iiceshea', '10-8s-1 ',    1   ,  1.0e8   ,    0.0 
    194    field_38 = 'Daily resultant ice prod/melt      ', 'iicerepr', 'km3/day ',    1   ,  1.0e-9  ,    0.0 
    195    field_39 = 'Ice volume                         ', 'iicevolu', 'km3     ',    1   ,  1.0e-9  ,    0.0 
    196    field_40 = 'Snow volume                        ', 'isnowvol', 'km3     ',    1   ,  1.0e-9  ,    0.0 
    197    field_41 = 'Fsrpo - salt flux from ridg/raft   ', 'iicefsrp', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    198    field_42 = 'Fsres - salt flux from limupdate   ', 'iicefsre', 'kg/m2/d ',    1   ,  1.0     ,    0.0 
    199    field_43 = 'Ice volume transport               ', 'iicevtrp', 'km3/day ',    1   ,1.0e-9    ,    0.0 
    200160/  
    201161 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/CONFIG/cfg.txt

    r4332 r4634  
    77ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
    88AMM12 OPA_SRC 
     9ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
    910ORCA2_LIM3 OPA_SRC LIM_SRC_3 NST_SRC 
    10 ORCA2_LIM OPA_SRC LIM_SRC_2 NST_SRC 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r4332 r4634  
    207207   !                                               ! 3 - salinity profile, constant in time 
    208208   INTEGER , PUBLIC ::   sal_prof    = 1           !: salinity profile or not  
    209    INTEGER , PUBLIC ::   thcon_i_swi = 1           !: thermal conductivity: =1 Untersteiner (1964) ; =2 Pringle et al (2007) 
     209   INTEGER , PUBLIC ::   thcon_i_swi = 1           !: thermal conductivity: =0 Untersteiner (1964) ; =1 Pringle et al (2007) 
    210210 
    211211   !                                              !!** ice-mechanical redistribution namelist (namiceitdme) 
     
    249249   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   shear_i        !: Shear of the velocity field [s-1] 
    250250   ! 
    251    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   firic       !: IR flux over the ice (diag only) 
    252    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fcsic       !: Sensible heat flux over the ice (diag only) 
    253    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fleic       !: Latent heat flux over the ice (diag only) 
    254    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qlatic      !: latent flux 
    255    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdvosif     !: Variation of volume at surface (diag only) 
    256    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdvobif     !: Variation of ice volume at the bottom ice (diag only) 
    257    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fdvolif     !: Total variation of ice volume (diag only) 
    258    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdvonif     !: Lateral Variation of ice volume (diag only) 
    259251   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sist        !: Average Sea-Ice Surface Temperature [Kelvin] 
    260252   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   icethi      !: total ice thickness (for all categories) (diag only) 
    261253   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   t_bo        !: Sea-Ice bottom temperature [Kelvin]      
    262    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hicifp      !: Ice production/melting==>!obsolete... can be removed 
    263254   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   frld        !: Leads fraction = 1 - ice fraction 
    264255   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   pfrld       !: Leads fraction at previous time   
    265256   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   phicif      !: Old ice thickness 
    266    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fbif        !: Heat flux at the ice base 
    267    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdm_snw     !: Variation of snow mass over 1 time step     [Kg/m2] 
    268    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdq_snw     !: Heat content associated with rdm_snw        [J/m2] 
    269    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdm_ice     !: Variation of ice mass over 1 time step      [Kg/m2] 
    270    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rdq_ice     !: Heat content associated with rdm_ice        [J/m2] 
    271    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qldif       !: heat balance of the lead (or of the open ocean) 
    272    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qcmif       !: Energy needed to bring the ocean to freezing  
    273    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fdtcn       !: net downward heat flux from the ice to the ocean 
    274    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qdtcn       !: energy from the ice to the ocean 
    275    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fstric      !: transmitted solar radiation under ice 
    276    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fscmbq      !: associated with lead chipotage with solar flux 
    277    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ffltbif     !: related to max heat contained in brine pockets (?) 
    278    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fsbbq       !: Also linked with the solar flux below the ice (?) 
    279    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qfvbq       !: store energy in case of total lateral ablation (?) 
    280    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   dmgwi       !: Variation of the mass of snow ice 
    281    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_thd     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
     257   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qlead       !: heat balance of the lead (or of the open ocean) 
     258   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fhtur       !: net downward heat flux from the ice to the ocean 
     259   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fhld        !: heat flux from the lead used for bottom melting 
     260 
     261   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_snw     !: Variation of snow mass over 1 time step     [Kg/m2] 
     262   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_ice     !: Variation of ice mass over 1 time step      [Kg/m2] 
     263   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_sub     !: Variation of snow mass over 1 time step due to sublimation [Kg/m2] 
     264 
     265   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_sni   ! snow ice growth  
     266   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_opw   ! lateral ice growth  
     267   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_bog   ! bottom ice growth  
     268   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_dyn   ! dynamical ice growth  
     269   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_bom   ! vertical bottom melt  
     270   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_sum   ! vertical surface melt 
     271   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wfx_res   ! production (growth+melt) due to limupdate 
     272 
     273   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_bog     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
     274   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_bom     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
     275   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_sum     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
     276   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_sni     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
     277   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_opw     !: salt flux due to ice growth/melt                      [PSU/m2/s] 
    282278   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_bri     !: salt flux due to brine rejection                      [PSU/m2/s] 
    283    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_mec     !: salt flux due to porous ridged ice formation          [PSU/m2/s] 
     279   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_dyn     !: salt flux due to porous ridged ice formation          [PSU/m2/s] 
    284280   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sfx_res     !: residual salt flux due to correction of ice thickness [PSU/m2/s] 
    285    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fhbri       !: heat flux due to brine rejection 
    286    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fheat_mec   !: heat flux associated with porous ridged ice formation [???] 
    287    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fheat_res   !: residual heat flux due to correction of ice thickness 
    288    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fmmec       !: mass flux due to snow loss during compression         [Kg/m2/s] 
    289    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fhmec       !: heat flux due to snow loss during compression 
     281 
     282   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_thd     !: ice-ocean heat flux from thermo processes (limthd_dh)  
     283   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_dyn     !: ice-ocean heat flux from mecanical processes (limitd_me)  
     284   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_tot     !: total heat flux lost/gained by ice  
     285   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_spr     !: heat flux of the snow precipitation  
     286   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_res     !: residual heat flux due to correction of ice thickness 
     287   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_snw     !: heat flux for snow melt  
     288   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_sub     !: heat flux for sublimation  
     289   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_err     !: heat flux error after heat diffusion  
     290   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_err_rem !: heat flux error after heat remapping  
     291   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_in      !: heat flux available for thermo transformations  
     292   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_out     !: heat flux remaining at the end of thermo transformations  
     293 
     294   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ftr_ice     !: transmitted solar radiation under ice 
    290295 
    291296   ! temporary arrays for dummy version of the code 
    292    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   dh_i_surf2D, dh_i_bott2D, fstbif, fsup2D, focea2D, q_s 
     297   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   dh_i_surf2D, dh_i_bott2D, q_s 
    293298 
    294299   !!-------------------------------------------------------------------------- 
     
    404409   LOGICAL , PUBLIC                                      ::   ln_limdiahsb  = .FALSE. !: flag for ice diag (T) or not (F) 
    405410   LOGICAL , PUBLIC                                      ::   ln_limdiaout  = .FALSE. !: flag for ice diag (T) or not (F) 
    406    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   v_newice   !: volume of ice formed in the leads 
    407411   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dv_dt_thd  !: thermodynamic growth rates  
    408    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   izero, fstroc, fhbricat 
    409    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_sni_gr   ! snow ice growth  
    410    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_lat_gr   ! lateral ice growth  
    411    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_bot_gr   ! bottom ice growth  
    412    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_dyn_gr   ! dynamical ice growth  
    413    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_bot_me   ! vertical bottom melt  
    414    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_sur_me   ! vertical surface melt 
    415    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_res_pr   ! production (growth+melt) due to limupdate 
     412   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   izero 
    416413   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_vi   ! transport of ice volume 
     414   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_vs   ! transport of snw volume 
     415   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_ei   ! transport of ice enthalpy (W/m2) 
     416   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_trp_es   ! transport of snw enthalpy (W/m2) 
     417   ! 
     418   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   diag_heat_dhc1    ! snw/ice heat content variation   [W/m2]  
     419   ! 
    417420   INTEGER , PUBLIC ::   jiindx, jjindx        !: indexes of the debugging point 
    418421 
     
    447450 
    448451      ii = ii + 1 
    449       ALLOCATE( firic    (jpi,jpj) , fcsic  (jpi,jpj) , fleic  (jpi,jpj) , qlatic   (jpi,jpj) ,     & 
    450          &      rdvosif  (jpi,jpj) , rdvobif(jpi,jpj) , fdvolif(jpi,jpj) , rdvonif  (jpi,jpj) ,     & 
    451          &      sist     (jpi,jpj) , icethi (jpi,jpj) , t_bo   (jpi,jpj) , hicifp   (jpi,jpj) ,     & 
    452          &      frld     (jpi,jpj) , pfrld  (jpi,jpj) , phicif (jpi,jpj) , fbif     (jpi,jpj) ,     & 
    453          &      rdm_snw  (jpi,jpj) , rdq_snw(jpi,jpj) , rdm_ice(jpi,jpj) , rdq_ice  (jpi,jpj) ,     & 
    454          &                                              qldif  (jpi,jpj) , qcmif    (jpi,jpj) ,     & 
    455          &      fdtcn    (jpi,jpj) , qdtcn  (jpi,jpj) , fstric (jpi,jpj) , fscmbq   (jpi,jpj) ,     & 
    456          &      ffltbif  (jpi,jpj) , fsbbq  (jpi,jpj) , qfvbq  (jpi,jpj) , dmgwi    (jpi,jpj) ,     & 
    457          &      sfx_res  (jpi,jpj) , sfx_bri(jpi,jpj) , sfx_mec(jpi,jpj) , fheat_mec(jpi,jpj) ,     & 
    458          &      fhbri    (jpi,jpj) , fmmec  (jpi,jpj) , sfx_thd(jpi,jpj) , fhmec    (jpi,jpj) ,     & 
    459          &      fheat_res(jpi,jpj)                                                            , STAT=ierr(ii) ) 
    460  
    461       ii = ii + 1 
    462       ALLOCATE( dh_i_surf2D(jpi,jpj) , dh_i_bott2D(jpi,jpj) , fstbif(jpi,jpj) ,     & 
    463          &      fsup2D     (jpi,jpj) , focea2D    (jpi,jpj) , q_s   (jpi,jpj) , STAT=ierr(ii) ) 
     452      ALLOCATE( sist     (jpi,jpj) , icethi (jpi,jpj) , t_bo   (jpi,jpj) ,      & 
     453         &      frld     (jpi,jpj) , pfrld  (jpi,jpj) , phicif (jpi,jpj) ,      & 
     454         &      wfx_snw  (jpi,jpj) , wfx_ice(jpi,jpj) , wfx_sub(jpi,jpj) ,    & 
     455         &      wfx_bog(jpi,jpj)  , wfx_dyn(jpi,jpj) , wfx_bom(jpi,jpj) , wfx_sum(jpi,jpj) ,     & 
     456         &      wfx_res(jpi,jpj)  , wfx_sni(jpi,jpj) , wfx_opw(jpi,jpj) ,  qlead  (jpi,jpj) ,     & 
     457         &      fhtur    (jpi,jpj) , ftr_ice(jpi,jpj,jpl) ,      & 
     458         &      sfx_res  (jpi,jpj) , sfx_bri(jpi,jpj) , sfx_dyn(jpi,jpj) ,      & 
     459         &      sfx_bog  (jpi,jpj) , sfx_bom  (jpi,jpj) , sfx_sum  (jpi,jpj) ,  sfx_sni  (jpi,jpj) ,  sfx_opw  (jpi,jpj) ,   & 
     460         &      hfx_res  (jpi,jpj) , hfx_snw  (jpi,jpj) , hfx_sub(jpi,jpj) , hfx_err(jpi,jpj), hfx_err_rem(jpi,jpj), & 
     461         &      hfx_in   (jpi,jpj) , hfx_out(jpi,jpj) , fhld(jpi,jpj) ,  & 
     462         &      hfx_tot  (jpi,jpj) , hfx_thd  (jpi,jpj) , hfx_dyn(jpi,jpj) , hfx_spr(jpi,jpj),  STAT=ierr(ii) ) 
     463 
     464      ii = ii + 1 
     465      ALLOCATE( dh_i_surf2D(jpi,jpj) , dh_i_bott2D(jpi,jpj) , q_s(jpi,jpj) , STAT=ierr(ii) ) 
    464466 
    465467      ! * Ice global state variables 
     
    522524      ! * Ice diagnostics 
    523525      ii = ii + 1 
    524       ALLOCATE( dv_dt_thd(jpi,jpj,jpl) , diag_sni_gr(jpi,jpj) , diag_lat_gr(jpi,jpj) ,     & 
    525          &      izero    (jpi,jpj,jpl) , diag_bot_gr(jpi,jpj) , diag_dyn_gr(jpi,jpj) ,     & 
    526          &      fstroc   (jpi,jpj,jpl) , diag_bot_me(jpi,jpj) , diag_sur_me(jpi,jpj) ,     & 
    527          &      fhbricat (jpi,jpj,jpl) , diag_res_pr(jpi,jpj) , diag_trp_vi(jpi,jpj) , v_newice(jpi,jpj) , STAT=ierr(ii) ) 
     526      ALLOCATE( dv_dt_thd(jpi,jpj,jpl) ,     & 
     527         &      izero    (jpi,jpj,jpl)  , diag_trp_vi(jpi,jpj) , diag_trp_vs(jpi,jpj), diag_trp_ei(jpi,jpj), diag_trp_es(jpi,jpj),     &  
     528         &      diag_heat_dhc1(jpi,jpj) ,  STAT=ierr(ii) ) 
    528529 
    529530      ice_alloc = MAXVAL( ierr(:) ) 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limadv.F90

    r4045 r4634  
    3232 
    3333   REAL(wp)  ::   epsi20 = 1.e-20_wp   ! constant values 
    34    REAL(wp)  ::   rzero  = 0._wp       !    -       - 
    35    REAL(wp)  ::   rone   = 1._wp       !    -       - 
    3634 
    3735   !! * Substitutions 
     
    8482      DO jj = 1, jpj 
    8583         DO ji = 1, jpi 
    86             zslpmax = MAX( rzero, ps0(ji,jj) ) 
     84            zslpmax = MAX( 0._wp, ps0(ji,jj) ) 
    8785            zs1max  = 1.5 * zslpmax 
    8886            zs1new  = MIN( zs1max, MAX( -zs1max, psx(ji,jj) ) ) 
    8987            zs2new  = MIN(  2.0 * zslpmax - 0.3334 * ABS( zs1new ),      & 
    9088               &            MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) )  ) 
    91             zin0    = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
     89            zin0    = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
    9290 
    9391            ps0 (ji,jj) = zslpmax   
     
    106104      DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0  
    107105         DO ji = 1, jpi 
    108             zbet(ji,jj)  =  MAX( rzero, SIGN( rone, put(ji,jj) ) ) 
    109             zalf         =  MAX( rzero, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj) 
     106            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) ) 
     107            zalf         =  MAX( 0._wp, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj) 
    110108            zalfq        =  zalf * zalf 
    111109            zalf1        =  1.0 - zalf 
     
    133131      DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0. 
    134132         DO ji = 1, fs_jpim1 
    135             zalf          = MAX( rzero, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)  
     133            zalf          = MAX( 0._wp, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj)  
    136134            zalg  (ji,jj) = zalf 
    137135            zalfq         = zalf * zalf 
     
    269267      DO jj = 1, jpj 
    270268         DO ji = 1, jpi 
    271             zslpmax = MAX( rzero, ps0(ji,jj) ) 
     269            zslpmax = MAX( 0._wp, ps0(ji,jj) ) 
    272270            zs1max  = 1.5 * zslpmax 
    273271            zs1new  = MIN( zs1max, MAX( -zs1max, psy(ji,jj) ) ) 
    274272            zs2new  = MIN(  ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ),   & 
    275273               &             MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) )  ) 
    276             zin0    = ( 1.0 - MAX( rzero, SIGN( rone, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
     274            zin0    = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tms(ji,jj)   ! Case of empty boxes & Apply mask 
    277275            ! 
    278276            ps0 (ji,jj) = zslpmax   
     
    291289      DO jj = 1, jpj                     !  Flux from j to j+1 WHEN v GT 0    
    292290         DO ji = 1, jpi 
    293             zbet(ji,jj)  =  MAX( rzero, SIGN( rone, pvt(ji,jj) ) ) 
    294             zalf         =  MAX( rzero, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj) 
     291            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, pvt(ji,jj) ) ) 
     292            zalf         =  MAX( 0._wp, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj) 
    295293            zalfq        =  zalf * zalf 
    296294            zalf1        =  1.0 - zalf 
     
    318316      DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0. 
    319317         DO ji = 1, jpi 
    320             zalf          = ( MAX(rzero, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1)  
     318            zalf          = ( MAX(0._wp, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1)  
    321319            zalg  (ji,jj) = zalf 
    322320            zalfq         = zalf * zalf 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limdiahsb.F90

    r4345 r4634  
    1818   USE dom_oce         ! ocean domain 
    1919   USE sbc_oce         ! surface boundary condition: ocean fields 
     20   USE sbc_ice         ! Surface boundary condition: sea-ice fields 
    2021   USE daymod          ! model calendar 
    2122   USE phycst          ! physical constant 
     
    3435   !!PUBLIC   lim_diahsb_rst   ! routine called by ice_init.F90 
    3536 
    36    REAL(dp) ::   frc_sal, frc_vol   ! global forcing trends 
    37    REAL(dp) ::   bg_grme            ! global ice growth+melt trends 
     37   REAL(wp) ::   frc_sal, frc_vol   ! global forcing trends 
     38   REAL(wp) ::   bg_grme            ! global ice growth+melt trends 
    3839   REAL(wp) ::   epsi06 = 1.e-6_wp  ! small number 
    39    REAL(wp) ::   epsi03 = 1.e-3_wp  ! small number 
    40  
    4140 
    4241   !! * Substitutions 
     
    4847   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    4948   !!---------------------------------------------------------------------- 
    50  
    5149CONTAINS 
    5250 
     
    5957      !!--------------------------------------------------------------------------- 
    6058      !! 
    61       REAL(dp)   ::   zbg_ivo, zbg_svo, zbg_are, zbg_sal ,zbg_tem ,zbg_ihc ,zbg_shc 
    62       REAL(dp)   ::   zbg_sfx, zbg_sfx_bri, zbg_sfx_thd, zbg_sfx_res, zbg_sfx_mec  
    63       REAL(dp)   ::   zbg_emp, zbg_emp_bog, zbg_emp_lag, zbg_emp_sig, zbg_emp_dyg, zbg_emp_bom, zbg_emp_sum, zbg_emp_res  
    64       REAL(dp)   ::   z_frc_vol, z_frc_sal, z_bg_grme  
    65       REAL(dp)   ::   z1_area                     !    -     - 
    66       REAL(dp)   ::   zinda, zindb 
     59      REAL(wp)   ::   zbg_ivo, zbg_svo, zbg_are, zbg_sal ,zbg_tem ,zbg_ihc ,zbg_shc 
     60      REAL(wp)   ::   zbg_sfx, zbg_sfx_bri, zbg_sfx_bog, zbg_sfx_bom, zbg_sfx_sum, zbg_sfx_sni, zbg_sfx_opw, zbg_sfx_res, zbg_sfx_dyn  
     61      REAL(wp)   ::   zbg_vfx, zbg_vfx_bog, zbg_vfx_opw, zbg_vfx_sni, zbg_vfx_dyn, zbg_vfx_bom, zbg_vfx_sum, zbg_vfx_res  
     62      REAL(wp)   ::   zbg_hfx_dhc1, zbg_hfx_spr, zbg_hfx_qsr, zbg_hfx_qns 
     63      REAL(wp)   ::   zbg_hfx_res, zbg_hfx_sub, zbg_hfx_dyn, zbg_hfx_thd, zbg_hfx_snw, zbg_hfx_tot, zbg_hfx_out, zbg_hfx_in    
     64      REAL(wp)   ::   z_frc_vol, z_frc_sal, z_bg_grme  
     65      REAL(wp)   ::   z1_area, zcoef                     
     66      REAL(wp)   ::   zinda, zindb 
    6767      !!--------------------------------------------------------------------------- 
    6868      IF( nn_timing == 1 )   CALL timing_start('lim_diahsb') 
     
    7070      IF( numit == nstart ) CALL lim_diahsb_init  
    7171 
    72       ! 1/area 
    73       z1_area = 1.d0 / MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 ) 
    74  
    75       zinda = MAX( 0.d0 , SIGN( 1.d0 , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 
     72      z1_area = 1._wp / MAX( glob_sum( area(:,:) * tms(:,:) ), epsi06 ) 
     73 
     74      zinda = MAX( 0._wp , SIGN( 1._wp , glob_sum( area(:,:) * tms(:,:) ) - epsi06 ) ) 
    7675      ! ----------------------- ! 
    7776      ! 1 -  Content variations ! 
     
    8079      zbg_svo = glob_sum( vt_s(:,:) * area(:,:) * tms(:,:) ) ! volume snow 
    8180      zbg_are = glob_sum( at_i(:,:) * area(:,:) * tms(:,:) ) ! area 
    82       zbg_sal = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) )       ! mean salt content 
     81      zbg_sal = glob_sum( SUM( smv_i(:,:,:), dim=3 )      * area(:,:) * tms(:,:) )  ! mean salt content 
    8382      zbg_tem = glob_sum( ( tm_i(:,:) - rtt ) * vt_i(:,:) * area(:,:) * tms(:,:) )  ! mean temp content 
    8483 
    85       !zbg_ihc = glob_sum( et_i(:,:) * area(:,:) * tms(:,:) ) / MAX( zbg_ivo,epsi06 ) ! ice heat content 
    86       !zbg_shc = glob_sum( et_s(:,:) * area(:,:) * tms(:,:) ) / MAX( zbg_svo,epsi06 ) ! snow heat content 
    87  
    88       zbg_ihc = glob_sum( et_i(:,:) * 1.e-11 ) ! ice heat content  [10^9*1.e-11 J] 
    89       zbg_shc = glob_sum( et_s(:,:) * 1.e-11 ) ! snow heat content [10^9*1.e-11 J] 
    90  
    91       zbg_emp     = zinda * glob_sum(         emp(:,:) * area(:,:) * tms(:,:) ) * z1_area         * r1_rau0 * rday 
    92       zbg_emp_bog = zinda * glob_sum( diag_bot_gr(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    93       zbg_emp_lag = zinda * glob_sum( diag_lat_gr(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    94       zbg_emp_sig = zinda * glob_sum( diag_sni_gr(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    95       zbg_emp_dyg = zinda * glob_sum( diag_dyn_gr(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    96       zbg_emp_bom = zinda * glob_sum( diag_bot_me(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    97       zbg_emp_sum = zinda * glob_sum( diag_sur_me(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    98       zbg_emp_res = zinda * glob_sum( diag_res_pr(:,:) * area(:,:) * tms(:,:) ) * z1_area * rhoic * r1_rau0 * rday 
    99  
    100       zbg_sfx     = zinda * glob_sum(     sfx(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 
    101       zbg_sfx_bri = zinda * glob_sum( sfx_bri(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 
    102       zbg_sfx_thd = zinda * glob_sum( sfx_thd(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 
    103       zbg_sfx_res = zinda * glob_sum( sfx_res(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 
    104       zbg_sfx_mec = zinda * glob_sum( sfx_mec(:,:) * area(:,:) * tms(:,:) ) * z1_area * r1_rau0 * rday 
    105        
     84      zcoef = zinda * z1_area * r1_rau0 * rday 
     85      ! Volume 
     86      zbg_vfx     = glob_sum(     emp(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     87      zbg_vfx_bog = glob_sum( wfx_bog(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     88      zbg_vfx_opw = glob_sum( wfx_opw(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     89      zbg_vfx_sni = glob_sum( wfx_sni(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     90      zbg_vfx_dyn = glob_sum( wfx_dyn(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     91      zbg_vfx_bom = glob_sum( wfx_bom(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     92      zbg_vfx_sum = glob_sum( wfx_sum(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     93      zbg_vfx_res = glob_sum( wfx_res(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     94 
     95      ! Salt 
     96      zbg_sfx     = glob_sum(     sfx(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     97      zbg_sfx_bri = glob_sum( sfx_bri(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     98      zbg_sfx_res = glob_sum( sfx_res(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     99      zbg_sfx_dyn = glob_sum( sfx_dyn(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     100 
     101      zbg_sfx_bog = glob_sum( sfx_bog(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     102      zbg_sfx_opw = glob_sum( sfx_opw(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     103      zbg_sfx_sni = glob_sum( sfx_sni(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     104      zbg_sfx_bom = glob_sum( sfx_bom(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     105      zbg_sfx_sum = glob_sum( sfx_sum(:,:) * area(:,:) * tms(:,:) ) * zcoef 
     106 
     107      ! Heat budget 
     108      zbg_ihc      = glob_sum( et_i(:,:) * 1.e-20 ) ! ice heat content  [1.e-20 J] 
     109      zbg_shc      = glob_sum( et_s(:,:) * 1.e-20 ) ! snow heat content [1.e-20 J] 
     110      zbg_hfx_dhc1 = glob_sum( diag_heat_dhc1(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     111      zbg_hfx_spr  = glob_sum( hfx_spr(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     112      zbg_hfx_qsr  = glob_sum( qsr(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     113      zbg_hfx_qns  = glob_sum( qns(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     114 
     115      zbg_hfx_thd  = glob_sum( hfx_thd(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     116      zbg_hfx_dyn  = glob_sum( hfx_dyn(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     117      zbg_hfx_res  = glob_sum( hfx_res(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     118      zbg_hfx_sub  = glob_sum( hfx_sub(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     119      zbg_hfx_snw  = glob_sum( hfx_snw(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     120      zbg_hfx_tot  = glob_sum( hfx_tot(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     121      zbg_hfx_out  = glob_sum( hfx_out(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     122      zbg_hfx_in   = glob_sum(  hfx_in(:,:) * area(:,:) * tms(:,:) ) ! [in W] 
     123     
    106124      ! --------------------------------------------- ! 
    107125      ! 2 - Trends due to forcing and ice growth/melt ! 
     
    109127      z_frc_vol = r1_rau0 * glob_sum( - emp(:,:) * area(:,:) * tms(:,:) ) ! volume fluxes 
    110128      z_frc_sal = r1_rau0 * glob_sum(   sfx(:,:) * area(:,:) * tms(:,:) ) ! salt fluxes 
    111       z_bg_grme = glob_sum( ( diag_bot_gr(:,:) + diag_lat_gr(:,:) + diag_sni_gr(:,:) + diag_dyn_gr(:,:) + & 
    112                           &    diag_bot_me(:,:) + diag_sur_me(:,:) + diag_res_pr(:,:) ) * area(:,:) * tms(:,:) ) ! volume fluxes 
    113       ! 
    114       frc_vol  = frc_vol  + z_frc_vol  * rdt_ice 
    115       frc_sal  = frc_sal  + z_frc_sal  * rdt_ice 
    116       bg_grme  = bg_grme  + z_bg_grme  * rdt_ice 
    117        
    118       ! difference 
    119       !frc_vol = zbg_ivo - frc_vol 
    120       !frc_sal = zbg_sal - frc_sal 
    121        
     129      z_bg_grme = glob_sum( ( wfx_bog(:,:) + wfx_opw(:,:) + wfx_sni(:,:) + wfx_dyn(:,:) + & 
     130                          &   wfx_bom(:,:) + wfx_sum(:,:) + wfx_res(:,:) ) / rhoic * area(:,:) * tms(:,:) ) ! volume fluxes 
     131      ! 
     132      frc_vol  = frc_vol + z_frc_vol * rdt_ice 
     133      frc_sal  = frc_sal + z_frc_sal * rdt_ice 
     134      bg_grme  = bg_grme + z_bg_grme * rdt_ice 
     135             
    122136      ! ----------------------- ! 
    123137      ! 3 - Diagnostics writing ! 
    124138      ! ----------------------- ! 
    125       zindb = MAX( 0.d0 , SIGN( 1.d0 , zbg_ivo - epsi06 ) ) 
     139      zindb = MAX( 0._wp , SIGN( 1._wp , zbg_ivo - epsi06 ) ) 
    126140      ! 
    127141      CALL iom_put( 'ibgvoltot' , zbg_ivo * rhoic * r1_rau0 * 1.e-9        )   ! ice volume (km3 equivalent liquid)          
     
    134148      CALL iom_put( 'ibgsaltco' , zbg_sal * rhoic * r1_rau0 * 1.e-9        )   ! ice salt content (psu*km3 equivalent liquid)         
    135149 
    136       CALL iom_put( 'ibgemp'    , zbg_emp                                  )   ! volume flux emp (m/day liquid) 
    137       CALL iom_put( 'ibgempbog' , zbg_emp_bog                              )   ! volume flux bottom growth     -(m/day equivalent liquid) 
    138       CALL iom_put( 'ibgemplag' , zbg_emp_lag                              )   ! volume flux open water growth - 
    139       CALL iom_put( 'ibgempsig' , zbg_emp_sig                              )   ! volume flux snow ice growth   - 
    140       CALL iom_put( 'ibgempdyg' , zbg_emp_dyg                              )   ! volume flux dynamic growth    - 
    141       CALL iom_put( 'ibgempbom' , zbg_emp_bom                              )   ! volume flux bottom melt       - 
    142       CALL iom_put( 'ibgempsum' , zbg_emp_sum                              )   ! volume flux surface melt      - 
    143       CALL iom_put( 'ibgempres' , zbg_emp_res                              )   ! volume flux resultant         - 
     150      CALL iom_put( 'ibgvfx'    , zbg_vfx                                  )   ! volume flux emp (m/day liquid) 
     151      CALL iom_put( 'ibgvfxbog' , zbg_vfx_bog                              )   ! volume flux bottom growth     -(m/day equivalent liquid) 
     152      CALL iom_put( 'ibgvfxopw' , zbg_vfx_opw                              )   ! volume flux open water growth - 
     153      CALL iom_put( 'ibgvfxsni' , zbg_vfx_sni                              )   ! volume flux snow ice growth   - 
     154      CALL iom_put( 'ibgvfxdyn' , zbg_vfx_dyn                              )   ! volume flux dynamic growth    - 
     155      CALL iom_put( 'ibgvfxbom' , zbg_vfx_bom                              )   ! volume flux bottom melt       - 
     156      CALL iom_put( 'ibgvfxsum' , zbg_vfx_sum                              )   ! volume flux surface melt      - 
     157      CALL iom_put( 'ibgvfxres' , zbg_vfx_res                              )   ! volume flux resultant         - 
    144158           
    145159      CALL iom_put( 'ibgsfx'    , zbg_sfx                                  )   ! salt flux         -(psu*m/day equivalent liquid)        
    146160      CALL iom_put( 'ibgsfxbri' , zbg_sfx_bri                              )   ! salt flux brines  -       
    147       CALL iom_put( 'ibgsfxthd' , zbg_sfx_thd                              )   ! salt flux thermo  -     
    148       CALL iom_put( 'ibgsfxmec' , zbg_sfx_mec                              )   ! salt flux dynamic -     
     161      CALL iom_put( 'ibgsfxdyn' , zbg_sfx_dyn                              )   ! salt flux dynamic -     
    149162      CALL iom_put( 'ibgsfxres' , zbg_sfx_res                              )   ! salt flux result  -     
     163      CALL iom_put( 'ibgsfxbog' , zbg_sfx_bog                              )   ! salt flux bottom growth    
     164      CALL iom_put( 'ibgsfxopw' , zbg_sfx_opw                              )   ! salt flux open water growth - 
     165      CALL iom_put( 'ibgsfxsni' , zbg_sfx_sni                              )   ! salt flux snow ice growth   - 
     166      CALL iom_put( 'ibgsfxbom' , zbg_sfx_bom                              )   ! salt flux bottom melt       - 
     167      CALL iom_put( 'ibgsfxsum' , zbg_sfx_sum                              )   ! salt flux surface melt      - 
     168 
     169      CALL iom_put( 'ibghfxdhc1', zbg_hfx_dhc1                            )   ! Heat content variation in snow and ice [W] 
     170      CALL iom_put( 'ibghfxspr' , zbg_hfx_spr                              )   ! Heat content of snow precip [W] 
     171      CALL iom_put( 'ibghfxqsr' , zbg_hfx_qsr                              )   !     solar fluxes used by snw/ice [W] 
     172      CALL iom_put( 'ibghfxqns' , zbg_hfx_qns                              )   ! non solar fluxes used by snw/ice [W] 
     173 
     174      CALL iom_put( 'ibghfxres' , zbg_hfx_res                              )   !  
     175      CALL iom_put( 'ibghfxsub' , zbg_hfx_sub                              )   !  
     176      CALL iom_put( 'ibghfxdyn' , zbg_hfx_dyn                              )   !  
     177      CALL iom_put( 'ibghfxthd' , zbg_hfx_thd                              )   !  
     178      CALL iom_put( 'ibghfxsnw' , zbg_hfx_snw                              )   !  
     179      CALL iom_put( 'ibghfxtot' , zbg_hfx_tot                              )   !  
     180      CALL iom_put( 'ibghfxout' , zbg_hfx_out                              )   !  
     181      CALL iom_put( 'ibghfxin'  , zbg_hfx_in                              )   !  
    150182 
    151183      CALL iom_put( 'ibgfrcvol' , frc_vol * 1.e-9                          )   ! vol - forcing     (km3 equivalent liquid)  
    152184      CALL iom_put( 'ibgfrcsfx' , frc_sal * 1.e-9                          )   ! sal - forcing     (psu*km3 equivalent liquid)    
    153       CALL iom_put( 'ibggrme'   , bg_grme * rhoic * r1_rau0 * 1.e-9        )   ! vol growth + melt (km3 equivalent liquid)          
     185      CALL iom_put( 'ibgvolgrm' , bg_grme * rhoic * r1_rau0 * 1.e-9        )   ! vol growth + melt (km3 equivalent liquid)          
     186 
    154187      ! 
    155188      IF( lrst_ice )   CALL lim_diahsb_rst( numit, 'WRITE' ) 
    156189      ! 
    157190      IF( nn_timing == 1 )   CALL timing_stop('lim_diahsb') 
    158 ! 
     191      ! 
    159192   END SUBROUTINE lim_diahsb 
    160193 
     
    190223      ! 2 - initial conservation variables ! 
    191224      ! ---------------------------------- ! 
    192       !frc_vol = 0.d0                                           ! volume       trend due to forcing 
    193       !frc_sal = 0.d0                                           ! salt content   -    -   -    -          
    194       !bg_grme = 0.d0                                           ! ice growth + melt volume trend 
    195225      ! 
    196226      CALL lim_diahsb_rst( nstart, 'READ' )  !* read or initialize all required files 
     
    226256           IF(lwp) WRITE(numout,*) ' lim_diahsb at initial state ' 
    227257           IF(lwp) WRITE(numout,*) '~~~~~~~' 
    228            frc_vol  = 0.d0                                            
    229            frc_sal  = 0.d0                                                   
    230            bg_grme  = 0.d0                                         
     258           frc_vol  = 0._wp                                            
     259           frc_sal  = 0._wp                                                   
     260           bg_grme  = 0._wp                                         
    231261       ENDIF    
    232262 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limdyn.F90

    r4155 r4634  
    8080         zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
    8181         zchk_smv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
    82          zchk_fw_b  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) 
    83          zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) 
     82         zchk_fw_b  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 
     83         zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 
    8484      ENDIF 
    8585      !- check conservation (C Rousset) 
     
    227227      !- check conservation (C Rousset) 
    228228      IF (ln_limdiahsb) THEN 
    229          zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
    230          zchk_fw  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     229         zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
     230         zchk_fw  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fw_b 
    231231  
    232          zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b - ( zchk_fw / rhoic ) ) / rdt_ice 
    233          zchk_smv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_smv_b ) / rdt_ice + ( zchk_fs / rhoic ) 
     232         zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b ) * r1_rdtice - ( zchk_fw / rhoic ) 
     233         zchk_smv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_smv_b ) * r1_rdtice + ( zchk_fs / rhoic ) 
    234234 
    235235         zchk_vmin = glob_min(v_i) 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r4337 r4634  
    3030   USE lib_fortran      ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    3131   USE wrk_nemo         ! work arrays 
     32   USE cpl_oasis3, ONLY : lk_cpl 
    3233 
    3334   IMPLICIT NONE 
     
    3839   !! * Module variables 
    3940   REAL(wp) ::             & !!! ** init namelist (namiceini) ** 
    40       ttest    = 2.0  ,    &  ! threshold water temperature for initial sea ice 
    41       hninn    = 0.5  ,    &  ! initial snow thickness in the north 
    42       hnins    = 0.1  ,    &  ! initial snow thickness in the south 
    43       hginn    = 2.5  ,    &  ! initial ice thickness in the north 
    44       hgins    = 1.0  ,    &  ! initial ice thickness in the south 
    45       aginn    = 0.7  ,    &  ! initial leads area in the north 
    46       agins    = 0.7  ,    &  ! initial leads area in the south 
    47       sinn     = 6.301 ,   &  ! initial salinity  
    48       sins     = 6.301 
    49  
     41      thres_sst   = 2.0   ,    &  ! threshold water temperature for initial sea ice 
     42      hts_ini_n   = 0.5   ,    &  ! initial snow thickness in the north 
     43      hts_ini_s   = 0.1   ,    &  ! initial snow thickness in the south 
     44      hti_ini_n   = 2.5   ,    &  ! initial ice thickness in the north 
     45      hti_ini_s   = 1.0   ,    &  ! initial ice thickness in the south 
     46      ati_ini_n   = 0.7   ,    &  ! initial leads area in the north 
     47      ati_ini_s   = 0.7   ,    &  ! initial leads area in the south 
     48      smi_ini_n   = 6.301 ,    &  ! initial salinity  
     49      smi_ini_s   = 6.301 ,    &  ! initial salinity 
     50      tmi_ini_n   = 270.  ,    &  ! initial temperature 
     51      tmi_ini_s   = 270.          ! initial temperature 
     52 
     53   LOGICAL  ::  ln_limini = .TRUE. 
    5054   !!---------------------------------------------------------------------- 
    5155   !!   LIM 3.0,  UCL-LOCEAN-IPSL (2008) 
     
    9094      INTEGER    :: i_hemis, i_fill, jl0   
    9195      REAL(wp)   :: ztest_1, ztest_2, ztest_3, ztest_4, ztests, zsigma, zarg, zA, zV, zA_cons, zV_cons, zconv 
    92       REAL(wp), POINTER, DIMENSION(:)     :: zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini 
    93       REAL(wp), POINTER, DIMENSION(:,:)   :: zht_i_ini, za_i_ini, zv_i_ini 
    94       REAL(wp), POINTER, DIMENSION(:,:)   :: zidto    ! ice indicator 
     96      REAL(wp), POINTER, DIMENSION(:)     :: zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini 
     97      REAL(wp), POINTER, DIMENSION(:,:)   :: zh_i_ini, za_i_ini, zv_i_ini 
     98      REAL(wp), POINTER, DIMENSION(:,:)   :: zswitch    ! ice indicator 
    9599      INTEGER,  POINTER, DIMENSION(:,:)   :: zhemis   ! hemispheric index 
    96100      !-------------------------------------------------------------------- 
    97101 
    98       CALL wrk_alloc( jpi, jpj, zidto ) 
     102      CALL wrk_alloc( jpi, jpj, zswitch ) 
    99103      CALL wrk_alloc( jpi, jpj, zhemis ) 
    100       CALL wrk_alloc( jpl,   2, zht_i_ini,  za_i_ini,  zv_i_ini ) 
    101       CALL wrk_alloc(   2,      zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini ) 
    102  
    103       epsi20   = 1.0e-20 
     104      CALL wrk_alloc( jpl,   2, zh_i_ini,  za_i_ini,  zv_i_ini ) 
     105      CALL wrk_alloc(   2,      zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 
     106 
     107      epsi20   = 1.e-20_wp 
     108 
    104109      IF(lwp) WRITE(numout,*) 
    105110      IF(lwp) WRITE(numout,*) 'lim_istate : Ice initialization ' 
     
    112117      CALL lim_istate_init     !  reading the initials parameters of the ice 
    113118 
    114 !!gm  in lim2  the initialisation if only done if required in the namelist : 
    115 !!gm      IF( .NOT. ln_limini ) THEN 
    116 !!gm  this should be added in lim3 namelist... 
     119# if defined key_coupled 
     120      albege(:,:)   = 0.8 * tms(:,:) 
     121# endif 
     122 
     123      ! surface temperature 
     124      DO jl = 1, jpl ! loop over categories 
     125         t_su  (:,:,jl) = rtt * tms(:,:) 
     126         tn_ice(:,:,jl) = rtt * tms(:,:) 
     127      END DO 
     128      ! Basal temperature is set to the freezing point of seawater in Kelvin 
     129      t_bo(:,:) = ( tfreez( tsn(:,:,1,jp_sal) ) + rt0 ) * tms(:,:)  
     130 
     131      IF( ln_limini ) THEN 
    117132 
    118133      !-------------------------------------------------------------------- 
    119134      ! 2) Basal temperature, ice mask and hemispheric index 
    120135      !-------------------------------------------------------------------- 
    121  
    122       ! Basal temperature is set to the freezing point of seawater in Celsius 
    123       t_bo(:,:) = tfreez( tsn(:,:,1,jp_sal) ) * tmask(:,:,1)       ! freezing/melting point of sea water [Celcius] 
    124  
    125       DO jj = 1, jpj                                       ! ice if sst <= t-freez + ttest 
     136      ! ice if sst <= t-freez + thres_sst 
     137      DO jj = 1, jpj                                        
    126138         DO ji = 1, jpi 
    127             IF( tsn(ji,jj,1,jp_tem)  - t_bo(ji,jj) >= ttest ) THEN   ;   zidto(ji,jj) = 0._wp      ! no ice 
    128             ELSE                                                     ;   zidto(ji,jj) = 1._wp      !    ice 
     139            IF( ( tsn(ji,jj,1,jp_tem)  - ( t_bo(ji,jj) - rt0 ) ) * tms(ji,jj) >= thres_sst ) THEN  ; zswitch(ji,jj) = 0._wp * tms(ji,jj)    ! no ice 
     140            ELSE                                                                                   ; zswitch(ji,jj) = 1._wp * tms(ji,jj)    !    ice 
    129141            ENDIF 
    130142         END DO 
    131143      END DO 
    132144 
    133       t_bo(:,:) = t_bo(:,:) + rt0                          ! conversion to Kelvin 
    134145 
    135146      ! Hemispheric index 
     
    153164      ! 3.1) Hemisphere-dependent arrays 
    154165      !----------------------------- 
    155       ! assign initial thickness, concentration, snow depth and salinity to 
    156       ! an hemisphere-dependent array 
    157       zhm_i_ini(1) = hginn ; zhm_i_ini(2) = hgins  ! ice thickness 
    158       zat_i_ini(1) = aginn ; zat_i_ini(2) = agins  ! ice concentration 
    159       zvt_i_ini(:) = zhm_i_ini(:) * zat_i_ini(:)   ! ice volume 
    160       zhm_s_ini(1) = hninn ; zhm_s_ini(2) = hnins  ! snow depth 
    161       zsm_i_ini(1) = sinn  ; zsm_i_ini(2) = sins   ! bulk ice salinity 
     166      ! assign initial thickness, concentration, snow depth and salinity to an hemisphere-dependent array 
     167      zht_i_ini(1) = hti_ini_n ; zht_i_ini(2) = hti_ini_s  ! ice thickness 
     168      zht_s_ini(1) = hts_ini_n ; zht_s_ini(2) = hts_ini_s  ! snow depth 
     169      zat_i_ini(1) = ati_ini_n ; zat_i_ini(2) = ati_ini_s  ! ice concentration 
     170      zsm_i_ini(1) = smi_ini_n ; zsm_i_ini(2) = smi_ini_s  ! bulk ice salinity 
     171      ztm_i_ini(1) = tmi_ini_n ; ztm_i_ini(2) = tmi_ini_s  ! temperature (ice and snow) 
     172 
     173      zvt_i_ini(:) = zht_i_ini(:) * zat_i_ini(:)   ! ice volume 
    162174 
    163175      !--------------------------------------------------------------------- 
     
    183195            ! *** 1 category to fill 
    184196            IF ( i_fill .EQ. 1 ) THEN 
    185                zht_i_ini(1,i_hemis)       = zhm_i_ini(i_hemis) 
    186                za_i_ini(1,i_hemis)        = zat_i_ini(i_hemis) 
    187                zht_i_ini(2:jpl,i_hemis)   = 0._wp 
    188                za_i_ini(2:jpl,i_hemis)    = 0._wp 
     197               zh_i_ini(1,i_hemis)       = zht_i_ini(i_hemis) 
     198               za_i_ini(1,i_hemis)       = zat_i_ini(i_hemis) 
     199               zh_i_ini(2:jpl,i_hemis)   = 0._wp 
     200               za_i_ini(2:jpl,i_hemis)   = 0._wp 
    189201            ELSE 
    190202 
    191             ! *** >1 categores to fill 
    192             !--- Ice thicknesses in the i_fill - 1 first categories 
     203               ! *** >1 categores to fill 
     204               !--- Ice thicknesses in the i_fill - 1 first categories 
    193205               DO jl = 1, i_fill - 1 
    194                   zht_i_ini(jl,i_hemis)    = 0.5 * ( hi_max(jl) + hi_max(jl-1) ) 
     206                  zh_i_ini(jl,i_hemis)    = 0.5 * ( hi_max(jl) + hi_max(jl-1) ) 
    195207               END DO 
    196  
    197             !--- jl0: most likely index where cc will be maximum 
     208                
     209               !--- jl0: most likely index where cc will be maximum 
    198210               DO jl = 1, jpl 
    199                   IF ( ( zhm_i_ini(i_hemis) .GT. hi_max(jl-1) ) .AND. & 
    200                        ( zhm_i_ini(i_hemis) .LE. hi_max(jl)   ) ) THEN 
     211                  IF ( ( zht_i_ini(i_hemis) .GT. hi_max(jl-1) ) .AND. & 
     212                     ( zht_i_ini(i_hemis) .LE. hi_max(jl)   ) ) THEN 
    201213                     jl0 = jl 
    202214                  ENDIF 
    203215               END DO 
    204216               jl0 = MIN(jl0, i_fill) 
    205  
    206             !--- Concentrations 
     217                
     218               !--- Concentrations 
    207219               za_i_ini(jl0,i_hemis)      = zat_i_ini(i_hemis) / SQRT(REAL(jpl)) 
    208220               DO jl = 1, i_fill - 1 
    209221                  IF ( jl .NE. jl0 ) THEN 
    210                      zsigma               = 0.5 * zhm_i_ini(i_hemis) 
    211                      zarg                 = ( zht_i_ini(jl,i_hemis) - zhm_i_ini(i_hemis) ) / zsigma 
     222                     zsigma               = 0.5 * zht_i_ini(i_hemis) 
     223                     zarg                 = ( zh_i_ini(jl,i_hemis) - zht_i_ini(i_hemis) ) / zsigma 
    212224                     za_i_ini(jl,i_hemis) = za_i_ini(jl0,i_hemis) * EXP(-zarg**2) 
    213225                  ENDIF 
    214                END DO  
    215  
     226               END DO 
     227                
    216228               zA = 0. ! sum of the areas in the jpl categories  
    217229               DO jl = 1, i_fill - 1 
     
    221233               IF ( i_fill .LT. jpl ) za_i_ini(i_fill+1:jpl, i_hemis) = 0._wp 
    222234          
    223             !--- Ice thickness in the last category 
     235               !--- Ice thickness in the last category 
    224236               zV = 0. ! sum of the volumes of the N-1 categories 
    225237               DO jl = 1, i_fill - 1 
    226                   zV = zV + za_i_ini(jl,i_hemis)*zht_i_ini(jl,i_hemis) 
     238                  zV = zV + za_i_ini(jl,i_hemis)*zh_i_ini(jl,i_hemis) 
    227239               END DO 
    228                zht_i_ini(i_fill,i_hemis) = ( zvt_i_ini(i_hemis) - zV ) / za_i_ini(i_fill,i_hemis)  
    229                IF ( i_fill .LT. jpl ) zht_i_ini(i_fill+1:jpl, i_hemis) = 0._wp 
    230  
    231             !--- volumes 
    232                zv_i_ini(:,i_hemis) = za_i_ini(:,i_hemis) * zht_i_ini(:,i_hemis) 
     240               zh_i_ini(i_fill,i_hemis) = ( zvt_i_ini(i_hemis) - zV ) / za_i_ini(i_fill,i_hemis)  
     241               IF ( i_fill .LT. jpl ) zh_i_ini(i_fill+1:jpl, i_hemis) = 0._wp 
     242 
     243               !--- volumes 
     244               zv_i_ini(:,i_hemis) = za_i_ini(:,i_hemis) * zh_i_ini(:,i_hemis) 
    233245               IF ( i_fill .LT. jpl ) zv_i_ini(i_fill+1:jpl, i_hemis) = 0._wp 
    234246 
     
    262274 
    263275            ! Test 3: thickness of the last category is in-bounds ? 
    264             IF ( zht_i_ini(i_fill, i_hemis) .GT. hi_max(i_fill-1) ) THEN 
     276            IF ( zh_i_ini(i_fill, i_hemis) .GT. hi_max(i_fill-1) ) THEN 
    265277               ztest_3 = 1 
    266278            ELSE 
    267279               ! this write is useful 
    268                IF(lwp) WRITE(numout,*) ' * TEST 3 THICKNESS OF THE LAST CATEGORY OUT OF BOUNDS *** zht_i_ini(i_fill,i_hemis) = ', & 
    269                zht_i_ini(i_fill,i_hemis), ' hi_max(jpl-1) = ', hi_max(i_fill-1) 
     280               IF(lwp) WRITE(numout,*) ' * TEST 3 THICKNESS OF THE LAST CATEGORY OUT OF BOUNDS *** zh_i_ini(i_fill,i_hemis) = ', & 
     281               zh_i_ini(i_fill,i_hemis), ' hi_max(jpl-1) = ', hi_max(i_fill-1) 
    270282               ztest_3 = 0 
    271283            ENDIF 
     
    291303         IF ( ztests .NE. 4 ) THEN 
    292304            WRITE(numout,*) 
    293             WRITE(numout,*), ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' 
    294             WRITE(numout,*), ' !!!! RED ALERT                  !!! ' 
    295             WRITE(numout,*), ' !!!! BIIIIP BIIIP BIIIIP BIIIIP !!!' 
     305            WRITE(numout,*), ' !!!! ALERT                  !!! ' 
    296306            WRITE(numout,*), ' !!!! Something is wrong in the LIM3 initialization procedure ' 
    297             WRITE(numout,*), ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ' 
    298307            WRITE(numout,*) 
    299308            WRITE(numout,*), ' *** ztests is not equal to 4 ' 
    300309            WRITE(numout,*), ' *** ztest_i (i=1,4) = ', ztest_1, ztest_2, ztest_3, ztest_4 
    301310            WRITE(numout,*), ' zat_i_ini : ', zat_i_ini(i_hemis) 
    302             WRITE(numout,*), ' zhm_i_ini : ', zhm_i_ini(i_hemis) 
     311            WRITE(numout,*), ' zht_i_ini : ', zht_i_ini(i_hemis) 
    303312         ENDIF ! ztests .NE. 4 
    304313      ENDIF 
     
    314323         DO jj = 1, jpj 
    315324            DO ji = 1, jpi 
    316                a_i(ji,jj,jl)   = zidto(ji,jj) * za_i_ini (jl,zhemis(ji,jj))  ! concentration 
    317                ht_i(ji,jj,jl)  = zidto(ji,jj) * zht_i_ini(jl,zhemis(ji,jj))  ! ice thickness 
    318                ht_s(ji,jj,jl)  = ht_i(ji,jj,jl) * ( zhm_s_ini( zhemis(ji,jj) ) / zhm_i_ini( zhemis(ji,jj) ) )  ! snow depth 
    319                sm_i(ji,jj,jl)  = zidto(ji,jj) * zsm_i_ini(zhemis(ji,jj)) + ( 1._wp - zidto(ji,jj) ) * s_i_min ! salinity 
    320                o_i(ji,jj,jl)   = zidto(ji,jj) * 1._wp + ( 1._wp - zidto(ji,jj) ) ! age 
    321                t_su(ji,jj,jl)  = zidto(ji,jj) * 270.0 + ( 1._wp - zidto(ji,jj) ) * 270.0 ! surf temp 
     325               a_i(ji,jj,jl)   = zswitch(ji,jj) * za_i_ini (jl,zhemis(ji,jj))  ! concentration 
     326               ht_i(ji,jj,jl)  = zswitch(ji,jj) * zh_i_ini(jl,zhemis(ji,jj))  ! ice thickness 
     327               ht_s(ji,jj,jl)  = ht_i(ji,jj,jl) * ( zht_s_ini( zhemis(ji,jj) ) / zht_i_ini( zhemis(ji,jj) ) )  ! snow depth 
     328               sm_i(ji,jj,jl)  = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min ! salinity 
     329               o_i(ji,jj,jl)   = zswitch(ji,jj) * 1._wp + ( 1._wp - zswitch(ji,jj) ) ! age 
     330               t_su(ji,jj,jl)  = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt ! surf temp 
    322331 
    323332               ! This case below should not be used if (ht_s/ht_i) is ok in namelist 
     
    343352            DO jj = 1, jpj 
    344353               DO ji = 1, jpi 
    345                    t_s(ji,jj,jk,jl) = zidto(ji,jj) * 270.0 + ( 1._wp - zidto(ji,jj) ) * rtt 
     354                   t_s(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt 
    346355                   ! Snow energy of melting 
    347                    e_s(ji,jj,jk,jl) = zidto(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 
     356                   e_s(ji,jj,jk,jl) = zswitch(ji,jj) * rhosn * ( cpic * ( rtt - t_s(ji,jj,jk,jl) ) + lfus ) 
    348357                   ! Change dimensions 
    349358                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / unit_fac 
    350                    ! Multiply by volume, so that heat content in 10^9 Joules 
     359                   ! Multiply by volume, so that heat content in Joules 
    351360                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * area(ji,jj) * v_s(ji,jj,jl) / nlay_s 
    352361               END DO ! ji 
     
    360369            DO jj = 1, jpj 
    361370               DO ji = 1, jpi 
    362                    t_i(ji,jj,jk,jl) = zidto(ji,jj) * 270.00 + ( 1._wp - zidto(ji,jj) ) * rtt  
    363                    s_i(ji,jj,jk,jl) = zidto(ji,jj) * zsm_i_ini(zhemis(ji,jj)) + ( 1._wp - zidto(ji,jj) ) * s_i_min 
     371                   t_i(ji,jj,jk,jl) = zswitch(ji,jj) * ztm_i_ini(zhemis(ji,jj)) + ( 1._wp - zswitch(ji,jj) ) * rtt  
     372                   s_i(ji,jj,jk,jl) = zswitch(ji,jj) * zsm_i_ini(zhemis(ji,jj)) !+ ( 1._wp - zswitch(ji,jj) ) * s_i_min 
    364373                   ztmelts          = - tmut * s_i(ji,jj,jk,jl) + rtt !Melting temperature in K 
    365374 
    366375                   ! heat content per unit volume 
    367                    e_i(ji,jj,jk,jl) = zidto(ji,jj) * rhoic * (   cpic    * ( ztmelts - t_i(ji,jj,jk,jl) ) & 
     376                   e_i(ji,jj,jk,jl) = zswitch(ji,jj) * rhoic * (   cpic    * ( ztmelts - t_i(ji,jj,jk,jl) ) & 
    368377                      +   lfus    * ( 1._wp - (ztmelts-rtt) / MIN((t_i(ji,jj,jk,jl)-rtt),-epsi20) ) & 
    369378                      -   rcp     * ( ztmelts - rtt ) ) 
     
    372381                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / unit_fac  
    373382 
    374                    ! Mutliply by ice volume, and divide by number of layers  
    375                    ! to get heat content in 10^9 J 
     383                   ! Mutliply by ice volume, and divide by number of layers to get heat content in J 
    376384                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * area(ji,jj) * v_i(ji,jj,jl) / nlay_i 
    377385               END DO ! ji 
     
    380388      END DO ! jk 
    381389 
    382       !-------------------------------------------------------------------- 
    383       ! 4) Global ice variables for output diagnostics                    |  
    384       !-------------------------------------------------------------------- 
    385       fsbbq (:,:)     = 0._wp 
    386       u_ice (:,:)     = 0._wp 
    387       v_ice (:,:)     = 0._wp 
    388       stress1_i(:,:)  = 0._wp 
    389       stress2_i(:,:)  = 0._wp 
    390       stress12_i(:,:) = 0._wp 
    391  
    392 # if defined key_coupled 
    393       albege(:,:)   = 0.8 * tms(:,:) 
    394 # endif 
    395  
    396       !-------------------------------------------------------------------- 
    397       ! 5) Moments for advection 
    398       !-------------------------------------------------------------------- 
    399  
    400       sxopw (:,:) = 0._wp  
    401       syopw (:,:) = 0._wp  
    402       sxxopw(:,:) = 0._wp  
    403       syyopw(:,:) = 0._wp  
    404       sxyopw(:,:) = 0._wp 
    405  
    406       sxice (:,:,:)  = 0._wp   ;   sxsn (:,:,:)  = 0._wp   ;   sxa  (:,:,:)  = 0._wp 
    407       syice (:,:,:)  = 0._wp   ;   sysn (:,:,:)  = 0._wp   ;   sya  (:,:,:)  = 0._wp 
    408       sxxice(:,:,:)  = 0._wp   ;   sxxsn(:,:,:)  = 0._wp   ;   sxxa (:,:,:)  = 0._wp 
    409       syyice(:,:,:)  = 0._wp   ;   syysn(:,:,:)  = 0._wp   ;   syya (:,:,:)  = 0._wp 
    410       sxyice(:,:,:)  = 0._wp   ;   sxysn(:,:,:)  = 0._wp   ;   sxya (:,:,:)  = 0._wp 
    411  
    412       sxc0  (:,:,:)  = 0._wp   ;   sxe  (:,:,:,:)= 0._wp    
    413       syc0  (:,:,:)  = 0._wp   ;   sye  (:,:,:,:)= 0._wp    
    414       sxxc0 (:,:,:)  = 0._wp   ;   sxxe (:,:,:,:)= 0._wp    
    415       syyc0 (:,:,:)  = 0._wp   ;   syye (:,:,:,:)= 0._wp    
    416       sxyc0 (:,:,:)  = 0._wp   ;   sxye (:,:,:,:)= 0._wp    
    417  
    418       sxsal  (:,:,:)  = 0._wp 
    419       sysal  (:,:,:)  = 0._wp 
    420       sxxsal (:,:,:)  = 0._wp 
    421       syysal (:,:,:)  = 0._wp 
    422       sxysal (:,:,:)  = 0._wp 
    423  
    424       sxage  (:,:,:)  = 0._wp 
    425       syage  (:,:,:)  = 0._wp 
    426       sxxage (:,:,:)  = 0._wp 
    427       syyage (:,:,:)  = 0._wp 
    428       sxyage (:,:,:)  = 0._wp 
    429  
    430       !-------------------------------------------------------------------- 
    431       ! 6) Lateral boundary conditions                                    |  
    432       !-------------------------------------------------------------------- 
    433  
     390      tn_ice (:,:,:) = t_su (:,:,:) 
     391 
     392      !-------------------------------------------------------------------- 
     393      ! 4) Lateral boundary conditions                                    |  
     394      !-------------------------------------------------------------------- 
    434395      DO jl = 1, jpl 
    435396 
     
    445406         CALL lbc_lnk( o_i(:,:,jl)  , 'T', 1. ) 
    446407         CALL lbc_lnk( t_su(:,:,jl) , 'T', 1. ) 
     408         CALL lbc_lnk( tn_ice(:,:,jl) , 'T', 1. ) 
    447409         DO jk = 1, nlay_s 
    448410            CALL lbc_lnk(t_s(:,:,jk,jl), 'T', 1. ) 
     
    454416         END DO 
    455417         ! 
    456          a_i(:,:,jl) = tms(:,:) * a_i(:,:,jl) 
     418!         a_i(:,:,jl) = tms(:,:) * a_i(:,:,jl) 
    457419      END DO 
     420 
     421      ELSE  
     422         ! if ln_limini=false 
     423         a_i  (:,:,:) = 0._wp 
     424         v_i  (:,:,:) = 0._wp 
     425         v_s  (:,:,:) = 0._wp 
     426         smv_i(:,:,:) = 0._wp 
     427         oa_i (:,:,:) = 0._wp 
     428         ht_i (:,:,:) = 0._wp 
     429         ht_s (:,:,:) = 0._wp 
     430         sm_i (:,:,:) = 0._wp 
     431         o_i  (:,:,:) = 0._wp 
     432 
     433         e_i(:,:,:,:) = 0._wp 
     434         e_s(:,:,:,:) = 0._wp 
     435 
     436         DO jl = 1, jpl 
     437            DO jk = 1, nlay_i 
     438               t_i(:,:,jk,jl) = rtt * tms(:,:) 
     439            END DO 
     440            DO jk = 1, nlay_s 
     441               t_s(:,:,jk,jl) = rtt * tms(:,:) 
     442            END DO 
     443         END DO 
     444       
     445      ENDIF ! ln_limini 
    458446       
    459447      at_i (:,:) = 0.0_wp 
     
    461449         at_i (:,:) = at_i (:,:) + a_i (:,:,jl) 
    462450      END DO 
    463  
    464451      CALL lbc_lnk( at_i , 'T', 1. ) 
    465       at_i(:,:) = tms(:,:) * at_i(:,:)                       ! put 0 over land 
     452!      at_i(:,:) = tms(:,:) * at_i(:,:) 
    466453      ! 
    467       CALL lbc_lnk( fsbbq  , 'T', 1. ) 
    468       ! 
    469       !-------------------------------------------------------------------- 
    470       ! 6) ????                                                           |  
    471       !-------------------------------------------------------------------- 
    472       tn_ice (:,:,:) = t_su (:,:,:) 
    473  
    474       CALL wrk_dealloc( jpi, jpj, zidto ) 
     454      !-------------------------------------------------------------------- 
     455      ! 5) Global ice variables for output diagnostics                    |  
     456      !-------------------------------------------------------------------- 
     457      u_ice (:,:)     = 0._wp 
     458      v_ice (:,:)     = 0._wp 
     459      stress1_i(:,:)  = 0._wp 
     460      stress2_i(:,:)  = 0._wp 
     461      stress12_i(:,:) = 0._wp 
     462 
     463      !-------------------------------------------------------------------- 
     464      ! 6) Moments for advection 
     465      !-------------------------------------------------------------------- 
     466 
     467      sxopw (:,:) = 0._wp  
     468      syopw (:,:) = 0._wp  
     469      sxxopw(:,:) = 0._wp  
     470      syyopw(:,:) = 0._wp  
     471      sxyopw(:,:) = 0._wp 
     472 
     473      sxice (:,:,:)  = 0._wp   ;   sxsn (:,:,:)  = 0._wp   ;   sxa  (:,:,:)  = 0._wp 
     474      syice (:,:,:)  = 0._wp   ;   sysn (:,:,:)  = 0._wp   ;   sya  (:,:,:)  = 0._wp 
     475      sxxice(:,:,:)  = 0._wp   ;   sxxsn(:,:,:)  = 0._wp   ;   sxxa (:,:,:)  = 0._wp 
     476      syyice(:,:,:)  = 0._wp   ;   syysn(:,:,:)  = 0._wp   ;   syya (:,:,:)  = 0._wp 
     477      sxyice(:,:,:)  = 0._wp   ;   sxysn(:,:,:)  = 0._wp   ;   sxya (:,:,:)  = 0._wp 
     478 
     479      sxc0  (:,:,:)  = 0._wp   ;   sxe  (:,:,:,:)= 0._wp    
     480      syc0  (:,:,:)  = 0._wp   ;   sye  (:,:,:,:)= 0._wp    
     481      sxxc0 (:,:,:)  = 0._wp   ;   sxxe (:,:,:,:)= 0._wp    
     482      syyc0 (:,:,:)  = 0._wp   ;   syye (:,:,:,:)= 0._wp    
     483      sxyc0 (:,:,:)  = 0._wp   ;   sxye (:,:,:,:)= 0._wp    
     484 
     485      sxsal  (:,:,:)  = 0._wp 
     486      sysal  (:,:,:)  = 0._wp 
     487      sxxsal (:,:,:)  = 0._wp 
     488      syysal (:,:,:)  = 0._wp 
     489      sxysal (:,:,:)  = 0._wp 
     490 
     491      sxage  (:,:,:)  = 0._wp 
     492      syage  (:,:,:)  = 0._wp 
     493      sxxage (:,:,:)  = 0._wp 
     494      syyage (:,:,:)  = 0._wp 
     495      sxyage (:,:,:)  = 0._wp 
     496 
     497 
     498      CALL wrk_dealloc( jpi, jpj, zswitch ) 
    475499      CALL wrk_dealloc( jpi, jpj, zhemis ) 
    476       CALL wrk_dealloc( jpl,   2, zht_i_ini,  za_i_ini,  zv_i_ini ) 
    477       CALL wrk_dealloc(   2,      zhm_i_ini, zat_i_ini, zvt_i_ini, zhm_s_ini, zsm_i_ini ) 
     500      CALL wrk_dealloc( jpl,   2, zh_i_ini,  za_i_ini,  zv_i_ini ) 
     501      CALL wrk_dealloc(   2,      zht_i_ini, zat_i_ini, zvt_i_ini, zht_s_ini, zsm_i_ini, ztm_i_ini ) 
    478502 
    479503   END SUBROUTINE lim_istate 
     
    495519      !!  8.5  ! 07-11 (M. Vancoppenolle) rewritten initialization 
    496520      !!----------------------------------------------------------------------------- 
    497       NAMELIST/namiceini/ ttest, hninn, hnins, hginn, hgins, aginn, agins, sinn, sins 
     521      NAMELIST/namiceini/ ln_limini, thres_sst, hts_ini_n, hts_ini_s, hti_ini_n, hti_ini_s,  & 
     522         &                                      ati_ini_n, ati_ini_s, smi_ini_n, smi_ini_s, tmi_ini_n, tmi_ini_s 
    498523      !!----------------------------------------------------------------------------- 
    499524 
     
    508533         WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 
    509534         WRITE(numout,*) '~~~~~~~~~~~~~~~' 
    510          WRITE(numout,*) '   threshold water temp. for initial sea-ice    ttest      = ', ttest 
    511          WRITE(numout,*) '   initial snow thickness in the north          hninn      = ', hninn 
    512          WRITE(numout,*) '   initial snow thickness in the south          hnins      = ', hnins  
    513          WRITE(numout,*) '   initial ice thickness  in the north          hginn      = ', hginn 
    514          WRITE(numout,*) '   initial ice thickness  in the south          hgins      = ', hgins 
    515          WRITE(numout,*) '   initial ice concentr.  in the north          aginn      = ', aginn 
    516          WRITE(numout,*) '   initial ice concentr.  in the north          agins      = ', agins 
    517          WRITE(numout,*) '   initial  ice salinity  in the north          sinn       = ', sinn 
    518          WRITE(numout,*) '   initial  ice salinity  in the south          sins       = ', sins 
     535         WRITE(numout,*) '   initialization with ice (T) or not (F)       ln_limini   = ', ln_limini 
     536         WRITE(numout,*) '   threshold water temp. for initial sea-ice    thres_sst  = ', thres_sst 
     537         WRITE(numout,*) '   initial snow thickness in the north          hts_ini_n  = ', hts_ini_n 
     538         WRITE(numout,*) '   initial snow thickness in the south          hts_ini_s  = ', hts_ini_s  
     539         WRITE(numout,*) '   initial ice thickness  in the north          hti_ini_n  = ', hti_ini_n 
     540         WRITE(numout,*) '   initial ice thickness  in the south          hti_ini_s  = ', hti_ini_s 
     541         WRITE(numout,*) '   initial ice concentr.  in the north          ati_ini_n  = ', ati_ini_n 
     542         WRITE(numout,*) '   initial ice concentr.  in the north          ati_ini_s  = ', ati_ini_s 
     543         WRITE(numout,*) '   initial  ice salinity  in the north          smi_ini_n  = ', smi_ini_n 
     544         WRITE(numout,*) '   initial  ice salinity  in the south          smi_ini_s  = ', smi_ini_s 
     545         WRITE(numout,*) '   initial  ice/snw temp  in the north          tmi_ini_n  = ', tmi_ini_n 
     546         WRITE(numout,*) '   initial  ice/snw temp  in the south          tmi_ini_s  = ', tmi_ini_s 
    519547      ENDIF 
    520548 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limitd_me.F90

    r4345 r4634  
    55   !!====================================================================== 
    66   !! History :  LIM  ! 2006-02  (M. Vancoppenolle) Original code  
    7    !!            3.2  ! 2009-07  (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in smsw & sfx_mec 
     7   !!            3.2  ! 2009-07  (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in smsw & sfx_dyn 
    88   !!            4.0  ! 2011-02  (G. Madec) dynamical allocation 
    99   !!---------------------------------------------------------------------- 
     
    143143      REAL(wp), POINTER, DIMENSION(:,:) ::   esnow_mlt       ! energy needed to melt snow in ocean (J m-2) 
    144144      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_i_init, vt_i_final  !  ice volume summed over categories 
    145       REAL(wp) :: zchk_v_i, zchk_smv, zchk_fs, zchk_fw, zchk_v_i_b, zchk_smv_b, zchk_fs_b, zchk_fw_b ! Check conservation (C Rousset) 
     145      REAL(wp) :: zchk_v_i, zchk_smv, zchk_e_i, zchk_fs, zchk_fw, zchk_ft, zchk_v_i_b, zchk_smv_b, zchk_e_i_b, zchk_fs_b, zchk_fw_b, zchk_ft_b  
    146146      REAL(wp) :: zchk_vmin, zchk_amin, zchk_amax ! Check errors (C Rousset) 
    147       ! mass and salt flux (clem) 
    148       REAL(wp), POINTER, DIMENSION(:,:,:) ::   zviold, zvsold, zsmvold   ! old ice volume... 
    149147      !!----------------------------------------------------------------------------- 
    150148      IF( nn_timing == 1 )  CALL timing_start('limitd_me') 
    151149 
    152150      CALL wrk_alloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 
    153  
    154       CALL wrk_alloc( jpi, jpj, jpl, zviold, zvsold, zsmvold )   ! clem 
    155151 
    156152      IF( numit == nstart  )   CALL lim_itd_me_init   ! Initialization (first time-step only) 
     
    165161      !- check conservation (C Rousset) 
    166162      IF (ln_limdiahsb) THEN 
    167          zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
     163         zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) 
    168164         zchk_smv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
    169          zchk_fw_b  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) 
    170          zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) 
     165         zchk_e_i_b = glob_sum( SUM(   e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) 
     166         zchk_fw_b  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) 
     167         zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 
     168         zchk_ft_b  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) 
    171169      ENDIF 
    172170      !- check conservation (C Rousset) 
    173171      ! ------------------------------- 
    174  
    175       ! mass and salt flux init (clem) 
    176       zviold(:,:,:) = v_i(:,:,:) 
    177       zvsold(:,:,:) = v_s(:,:,:) 
    178       zsmvold(:,:,:) = smv_i(:,:,:) 
    179172 
    180173      !-----------------------------------------------------------------------------! 
     
    362355            ! 5) Heat, salt and freshwater fluxes 
    363356            !-----------------------------------------------------------------------------! 
    364             fmmec(ji,jj) = fmmec(ji,jj) + msnow_mlt(ji,jj) * r1_rdtice     ! fresh water source for ocean 
    365             fhmec(ji,jj) = fhmec(ji,jj) + esnow_mlt(ji,jj) * r1_rdtice     ! heat sink for ocean 
     357            wfx_snw(ji,jj) = wfx_snw(ji,jj) - msnow_mlt(ji,jj) * r1_rdtice     ! fresh water source for ocean 
     358            hfx_dyn(ji,jj) = hfx_dyn(ji,jj) + esnow_mlt(ji,jj) * unit_fac / area(ji,jj) * r1_rdtice  ! heat sink for ocean (<0, W.m-2) 
    366359 
    367360         END DO 
     
    399392      CALL lim_itd_me_zapsmall 
    400393 
    401       !-------------------------------- 
    402       ! Update mass/salt fluxes (clem) 
    403       !-------------------------------- 
    404       DO jl = 1, jpl 
    405          DO jj = 1, jpj  
    406             DO ji = 1, jpi 
    407                diag_dyn_gr(ji,jj) = diag_dyn_gr(ji,jj) + ( v_i(ji,jj,jl) - zviold(ji,jj,jl) ) * r1_rdtice 
    408                rdm_ice(ji,jj) = rdm_ice(ji,jj) + ( v_i(ji,jj,jl) - zviold(ji,jj,jl) ) * rhoic  
    409                rdm_snw(ji,jj) = rdm_snw(ji,jj) + ( v_s(ji,jj,jl) - zvsold(ji,jj,jl) ) * rhosn  
    410                sfx_mec(ji,jj) = sfx_mec(ji,jj) - ( smv_i(ji,jj,jl) - zsmvold(ji,jj,jl) ) * rhoic * r1_rdtice  
    411             END DO 
    412          END DO 
    413       END DO 
    414394 
    415395      IF(ln_ctl) THEN     ! Control print 
     
    448428      !- check conservation (C Rousset) 
    449429      IF (ln_limdiahsb) THEN 
    450          zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
    451          zchk_fw  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     430         zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
     431         zchk_fw  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     432         zchk_ft  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) - zchk_ft_b 
    452433  
    453          zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b - ( zchk_fw / rhoic ) ) * r1_rdtice 
     434         zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b ) * r1_rdtice - zchk_fw  
    454435         zchk_smv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_smv_b ) * r1_rdtice + ( zchk_fs / rhoic ) 
     436         zchk_e_i =   glob_sum( SUM( e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) * r1_rdtice - zchk_e_i_b * r1_rdtice + zchk_ft 
    455437 
    456438         zchk_vmin = glob_min(v_i) 
     
    459441        
    460442         IF(lwp) THEN 
    461             IF ( ABS( zchk_v_i   ) >  1.e-5 ) WRITE(numout,*) 'violation volume [m3/day]     (limitd_me) = ',(zchk_v_i * rday) 
     443            IF ( ABS( zchk_v_i   ) >  1.e-2 ) WRITE(numout,*) 'violation volume [kg/day]     (limitd_me) = ',(zchk_v_i * rday) 
    462444            IF ( ABS( zchk_smv   ) >  1.e-4 ) WRITE(numout,*) 'violation saline [psu*m3/day] (limitd_me) = ',(zchk_smv * rday) 
     445            IF ( ABS( zchk_e_i   ) >  1.e-4 ) WRITE(numout,*) 'violation enthalpy [1e9 J]    (limitd_me) = ',(zchk_e_i) 
    463446            IF ( zchk_vmin <  0.            ) WRITE(numout,*) 'violation v_i<0  [mm]         (limitd_me) = ',(zchk_vmin * 1.e-3) 
    464447            IF ( zchk_amax >  kamax+epsi10  ) WRITE(numout,*) 'violation a_i>amax            (limitd_me) = ',zchk_amax 
     
    472455      ! 
    473456      CALL wrk_dealloc( jpi, jpj, closing_net, divu_adv, opning, closing_gross, msnow_mlt, esnow_mlt, vt_i_init, vt_i_final ) 
    474       ! 
    475       CALL wrk_dealloc( jpi, jpj, jpl, zviold, zvsold, zsmvold )   ! clem 
    476457      ! 
    477458      IF( nn_timing == 1 )  CALL timing_stop('limitd_me') 
     
    908889      INTEGER ::   ij                ! horizontal index, combines i and j loops 
    909890      INTEGER ::   icells            ! number of cells with aicen > puny 
    910       REAL(wp) ::   zindb, zsrdg2   ! local scalar 
     891      REAL(wp) ::   zindb    ! local scalar 
    911892      REAL(wp) ::   hL, hR, farea, zdummy, zdummy0, ztmelts    ! left and right limits of integration 
     893      REAL(wp) ::   zsstK            ! SST in Kelvin 
    912894 
    913895      INTEGER , POINTER, DIMENSION(:) ::   indxi, indxj   ! compressed indices 
     
    917899 
    918900      REAL(wp), POINTER, DIMENSION(:,:,:) ::   aicen_init, vicen_init   ! ice  area    & volume before ridging 
    919       REAL(wp), POINTER, DIMENSION(:,:,:) ::   vsnon_init, esnon_init   ! snow volume  & energy before ridging 
     901      REAL(wp), POINTER, DIMENSION(:,:,:) ::   vsnwn_init, esnwn_init   ! snow volume  & energy before ridging 
    920902      REAL(wp), POINTER, DIMENSION(:,:,:) ::   smv_i_init, oa_i_init    ! ice salinity & age    before ridging 
    921903 
     
    952934      CALL wrk_alloc( jpi, jpj,             vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw ) 
    953935      CALL wrk_alloc( jpi, jpj,             afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
    954       CALL wrk_alloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnon_init, esnon_init, smv_i_init, oa_i_init ) 
     936      CALL wrk_alloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 
    955937      CALL wrk_alloc( jpi, jpj, jkmax,      eirft, erdg1, erdg2, ersw ) 
    956938      CALL wrk_alloc( jpi, jpj, jkmax, jpl, eicen_init ) 
     
    1008990         aicen_init(:,:,jl) = a_i(:,:,jl) 
    1009991         vicen_init(:,:,jl) = v_i(:,:,jl) 
    1010          vsnon_init(:,:,jl) = v_s(:,:,jl) 
     992         vsnwn_init(:,:,jl) = v_s(:,:,jl) 
    1011993         ! 
    1012994         smv_i_init(:,:,jl) = smv_i(:,:,jl) 
     
    1014996      END DO !jl 
    1015997 
    1016       esnon_init(:,:,:) = e_s(:,:,1,:) 
     998      esnwn_init(:,:,:) = e_s(:,:,1,:) 
    1017999 
    10181000      DO jl = 1, jpl   
     
    10951077            vsw  (ji,jj) = vrdg1(ji,jj) * ridge_por 
    10961078 
    1097             vsrdg(ji,jj) = vsnon_init(ji,jj,jl1) * afrac(ji,jj) 
    1098             esrdg(ji,jj) = esnon_init(ji,jj,jl1) * afrac(ji,jj) 
     1079            vsrdg(ji,jj) = vsnwn_init(ji,jj,jl1) * afrac(ji,jj) 
     1080            esrdg(ji,jj) = esnwn_init(ji,jj,jl1) * afrac(ji,jj) 
    10991081            srdg1(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) / ( 1._wp + ridge_por ) 
    1100             srdg2(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) 
     1082            srdg2(ji,jj) = smv_i_init(ji,jj,jl1) * afrac(ji,jj) !! MV HC 2014 this line seems useless 
    11011083 
    11021084            ! rafting volumes, heat contents ... 
    11031085            virft(ji,jj) = vicen_init(ji,jj,jl1) * afrft(ji,jj) 
    1104             vsrft(ji,jj) = vsnon_init(ji,jj,jl1) * afrft(ji,jj) 
    1105             esrft(ji,jj) = esnon_init(ji,jj,jl1) * afrft(ji,jj) 
     1086            vsrft(ji,jj) = vsnwn_init(ji,jj,jl1) * afrft(ji,jj) 
     1087            esrft(ji,jj) = esnwn_init(ji,jj,jl1) * afrft(ji,jj) 
    11061088            smrft(ji,jj) = smv_i_init(ji,jj,jl1) * afrft(ji,jj)  
    11071089 
     
    11201102            ! Salinity 
    11211103            !------------- 
    1122             smsw(ji,jj)  = sss_m(ji,jj) * vsw(ji,jj) * rhoic / rau0       ! salt content of seawater frozen in voids 
    1123  
    1124             zsrdg2       = srdg1(ji,jj) + smsw(ji,jj)                     ! salt content of new ridge 
    1125  
    1126             srdg2(ji,jj) = MIN( s_i_max * vrdg2(ji,jj) , zsrdg2 )         ! impose a maximum salinity 
     1104            smsw(ji,jj)  = vsw(ji,jj) * sss_m(ji,jj)                      ! salt content of seawater frozen in voids !! MV HC2014 
     1105            srdg2(ji,jj) = srdg1(ji,jj) + smsw(ji,jj)                     ! salt content of new ridge 
     1106 
     1107            !srdg2(ji,jj) = MIN( s_i_max * vrdg2(ji,jj) , zsrdg2 )         ! impose a maximum salinity 
    11271108             
    1128             !                                                             ! excess of salt is flushed into the ocean 
    1129             !sfx_mec(ji,jj) = sfx_mec(ji,jj) + ( zsrdg2 - srdg2(ji,jj) ) * rhoic * r1_rdtice 
    1130  
    1131             !rdm_ice(ji,jj) = rdm_ice(ji,jj) + vsw(ji,jj) * rhoic    ! gurvan: increase in ice volume du to seawater frozen in voids              
     1109            sfx_dyn(ji,jj) = sfx_dyn(ji,jj) - smsw(ji,jj) * rhoic * r1_rdtice 
     1110            wfx_dyn(ji,jj) = wfx_dyn(ji,jj) + vsw (ji,jj) * rhoic * r1_rdtice   ! gurvan: increase in ice volume du to seawater frozen in voids              
     1111            ! MV HC 2014 this previous line seems ok, i'm not sure at this moment of the sign convention 
    11321112 
    11331113            !------------------------------------             
     
    11581138               &                                + rhosn*vsrft(ji,jj)*(1.0-fsnowrft) 
    11591139 
    1160             esnow_mlt(ji,jj) = esnow_mlt(ji,jj) + esrdg(ji,jj)*(1.0-fsnowrdg)         &   !rafting included 
    1161                &                                + esrft(ji,jj)*(1.0-fsnowrft)           
     1140            ! in 1e-9 Joules (same as e_s) 
     1141            esnow_mlt(ji,jj) = esnow_mlt(ji,jj) - esrdg(ji,jj)*(1.0-fsnowrdg)         &   !rafting included 
     1142               &                                - esrft(ji,jj)*(1.0-fsnowrft)           
    11621143 
    11631144            !----------------------------------------------------------------- 
     
    11871168               eirft(ji,jj,jk)      = eicen_init(ji,jj,jk,jl1) * afrft(ji,jj) 
    11881169               e_i  (ji,jj,jk,jl1)  = e_i(ji,jj,jk,jl1) - erdg1(ji,jj,jk) - eirft(ji,jj,jk) 
    1189                ! sea water heat content 
    1190                ztmelts          = - tmut * sss_m(ji,jj) + rtt 
    1191                ! heat content per unit volume 
    1192                zdummy0          = - rcp * ( sst_m(ji,jj) + rt0 - rtt ) * vsw(ji,jj) 
    1193  
    1194                ! corrected sea water salinity 
    1195                zindb  = MAX( 0._wp , SIGN( 1._wp , vsw(ji,jj) - epsi20 ) ) 
    1196                zdummy = zindb * ( srdg1(ji,jj) - srdg2(ji,jj) ) / MAX( ridge_por * vsw(ji,jj), epsi20 ) 
    1197  
    1198                ztmelts          = - tmut * zdummy + rtt 
    1199                ersw(ji,jj,jk)   = - rcp * ( ztmelts - rtt ) * vsw(ji,jj) 
    1200  
    1201                ! heat flux 
    1202                fheat_mec(ji,jj) = fheat_mec(ji,jj) + ( ersw(ji,jj,jk) - zdummy0 ) * r1_rdtice 
     1170                
     1171                
     1172               ! enthalpy of the trapped seawater (J/m2, >0) 
     1173               ! clem: if sst>0, then ersw <0 (is that possible?) 
     1174               zsstK  = sst_m(ji,jj) + rt0 
     1175               ersw(ji,jj,jk)   = - rhoic * vsw(ji,jj) * rcp * ( zsstK - rt0 ) / REAL( nlay_i ) 
     1176 
     1177               ! heat flux to the ocean 
     1178               hfx_dyn(ji,jj) = hfx_dyn(ji,jj) + ersw(ji,jj,jk) * r1_rdtice  ! > 0 [W.m-2] ocean->ice flux  
    12031179 
    12041180               ! Correct dimensions to avoid big values 
    1205                ersw(ji,jj,jk)   = ersw(ji,jj,jk) * 1.e-09 
    1206  
    1207                ! Mutliply by ice volume, and divide by number of layers to get heat content in 10^9 J 
    1208                ersw (ji,jj,jk)  = ersw(ji,jj,jk) * area(ji,jj) * vsw(ji,jj) / REAL( nlay_i ) 
     1181               ersw(ji,jj,jk)   = ersw(ji,jj,jk) / unit_fac 
     1182 
     1183               ! Mutliply by ice volume, and divide by number of layers to get heat content in 1.e9 J 
     1184               ! it is added to sea ice because the sign convention is the opposite of the sign convention for the ocean  
     1185               !! MV HC 2014 
     1186               ersw (ji,jj,jk)  = ersw(ji,jj,jk) * area(ji,jj) 
    12091187 
    12101188               erdg2(ji,jj,jk)  = erdg1(ji,jj,jk) + ersw(ji,jj,jk) 
     1189 
    12111190            END DO ! ij 
    12121191         END DO !jk 
     
    13611340      CALL wrk_dealloc( jpi, jpj,             vrdg1, vrdg2, vsw  , srdg1, srdg2, smsw ) 
    13621341      CALL wrk_dealloc( jpi, jpj,             afrft, arft1, arft2, virft, vsrft, esrft, smrft, oirft1, oirft2 ) 
    1363       CALL wrk_dealloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnon_init, esnon_init, smv_i_init, oa_i_init ) 
     1342      CALL wrk_dealloc( jpi, jpj, jpl,        aicen_init, vicen_init, vsnwn_init, esnwn_init, smv_i_init, oa_i_init ) 
    13641343      CALL wrk_dealloc( jpi, jpj, jkmax,      eirft, erdg1, erdg2, ersw ) 
    13651344      CALL wrk_dealloc( jpi, jpj, jkmax, jpl, eicen_init ) 
     
    14551434 
    14561435      REAL(wp), POINTER, DIMENSION(:,:) ::   zmask   ! 2D workspace 
    1457       REAL(wp)                          ::   zmask_glo 
     1436      REAL(wp)                          ::   zmask_glo, zsal, zvi, zvs, zei, zes 
    14581437!!gm      REAL(wp) ::   xtmp      ! temporary variable 
    14591438      !!------------------------------------------------------------------- 
     
    14711450         DO jj = 1, jpj 
    14721451            DO ji = 1, jpi 
    1473                IF(  ( a_i(ji,jj,jl) >= -epsi10 .AND. a_i(ji,jj,jl) <  0._wp   ) .OR.   & 
    1474                   & ( a_i(ji,jj,jl) >  0._wp   .AND. a_i(ji,jj,jl) <= epsi10  ) .OR.   & 
    1475                   & ( v_i(ji,jj,jl) == 0._wp   .AND. a_i(ji,jj,jl) >  0._wp   ) .OR.   & 
    1476                   & ( v_i(ji,jj,jl) >  0._wp   .AND. v_i(ji,jj,jl) <= epsi10  ) )   zmask(ji,jj) = 1._wp 
     1452!               IF(  ( a_i(ji,jj,jl) >= -epsi10 .AND. a_i(ji,jj,jl) <  0._wp   ) .OR.   & 
     1453!                  & ( a_i(ji,jj,jl) >  0._wp   .AND. a_i(ji,jj,jl) <= epsi10  ) .OR.   & 
     1454!                  & ( v_i(ji,jj,jl) == 0._wp   .AND. a_i(ji,jj,jl) >  0._wp   ) .OR.   & 
     1455!                  & ( v_i(ji,jj,jl) >  0._wp   .AND. v_i(ji,jj,jl) <= epsi10  ) )   zmask(ji,jj) = 1._wp 
     1456               IF(  ( a_i(ji,jj,jl) >= -epsi10 .AND. a_i(ji,jj,jl) <= epsi10  ) .OR.   & 
     1457                  & ( v_i(ji,jj,jl) >= 0._wp   .AND. v_i(ji,jj,jl) <= epsi10  ) )   zmask(ji,jj) = 1._wp 
    14771458            END DO 
    14781459         END DO 
     
    14871468            DO jj = 1 , jpj 
    14881469               DO ji = 1 , jpi 
    1489 !!gm                  xtmp = e_i(ji,jj,jk,jl) / area(ji,jj) * r1_rdtice 
    1490 !!gm                  xtmp = xtmp * unit_fac 
    1491                   ! fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 
     1470                  zei  = e_i(ji,jj,jk,jl) 
    14921471                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * ( 1._wp - zmask(ji,jj) ) 
     1472                  ! update exchanges with ocean 
     1473                  hfx_res(ji,jj)   = hfx_res(ji,jj) + ( e_i(ji,jj,jk,jl) - zei ) * unit_fac / area(ji,jj) * r1_rdtice ! W.m-2 <0 
    14931474               END DO 
    14941475            END DO 
     
    14971478         DO jj = 1 , jpj 
    14981479            DO ji = 1 , jpi 
    1499  
     1480                
     1481               zsal = smv_i(ji,jj,jl) 
     1482               zvi  = v_i(ji,jj,jl) 
     1483               zvs  = v_s(ji,jj,jl) 
     1484               zes  = e_s(ji,jj,1,jl) 
    15001485               !----------------------------------------------------------------- 
    15011486               ! Zap snow energy and use ocean heat to melt snow 
     
    15071492               ! fluxes are positive to the ocean 
    15081493               ! here the flux has to be negative for the ocean 
    1509 !!gm               xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) * r1_rdtice 
    1510                !           fheat_res(ji,jj) = fheat_res(ji,jj) - xtmp 
    1511  
    1512 !!gm               xtmp = ( rhosn*cpic*( rtt-t_s(ji,jj,1,jl) ) + rhosn*lfus ) * r1_rdtice !RB   ??????? 
    1513  
    15141494               t_s(ji,jj,1,jl) = rtt * zmask(ji,jj) + t_s(ji,jj,1,jl) * ( 1._wp - zmask(ji,jj) ) 
    15151495 
     
    15321512               oa_i (ji,jj,jl) = oa_i (ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 
    15331513               smv_i(ji,jj,jl) = smv_i(ji,jj,jl) * ( 1._wp - zmask(ji,jj) ) 
    1534                ! 
     1514               e_s(ji,jj,1,jl) = e_s(ji,jj,1,jl) * ( 1._wp - zmask(ji,jj) ) 
     1515               ! additional condition 
     1516               IF( v_s(ji,jj,jl) <= epsi10 ) THEN 
     1517                  v_s(ji,jj,jl)   = 0._wp 
     1518                  e_s(ji,jj,1,jl) = 0._wp 
     1519               ENDIF 
     1520               ! update exchanges with ocean 
     1521               sfx_res(ji,jj)  = sfx_res(ji,jj) - ( smv_i(ji,jj,jl) - zsal ) * rhoic * r1_rdtice 
     1522               wfx_res(ji,jj)  = wfx_res(ji,jj) + ( v_i(ji,jj,jl)   - zvi  ) * rhoic * r1_rdtice 
     1523               wfx_snw(ji,jj)  = wfx_snw(ji,jj) + ( v_s(ji,jj,jl)   - zvs  ) * rhosn * r1_rdtice 
     1524               hfx_res(ji,jj)  = hfx_res(ji,jj) + ( e_s(ji,jj,1,jl) - zes ) * unit_fac / area(ji,jj) * r1_rdtice ! W.m-2 <0 
    15351525            END DO 
    15361526         END DO 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limitd_th.F90

    r4332 r4634  
    6565      INTEGER, INTENT(in) ::   kt   ! time step index 
    6666      ! 
    67       INTEGER ::   jl, ja, jm, jbnd1, jbnd2   ! ice types    dummy loop index          
    68       REAL(wp) :: zchk_v_i, zchk_smv, zchk_fs, zchk_fw, zchk_v_i_b, zchk_smv_b, zchk_fs_b, zchk_fw_b ! Check conservation (C Rousset) 
     67      INTEGER ::   ji,jj, jk, jl, ja, jm, jbnd1, jbnd2   ! ice types    dummy loop index          
     68      REAL(wp) :: zchk_v_i, zchk_smv, zchk_e_i, zchk_fs, zchk_fw, zchk_ft, zchk_v_i_b, zchk_smv_b, zchk_e_i_b, zchk_fs_b, zchk_fw_b, zchk_ft_b ! Check conservation (C Rousset) 
    6969      REAL(wp) :: zchk_vmin, zchk_amin, zchk_amax ! Check errors (C Rousset) 
    7070      !!------------------------------------------------------------------ 
     
    7474      !- check conservation (C Rousset) 
    7575      IF (ln_limdiahsb) THEN 
    76          zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
     76         zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) 
    7777         zchk_smv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
    78          zchk_fw_b  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) 
    79          zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) 
     78         zchk_e_i_b = glob_sum( SUM(   e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) 
     79         zchk_fw_b  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) 
     80         zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 
     81         zchk_ft_b  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) 
    8082       ENDIF 
    8183      !- check conservation (C Rousset) 
     
    108110      CALL lim_thd_lac 
    109111      CALL lim_var_glo2eqv    ! only for info 
    110  
    111      IF(ln_ctl) THEN   ! Control print 
     112      
     113      IF(ln_ctl) THEN   ! Control print 
    112114         CALL prt_ctl_info(' ') 
    113115         CALL prt_ctl_info(' - Cell values : ') 
     
    144146      !- check conservation (C Rousset) 
    145147      IF( ln_limdiahsb ) THEN 
    146          zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
    147          zchk_fw  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     148         zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
     149         zchk_fw  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     150         zchk_ft  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) - zchk_ft_b 
    148151  
    149          zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b - ( zchk_fw / rhoic ) ) * r1_rdtice 
     152         zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b ) * r1_rdtice - zchk_fw  
    150153         zchk_smv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_smv_b ) * r1_rdtice + ( zchk_fs / rhoic ) 
     154         zchk_e_i =   glob_sum( SUM( e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) * r1_rdtice - zchk_e_i_b * r1_rdtice + zchk_ft 
    151155 
    152156         zchk_vmin = glob_min(v_i) 
     
    155159 
    156160         IF(lwp) THEN 
    157             IF ( ABS( zchk_v_i   ) >  1.e-5 ) WRITE(numout,*) 'violation volume [m3/day]     (limitd_th) = ',(zchk_v_i * rday) 
     161            IF ( ABS( zchk_v_i   ) >  1.e-4 ) WRITE(numout,*) 'violation volume [kg/day]     (limitd_th) = ',(zchk_v_i * rday) 
    158162            IF ( ABS( zchk_smv   ) >  1.e-4 ) WRITE(numout,*) 'violation saline [psu*m3/day] (limitd_th) = ',(zchk_smv * rday) 
     163            IF ( ABS( zchk_e_i   ) >  1.e-2 ) WRITE(numout,*) 'violation enthalpy [1e9 J]    (limitd_th) = ',(zchk_e_i) 
    159164            IF ( zchk_vmin <  0.            ) WRITE(numout,*) 'violation v_i<0  [mm]         (limitd_th) = ',(zchk_vmin * 1.e-3) 
    160165            IF ( zchk_amax >  amax+epsi10   ) WRITE(numout,*) 'violation a_i>amax            (limitd_th) = ',zchk_amax 
     
    258263               zindb             = 1.0 - MAX( 0.0, SIGN( 1.0, - old_a_i(ji,jj,jl) + epsi10) ) !0 if no ice and 1 if yes 
    259264               zht_i_o(ji,jj,jl) = old_v_i(ji,jj,jl) / MAX( old_a_i(ji,jj,jl), epsi10 ) * zindb 
    260                IF( a_i(ji,jj,jl) > epsi06 )   zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl)  
     265               IF( a_i(ji,jj,jl) > epsi10 )   zdhice(ji,jj,jl) = ht_i(ji,jj,jl) - zht_i_o(ji,jj,jl)  
    261266            END DO 
    262267         END DO 
     
    302307            ij = nind_j(ji) 
    303308            ! 
    304             IF ( ( zht_i_o(ii,ij,jl) .GT. epsi10 ) .AND. &  
    305                ( zht_i_o(ii,ij,jl+1) .GT. epsi10 ) ) THEN 
     309            zhbnew(ii,ij,jl) = hi_max(jl) 
     310            IF ( old_a_i(ii,ij,jl) > epsi10 .AND. old_a_i(ii,ij,jl+1) > epsi10 ) THEN 
    306311               !interpolate between adjacent category growth rates 
    307                zslope = ( zdhice(ii,ij,jl+1)     - zdhice(ii,ij,jl) ) / & 
    308                   ( zht_i_o   (ii,ij,jl+1) - zht_i_o   (ii,ij,jl) ) 
    309                zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) + & 
    310                   zslope * ( hi_max(jl) - zht_i_o(ii,ij,jl) ) 
    311             ELSEIF (zht_i_o(ii,ij,jl).gt.epsi10) THEN 
     312               zslope           = ( zdhice(ii,ij,jl+1) - zdhice(ii,ij,jl) ) / ( zht_i_o(ii,ij,jl+1) - zht_i_o(ii,ij,jl) ) 
     313               zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) + zslope * ( hi_max(jl) - zht_i_o(ii,ij,jl) ) 
     314            ELSEIF ( old_a_i(ii,ij,jl) > epsi10) THEN 
    312315               zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl) 
    313             ELSEIF (zht_i_o(ii,ij,jl+1).gt.epsi10) THEN 
     316            ELSEIF ( old_a_i(ii,ij,jl+1) > epsi10) THEN 
    314317               zhbnew(ii,ij,jl) = hi_max(jl) + zdhice(ii,ij,jl+1) 
    315             ELSE 
    316                zhbnew(ii,ij,jl) = hi_max(jl) 
    317318            ENDIF 
    318319         END DO 
     
    320321         !- 4.2 Check that each zhbnew lies between adjacent values of ice thickness 
    321322         DO ji = 1, nbrem 
    322             ! jl, ji 
    323323            ii = nind_i(ji) 
    324324            ij = nind_j(ji) 
    325             ! jl, ji 
    326             IF ( ( a_i(ii,ij,jl) .GT.epsi10) .AND. &  
    327                ( ht_i(ii,ij,jl).GE. zhbnew(ii,ij,jl) ) & 
    328                ) THEN 
     325            IF( a_i(ii,ij,jl) > epsi10 .AND. ht_i(ii,ij,jl) >= zhbnew(ii,ij,jl) ) THEN 
    329326               zremap_flag(ii,ij) = 0 
    330             ELSEIF ( ( a_i(ii,ij,jl+1) .GT. epsi10 ) .AND. & 
    331                ( ht_i(ii,ij,jl+1).LE. zhbnew(ii,ij,jl) ) & 
    332                ) THEN 
     327            ELSEIF( a_i(ii,ij,jl+1) > epsi10 .AND. ht_i(ii,ij,jl+1) <= zhbnew(ii,ij,jl) ) THEN 
    333328               zremap_flag(ii,ij) = 0 
    334329            ENDIF 
    335330 
    336331            !- 4.3 Check that each zhbnew does not exceed maximal values hi_max   
    337             ! jl, ji 
    338             IF (zhbnew(ii,ij,jl).gt.hi_max(jl+1)) THEN 
    339                zremap_flag(ii,ij) = 0 
    340             ENDIF 
    341             ! jl, ji 
    342             IF (zhbnew(ii,ij,jl).lt.hi_max(jl-1)) THEN 
    343                zremap_flag(ii,ij) = 0 
    344             ENDIF 
    345             ! jl, ji 
    346          END DO !ji 
    347          ! ji 
     332            IF( zhbnew(ii,ij,jl) > hi_max(jl+1) ) zremap_flag(ii,ij) = 0 
     333            IF( zhbnew(ii,ij,jl) < hi_max(jl-1) ) zremap_flag(ii,ij) = 0 
     334         END DO 
     335 
    348336      END DO !jl 
    349337 
     
    354342      DO jj = 1, jpj 
    355343         DO ji = 1, jpi 
    356             IF ( zremap_flag(ji,jj) == 1 ) THEN 
     344            IF( zremap_flag(ji,jj) == 1 ) THEN 
    357345               nbrem         = nbrem + 1 
    358346               nind_i(nbrem) = ji 
    359347               nind_j(nbrem) = jj 
    360348            ENDIF 
    361          END DO !ji 
    362       END DO !jj 
     349         END DO  
     350      END DO  
    363351 
    364352      !----------------------------------------------------------------------------------------------- 
     
    380368            ENDIF 
    381369 
    382             IF( zhbnew(ji,jj,kubnd) < hi_max(kubnd-1) )   zhbnew(ji,jj,kubnd) = hi_max(kubnd-1) 
     370            IF( zhbnew(ji,jj,kubnd) < hi_max(kubnd-1) ) zhbnew(ji,jj,kubnd) = hi_max(kubnd-1) 
    383371 
    384372         END DO !jj 
     
    444432      DO jl = klbnd, kubnd 
    445433         CALL lim_itd_fitline(jl, zhbnew(:,:,jl-1), zhbnew(:,:,jl), ht_i(:,:,jl), & 
    446             g0(:,:,jl), g1(:,:,jl), hL(:,:,jl), hR(:,:,jl),     & 
    447             zremap_flag) 
     434            g0(:,:,jl), g1(:,:,jl), hL(:,:,jl), hR(:,:,jl), zremap_flag) 
    448435      END DO 
    449436 
     
    493480            nd   = zdonor(ii,ij,jl) 
    494481            zdaice(ii,ij,jl) = g1(ii,ij,nd)*zx2 + g0(ii,ij,nd)*zx1 
    495             zdvice(ii,ij,jl) = g1(ii,ij,nd)*zx3 + g0(ii,ij,nd)*zx2 + & 
    496                zdaice(ii,ij,jl)*hL(ii,ij,nd) 
     482            zdvice(ii,ij,jl) = g1(ii,ij,nd)*zx3 + g0(ii,ij,nd)*zx2 + zdaice(ii,ij,jl)*hL(ii,ij,nd) 
    497483 
    498484         END DO ! ji 
     
    511497         ii = nind_i(ji) 
    512498         ij = nind_j(ji) 
    513          IF ( ( a_i(ii,ij,1) > epsi10 ) .AND. ( ht_i(ii,ij,1) < hiclim ) ) THEN 
     499         IF ( a_i(ii,ij,1) > epsi10 .AND. ht_i(ii,ij,1) < hiclim ) THEN 
    514500            a_i(ii,ij,1)  = a_i(ii,ij,1) * ht_i(ii,ij,1) / hiclim  
    515501            ht_i(ii,ij,1) = hiclim 
    516             v_i(ii,ij,1)  = a_i(ii,ij,1) * ht_i(ii,ij,1) !clem-useless 
    517502         ENDIF 
    518503      END DO !ji 
     
    799784            !-------------- 
    800785 
    801             zdvsnow          = v_s(ii,ij,jl1) * zworka(ii,ij) 
     786            zdvsnow        = v_s(ii,ij,jl1) * zworka(ii,ij) 
    802787            v_s(ii,ij,jl1) = v_s(ii,ij,jl1) - zdvsnow 
    803788            v_s(ii,ij,jl2) = v_s(ii,ij,jl2) + zdvsnow  
     
    807792            !-------------------- 
    808793 
    809             zdesnow              = e_s(ii,ij,1,jl1) * zworka(ii,ij) 
     794            zdesnow            = e_s(ii,ij,1,jl1) * zworka(ii,ij) 
    810795            e_s(ii,ij,1,jl1)   = e_s(ii,ij,1,jl1) - zdesnow 
    811796            e_s(ii,ij,1,jl2)   = e_s(ii,ij,1,jl2) + zdesnow 
     
    815800            !-------------- 
    816801 
    817             zdo_aice             = oa_i(ii,ij,jl1) * zdaice(ii,ij,jl) 
     802            zdo_aice           = oa_i(ii,ij,jl1) * zdaice(ii,ij,jl) 
    818803            oa_i(ii,ij,jl1)    = oa_i(ii,ij,jl1) - zdo_aice 
    819804            oa_i(ii,ij,jl2)    = oa_i(ii,ij,jl2) + zdo_aice 
     
    823808            !-------------- 
    824809 
    825             zdsm_vice            = smv_i(ii,ij,jl1) * zworka(ii,ij) 
     810            zdsm_vice          = smv_i(ii,ij,jl1) * zworka(ii,ij) 
    826811            smv_i(ii,ij,jl1)   = smv_i(ii,ij,jl1) - zdsm_vice 
    827812            smv_i(ii,ij,jl2)   = smv_i(ii,ij,jl2) + zdsm_vice 
     
    831816            !--------------------- 
    832817 
    833             zdaTsf               = t_su(ii,ij,jl1) * zdaice(ii,ij,jl) 
     818            zdaTsf             = t_su(ii,ij,jl1) * zdaice(ii,ij,jl) 
    834819            zaTsfn(ii,ij,jl1)  = zaTsfn(ii,ij,jl1) - zdaTsf 
    835820            zaTsfn(ii,ij,jl2)  = zaTsfn(ii,ij,jl2) + zdaTsf  
     
    910895      REAL(wp), POINTER, DIMENSION(:,:) ::   vt_s_init, vt_s_final   ! snow volume summed over categories 
    911896      !!------------------------------------------------------------------ 
     897      !! clem 2014/04: be carefull, rebining does not conserve salt => the difference is taken into account in limupdate 
    912898       
    913899      CALL wrk_alloc( jpi,jpj,jpl, zdonor )   ! interger 
     
    10151001 
    10161002!clem-change 
     1003         DO jj = 1, jpj 
     1004            DO ji = 1, jpi 
     1005               IF( a_i(ji,jj,jl+1) > epsi10 .AND. ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
     1006                  ! 
     1007                  zshiftflag = 1 
     1008                  zdonor(ji,jj,jl) = jl + 1 
     1009                  zdaice(ji,jj,jl) = a_i(ji,jj,jl+1)  
     1010                  zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 
     1011               ENDIF 
     1012            END DO                 ! ji 
     1013         END DO                 ! jj 
     1014 
     1015         IF(lk_mpp)   CALL mpp_max( zshiftflag ) 
     1016          
     1017         IF( zshiftflag == 1 ) THEN            ! Shift ice between categories 
     1018            CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 
     1019            ! Reset shift parameters 
     1020            zdonor(:,:,jl) = 0 
     1021            zdaice(:,:,jl) = 0._wp 
     1022            zdvice(:,:,jl) = 0._wp 
     1023         ENDIF 
     1024!clem-change 
     1025 
     1026!         ! clem-change begin: why not doing that? 
    10171027!         DO jj = 1, jpj 
    10181028!            DO ji = 1, jpi 
    1019 !               IF( a_i(ji,jj,jl+1) >  epsi10 .AND.   & 
    1020 !                  ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
    1021 !                  ! 
    1022 !                  zshiftflag = 1 
    1023 !                  zdonor(ji,jj,jl) = jl + 1 
    1024 !                  zdaice(ji,jj,jl) = a_i(ji,jj,jl+1)  
    1025 !                  zdvice(ji,jj,jl) = v_i(ji,jj,jl+1) 
     1029!               IF( a_i(ji,jj,jl+1) > epsi10 .AND. ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
     1030!                  ht_i(ji,jj,jl+1) = hi_max(jl) + epsi10 
     1031!                  a_i (ji,jj,jl+1) = v_i(ji,jj,jl+1) / ht_i(ji,jj,jl+1)  
    10261032!               ENDIF 
    10271033!            END DO                 ! ji 
    10281034!         END DO                 ! jj 
    1029 ! 
    1030 !         IF(lk_mpp)   CALL mpp_max( zshiftflag ) 
    1031 !          
    1032 !         IF( zshiftflag == 1 ) THEN            ! Shift ice between categories 
    1033 !            CALL lim_itd_shiftice( klbnd, kubnd, zdonor, zdaice, zdvice ) 
    1034 !            ! Reset shift parameters 
    1035 !            zdonor(:,:,jl) = 0 
    1036 !            zdaice(:,:,jl) = 0._wp 
    1037 !            zdvice(:,:,jl) = 0._wp 
    1038 !         ENDIF 
    1039 !clem-change 
    1040  
    1041          ! clem-change begin: why not doing that? 
    1042          DO jj = 1, jpj 
    1043             DO ji = 1, jpi 
    1044                IF( a_i(ji,jj,jl+1) >  epsi10 .AND.   & 
    1045                   ht_i(ji,jj,jl+1) <= hi_max(jl) ) THEN 
    1046                   ht_i(ji,jj,jl+1) = hi_max(jl) + epsi10 
    1047                   a_i (ji,jj,jl+1) = v_i(ji,jj,jl+1) / ht_i(ji,jj,jl+1)  
    1048                ENDIF 
    1049             END DO                 ! ji 
    1050          END DO                 ! jj 
    10511035         ! clem-change end 
    10521036 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limrhg.F90

    r4345 r4634  
    5151 
    5252   REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    53    REAL(wp) ::   rzero   = 0._wp   ! constant values 
    54    REAL(wp) ::   rone    = 1._wp   ! constant values 
    5553       
    5654   !! * Substitutions 
     
    514512!CDIR NOVERRCHK 
    515513               DO ji = fs_2, fs_jpim1 
    516                   zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass1(ji,jj))))*tmu(ji,jj) 
     514                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) 
    517515                  zsang        = SIGN ( 1.0 , fcor(ji,jj) ) * sangvg 
    518516                  z0           = zmass1(ji,jj)/dtevp 
     
    547545               DO ji = fs_2, fs_jpim1 
    548546 
    549                   zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
     547                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass2(ji,jj))))*tmv(ji,jj) 
    550548                  zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    551549                  z0           = zmass2(ji,jj)/dtevp 
     
    579577!CDIR NOVERRCHK 
    580578               DO ji = fs_2, fs_jpim1 
    581                   zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass2(ji,jj))))*tmv(ji,jj) 
     579                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass2(ji,jj))))*tmv(ji,jj) 
    582580                  zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    583581                  z0           = zmass2(ji,jj)/dtevp 
     
    611609!CDIR NOVERRCHK 
    612610               DO ji = fs_2, fs_jpim1 
    613                   zmask        = (1.0-MAX(rzero,SIGN(rone,-zmass1(ji,jj))))*tmu(ji,jj) 
     611                  zmask        = (1.0-MAX(0._wp,SIGN(1._wp,-zmass1(ji,jj))))*tmu(ji,jj) 
    614612                  zsang        = SIGN(1.0,fcor(ji,jj))*sangvg 
    615613                  z0           = zmass1(ji,jj)/dtevp 
     
    661659      ! 4) Prevent ice velocities when the ice is thin 
    662660      !------------------------------------------------------------------------------! 
    663       !clem : add hminrhg in the namelist 
    664       ! 
    665661      ! If the ice thickness is below hminrhg (5cm) then ice velocity should equal the 
    666662      ! ocean velocity,  
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limrst.F90

    r4220 r4634  
    162162      CALL iom_rstput( iter, nitrst, numriw, 'u_ice'        , u_ice      ) 
    163163      CALL iom_rstput( iter, nitrst, numriw, 'v_ice'        , v_ice      ) 
    164       CALL iom_rstput( iter, nitrst, numriw, 'fsbbq'        , fsbbq      ) 
    165164      CALL iom_rstput( iter, nitrst, numriw, 'stress1_i'    , stress1_i  ) 
    166165      CALL iom_rstput( iter, nitrst, numriw, 'stress2_i'    , stress2_i  ) 
     
    393392      CALL iom_get( numrir, jpdom_autoglo, 'u_ice'     , u_ice      ) 
    394393      CALL iom_get( numrir, jpdom_autoglo, 'v_ice'     , v_ice      ) 
    395       CALL iom_get( numrir, jpdom_autoglo, 'fsbbq'     , fsbbq      ) 
    396394      CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i  ) 
    397395      CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i  ) 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r4345 r4634  
    2727   USE par_ice          ! ice parameters 
    2828   USE dom_oce          ! ocean domain 
    29    USE dom_ice,    ONLY : tms 
     29   USE dom_ice,    ONLY : tms, area 
    3030   USE ice              ! LIM sea-ice variables 
    3131   USE sbc_ice          ! Surface boundary condition: sea-ice fields 
     
    5050   PUBLIC   lim_sbc_tau    ! called by sbc_ice_lim 
    5151 
    52    REAL(wp)  ::   rzero  = 0._wp     
    53    REAL(wp)  ::   rone   = 1._wp 
     52   REAL(wp)  ::   epsi10 = 1.e-10   ! 
     53   REAL(wp)  ::   epsi20 = 1.e-20   ! 
    5454 
    5555   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau_oce, vtau_oce   ! air-ocean surface i- & j-stress     [N/m2] 
     
    102102      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    103103      ! 
    104       INTEGER  ::   ji, jj, jl           ! dummy loop indices 
    105       INTEGER  ::   ierr, ifvt, i1mfr, idfr           ! local integer 
    106       INTEGER  ::   iflt, ial , iadv , ifral, ifrdv   !   -      - 
    107       REAL(wp) ::   zinda, zemp, zemp_snow, zfmm      ! local scalars 
    108       REAL(wp) ::   zemp_snw                          !   -      - 
    109       REAL(wp) ::   zfcm1 , zfcm2                     !   -      - 
     104      INTEGER  ::   ji, jj, jl, jk           ! dummy loop indices 
     105      REAL(wp) ::   zinda, zemp      ! local scalars 
    110106      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zalb, zalbp     ! 2D/3D workspace 
    111       REAL(wp) ::   zzfcm1, zfscmbq ! clem: for light penetration 
     107      REAL(wp) ::   ztmelts         ! clem 2014: for HC diags 
     108 
     109      REAL(wp) ::   zf_mass         ! Heat flux associated with mass exchange ice->ocean (W.m-2) 
     110      REAL(wp) ::   zfcm1           ! New solar flux received by the ocean 
    112111      !!--------------------------------------------------------------------- 
    113112       
    114113      IF( lk_cpl )   CALL wrk_alloc( jpi, jpj, jpl, zalb, zalbp ) 
    115114 
    116       !------------------------------------------! 
    117       !      heat flux at the ocean surface      ! 
    118       !------------------------------------------! 
    119115      ! pfrld is the lead fraction at the previous time step (actually between TRP and THD) 
    120       ! changed to old_frld and old ht_i 
    121  
    122116      DO jj = 1, jpj 
    123117         DO ji = 1, jpi 
    124             zinda   = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 
    125             ifvt    = zinda  *  MAX( rzero , SIGN( rone, - phicif(ji,jj) ) )  !subscripts are bad here 
    126             i1mfr   = 1.0 - MAX( rzero , SIGN( rone ,  - at_i(ji,jj) ) ) 
    127             idfr    = 1.0 - MAX( rzero , SIGN( rone , ( 1.0 - at_i(ji,jj) ) - pfrld(ji,jj) ) ) 
    128             iflt    = zinda  * (1 - i1mfr) * (1 - ifvt ) 
    129             ial     = ifvt   * i1mfr + ( 1 - ifvt ) * idfr 
    130             iadv    = ( 1  - i1mfr ) * zinda 
    131             ifral   = ( 1  - i1mfr * ( 1 - ial ) )    
    132             ifrdv   = ( 1  - ifral * ( 1 - ial ) ) * iadv  
    133  
    134             ! switch --- 1.0 ---------------- 0.0 -------------------- 
    135             ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    136             ! zinda   | if pfrld = 1       | if pfrld < 1            | 
    137             !  -> ifvt| if pfrld old_ht_i 
    138             ! i1mfr   | if frld = 1        | if frld  < 1            | 
    139             ! idfr    | if frld <= pfrld    | if frld > pfrld        | 
    140             ! iflt    |  
    141             ! ial     | 
    142             ! iadv    | 
    143             ! ifral 
    144             ! ifrdv 
    145  
    146             !   computation the solar flux at ocean surface 
    147             IF (lk_cpl) THEN ! be carfeful: not been tested yet 
     118 
     119            !------------------------------------------! 
     120            !      heat flux at the ocean surface      ! 
     121            !------------------------------------------! 
     122            zinda   = 1._wp - MAX( 0._wp , SIGN( 1._wp , - ( 1._wp - pfrld(ji,jj) ) ) ) ! 1 if ice 
     123 
     124            ! Solar heat flux reaching the ocean = zfcm1 (W.m-2)  
     125            !--------------------------------------------------- 
     126            IF( lk_cpl ) THEN ! be carfeful: not been tested yet 
    148127               ! original line 
    149                !zfcm1 = qsr_tot(ji,jj) + fstric(ji,jj) * at_i(ji,jj) 
    150                ! new line to include solar penetration (not tested) 
    151                zfcm1 = qsr_tot(ji,jj) + fstric(ji,jj) * at_i(ji,jj) / ( 1.0 - zinda + zinda * iatte(ji,jj) ) 
     128               zfcm1 = qsr_tot(ji,jj) 
     129               !!!zfcm1 = qsr_tot(ji,jj) + ftr_ice(ji,jj) * ( 1._wp - pfrld(ji,jj) ) / ( 1._wp - zinda + zinda * iatte(ji,jj) ) 
    152130               DO jl = 1, jpl 
    153                   zfcm1 = zfcm1 - qsr_ice(ji,jj,jl) * a_i(ji,jj,jl) 
     131                  zfcm1 = zfcm1 - ( qsr_ice(ji,jj,jl) - ftr_ice(ji,jj,jl) ) * old_a_i(ji,jj,jl) 
    154132               END DO 
    155133            ELSE 
    156                zfcm1   = pfrld(ji,jj) * qsr(ji,jj)  + & 
    157                     &    ( 1._wp - pfrld(ji,jj) ) * fstric(ji,jj) / ( 1.0 - zinda + zinda * iatte(ji,jj) ) 
     134               !!!zfcm1   = pfrld(ji,jj) * qsr(ji,jj)  + & 
     135               !!!     &    ( 1._wp - pfrld(ji,jj) ) * ftr_ice(ji,jj) / ( 1._wp - zinda + zinda * iatte(ji,jj) ) 
     136               zfcm1   = pfrld(ji,jj) * qsr(ji,jj) 
     137               DO jl = 1, jpl 
     138                  zfcm1   = zfcm1 + old_a_i(ji,jj,jl) * ftr_ice(ji,jj,jl) 
     139               END DO 
    158140            ENDIF 
    159             ! fstric     Solar flux transmitted trough the ice 
    160             ! qsr        Net short wave heat flux on free ocean 
    161             ! new line 
    162             fscmbq(ji,jj) = ( 1.0 - pfrld(ji,jj) ) * fstric(ji,jj) / ( 1.0 - zinda + zinda * iatte(ji,jj) ) 
    163  
    164             ! solar flux and fscmbq with light penetration (clem) 
    165             zzfcm1  = pfrld(ji,jj) * qsr(ji,jj) * oatte(ji,jj) + ( 1. - pfrld(ji,jj) ) * fstric(ji,jj) 
    166             zfscmbq = ( 1.0 - pfrld(ji,jj) ) * fstric(ji,jj) 
    167  
    168             !  computation the non solar heat flux at ocean surface 
    169             zfcm2 = - zzfcm1                                                                    & ! 
    170                &    + iflt    * zfscmbq                                                         & ! total ablation: heat given to the ocean 
    171                &    + ifral   * ( ial * qcmif(ji,jj) + (1 - ial) * qldif(ji,jj) ) * r1_rdtice   & 
    172                &    + ifrdv   * (       qfvbq(ji,jj) +             qdtcn(ji,jj) ) * r1_rdtice   & 
    173                &    + fhmec(ji,jj)                                                              & ! snow melt when ridging 
    174                &    + fheat_mec(ji,jj)                                                          & ! ridge formation 
    175                &    + fheat_res(ji,jj)                                                            ! residual heat flux 
    176             ! qcmif   Energy needed to bring the ocean surface layer until its freezing (ok) 
    177             ! qldif   heat balance of the lead (or of the open ocean) 
    178             ! qfvbq   latent heat uptake/release after accretion/ablation 
    179             ! qdtcn   Energy from the turbulent oceanic heat flux heat flux coming in the lead 
    180  
    181             IF( num_sal == 2 )   zfcm2 = zfcm2 + fhbri(ji,jj)    ! add contribution due to brine drainage  
    182  
    183             ! bottom radiative component is sent to the computation of the oceanic heat flux 
    184             fsbbq(ji,jj) = ( 1._wp - ( ifvt + iflt ) ) * fscmbq(ji,jj)      
    185  
    186             ! used to compute the oceanic heat flux at the next time step 
    187             qsr(ji,jj) = zfcm1                                       ! solar heat flux  
    188             qns(ji,jj) = zfcm2 - fdtcn(ji,jj)                        ! non solar heat flux 
    189             !                           ! fdtcn : turbulent oceanic heat flux 
    190          END DO 
    191       END DO 
    192  
    193       !------------------------------------------! 
    194       !      mass flux at the ocean surface      ! 
    195       !------------------------------------------! 
    196  
    197 !!gm   optimisation: this loop have to be merged with the previous one 
    198       DO jj = 1, jpj 
    199          DO ji = 1, jpi 
     141 
     142            ! Total heat flux reaching the ocean = hfx_out (W.m-2)  
     143            !--------------------------------------------------- 
     144            zf_mass        = hfx_thd(ji,jj) + hfx_dyn(ji,jj) + hfx_res(ji,jj) ! heat flux from snow is 0 (T=0 degC) 
     145            hfx_out(ji,jj) = hfx_out(ji,jj) + zf_mass + zfcm1 
     146 
     147            ! New qsr and qns used to compute the oceanic heat flux at the next time step 
     148            !--------------------------------------------------- 
     149            qsr(ji,jj) = zfcm1                                       
     150            qns(ji,jj) = hfx_out(ji,jj) - zfcm1               
     151 
     152            !------------------------------------------! 
     153            !      mass flux at the ocean surface      ! 
     154            !------------------------------------------! 
    200155            !  case of realistic freshwater flux (Tartinville et al., 2001) (presently ACTIVATED) 
    201156            !  -------------------------------------------------------------------------------------  
     
    206161            !                     Even if i see Ice melting as a FW and SALT flux 
    207162            !         
    208  
    209163            !  computing freshwater exchanges at the ice/ocean interface 
    210             IF (lk_cpl) THEN  
     164            !  clem 2014/04: why not 1-pfrld instead of at_i here??? 
     165            IF( lk_cpl ) THEN  
    211166               zemp = - emp_tot(ji,jj) + emp_ice(ji,jj) * ( 1. - pfrld(ji,jj) )    &   ! 
    212                   &   - rdm_snw(ji,jj) / rdt_ice 
     167                  &   - wfx_snw(ji,jj) 
    213168            ELSE 
    214                zemp =   emp(ji,jj)     * ( 1.0 - at_i(ji,jj)          )  &   ! evaporation over oceanic fraction 
    215                   &   - tprecip(ji,jj) *         at_i(ji,jj)             &   ! all precipitation reach the ocean 
    216                   &   + sprecip(ji,jj) * ( 1. - (pfrld(ji,jj)**betas) )  &   ! except solid precip intercepted by sea-ice 
    217                   &   - fmmec(ji,jj)                                         ! snow falling when ridging 
     169               zemp =   emp(ji,jj)     *           pfrld(ji,jj)            &   ! evaporation over oceanic fraction 
     170                  &   - tprecip(ji,jj) * ( 1._wp - pfrld(ji,jj) )          &   ! all precipitation reach the ocean 
     171                  &   + sprecip(ji,jj) * ( 1._wp - pfrld(ji,jj)**betas )       ! except solid precip intercepted by sea-ice 
    218172            ENDIF 
    219173 
    220             ! mass flux at the ocean/ice interface (sea ice fraction) 
    221             zemp_snw = rdm_snw(ji,jj) * r1_rdtice                         ! snow melting = pure water that enters the ocean 
    222             zfmm     = rdm_ice(ji,jj) * r1_rdtice                         ! Freezing minus melting   
    223  
    224             fmmflx(ji,jj) = zfmm                                     ! F/M mass flux save at least for biogeochemical model 
    225  
    226             emp(ji,jj) = zemp + zemp_snw + zfmm  ! mass flux + F/M mass flux (always ice/ocean mass exchange) 
     174            ! mass flux from ice/ocean 
     175            wfx_ice(ji,jj) = wfx_bog(ji,jj) + wfx_bom(ji,jj) + wfx_sum(ji,jj) + wfx_sni(ji,jj) + wfx_opw(ji,jj) + wfx_dyn(ji,jj) + wfx_res(ji,jj) 
     176 
     177            ! mass flux at the ocean/ice interface 
     178            fmmflx(ji,jj) = wfx_ice(ji,jj) * rdt_ice                   ! F/M mass flux save at least for biogeochemical model 
     179            emp(ji,jj)    = zemp + wfx_ice(ji,jj) + wfx_snw(ji,jj)     ! mass flux + F/M mass flux (always ice/ocean mass exchange) 
    227180             
    228             !  correcting brine salt fluxes   (zinda = 1  if pfrld=1 , =0 otherwise) 
    229             zinda        = 1.0 - MAX( rzero , SIGN( rone , - ( 1.0 - pfrld(ji,jj) ) ) ) 
    230             sfx_bri(ji,jj) = zinda * sfx_bri(ji,jj) 
    231181         END DO 
    232182      END DO 
     
    235185      !      salt flux at the ocean surface      ! 
    236186      !------------------------------------------! 
    237  
    238       IF( num_sal == 2 ) THEN      ! variable ice salinity: brine drainage included in the salt flux 
    239          sfx(:,:) = sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) + sfx_bri(:,:) 
    240       ELSE                         ! constant ice salinity: 
    241          sfx(:,:) = sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) 
    242       ENDIF 
    243       !-----------------------------------------------! 
    244       !   mass of snow and ice per unit area          ! 
    245       !-----------------------------------------------! 
    246       IF( nn_ice_embd /= 0 ) THEN                               ! embedded sea-ice (mass required) 
    247          snwice_mass_b(:,:) = snwice_mass(:,:)                  ! save mass from the previous ice time step 
    248          !                                                      ! new mass per unit area 
     187      sfx(:,:) = sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) + sfx_bri(:,:) 
     188 
     189      !-------------------------------------------------------------! 
     190      !   mass of snow and ice per unit area for embedded sea-ice   ! 
     191      !-------------------------------------------------------------! 
     192      IF( nn_ice_embd /= 0 ) THEN 
     193         ! save mass from the previous ice time step 
     194         snwice_mass_b(:,:) = snwice_mass(:,:)                   
     195         ! new mass per unit area 
    249196         snwice_mass  (:,:) = tms(:,:) * ( rhosn * vt_s(:,:) + rhoic * vt_i(:,:)  )  
    250          !                                                      ! time evolution of snow+ice mass 
     197         ! time evolution of snow+ice mass 
    251198         snwice_fmass (:,:) = ( snwice_mass(:,:) - snwice_mass_b(:,:) ) * r1_rdtice 
    252199      ENDIF 
     
    263210      IF( lk_cpl ) THEN          ! coupled case 
    264211         CALL albedo_ice( t_su, ht_i, ht_s, zalbp, zalb )                  ! snow/ice albedo 
    265          ! 
    266212         alb_ice(:,:,:) =  0.5_wp * zalbp(:,:,:) + 0.5_wp * zalb (:,:,:)   ! Ice albedo (mean clear and overcast skys) 
    267213      ENDIF 
     214 
     215      ! ------------------------------------------------- 
     216      ! C. Rousset Begin Diagnostics for heat in W/m2 
     217      ! ------------------------------------------------- 
     218      DO jj = 1, jpj 
     219         DO ji = 1, jpi             
     220            diag_heat_dhc1(ji,jj) = ( SUM( d_e_i_trp(ji,jj,1:nlay_i,:) + d_e_i_thd(ji,jj,1:nlay_i,:) ) +  &  
     221               &                      SUM( d_e_s_trp(ji,jj,1:nlay_s,:) + d_e_s_thd(ji,jj,1:nlay_s,:) ) ) * unit_fac * r1_rdtice / area(ji,jj)    
     222         END DO 
     223      END DO 
     224      ! ------------------------------------------------- 
     225      ! C. Rousset End Diagnostics 
     226      ! ------------------------------------------------- 
    268227 
    269228      IF(ln_ctl) THEN 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r4332 r4634  
    88   !!            3.0  ! 2005-11 (M. Vancoppenolle)  LIM-3 : Multi-layer thermodynamics + salinity variations 
    99   !!             -   ! 2007-04 (M. Vancoppenolle) add lim_thd_glohec, lim_thd_con_dh and lim_thd_con_dif 
    10    !!            3.2  ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in rdm_snw 
     10   !!            3.2  ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in wfx_snw 
    1111   !!            3.3  ! 2010-11 (G. Madec) corrected snow melting heat (due to factor betas) 
    1212   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation 
     
    4343   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    4444   USE timing         ! Timing 
     45   USE cpl_oasis3, ONLY : lk_cpl 
    4546 
    4647   IMPLICIT NONE 
     
    5152 
    5253   REAL(wp) ::   epsi10 = 1.e-10_wp   ! 
    53    REAL(wp) ::   zzero  = 0._wp      ! 
    54    REAL(wp) ::   zone   = 1._wp      ! 
    5554 
    5655   !! * Substitutions 
     
    8483      INTEGER, INTENT(in) ::   kt    ! number of iteration 
    8584      !! 
    86       INTEGER  ::   ji, jj, jk, jl   ! dummy loop indices 
    87       INTEGER  ::   nbpb             ! nb of icy pts for thermo. cal. 
    88       REAL(wp) ::   zfric_umin = 5e-03_wp    ! lower bound for the friction velocity 
    89       REAL(wp) ::   zfric_umax = 2e-02_wp    ! upper bound for the friction velocity 
    90       REAL(wp) ::   zinda, zindb, zthsnice, zfric_u     ! local scalar 
    91       REAL(wp) ::   zfntlat, zpareff, zareamin, zcoef   !    -         - 
    92       REAL(wp), POINTER, DIMENSION(:,:) ::   zqlbsbq   ! link with lead energy budget qldif 
    93       REAL(wp) :: zchk_v_i, zchk_smv, zchk_fs, zchk_fw, zchk_v_i_b, zchk_smv_b, zchk_fs_b, zchk_fw_b ! Check conservation (C Rousset) 
     85      INTEGER  :: ji, jj, jk, jl   ! dummy loop indices 
     86      INTEGER  :: nbpb             ! nb of icy pts for thermo. cal. 
     87      INTEGER  :: ii, ij           ! temporary dummy loop index 
     88      REAL(wp) :: zfric_umin = 5e-03_wp    ! lower bound for the friction velocity 
     89      REAL(wp) :: zfric_umax = 2e-02_wp    ! upper bound for the friction velocity 
     90      REAL(wp) :: zinda, zindb, zfric_u     ! local scalar 
     91      REAL(wp) :: zareamin  !    -         - 
     92      REAL(wp) :: zchk_v_i, zchk_smv, zchk_e_i, zchk_fs, zchk_fw, zchk_ft, zchk_v_i_b, zchk_smv_b, zchk_e_i_b, zchk_fs_b, zchk_fw_b, zchk_ft_b  
    9493      REAL(wp) :: zchk_vmin, zchk_amin, zchk_amax ! Check errors (C Rousset) 
     94      REAL(wp) :: zqld, zqfr 
     95      REAL(wp), POINTER, DIMENSION(:) :: zdq, zq_ini, zhfx, zqfx 
     96      REAL(wp)                        :: zhfx_err, ztest 
    9597      !!------------------------------------------------------------------- 
    9698      IF( nn_timing == 1 )  CALL timing_start('limthd') 
    9799 
    98       CALL wrk_alloc( jpi, jpj, zqlbsbq ) 
     100      CALL wrk_alloc( jpij, zdq, zq_ini, zhfx, zqfx ) 
    99101    
     102      ! init debug 
     103      zdq(:) = 0._wp ; zq_ini(:) = 0._wp ; zhfx(:) = 0._wp ; zqfx(:) = 0._wp       
     104 
    100105      ! ------------------------------- 
    101106      !- check conservation (C Rousset) 
    102107      IF (ln_limdiahsb) THEN 
    103          zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
     108         zchk_v_i_b = glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) 
    104109         zchk_smv_b = glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) 
    105          zchk_fw_b  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) 
    106          zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) 
     110         zchk_e_i_b = glob_sum( SUM(   e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) 
     111         zchk_fw_b  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) 
     112         zchk_fs_b  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) 
     113         zchk_ft_b  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) 
    107114      ENDIF 
    108115      !- check conservation (C Rousset) 
     
    121128            DO jj = 1, jpj 
    122129               DO ji = 1, jpi 
    123                   !Energy of melting q(S,T) [J.m-3] 
    124                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i ) 
    125130                  !0 if no ice and 1 if yes 
    126131                  zindb = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_i(ji,jj,jl) + epsi10 )  ) 
    127                   !convert units ! very important that this line is here 
    128                   e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac * zindb  
     132                  !Energy of melting q(S,T) [J.m-3] 
     133                  e_i(ji,jj,jk,jl) = zindb * e_i(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_i(ji,jj,jl) , epsi10 ) ) * REAL( nlay_i ) 
     134                  !convert units ! very important that this line is here         
     135                  e_i(ji,jj,jk,jl) = e_i(ji,jj,jk,jl) * unit_fac  
    129136               END DO 
    130137            END DO 
     
    133140            DO jj = 1, jpj 
    134141               DO ji = 1, jpi 
    135                   !Energy of melting q(S,T) [J.m-3] 
    136                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL( nlay_s ) 
    137142                  !0 if no ice and 1 if yes 
    138143                  zindb = 1.0 - MAX(  0.0 , SIGN( 1.0 , - v_s(ji,jj,jl) + epsi10 )  ) 
     144                  !Energy of melting q(S,T) [J.m-3] 
     145                  e_s(ji,jj,jk,jl) = zindb * e_s(ji,jj,jk,jl) / ( area(ji,jj) * MAX( v_s(ji,jj,jl) , epsi10 ) ) * REAL( nlay_s ) 
    139146                  !convert units ! very important that this line is here 
    140                   e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac * zindb  
     147                  e_s(ji,jj,jk,jl) = e_s(ji,jj,jk,jl) * unit_fac  
    141148               END DO 
    142149            END DO 
    143150         END DO 
    144151      END DO 
    145  
    146       !----------------------------------- 
    147       ! 1.4) Compute global heat content 
    148       !----------------------------------- 
    149       qt_i_in  (:,:) = 0.e0 
    150       qt_s_in  (:,:) = 0.e0 
    151       qt_i_fin (:,:) = 0.e0 
    152       qt_s_fin (:,:) = 0.e0 
    153       sum_fluxq(:,:) = 0.e0 
    154       fatm     (:,:) = 0.e0 
    155152 
    156153      ! 2) Partial computation of forcing for the thermodynamic sea ice model.      ! 
     
    161158!CDIR NOVERRCHK 
    162159         DO ji = 1, jpi 
    163             zinda          = tms(ji,jj) * ( 1.0 - MAX( zzero , SIGN( zone , - at_i(ji,jj) + epsi10 ) ) ) 
     160            zinda          = tms(ji,jj) * ( 1.0 - MAX( 0._wp , SIGN( 1._wp , - at_i(ji,jj) + epsi10 ) ) ) ! 0 if no ice 
    164161            ! 
    165162            !           !  solar irradiance transmission at the mixed layer bottom and used in the lead heat budget 
     
    168165            !           !  net downward heat flux from the ice to the ocean, expressed as a function of ocean  
    169166            !           !  temperature and turbulent mixing (McPhee, 1992) 
     167 
    170168            ! friction velocity 
    171169            zfric_u        = MAX ( MIN( SQRT( ust2s(ji,jj) ) , zfric_umax ) , zfric_umin )  
    172170 
    173             ! here the drag will depend on ice thickness and type (0.006) 
    174             fdtcn(ji,jj)  = zinda * rau0 * rcp * 0.006  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) )  
    175             ! also category dependent 
    176             !           !-- Energy from the turbulent oceanic heat flux heat flux coming in the lead  
    177             qdtcn(ji,jj)  = zinda * fdtcn(ji,jj) * ( 1.0 - at_i(ji,jj) ) * rdt_ice 
    178             !                        
    179             !           !-- Lead heat budget, qldif (part 1, next one is in limthd_dh)  
    180             !           !   caution: exponent betas used as more snow can fallinto leads 
    181             qldif(ji,jj) =  tms(ji,jj) * rdt_ice  * (                             & 
    182                &   pfrld(ji,jj)        * (  qsr(ji,jj) * oatte(ji,jj)             &   ! solar heat + clem modif 
    183                &                            + qns(ji,jj)                          &   ! non solar heat 
    184                &                            + fdtcn(ji,jj)                        &   ! turbulent ice-ocean heat 
    185                &                            + fsbbq(ji,jj) * ( 1.0 - zinda )  )   &   ! residual heat from previous step 
    186                & - pfrld(ji,jj)**betas * sprecip(ji,jj) * lfus                    )   ! latent heat of sprecip melting 
     171            !-- Energy from the turbulent oceanic heat flux. here the drag will depend on ice thickness and type (0.006) 
     172            fhtur(ji,jj)  = zinda * rau0 * rcp * 0.006  * zfric_u * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) ! W.m-2  
     173            ! clem: why not the following?  
     174            !fhtur(ji,jj)  = zinda * rau0 * rcp * 0.006  * SQRT( ust2s(ji,jj) ) * ( ( sst_m(ji,jj) + rt0 ) - t_bo(ji,jj) ) 
     175 
     176            !-- Energy received in the lead, zqld is defined everywhere (J.m-2) 
     177            !   It includes turbulent ocean heat flux (only in the leads, the rest is used for bottom melting) 
     178            zqld =  tms(ji,jj) * rdt_ice *                               & 
     179               &  ( pfrld(ji,jj)        * ( qsr(ji,jj) * oatte(ji,jj)           &   ! solar heat + clem modif 
     180               &                          + qns(ji,jj)                          &   ! non solar heat 
     181               &                          + fhtur(ji,jj) )                      &   ! turbulent ice-ocean heat (0 if no ice) 
     182               ! latent heat of precip (note that precip is included in qns but not in qns_ice) 
     183               &    + ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus )  & 
     184               &    + ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt ) ) 
     185 
     186            !-- Energy needed to bring ocean surface layer until its freezing (<0, J.m-2) 
     187            zqfr = tms(ji,jj) * rau0 * rcp * fse3t_m(ji,jj,1) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) 
     188 
     189            !-- Energy Budget of the leads (J.m-2). Must be < 0 to form ice 
     190            qlead(ji,jj) = MIN( 0._wp , zqld - zqfr )  
     191 
     192            ! If there is ice and leads are warming, then transfer energy from the lead budget and use it for bottom melting  
     193            IF( at_i(ji,jj) > epsi10 .AND. zqld > 0._wp ) THEN 
     194               fhld (ji,jj) = zqld * r1_rdtice / at_i(ji,jj) ! divided by a_i since this is (re)multiplied by a_i in limthd_dh.F90 
     195               qlead(ji,jj) = 0._wp 
     196            ENDIF 
    187197            ! 
    188             ! Positive heat budget is used for bottom ablation 
    189             zfntlat        = 1.0 - MAX( zzero , SIGN( zone ,  - qldif(ji,jj) ) ) 
    190             != 1 if positive heat budget 
    191             zpareff        = 1.0 - zinda * zfntlat 
    192             != 0 if ice and positive heat budget and 1 if one of those two is false 
    193             zqlbsbq(ji,jj) = qldif(ji,jj) * ( 1.0 - zpareff ) / ( rdt_ice * MAX( at_i(ji,jj), epsi10 ) ) 
     198            IF( qlead(ji,jj) == 0._wp )  zqld = 0._wp ; zqfr = 0._wp 
    194199            ! 
    195             ! Heat budget of the lead, energy transferred from ice to ocean 
    196             qldif  (ji,jj) = zpareff * qldif(ji,jj) 
    197             qdtcn  (ji,jj) = zpareff * qdtcn(ji,jj) 
    198             ! 
    199             ! Energy needed to bring ocean surface layer until its freezing (qcmif, limflx) 
    200             qcmif  (ji,jj) =  rau0 * rcp * fse3t_m(ji,jj,1) * ( t_bo(ji,jj) - ( sst_m(ji,jj) + rt0 ) ) 
    201             ! 
    202             ! oceanic heat flux (limthd_dh) 
    203             fbif   (ji,jj) = zinda * (  fsbbq(ji,jj) / MAX( at_i(ji,jj) , epsi10 ) + fdtcn(ji,jj) ) 
    204             ! 
     200            ! ----------------------------------------- 
     201            ! Net heat flux on top of ice-ocean [W.m-2] 
     202            ! ----------------------------------------- 
     203            !     First  step here      : heat flux at the ocean surface + precip 
     204            !     Second step below     : heat flux at the ice   surface (after limthd_dif)  
     205            hfx_in(ji,jj) = hfx_in(ji,jj)                                                                                         &  
     206               ! heat flux above the ocean 
     207               &    +             pfrld(ji,jj)   * ( qns(ji,jj) + qsr(ji,jj) )                                                    & 
     208               ! latent heat of precip (note that precip is included in qns but not in qns_ice) 
     209               &    +   ( 1._wp - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus )  & 
     210               &    +   ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt ) 
     211 
     212            ! ----------------------------------------------------------------------------- 
     213            ! Net heat flux that is retroceded to the ocean or taken from the ocean [W.m-2] 
     214            ! ----------------------------------------------------------------------------- 
     215            !     First  step here              :  non solar + precip - qlead - qturb 
     216            !     Second step in limthd_dh      :  heat remaining if total melt (zq_rema)  
     217            !     Third  step in limsbc         :  heat from ice-ocean mass exchange (zf_mass) + solar 
     218            hfx_out(ji,jj) = hfx_out(ji,jj)                                                                                                        &  
     219               ! Non solar heat flux received by the ocean 
     220               &    +        pfrld(ji,jj) * qns(ji,jj)                                                                                             & 
     221               ! latent heat of precip (note that precip is included in qns but not in qns_ice) 
     222               &    +      ( pfrld(ji,jj)**betas - pfrld(ji,jj) ) * sprecip(ji,jj) * ( cpic * ( MIN( tatm_ice(ji,jj), rt0_snow ) - rtt ) - lfus )  & 
     223               &    +      ( 1._wp - pfrld(ji,jj) ) * ( tprecip(ji,jj) - sprecip(ji,jj) ) * rcp * ( tatm_ice(ji,jj) - rtt )                        & 
     224               ! heat flux taken from the ocean where there is open water ice formation 
     225               &    -      qlead(ji,jj) * r1_rdtice                                                                                                & 
     226               ! heat flux taken from the ocean during bottom growth/melt (fhld should be 0 while bott growth) 
     227               &    -      at_i(ji,jj) * fhtur(ji,jj)                                                                                              & 
     228               &    -      at_i(ji,jj) *  fhld(ji,jj) 
     229 
    205230         END DO 
    206231      END DO 
     
    234259               DO jj = mj0(jjindx), mj1(jjindx) 
    235260                  jiindex_1d = (jj - 1) * jpi + ji 
     261                  WRITE(numout,*) ' lim_thd : Category no : ', jl  
    236262               END DO 
    237263            END DO 
     
    271297            CALL tab_2d_1d( nbpb, fr1_i0_1d  (1:nbpb), fr1_i0          , jpi, jpj, npb(1:nbpb) ) 
    272298            CALL tab_2d_1d( nbpb, fr2_i0_1d  (1:nbpb), fr2_i0          , jpi, jpj, npb(1:nbpb) ) 
    273             CALL tab_2d_1d( nbpb, qnsr_ice_1d(1:nbpb), qns_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
    274 #if ! defined key_coupled 
    275             CALL tab_2d_1d( nbpb, qla_ice_1d (1:nbpb), qla_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
    276             CALL tab_2d_1d( nbpb, dqla_ice_1d(1:nbpb), dqla_ice(:,:,jl), jpi, jpj, npb(1:nbpb) ) 
    277 #endif 
     299            CALL tab_2d_1d( nbpb, qns_ice_1d (1:nbpb), qns_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
     300            CALL tab_2d_1d( nbpb, ftr_ice_1d (1:nbpb), ftr_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
     301            IF( .NOT. lk_cpl ) THEN 
     302               CALL tab_2d_1d( nbpb, qla_ice_1d (1:nbpb), qla_ice(:,:,jl) , jpi, jpj, npb(1:nbpb) ) 
     303               CALL tab_2d_1d( nbpb, dqla_ice_1d(1:nbpb), dqla_ice(:,:,jl), jpi, jpj, npb(1:nbpb) ) 
     304            ENDIF 
    278305            CALL tab_2d_1d( nbpb, dqns_ice_1d(1:nbpb), dqns_ice(:,:,jl), jpi, jpj, npb(1:nbpb) ) 
    279306            CALL tab_2d_1d( nbpb, t_bo_b     (1:nbpb), t_bo            , jpi, jpj, npb(1:nbpb) ) 
    280307            CALL tab_2d_1d( nbpb, sprecip_1d (1:nbpb), sprecip         , jpi, jpj, npb(1:nbpb) )  
    281             CALL tab_2d_1d( nbpb, fbif_1d    (1:nbpb), fbif            , jpi, jpj, npb(1:nbpb) ) 
    282             CALL tab_2d_1d( nbpb, qldif_1d   (1:nbpb), qldif           , jpi, jpj, npb(1:nbpb) ) 
    283             CALL tab_2d_1d( nbpb, rdm_ice_1d (1:nbpb), rdm_ice         , jpi, jpj, npb(1:nbpb) ) 
    284             CALL tab_2d_1d( nbpb, rdm_snw_1d (1:nbpb), rdm_snw         , jpi, jpj, npb(1:nbpb) ) 
    285             CALL tab_2d_1d( nbpb, dmgwi_1d   (1:nbpb), dmgwi           , jpi, jpj, npb(1:nbpb) ) 
    286             CALL tab_2d_1d( nbpb, qlbbq_1d   (1:nbpb), zqlbsbq         , jpi, jpj, npb(1:nbpb) ) 
    287  
    288             CALL tab_2d_1d( nbpb, sfx_thd_1d (1:nbpb), sfx_thd         , jpi, jpj, npb(1:nbpb) ) 
     308            CALL tab_2d_1d( nbpb, fhtur_1d   (1:nbpb), fhtur           , jpi, jpj, npb(1:nbpb) ) 
     309            CALL tab_2d_1d( nbpb, qlead_1d   (1:nbpb), qlead           , jpi, jpj, npb(1:nbpb) ) 
     310            CALL tab_2d_1d( nbpb, fhld_1d    (1:nbpb), fhld            , jpi, jpj, npb(1:nbpb) ) 
     311 
     312            CALL tab_2d_1d( nbpb, wfx_snw_1d (1:nbpb), wfx_snw         , jpi, jpj, npb(1:nbpb) ) 
     313            CALL tab_2d_1d( nbpb, wfx_sub_1d (1:nbpb), wfx_sub         , jpi, jpj, npb(1:nbpb) ) 
     314 
     315            CALL tab_2d_1d( nbpb, wfx_bog_1d (1:nbpb), wfx_bog         , jpi, jpj, npb(1:nbpb) ) 
     316            CALL tab_2d_1d( nbpb, wfx_bom_1d (1:nbpb), wfx_bom         , jpi, jpj, npb(1:nbpb) ) 
     317            CALL tab_2d_1d( nbpb, wfx_sum_1d (1:nbpb), wfx_sum         , jpi, jpj, npb(1:nbpb) ) 
     318            CALL tab_2d_1d( nbpb, wfx_sni_1d (1:nbpb), wfx_sni         , jpi, jpj, npb(1:nbpb) ) 
     319 
     320            CALL tab_2d_1d( nbpb, sfx_bog_1d (1:nbpb), sfx_bog         , jpi, jpj, npb(1:nbpb) ) 
     321            CALL tab_2d_1d( nbpb, sfx_bom_1d (1:nbpb), sfx_bom         , jpi, jpj, npb(1:nbpb) ) 
     322            CALL tab_2d_1d( nbpb, sfx_sum_1d (1:nbpb), sfx_sum         , jpi, jpj, npb(1:nbpb) ) 
     323            CALL tab_2d_1d( nbpb, sfx_sni_1d (1:nbpb), sfx_sni         , jpi, jpj, npb(1:nbpb) ) 
    289324            CALL tab_2d_1d( nbpb, sfx_bri_1d (1:nbpb), sfx_bri         , jpi, jpj, npb(1:nbpb) ) 
    290             CALL tab_2d_1d( nbpb, fhbri_1d   (1:nbpb), fhbri           , jpi, jpj, npb(1:nbpb) ) 
    291             CALL tab_2d_1d( nbpb, fstbif_1d  (1:nbpb), fstric          , jpi, jpj, npb(1:nbpb) ) 
    292             CALL tab_2d_1d( nbpb, qfvbq_1d   (1:nbpb), qfvbq           , jpi, jpj, npb(1:nbpb) ) 
    293  
    294             CALL tab_2d_1d( nbpb, iatte_1d   (1:nbpb), iatte           , jpi, jpj, npb(1:nbpb) ) ! clem modif 
    295             CALL tab_2d_1d( nbpb, oatte_1d   (1:nbpb), oatte           , jpi, jpj, npb(1:nbpb) ) ! clem modif 
     325 
     326            CALL tab_2d_1d( nbpb, iatte_1d   (1:nbpb), iatte           , jpi, jpj, npb(1:nbpb) )  
     327            CALL tab_2d_1d( nbpb, oatte_1d   (1:nbpb), oatte           , jpi, jpj, npb(1:nbpb) )  
     328 
     329            CALL tab_2d_1d( nbpb, hfx_thd_1d (1:nbpb), hfx_thd         , jpi, jpj, npb(1:nbpb) ) 
     330            CALL tab_2d_1d( nbpb, hfx_spr_1d (1:nbpb), hfx_spr         , jpi, jpj, npb(1:nbpb) ) 
     331            CALL tab_2d_1d( nbpb, hfx_tot_1d (1:nbpb), hfx_tot         , jpi, jpj, npb(1:nbpb) ) 
     332            CALL tab_2d_1d( nbpb, hfx_snw_1d (1:nbpb), hfx_snw         , jpi, jpj, npb(1:nbpb) ) 
     333            CALL tab_2d_1d( nbpb, hfx_sub_1d (1:nbpb), hfx_sub         , jpi, jpj, npb(1:nbpb) ) 
     334            CALL tab_2d_1d( nbpb, hfx_err_1d (1:nbpb), hfx_err         , jpi, jpj, npb(1:nbpb) ) 
     335            CALL tab_2d_1d( nbpb, hfx_res_1d (1:nbpb), hfx_res         , jpi, jpj, npb(1:nbpb) ) 
     336            CALL tab_2d_1d( nbpb, hfx_err_rem_1d (1:nbpb), hfx_err_rem , jpi, jpj, npb(1:nbpb) ) 
     337 
    296338            !-------------------------------- 
    297339            ! 4.3) Thermodynamic processes 
    298340            !-------------------------------- 
    299  
    300             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_enmelt( 1, nbpb )   ! computes sea ice energy of melting 
    301             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_glohec( qt_i_in, qt_s_in, q_i_layer_in, 1, nbpb, jl ) 
    302  
    303             !                                 !---------------------------------! 
    304             CALL lim_thd_dif( 1, nbpb, jl )   ! Ice/Snow Temperature profile    ! 
    305             !                                 !---------------------------------! 
    306  
    307             CALL lim_thd_enmelt( 1, nbpb )    ! computes sea ice energy of melting compulsory for limthd_dh 
    308  
    309             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_glohec ( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl )  
    310             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_con_dif( 1 , nbpb , jl ) 
    311  
    312             !                                 !---------------------------------! 
    313             CALL lim_thd_dh( 1, nbpb, jl )    ! Ice/Snow thickness              !  
    314             !                                 !---------------------------------! 
    315  
    316             !                                 !---------------------------------! 
    317             CALL lim_thd_ent( 1, nbpb, jl )   ! Ice/Snow enthalpy remapping     ! 
    318             !                                 !---------------------------------! 
    319  
    320             !                                 !---------------------------------! 
    321             CALL lim_thd_sal( 1, nbpb )       ! Ice salinity computation        ! 
    322             !                                 !---------------------------------! 
     341            ! --- diag error on heat diffusion - PART 1 --- ! 
     342            DO ji = 1, nbpb 
     343               zq_ini(ji) = ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
     344                  &           SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )  
     345            END DO 
     346 
     347            !---------------------------------! 
     348            ! Ice/Snow Temperature profile    ! 
     349            !---------------------------------! 
     350            CALL lim_thd_dif( 1, nbpb, jl ) 
     351 
     352            ! --- computes sea ice energy of melting compulsory for limthd_dh --- ! 
     353            CALL lim_thd_enmelt( 1, nbpb ) 
     354 
     355            DO ji = 1, nbpb 
     356              ! --- diag error on heat diffusion - PART 2 --- ! 
     357               zdq(ji)        = - zq_ini(ji) + ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
     358                  &                              SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 
     359               zhfx_err       = ( fc_su(ji) + i0(ji) * qsr_ice_1d(ji) - ftr_ice_1d(ji) - fc_bo_i(ji) + zdq(ji) * r1_rdtice )  
     360               hfx_err_1d(ji) = hfx_err_1d(ji) + zhfx_err * a_i_b(ji) 
     361               ! --- correction of qns_ice and surface conduction flux --- ! 
     362               qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err  
     363               fc_su     (ji) = fc_su     (ji) - zhfx_err  
     364               ! --- Heat flux at the ice surface in W.m-2 --- ! 
     365               ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
     366               hfx_in (ii,ij) = hfx_in (ii,ij) + a_i_b(ji) * ( qsr_ice_1d(ji) + qns_ice_1d(ji) ) 
     367 
     368            END DO 
     369 
     370            !---------------------------------! 
     371            ! Ice/Snow thicnkess              ! 
     372            !---------------------------------! 
     373            ! --- diag error on heat remapping - PART 1 --- ! 
     374            DO ji = 1, nbpb 
     375               zq_ini(ji) = ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) + & 
     376                  &           SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) )  
     377            END DO 
     378 
     379            CALL lim_thd_dh( 1, nbpb, jl )     
     380 
     381            ! --- Ice/Snow enthalpy remapping --- ! 
     382            CALL lim_thd_ent( 1, nbpb, jl )  
     383            !                                 
     384            ! --- diag error on heat remapping - PART 2 --- ! 
     385            DO ji = 1, nbpb 
     386               zdq(ji)        = - ( zq_ini(ji) + dq_i(ji) + dq_s(ji) )   & 
     387                  &             + ( SUM( q_i_b(ji,1:nlay_i) ) * ht_i_b(ji) / REAL( nlay_i ) +  & 
     388                  &                 SUM( q_s_b(ji,1:nlay_s) ) * ht_s_b(ji) / REAL( nlay_s ) ) 
     389               hfx_err_rem_1d(ji) = hfx_err_rem_1d(ji) + zdq(ji) * a_i_b(ji) * r1_rdtice 
     390            END DO 
     391 
     392            !---------------------------------! 
     393            ! Ice salinity                    ! 
     394            !---------------------------------! 
     395            CALL lim_thd_sal( 1, nbpb )     
    323396 
    324397            !           CALL lim_thd_enmelt(1,nbpb)   ! computes sea ice energy of melting 
    325             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_glohec( qt_i_fin, qt_s_fin, q_i_layer_fin, 1, nbpb, jl )  
    326             IF( con_i .AND. jiindex_1d > 0 )   CALL lim_thd_con_dh ( 1 , nbpb , jl ) 
    327  
    328398            !-------------------------------- 
    329399            ! 4.4) Move 1D to 2D vectors 
     
    345415               CALL tab_1d_2d( nbpb, s_i(:,:,jk,jl), npb, s_i_b     (1:nbpb,jk), jpi, jpj) 
    346416            END DO 
    347                CALL tab_1d_2d( nbpb, fstric        , npb, fstbif_1d (1:nbpb)   , jpi, jpj ) 
    348                CALL tab_1d_2d( nbpb, qldif         , npb, qldif_1d  (1:nbpb)   , jpi, jpj ) 
    349                CALL tab_1d_2d( nbpb, qfvbq         , npb, qfvbq_1d  (1:nbpb)   , jpi, jpj ) 
    350                CALL tab_1d_2d( nbpb, rdm_ice       , npb, rdm_ice_1d(1:nbpb)   , jpi, jpj ) 
    351                CALL tab_1d_2d( nbpb, rdm_snw       , npb, rdm_snw_1d(1:nbpb)   , jpi, jpj ) 
    352                CALL tab_1d_2d( nbpb, dmgwi         , npb, dmgwi_1d  (1:nbpb)   , jpi, jpj ) 
    353                CALL tab_1d_2d( nbpb, rdvosif       , npb, dvsbq_1d  (1:nbpb)   , jpi, jpj ) 
    354                CALL tab_1d_2d( nbpb, rdvobif       , npb, dvbbq_1d  (1:nbpb)   , jpi, jpj ) 
    355                CALL tab_1d_2d( nbpb, fdvolif       , npb, dvlbq_1d  (1:nbpb)   , jpi, jpj ) 
    356                CALL tab_1d_2d( nbpb, rdvonif       , npb, dvnbq_1d  (1:nbpb)   , jpi, jpj )  
    357                CALL tab_1d_2d( nbpb, sfx_thd       , npb, sfx_thd_1d(1:nbpb)   , jpi, jpj ) 
     417               CALL tab_1d_2d( nbpb, qlead         , npb, qlead_1d  (1:nbpb)   , jpi, jpj ) 
     418 
     419               CALL tab_1d_2d( nbpb, wfx_snw       , npb, wfx_snw_1d(1:nbpb)   , jpi, jpj ) 
     420               CALL tab_1d_2d( nbpb, wfx_sub       , npb, wfx_sub_1d(1:nbpb)   , jpi, jpj ) 
     421 
     422               CALL tab_1d_2d( nbpb, wfx_bog       , npb, wfx_bog_1d(1:nbpb)   , jpi, jpj ) 
     423               CALL tab_1d_2d( nbpb, wfx_bom       , npb, wfx_bom_1d(1:nbpb)   , jpi, jpj ) 
     424               CALL tab_1d_2d( nbpb, wfx_sum       , npb, wfx_sum_1d(1:nbpb)   , jpi, jpj ) 
     425               CALL tab_1d_2d( nbpb, wfx_sni       , npb, wfx_sni_1d(1:nbpb)   , jpi, jpj ) 
     426 
     427               CALL tab_1d_2d( nbpb, sfx_bog       , npb, sfx_bog_1d(1:nbpb)   , jpi, jpj ) 
     428               CALL tab_1d_2d( nbpb, sfx_bom       , npb, sfx_bom_1d(1:nbpb)   , jpi, jpj ) 
     429               CALL tab_1d_2d( nbpb, sfx_sum       , npb, sfx_sum_1d(1:nbpb)   , jpi, jpj ) 
     430               CALL tab_1d_2d( nbpb, sfx_sni       , npb, sfx_sni_1d(1:nbpb)   , jpi, jpj ) 
    358431            ! 
    359432            IF( num_sal == 2 ) THEN 
    360433               CALL tab_1d_2d( nbpb, sfx_bri       , npb, sfx_bri_1d(1:nbpb)   , jpi, jpj ) 
    361                CALL tab_1d_2d( nbpb, fhbri         , npb, fhbri_1d  (1:nbpb)   , jpi, jpj ) 
    362434            ENDIF 
     435 
     436              CALL tab_1d_2d( nbpb, hfx_thd       , npb, hfx_thd_1d(1:nbpb)   , jpi, jpj ) 
     437              CALL tab_1d_2d( nbpb, hfx_spr       , npb, hfx_spr_1d(1:nbpb)   , jpi, jpj ) 
     438              CALL tab_1d_2d( nbpb, hfx_tot       , npb, hfx_tot_1d(1:nbpb)   , jpi, jpj ) 
     439              CALL tab_1d_2d( nbpb, hfx_snw       , npb, hfx_snw_1d(1:nbpb)   , jpi, jpj ) 
     440              CALL tab_1d_2d( nbpb, hfx_sub       , npb, hfx_sub_1d(1:nbpb)   , jpi, jpj ) 
     441              CALL tab_1d_2d( nbpb, hfx_err       , npb, hfx_err_1d(1:nbpb)   , jpi, jpj ) 
     442              CALL tab_1d_2d( nbpb, hfx_res       , npb, hfx_res_1d(1:nbpb)   , jpi, jpj ) 
     443              CALL tab_1d_2d( nbpb, hfx_err_rem   , npb, hfx_err_rem_1d(1:nbpb)   , jpi, jpj ) 
    363444            ! 
    364445            !+++++       temporary stuff for a dummy version 
    365             CALL tab_1d_2d( nbpb, dh_i_surf2D, npb, dh_i_surf(1:nbpb)      , jpi, jpj ) 
    366             CALL tab_1d_2d( nbpb, dh_i_bott2D, npb, dh_i_bott(1:nbpb)      , jpi, jpj ) 
    367             CALL tab_1d_2d( nbpb, fsup2D     , npb, fsup     (1:nbpb)      , jpi, jpj ) 
    368             CALL tab_1d_2d( nbpb, focea2D    , npb, focea    (1:nbpb)      , jpi, jpj ) 
    369             CALL tab_1d_2d( nbpb, s_i_newice , npb, s_i_new  (1:nbpb)      , jpi, jpj ) 
    370             CALL tab_1d_2d( nbpb, izero(:,:,jl) , npb, i0    (1:nbpb)      , jpi, jpj ) 
    371             CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qnsr_ice_1d(1:nbpb), jpi, jpj) 
     446              CALL tab_1d_2d( nbpb, dh_i_surf2D, npb, dh_i_surf(1:nbpb)      , jpi, jpj ) 
     447              CALL tab_1d_2d( nbpb, dh_i_bott2D, npb, dh_i_bott(1:nbpb)      , jpi, jpj ) 
     448              CALL tab_1d_2d( nbpb, s_i_newice , npb, s_i_new  (1:nbpb)      , jpi, jpj ) 
     449              CALL tab_1d_2d( nbpb, izero(:,:,jl) , npb, i0    (1:nbpb)      , jpi, jpj ) 
    372450            !+++++ 
     451              CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 
     452              CALL tab_1d_2d( nbpb, ftr_ice(:,:,jl), npb, ftr_ice_1d(1:nbpb) , jpi, jpj ) 
    373453            ! 
    374454            IF( lk_mpp )   CALL mpp_comm_free( ncomm_ice ) !RB necessary ?? 
     
    384464      ! 5.1) Ice heat content               
    385465      !------------------------ 
    386       ! Enthalpies are global variables we have to readjust the units (heat content in 10^9 Joules) 
    387       zcoef = 1._wp / ( unit_fac * REAL( nlay_i ) ) 
     466      ! Enthalpies are global variables we have to readjust the units (heat content in Joules) 
    388467      DO jl = 1, jpl 
    389468         DO jk = 1, nlay_i 
    390             e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * area(:,:) * a_i(:,:,jl) * ht_i(:,:,jl) * zcoef 
     469            e_i(:,:,jk,jl) = e_i(:,:,jk,jl) * area(:,:) * a_i(:,:,jl) * ht_i(:,:,jl) / ( unit_fac * REAL( nlay_i ) ) 
    391470         END DO 
    392471      END DO 
     
    395474      ! 5.2) Snow heat content               
    396475      !------------------------ 
    397       ! Enthalpies are global variables we have to readjust the units (heat content in 10^9 Joules) 
    398       zcoef = 1._wp / ( unit_fac * REAL( nlay_s ) ) 
     476      ! Enthalpies are global variables we have to readjust the units (heat content in Joules) 
    399477      DO jl = 1, jpl 
    400478         DO jk = 1, nlay_s 
    401             e_s(:,:,jk,jl) = e_s(:,:,jk,jl) * area(:,:) * a_i(:,:,jl) * ht_s(:,:,jl) * zcoef 
     479            e_s(:,:,jk,jl) = e_s(:,:,jk,jl) * area(:,:) * a_i(:,:,jl) * ht_s(:,:,jl) / ( unit_fac * REAL( nlay_s ) ) 
    402480         END DO 
    403481      END DO 
     
    411489      ! 5.4) Diagnostic thermodynamic growth rates 
    412490      !-------------------------------------------- 
    413 !clem@useless      d_v_i_thd(:,:,:) = v_i      (:,:,:) - old_v_i(:,:,:)    ! ice volumes  
    414 !clem@mv-to-itd    dv_dt_thd(:,:,:) = d_v_i_thd(:,:,:) * r1_rdtice * rday 
    415  
    416       IF( con_i .AND. jiindex_1d > 0 )   fbif(:,:) = fbif(:,:) + zqlbsbq(:,:) 
    417  
    418491      IF(ln_ctl) THEN            ! Control print 
    419492         CALL prt_ctl_info(' ') 
     
    451524      !- check conservation (C Rousset) 
    452525      IF (ln_limdiahsb) THEN 
    453          zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_thd(:,:) + sfx_res(:,:) + sfx_mec(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
    454          zchk_fw  = glob_sum( rdm_ice(:,:) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     526         zchk_fs  = glob_sum( ( sfx_bri(:,:) + sfx_bog(:,:) + sfx_bom(:,:) + sfx_sum(:,:) + sfx_sni(:,:) + sfx_opw(:,:) + sfx_res(:,:) + sfx_dyn(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fs_b 
     527         zchk_fw  = glob_sum( ( wfx_bog(:,:) + wfx_bom(:,:) + wfx_sum(:,:) + wfx_sni(:,:) + wfx_opw(:,:) + wfx_res(:,:) + wfx_dyn(:,:) + wfx_snw(:,:) ) * area(:,:) * tms(:,:) ) - zchk_fw_b 
     528         zchk_ft  = glob_sum( ( hfx_tot(:,:) - hfx_thd(:,:) - hfx_dyn(:,:) - hfx_res(:,:) ) * area(:,:) / unit_fac * tms(:,:) ) - zchk_ft_b 
    455529  
    456          zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b - ( zchk_fw / rhoic ) ) * r1_rdtice 
     530         zchk_v_i = ( glob_sum( SUM(   v_i(:,:,:)*rhoic + v_s(:,:,:)*rhosn, dim=3 ) * area(:,:) * tms(:,:) ) - zchk_v_i_b ) * r1_rdtice - zchk_fw  
    457531         zchk_smv = ( glob_sum( SUM( smv_i(:,:,:), dim=3 ) * area(:,:) * tms(:,:) ) - zchk_smv_b ) * r1_rdtice + ( zchk_fs / rhoic ) 
     532         zchk_e_i =   glob_sum( SUM( e_i(:,:,1:nlay_i,:), dim=3 ) + SUM( e_s(:,:,1:nlay_s,:), dim=3 ) ) * r1_rdtice - zchk_e_i_b * r1_rdtice + zchk_ft 
    458533 
    459534         zchk_vmin = glob_min(v_i) 
     
    462537        
    463538         IF(lwp) THEN 
    464             IF ( ABS( zchk_v_i   ) >  1.e-5 ) WRITE(numout,*) 'violation volume [m3/day]     (limthd) = ',(zchk_v_i * rday) 
     539            IF ( ABS( zchk_v_i   ) >  1.e-4 ) WRITE(numout,*) 'violation volume [kg/day]     (limthd) = ',(zchk_v_i * rday) 
    465540            IF ( ABS( zchk_smv   ) >  1.e-4 ) WRITE(numout,*) 'violation saline [psu*m3/day] (limthd) = ',(zchk_smv * rday) 
     541            IF ( ABS( zchk_e_i   ) >  1.e-2 ) WRITE(numout,*) 'violation enthalpy [1e9 J]    (limthd) = ',(zchk_e_i) 
    466542            IF ( zchk_vmin <  0.            ) WRITE(numout,*) 'violation v_i<0  [mm]         (limthd) = ',(zchk_vmin * 1.e-3) 
    467543            IF ( zchk_amax >  amax+epsi10   ) WRITE(numout,*) 'violation a_i>amax            (limthd) = ',zchk_amax 
     
    472548      ! ------------------------------- 
    473549      ! 
    474       CALL wrk_dealloc( jpi, jpj, zqlbsbq ) 
    475       ! 
     550      CALL wrk_dealloc( jpij, zdq, zq_ini, zhfx, zqfx ) 
     551 
    476552      IF( nn_timing == 1 )  CALL timing_stop('limthd') 
    477553   END SUBROUTINE lim_thd 
    478554 
    479  
    480    SUBROUTINE lim_thd_glohec( eti, ets, etilayer, kideb, kiut, jl ) 
    481       !!----------------------------------------------------------------------- 
    482       !!                   ***  ROUTINE lim_thd_glohec ***  
    483       !!                  
    484       !! ** Purpose :  Compute total heat content for each category 
    485       !!               Works with 1d vectors only 
    486       !!----------------------------------------------------------------------- 
    487       INTEGER , INTENT(in   )                         ::   kideb, kiut   ! bounds for the spatial loop 
    488       INTEGER , INTENT(in   )                         ::   jl            ! category number 
    489       REAL(wp), INTENT(  out), DIMENSION (jpij,jpl  ) ::   eti, ets      ! vertically-summed heat content for ice & snow 
    490       REAL(wp), INTENT(  out), DIMENSION (jpij,jkmax) ::   etilayer      ! heat content for ice layers 
    491       !! 
    492       INTEGER  ::   ji,jk   ! loop indices 
    493       !!----------------------------------------------------------------------- 
    494       eti(:,:) = 0._wp 
    495       ets(:,:) = 0._wp 
    496       ! 
    497       DO jk = 1, nlay_i                ! total q over all layers, ice [J.m-2] 
    498          DO ji = kideb, kiut 
    499             etilayer(ji,jk) = q_i_b(ji,jk) * ht_i_b(ji) / REAL( nlay_i ) 
    500             eti     (ji,jl) = eti(ji,jl) + etilayer(ji,jk)  
    501          END DO 
    502       END DO 
    503       DO ji = kideb, kiut              ! total q over all layers, snow [J.m-2] 
    504          ets(ji,jl) = ets(ji,jl) + q_s_b(ji,1) * ht_s_b(ji) / REAL( nlay_s ) 
    505       END DO 
    506       ! 
    507       WRITE(numout,*) ' lim_thd_glohec ' 
    508       WRITE(numout,*) ' qt_i_in : ', eti(jiindex_1d,jl) * r1_rdtice 
    509       WRITE(numout,*) ' qt_s_in : ', ets(jiindex_1d,jl) * r1_rdtice 
    510       WRITE(numout,*) ' qt_in   : ', ( eti(jiindex_1d,jl) + ets(jiindex_1d,jl) ) * r1_rdtice 
    511       ! 
    512    END SUBROUTINE lim_thd_glohec 
    513  
    514  
    515    SUBROUTINE lim_thd_con_dif( kideb, kiut, jl ) 
    516       !!----------------------------------------------------------------------- 
    517       !!                   ***  ROUTINE lim_thd_con_dif ***  
    518       !!                  
    519       !! ** Purpose :   Test energy conservation after heat diffusion 
    520       !!------------------------------------------------------------------- 
    521       INTEGER , INTENT(in   ) ::   kideb, kiut   ! bounds for the spatial loop 
    522       INTEGER , INTENT(in   ) ::   jl            ! category number 
    523  
    524       INTEGER  ::   ji, jk         ! loop indices 
    525       INTEGER  ::   ii, ij 
    526       INTEGER  ::   numce          ! number of points for which conservation is violated 
    527       REAL(wp) ::   meance         ! mean conservation error 
    528       REAL(wp) ::   max_cons_err, max_surf_err 
    529       !!--------------------------------------------------------------------- 
    530  
    531       max_cons_err =  1.0_wp          ! maximum tolerated conservation error 
    532       max_surf_err =  0.001_wp        ! maximum tolerated surface error 
    533  
    534       !-------------------------- 
    535       ! Increment of energy 
    536       !-------------------------- 
    537       ! global 
    538       DO ji = kideb, kiut 
    539          dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl) + qt_s_fin(ji,jl) - qt_s_in(ji,jl) 
    540       END DO 
    541       ! layer by layer 
    542       dq_i_layer(:,:) = q_i_layer_fin(:,:) - q_i_layer_in(:,:) 
    543  
    544       !---------------------------------------- 
    545       ! Atmospheric heat flux, ice heat budget 
    546       !---------------------------------------- 
    547       DO ji = kideb, kiut 
    548          ii = MOD( npb(ji) - 1 , jpi ) + 1 
    549          ij =    ( npb(ji) - 1 ) / jpi + 1 
    550          fatm     (ji,jl) = qnsr_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) 
    551          sum_fluxq(ji,jl) = fc_su(ji) - fc_bo_i(ji) + qsr_ice_1d(ji) * i0(ji) - fstroc(ii,ij,jl) 
    552       END DO 
    553  
    554       !-------------------- 
    555       ! Conservation error 
    556       !-------------------- 
    557       DO ji = kideb, kiut 
    558          cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 
    559       END DO 
    560  
    561       numce  = 0 
    562       meance = 0._wp 
    563       DO ji = kideb, kiut 
    564          IF ( cons_error(ji,jl) .GT. max_cons_err ) THEN 
    565             numce = numce + 1 
    566             meance = meance + cons_error(ji,jl) 
    567          ENDIF 
    568       END DO 
    569       IF( numce > 0 )   meance = meance / numce 
    570  
    571       WRITE(numout,*) ' Maximum tolerated conservation error : ', max_cons_err 
    572       WRITE(numout,*) ' After lim_thd_dif, category : ', jl 
    573       WRITE(numout,*) ' Mean conservation error on big error points ', meance, numit 
    574       WRITE(numout,*) ' Number of points where there is a cons err gt than c.e. : ', numce, numit 
    575  
    576       !------------------------------------------------------- 
    577       ! Surface error due to imbalance between Fatm and Fcsu 
    578       !------------------------------------------------------- 
    579       numce  = 0 
    580       meance = 0._wp 
    581  
    582       DO ji = kideb, kiut 
    583          surf_error(ji,jl) = ABS ( fatm(ji,jl) - fc_su(ji) ) 
    584          IF( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. max_surf_err ) ) THEN 
    585             numce = numce + 1  
    586             meance = meance + surf_error(ji,jl) 
    587          ENDIF 
    588       ENDDO 
    589       IF( numce > 0 )   meance = meance / numce 
    590  
    591       WRITE(numout,*) ' Maximum tolerated surface error : ', max_surf_err 
    592       WRITE(numout,*) ' After lim_thd_dif, category : ', jl 
    593       WRITE(numout,*) ' Mean surface error on big error points ', meance, numit 
    594       WRITE(numout,*) ' Number of points where there is a surf err gt than surf_err : ', numce, numit 
    595  
    596       WRITE(numout,*) ' fc_su      : ', fc_su(jiindex_1d) 
    597       WRITE(numout,*) ' fatm       : ', fatm(jiindex_1d,jl) 
    598       WRITE(numout,*) ' t_su       : ', t_su_b(jiindex_1d) 
    599  
    600       !--------------------------------------- 
    601       ! Write ice state in case of big errors 
    602       !--------------------------------------- 
    603       DO ji = kideb, kiut 
    604          IF ( ( ( t_su_b(ji) .LT. rtt ) .AND. ( surf_error(ji,jl) .GT. max_surf_err ) ) .OR. & 
    605             ( cons_error(ji,jl) .GT. max_cons_err  ) ) THEN 
    606             ii                 = MOD( npb(ji) - 1, jpi ) + 1 
    607             ij                 = ( npb(ji) - 1 ) / jpi + 1 
    608             ! 
    609             WRITE(numout,*) ' alerte 1     ' 
    610             WRITE(numout,*) ' Untolerated conservation / surface error after ' 
    611             WRITE(numout,*) ' heat diffusion in the ice ' 
    612             WRITE(numout,*) ' Category   : ', jl 
    613             WRITE(numout,*) ' ii , ij  : ', ii, ij 
    614             WRITE(numout,*) ' lat, lon   : ', gphit(ii,ij), glamt(ii,ij) 
    615             WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
    616             WRITE(numout,*) ' surf_error : ', surf_error(ji,jl) 
    617             WRITE(numout,*) ' dq_i       : ', - dq_i(ji,jl) * r1_rdtice 
    618             WRITE(numout,*) ' Fdt        : ', sum_fluxq(ji,jl) 
    619             WRITE(numout,*) 
    620             !        WRITE(numout,*) ' qt_i_in   : ', qt_i_in(ji,jl) 
    621             !        WRITE(numout,*) ' qt_s_in   : ', qt_s_in(ji,jl) 
    622             !        WRITE(numout,*) ' qt_i_fin  : ', qt_i_fin(ji,jl) 
    623             !        WRITE(numout,*) ' qt_s_fin  : ', qt_s_fin(ji,jl) 
    624             !        WRITE(numout,*) ' qt        : ', qt_i_fin(ji,jl) + qt_s_fin(ji,jl) 
    625             WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
    626             WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
    627             WRITE(numout,*) ' t_su       : ', t_su_b(ji) 
    628             WRITE(numout,*) ' t_s        : ', t_s_b(ji,1) 
    629             WRITE(numout,*) ' t_i        : ', t_i_b(ji,1:nlay_i) 
    630             WRITE(numout,*) ' t_bo       : ', t_bo_b(ji) 
    631             WRITE(numout,*) ' q_i        : ', q_i_b(ji,1:nlay_i) 
    632             WRITE(numout,*) ' s_i        : ', s_i_b(ji,1:nlay_i) 
    633             WRITE(numout,*) ' tmelts     : ', rtt - tmut*s_i_b(ji,1:nlay_i) 
    634             WRITE(numout,*) 
    635             WRITE(numout,*) ' Fluxes ' 
    636             WRITE(numout,*) ' ~~~~~~ ' 
    637             WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
    638             WRITE(numout,*) ' fc_su      : ', fc_su    (ji) 
    639             WRITE(numout,*) ' fstr_inice : ', qsr_ice_1d(ji)*i0(ji) 
    640             WRITE(numout,*) ' fc_bo      : ', - fc_bo_i  (ji) 
    641             WRITE(numout,*) ' foc        : ', fbif_1d(ji) 
    642             WRITE(numout,*) ' fstroc     : ', fstroc   (ii,ij,jl) 
    643             WRITE(numout,*) ' i0         : ', i0(ji) 
    644             WRITE(numout,*) ' qsr_ice    : ', (1.0-i0(ji))*qsr_ice_1d(ji) 
    645             WRITE(numout,*) ' qns_ice    : ', qnsr_ice_1d(ji) 
    646             WRITE(numout,*) ' Conduction fluxes : ' 
    647             WRITE(numout,*) ' fc_s      : ', fc_s(ji,0:nlay_s) 
    648             WRITE(numout,*) ' fc_i      : ', fc_i(ji,0:nlay_i) 
    649             WRITE(numout,*) 
    650             WRITE(numout,*) ' Layer by layer ... ' 
    651             WRITE(numout,*) ' dq_snow : ', ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) * r1_rdtice 
    652             WRITE(numout,*) ' dfc_snow  : ', fc_s(ji,1) - fc_s(ji,0) 
    653             DO jk = 1, nlay_i 
    654                WRITE(numout,*) ' layer  : ', jk 
    655                WRITE(numout,*) ' dq_ice : ', dq_i_layer(ji,jk) * r1_rdtice   
    656                WRITE(numout,*) ' radab  : ', radab(ji,jk) 
    657                WRITE(numout,*) ' dfc_i  : ', fc_i(ji,jk) - fc_i(ji,jk-1) 
    658                WRITE(numout,*) ' tot f  : ', fc_i(ji,jk) - fc_i(ji,jk-1) - radab(ji,jk) 
    659             END DO 
    660  
    661          ENDIF 
    662          ! 
    663       END DO 
    664       ! 
    665    END SUBROUTINE lim_thd_con_dif 
    666  
    667  
    668    SUBROUTINE lim_thd_con_dh( kideb, kiut, jl ) 
    669       !!----------------------------------------------------------------------- 
    670       !!                   ***  ROUTINE lim_thd_con_dh  ***  
    671       !!                  
    672       !! ** Purpose :   Test energy conservation after enthalpy redistr. 
    673       !!----------------------------------------------------------------------- 
    674       INTEGER, INTENT(in) ::   kideb, kiut   ! bounds for the spatial loop 
    675       INTEGER, INTENT(in) ::   jl            ! category number 
    676       ! 
    677       INTEGER  ::   ji                ! loop indices 
    678       INTEGER  ::   ii, ij, numce         ! local integers 
    679       REAL(wp) ::   meance, max_cons_err    !local scalar 
    680       !!--------------------------------------------------------------------- 
    681  
    682       max_cons_err = 1._wp 
    683  
    684       !-------------------------- 
    685       ! Increment of energy 
    686       !-------------------------- 
    687       DO ji = kideb, kiut 
    688          dq_i(ji,jl) = qt_i_fin(ji,jl) - qt_i_in(ji,jl) + qt_s_fin(ji,jl) - qt_s_in(ji,jl)   ! global 
    689       END DO 
    690       dq_i_layer(:,:)    = q_i_layer_fin(:,:) - q_i_layer_in(:,:)                            ! layer by layer 
    691  
    692       !---------------------------------------- 
    693       ! Atmospheric heat flux, ice heat budget 
    694       !---------------------------------------- 
    695       DO ji = kideb, kiut 
    696          ii = MOD( npb(ji) - 1 , jpi ) + 1 
    697          ij =    ( npb(ji) - 1 ) / jpi + 1 
    698  
    699          fatm      (ji,jl) = qnsr_ice_1d(ji) + qsr_ice_1d(ji)                       ! total heat flux 
    700          sum_fluxq (ji,jl) = fatm(ji,jl) + fbif_1d(ji) - ftotal_fin(ji) - fstroc(ii,ij,jl)  
    701          cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 
    702       END DO 
    703  
    704       !-------------------- 
    705       ! Conservation error 
    706       !-------------------- 
    707       DO ji = kideb, kiut 
    708          cons_error(ji,jl) = ABS( dq_i(ji,jl) * r1_rdtice + sum_fluxq(ji,jl) ) 
    709       END DO 
    710  
    711       numce = 0 
    712       meance = 0._wp 
    713       DO ji = kideb, kiut 
    714          IF( cons_error(ji,jl) .GT. max_cons_err ) THEN 
    715             numce = numce + 1 
    716             meance = meance + cons_error(ji,jl) 
    717          ENDIF 
    718       ENDDO 
    719       IF(numce > 0 ) meance = meance / numce 
    720  
    721       WRITE(numout,*) ' Error report - Category : ', jl 
    722       WRITE(numout,*) ' ~~~~~~~~~~~~ ' 
    723       WRITE(numout,*) ' Maximum tolerated conservation error : ', max_cons_err 
    724       WRITE(numout,*) ' After lim_thd_ent, category : ', jl 
    725       WRITE(numout,*) ' Mean conservation error on big error points ', meance, numit 
    726       WRITE(numout,*) ' Number of points where there is a cons err gt than 0.1 W/m2 : ', numce, numit 
    727  
    728       !--------------------------------------- 
    729       ! Write ice state in case of big errors 
    730       !--------------------------------------- 
    731       DO ji = kideb, kiut 
    732          IF ( cons_error(ji,jl) .GT. max_cons_err  ) THEN 
    733             ii = MOD( npb(ji) - 1, jpi ) + 1 
    734             ij =    ( npb(ji) - 1 ) / jpi + 1 
    735             ! 
    736             WRITE(numout,*) ' alerte 1 - category : ', jl 
    737             WRITE(numout,*) ' Untolerated conservation error after limthd_ent ' 
    738             WRITE(numout,*) ' ii , ij  : ', ii, ij 
    739             WRITE(numout,*) ' lat, lon   : ', gphit(ii,ij), glamt(ii,ij) 
    740             WRITE(numout,*) ' * ' 
    741             WRITE(numout,*) ' Ftotal     : ', sum_fluxq(ji,jl) 
    742             WRITE(numout,*) ' dq_t       : ', - dq_i(ji,jl) * r1_rdtice 
    743             WRITE(numout,*) ' dq_i       : ', - ( qt_i_fin(ji,jl) - qt_i_in(ji,jl) ) * r1_rdtice 
    744             WRITE(numout,*) ' dq_s       : ', - ( qt_s_fin(ji,jl) - qt_s_in(ji,jl) ) * r1_rdtice 
    745             WRITE(numout,*) ' cons_error : ', cons_error(ji,jl) 
    746             WRITE(numout,*) ' * ' 
    747             WRITE(numout,*) ' Fluxes        --- : ' 
    748             WRITE(numout,*) ' fatm       : ', fatm(ji,jl) 
    749             WRITE(numout,*) ' foce       : ', fbif_1d(ji) 
    750             WRITE(numout,*) ' fres       : ', ftotal_fin(ji) 
    751             WRITE(numout,*) ' fhbri      : ', fhbricat(ii,ij,jl) 
    752             WRITE(numout,*) ' * ' 
    753             WRITE(numout,*) ' Heat contents --- : ' 
    754             WRITE(numout,*) ' qt_s_in    : ', qt_s_in(ji,jl) * r1_rdtice 
    755             WRITE(numout,*) ' qt_i_in    : ', qt_i_in(ji,jl) * r1_rdtice 
    756             WRITE(numout,*) ' qt_in      : ', ( qt_i_in(ji,jl) + qt_s_in(ji,jl) ) * r1_rdtice 
    757             WRITE(numout,*) ' qt_s_fin   : ', qt_s_fin(ji,jl) * r1_rdtice 
    758             WRITE(numout,*) ' qt_i_fin   : ', qt_i_fin(ji,jl) * r1_rdtice 
    759             WRITE(numout,*) ' qt_fin     : ', ( qt_i_fin(ji,jl) + qt_s_fin(ji,jl) ) * r1_rdtice 
    760             WRITE(numout,*) ' * ' 
    761             WRITE(numout,*) ' Ice variables --- : ' 
    762             WRITE(numout,*) ' ht_i       : ', ht_i_b(ji) 
    763             WRITE(numout,*) ' ht_s       : ', ht_s_b(ji) 
    764             WRITE(numout,*) ' dh_s_tot  : ', dh_s_tot(ji) 
    765             WRITE(numout,*) ' dh_snowice: ', dh_snowice(ji) 
    766             WRITE(numout,*) ' dh_i_surf : ', dh_i_surf(ji) 
    767             WRITE(numout,*) ' dh_i_bott : ', dh_i_bott(ji) 
    768          ENDIF 
    769          ! 
    770       END DO 
    771       ! 
    772    END SUBROUTINE lim_thd_con_dh 
    773  
    774  
     555  
    775556   SUBROUTINE lim_thd_enmelt( kideb, kiut ) 
    776557      !!----------------------------------------------------------------------- 
     
    859640         WRITE(numout,*)'      maximal err. on T for heat diffusion computation        maxer_i_thd  = ', maxer_i_thd 
    860641         WRITE(numout,*)'      switch for comp. of thermal conductivity in the ice     thcon_i_swi  = ', thcon_i_swi 
     642         WRITE(numout,*)'      check heat conservation in the ice/snow                 con_i        = ', con_i 
    861643      ENDIF 
    862644      ! 
  • branches/2013/dev_r4028_CNRS_LIM3/NEMOGCM/NEMO/LIM_SRC_3/limthd_dh.F90

    r4332 r4634  
    66   !! History :  LIM  ! 2003-05 (M. Vancoppenolle) Original code in 1D 
    77   !!                 ! 2005-06 (M. Vancoppenolle) 3D version  
    8    !!            3.2  ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in rdm_snw & rdm_ice 
     8   !!            3.2  ! 2009-07 (M. Vancoppenolle, Y. Aksenov, G. Madec) bug correction in wfx_snw & wfx_ice 
    99   !!            3.4  ! 2011-02 (G. Madec) dynamical allocation 
    1010   !!            3.5  ! 2012-10 (G. Madec & co) salt flux + bug fixes  
     
    2626   USE wrk_nemo       ! work arrays 
    2727   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)   
    28  
     28   USE cpl_oasis3, ONLY : lk_cpl 
     29    
    2930   IMPLICIT NONE 
    3031   PRIVATE 
     
    3435   REAL(wp) ::   epsi20 = 1.e-20   ! constant values 
    3536   REAL(wp) ::   epsi10 = 1.e-10   ! 
    36    REAL(wp) ::   epsi13 = 1.e-13   ! 
    37    REAL(wp) ::   zzero  = 0._wp    ! 
    38    REAL(wp) ::   zone   = 1._wp    ! 
    3937 
    4038   !!---------------------------------------------------------------------- 
     
    7472      INTEGER  ::   ji , jk        ! dummy loop indices 
    7573      INTEGER  ::   ii, ij         ! 2D corresponding indices to ji 
    76       INTEGER  ::   isnow          ! switch for presence (1) or absence (0) of snow 
    77       INTEGER  ::   isnowic        ! snow ice formation not 
    7874      INTEGER  ::   i_ice_switch   ! ice thickness above a certain treshold or not 
    7975      INTEGER  ::   iter 
    8076 
    81       REAL(wp) ::   zzfmass_i, zihgnew                     ! local scalar 
    82       REAL(wp) ::   zzfmass_s, zhsnew, ztmelts             ! local scalar 
    83       REAL(wp) ::   zhn, zdhcf, zdhbf, zhni, zhnfi, zihg   ! 
    84       REAL(wp) ::   zdhnm, zhnnew, zhisn, zihic, zzc       ! 
     77      REAL(wp) ::   ztmelts             ! local scalar 
     78      REAL(wp) ::   zdh, zfdum  ! 
    8579      REAL(wp) ::   zfracs       ! fractionation coefficient for bottom salt entrapment 
    8680      REAL(wp) ::   zcoeff       ! dummy argument for snowfall partitioning over ice and leads 
    87       REAL(wp) ::   zsm_snowice  ! snow-ice salinity 
     81      REAL(wp) ::   zs_snic  ! snow-ice salinity 
    8882      REAL(wp) ::   zswi1        ! switch for computation of bottom salinity 
    8983      REAL(wp) ::   zswi12       ! switch for computation of bottom salinity 
    9084      REAL(wp) ::   zswi2        ! switch for computation of bottom salinity 
    9185      REAL(wp) ::   zgrr         ! bottom growth rate 
    92       REAL(wp) ::   ztform       ! bottom formation temperature 
    93       ! 
    94       REAL(wp), POINTER, DIMENSION(:) ::   zh_i        ! ice layer thickness 
     86      REAL(wp) ::   zt_i_new     ! bottom formation temperature 
     87 
     88      REAL(wp) ::   zQm          ! enthalpy exchanged with the ocean (J/m2), >0 towards the ocean 
     89      REAL(wp) ::   zEi          ! specific enthalpy of sea ice (J/kg) 
     90      REAL(wp) ::   zEw          ! specific enthalpy of exchanged water (J/kg) 
     91      REAL(wp) ::   zdE          ! specific enthalpy difference (J/kg) 
     92      REAL(wp) ::   zfmdt        ! exchange mass flux x time step (J/m2), >0 towards the ocean 
     93      REAL(wp) ::   zsstK        ! SST in Kelvin 
     94 
    9595      REAL(wp), POINTER, DIMENSION(:) ::   zh_s        ! snow layer thickness 
    96       REAL(wp), POINTER, DIMENSION(:) ::   ztfs        ! melting point 
    97       REAL(wp), POINTER, DIMENSION(:) ::   zhsold      ! old snow thickness 
    98       REAL(wp), POINTER, DIMENSION(:) ::   zqprec      ! energy of fallen snow 
    99       REAL(wp), POINTER, DIMENSION(:) ::   zqfont_su   ! incoming, remaining surface energy 
    100       REAL(wp), POINTER, DIMENSION(:) ::   zqfont_bo   ! incoming, bottom energy 
    101       REAL(wp), POINTER, DIMENSION(:) ::   z_f_surf    ! surface heat for ablation 
    102       REAL(wp), POINTER, DIMENSION(:) ::   zhgnew      ! new ice thickness 
    103       REAL(wp), POINTER, DIMENSION(:) ::   zfmass_i    !  
     96      REAL(wp), POINTER, DIMENSION(:) ::   zqprec      ! energy of fallen snow                       (J.m-3) 
     97      REAL(wp), POINTER, DIMENSION(:) ::   zq_su       ! heat for surface ablation                   (J.m-2) 
     98      REAL(wp), POINTER, DIMENSION(:) ::   zq_bo       ! heat for bottom ablation                    (J.m-2) 
     99      REAL(wp), POINTER, DIMENSION(:) ::   zq_1cat     ! corrected heat in case 1-cat and hmelt>15cm (J.m-2) 
     100      REAL(wp), POINTER, DIMENSION(:) ::   zq_rema     ! remaining heat at the end of the routine    (J.m-2) 
     101      REAL(wp), POINTER, DIMENSION(:) ::   zf_tt     ! Heat budget to determine melting or freezing(W.m-2) 
     102      INTEGER , POINTER, DIMENSION(:) ::   icount      ! number of layers vanished by melting  
    104103 
    105104      REAL(wp), POINTER, DIMENSION(:) ::   zdh_s_mel   ! snow melt  
     
    108107 
    109108      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 
     109      REAL(wp), POINTER, DIMENSION(:,:) ::   zh_i      ! ice layer thickness 
     110 
     111      REAL(wp), POINTER, DIMENSION(:) ::   zqh_i       ! total ice heat content  (J.m-2) 
     112      REAL(wp), POINTER, DIMENSION(:) ::   zqh_s       ! total snow heat content (J.m-2) 
     113      REAL(wp), POINTER, DIMENSION(:) ::   zq_s        ! total snow enthalpy     (J.m-3) 
    119114 
    120115      ! mass and salt flux (clem) 
    121       REAL(wp) :: zdvres, zdvsur, zdvbot 
    122       REAL(wp), POINTER, DIMENSION(:) ::   zviold, zvsold   ! old ice volume... 
     116      REAL(wp) :: zdvres, zswitch_sal 
    123117 
    124118      ! Heat conservation  
    125       INTEGER  ::   num_iter_max, numce_dh 
    126       REAL(wp) ::   meance_dh 
    127       REAL(wp) ::   zinda  
    128       REAL(wp), POINTER, DIMENSION(:) ::   zinnermelt 
    129       REAL(wp), POINTER, DIMENSION(:) ::   zfbase, zdq_i 
     119      INTEGER  ::   num_iter_max 
     120      REAL(wp) ::   zinda, zindq, zindh  
     121      REAL(wp), POINTER, DIMENSION(:) ::   zintermelt   ! debug 
     122 
    130123      !!------------------------------------------------------------------ 
    131124 
    132       CALL wrk_alloc( jpij, zh_i, zh_s, ztfs, zhsold, zqprec, zqfont_su, zqfont_bo, z_f_surf, zhgnew, zfmass_i ) 
    133       CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zfdt_init, zfdt_final, zqt_i, zqt_s, zqt_dummy ) 
    134       CALL wrk_alloc( jpij, zinnermelt, zfbase, zdq_i ) 
    135       CALL wrk_alloc( jpij, jkmax, zdeltah, zqt_i_lay ) 
    136  
    137       CALL wrk_alloc( jpij, zviold, zvsold ) ! clem 
     125      ! Discriminate between varying salinity (num_sal=2) and prescribed cases (other values) 
     126      SELECT CASE( num_sal )                       ! varying salinity or not 
     127         CASE( 1, 3, 4 ) ;   zswitch_sal = 0       ! prescribed salinity profile 
     128         CASE( 2 )       ;   zswitch_sal = 1       ! varying salinity profile 
     129      END SELECT 
     130 
     131      CALL wrk_alloc( jpij, zh_s, zqprec, zq_su, zq_bo, zf_tt, zq_1cat, zq_rema ) 
     132      CALL wrk_alloc( jpij, zdh_s_mel, zdh_s_pre, zdh_s_sub, zqh_i, zqh_s, zq_s ) 
     133      CALL wrk_alloc( jpij, zintermelt ) 
     134      CALL wrk_alloc( jpij, jkmax, zdeltah, zh_i ) 
     135      CALL wrk_alloc( jpij, icount ) 
    138136       
    139       ftotal_fin(:) = 0._wp 
    140       zfdt_init (:) = 0._wp 
    141       zfdt_final(:) = 0._wp 
    142  
    143       dh_i_surf (:) = 0._wp 
    144       dh_i_bott (:) = 0._wp 
    145       dh_snowice(:) = 0._wp 
    146  
    147       DO ji = kideb, kiut 
    148          old_ht_i_b(ji) = ht_i_b(ji) 
    149          old_ht_s_b(ji) = ht_s_b(ji) 
    150          zviold(ji) = a_i_b(ji) * ht_i_b(ji) ! clem 
    151          zvsold(ji) = a_i_b(ji) * ht_s_b(ji) ! clem 
    152       END DO 
     137      dh_i_surf  (:) = 0._wp ; dh_i_bott  (:) = 0._wp ; dh_snowice(:) = 0._wp 
     138      dsm_i_se_1d(:) = 0._wp ; dsm_i_si_1d(:) = 0._wp    
     139  
     140      zqprec (:) = 0._wp ; zq_su  (:) = 0._wp ; zq_bo  (:) = 0._wp ; zf_tt  (:) = 0._wp 
     141      zq_1cat(:) = 0._wp ; zq_rema(:) = 0._wp 
     142 
     143      zh_s     (:) = 0._wp        
     144      zdh_s_pre(:) = 0._wp 
     145      zdh_s_mel(:) = 0._wp 
     146      zdh_s_sub(:) = 0._wp 
     147      zqh_s    (:) = 0._wp       
     148      zqh_i    (:) = 0._wp    
     149 
     150      zh_i      (:,:) = 0._wp        
     151      zdeltah   (:,:) = 0._wp        
     152      zintermelt(:)   = 0._wp 
     153      icount    (:)   = 0 
     154 
     155      ! debug 
     156      dq_i(:) = 0._wp 
     157      dq_s(:) = 0._wp 
     158 
     159      ! initialize layer thicknesses and enthalpies 
     160      h_i_old (:,0:nlay_i+1) = 0._wp 
     161      qh_i_old(:,0:nlay_i+1) = 0._wp 
     162      DO jk = 1, nlay_i 
     163         DO ji = kideb, kiut 
     164            h_i_old (ji,jk) = ht_i_b(ji) / REAL( nlay_i ) 
     165            qh_i_old(ji,jk) = q_i_b(ji,jk) * h_i_old(ji,jk) 
     166         ENDDO 
     167      ENDDO 
    153168      ! 
    154169      !------------------------------------------------------------------------------! 
    155       !  1) Calculate available heat for surface ablation                            ! 
     170      !  1) Calculate available heat for surface and bottom ablation                 ! 
    156171      !------------------------------------------------------------------------------! 
    157172      ! 
    158173      DO ji = kideb, kiut 
    159          isnow         = INT(  1.0 - MAX(  0.0 , SIGN( 1.0 , - ht_s_b(ji) )  )  ) 
    160          ztfs     (ji) = isnow * rtt + ( 1.0 - isnow ) * rtt 
    161          z_f_surf (ji) = qnsr_ice_1d(ji) + ( 1.0 - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji) 
    162          z_f_surf (ji) = MAX(  zzero , z_f_surf(ji)  ) * MAX(  zzero , SIGN( zone , t_su_b(ji) - ztfs(ji) )  ) 
    163          zfdt_init(ji) = ( z_f_surf(ji) + MAX( fbif_1d(ji) + qlbbq_1d(ji) + fc_bo_i(ji),0.0 ) ) * rdt_ice 
     174         zinda         = 1._wp - MAX(  0._wp , SIGN( 1._wp , - ht_s_b(ji) ) ) 
     175         ztmelts       = zinda * rtt + ( 1._wp - zinda ) * rtt 
     176 
     177         zfdum     = qns_ice_1d(ji) + ( 1._wp - i0(ji) ) * qsr_ice_1d(ji) - fc_su(ji)  
     178         zf_tt(ji) = fc_bo_i(ji) + fhtur_1d(ji) + fhld_1d(ji)  
     179 
     180         zq_su (ji) = MAX( 0._wp, zfdum     * rdt_ice ) * MAX( 0._wp , SIGN( 1._wp, t_su_b(ji) - ztmelts ) ) 
     181         zq_bo (ji) = MAX( 0._wp, zf_tt(ji) * rdt_ice ) 
    164182      END DO ! ji 
    165183 
    166       zqfont_su  (:) = 0._wp 
    167       zqfont_bo  (:) = 0._wp 
    168       dsm_i_se_1d(:) = 0._wp      
    169       dsm_i_si_1d(:) = 0._wp    
    170184      ! 
    171185      !------------------------------------------------------------------------------! 
    172       !  2) Computing layer thicknesses and  snow and sea-ice enthalpies.            ! 
     186      ! If snow temperature is above freezing point, then snow melts  
     187      ! (should not happen but sometimes it does) 
    173188      !------------------------------------------------------------------------------! 
    174       ! 
    175       DO ji = kideb, kiut     ! Layer thickness 
    176          zh_i(ji) = ht_i_b(ji) / REAL( nlay_i ) 
     189      DO ji = kideb, kiut 
     190         IF( t_s_b(ji,1) > rtt ) THEN !!! Internal melting 
     191            ! Contribution to heat flux to the ocean [W.m-2], < 0   
     192            hfx_res_1d(ji) = hfx_res_1d(ji) + q_s_b(ji,1) * ht_s_b(ji) * a_i_b(ji) * r1_rdtice 
     193            ! Contribution to mass flux 
     194            wfx_snw_1d(ji) =  wfx_snw_1d(ji) - rhosn * ht_s_b(ji) * a_i_b(ji) * r1_rdtice 
     195            ! updates 
     196            ht_s_b(ji)   = 0._wp 
     197            q_s_b (ji,1) = 0._wp 
     198            t_s_b (ji,1) = rtt 
     199         END IF 
     200      END DO 
     201 
     202      !------------------------------------------------------------! 
     203      !  2) Computing layer thicknesses and enthalpies.            ! 
     204      !------------------------------------------------------------! 
     205      ! 
     206      DO ji = kideb, kiut      
    177207         zh_s(ji) = ht_s_b(ji) / REAL( nlay_s ) 
    178208      END DO 
    179209      ! 
    180       zqt_s(:) = 0._wp        ! Total enthalpy of the snow 
    181210      DO jk = 1, nlay_s 
    182211         DO ji = kideb, kiut 
    183             zqt_s(ji) =  zqt_s(ji) + q_s_b(ji,jk) * ht_s_b(ji) / REAL( nlay_s ) 
     212            zqh_s(ji) =  zqh_s(ji) + q_s_b(ji,jk) * zh_s(ji) 
    184213         END DO 
    185214      END DO 
    186215      ! 
    187       zqt_i(:) = 0._wp        ! Total enthalpy of the ice 
    188216      DO jk = 1, nlay_i 
    189217         DO ji = kideb, kiut 
    190             zzc = q_i_b(ji,jk) * ht_i_b(ji) / REAL( nlay_i ) 
    191             zqt_i(ji)        =  zqt_i(ji) + zzc 
    192             zqt_i_lay(ji,jk) =              zzc 
     218            zh_i(ji,jk) = ht_i_b(ji) / REAL( nlay_i ) 
     219            zqh_i(ji)   = zqh_i(ji) + q_i_b(ji,jk) * zh_i(ji,jk) 
    193220         END DO 
    194221      END DO 
     
    212239      ! Martin Vancoppenolle, December 2006 
    213240 
    214       ! Snow fall 
    215       DO ji = kideb, kiut 
    216          zcoeff = ( 1.0 - ( 1.0 - at_i_b(ji) )**betas ) / at_i_b(ji)  
     241      DO ji = kideb, kiut 
     242         !----------- 
     243         ! Snow fall 
     244         !----------- 
     245         ! thickness change 
     246         zcoeff = ( 1._wp - ( 1._wp - at_i_b(ji) )**betas ) / at_i_b(ji)  
    217247         zdh_s_pre(ji) = zcoeff * sprecip_1d(ji) * rdt_ice / rhosn 
    218       END DO 
    219       zdh_s_mel(:) =  0._wp 
    220  
    221       ! Melt of fallen snow 
    222       DO ji = kideb, kiut 
    223          ! tatm_ice is now in K 
    224          zqprec   (ji)   =  rhosn * ( cpic * ( rtt - tatm_ice_1d(ji) ) + lfus )   
    225          zqfont_su(ji)   =  z_f_surf(ji) * rdt_ice 
    226          zdeltah  (ji,1) =  MIN( 0.e0 , - zqfont_su(ji) / MAX( zqprec(ji) , epsi13 ) ) 
    227          zqfont_su(ji)   =  MAX( 0.e0 , - zdh_s_pre(ji) - zdeltah(ji,1)              ) * zqprec(ji) 
    228          zdeltah  (ji,1) =  MAX( - zdh_s_pre(ji) , zdeltah(ji,1) ) 
    229          zdh_s_mel(ji)   =  zdh_s_mel(ji) + zdeltah(ji,1) 
    230          ! heat conservation 
    231          qt_s_in(ji,jl)  =  qt_s_in(ji,jl) + zqprec(ji) * zdh_s_pre(ji) 
    232          zqt_s  (ji)     =  zqt_s  (ji)    + zqprec(ji) * zdh_s_pre(ji) 
    233          zqt_s  (ji)     =  MAX( zqt_s(ji) - zqfont_su(ji) , 0.e0 )  
    234       END DO 
    235  
    236  
    237       ! Snow melt due to surface heat imbalance 
     248         ! enthalpy of the precip (>0, J.m-3) (tatm_ice is now in K) 
     249         zqprec    (ji) = rhosn * ( cpic * ( rtt - MIN( tatm_ice_1d(ji), rt0_snow) ) + lfus )    
     250         IF( sprecip_1d(ji) == 0._wp ) zqprec(ji) = 0._wp 
     251         ! heat flux from snow precip (>0, W.m-2) 
     252         hfx_spr_1d(ji) = hfx_spr_1d(ji) + zdh_s_pre(ji) * a_i_b(ji) * zqprec(ji) * r1_rdtice 
     253         ! update thickness 
     254         ht_s_b    (ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_pre(ji) ) 
     255 
     256         !--------------------- 
     257         ! Melt of falling snow 
     258         !--------------------- 
     259         ! thickness change 
     260         zindq          = 1._wp - MAX( 0._wp , SIGN( 1._wp , - zqprec(ji) + epsi20 ) ) 
     261         zdh_s_mel (ji) = - zindq * zq_su(ji) / MAX( zqprec(ji) , epsi20 ) 
     262         zdh_s_mel (ji) = MAX( - zdh_s_pre(ji), zdh_s_mel(ji) ) ! bound melting  
     263         ! Heat flux associated with snow melt of falling snow (W.m-2, <0) 
     264         hfx_snw_1d(ji) = hfx_snw_1d(ji) + zdh_s_mel(ji) * a_i_b(ji) * zqprec(ji) * r1_rdtice  
     265         ! heat used to melt snow (W.m-2, >0) 
     266         hfx_tot_1d(ji) = hfx_tot_1d(ji) - zdh_s_mel(ji) * a_i_b(ji) * zqprec(ji) * r1_rdtice 
     267         ! snow melting only = water into the ocean (then without snow precip) 
     268         wfx_snw_1d(ji) = wfx_snw_1d(ji) + rhosn * a_i_b(ji) * zdh_s_mel(ji) * r1_rdtice 
     269          
     270         ! updates available heat + thickness 
     271         zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdh_s_mel(ji) * zqprec(ji) )       
     272         ht_s_b(ji) = MAX( 0._wp , ht_s_b(ji) + zdh_s_mel(ji) ) 
     273         zh_s  (ji) = ht_s_b(ji) / REAL( nlay_s ) 
     274 
     275         ! clem debug: variation of enthalpy (J.m-2) 
     276         dq_s(ji) = dq_s(ji) + ( zdh_s_pre(ji) + zdh_s_mel(ji) ) * zqprec(ji)   
     277 
     278      END DO 
     279 
     280      ! If heat still available, then melt more snow 
     281      zdeltah(:,:) = 0._wp ! important 
    238282      DO jk = 1, nlay_s 
    239283         DO ji = kideb, kiut 
    240             zdeltah  (ji,jk) = - zqfont_su(ji) / q_s_b(ji,jk) 
    241             zqfont_su(ji)    =  MAX( 0.0 , - zh_s(ji) - zdeltah(ji,jk) ) * q_s_b(ji,jk)  
    242             zdeltah  (ji,jk) =  MAX( zdeltah(ji,jk) , - zh_s(ji) ) 
    243             zdh_s_mel(ji)    =  zdh_s_mel(ji) + zdeltah(ji,jk)        ! resulting melt of snow     
     284            ! thickness change 
     285            zindh            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - ht_s_b(ji) ) )  
     286            zindq            = 1._wp - MAX( 0._wp, SIGN( 1._wp, - q_s_b(ji,jk) + epsi20 ) )  
     287            zdeltah  (ji,jk) = - zindh * zindq * zq_su(ji) / MAX( q_s_b(ji,jk), epsi20 ) 
     288            zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - zh_s(ji) ) ! bound melting 
     289            zdh_s_mel(ji)    = zdh_s_mel(ji) + zdeltah(ji,jk)     
     290            ! heat flux associated with snow melt(W.m-2, <0) 
     291            hfx_snw_1d(ji)   = hfx_snw_1d(ji) + zdeltah(ji,jk) * a_i_b(ji) * q_s_b(ji,jk) * r1_rdtice 
     292            ! heat used to melt snow(W.m-2, >0) 
     293            hfx_tot_1d(ji)   = hfx_tot_1d(ji) - zdeltah(ji,jk) * a_i_b(ji) * q_s_b(ji,jk) * r1_rdtice  
     294            ! snow melting only = water into the ocean (then without snow precip) 
     295            wfx_snw_1d(ji)   = wfx_snw_1d(ji) + rhosn * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     296 
     297            ! updates available heat + thickness 
     298            zq_su (ji) = MAX( 0._wp , zq_su (ji) + zdeltah(ji,jk) * q_s_b(ji,jk) ) 
     299            ht_s_b(ji) = MAX( 0._wp , ht_s_b(ji) + zdeltah(ji,jk) ) 
     300 
     301            ! clem debug: variation of enthalpy (J.m-2) 
     302            dq_s(ji) = dq_s(ji) + zdeltah(ji,jk) * q_s_b(ji,jk)   
    244303         END DO 
    245304      END DO 
    246305 
    247       ! Apply snow melt to snow depth 
    248       DO ji = kideb, kiut 
    249          dh_s_tot(ji)   =  zdh_s_mel(ji) + zdh_s_pre(ji) 
    250          ! Old and new snow depths 
    251          zhsold(ji)     =  ht_s_b(ji) 
    252          zhsnew         =  ht_s_b(ji) + dh_s_tot(ji) 
    253          ! If snow is still present zhn = 1, else zhn = 0 
    254          zhn            =  1.0 - MAX(  zzero , SIGN( zone , - zhsnew )  ) 
    255          ht_s_b(ji)     =  MAX( zzero , zhsnew ) 
    256          ! we recompute dh_s_tot (clem)  
    257          dh_s_tot (ji)  =  ht_s_b(ji) - zhsold(ji) 
    258          ! Volume and mass variations of snow 
    259          dvsbq_1d  (ji) =  a_i_b(ji) * ( ht_s_b(ji) - zhsold(ji) - zdh_s_pre(ji) ) 
    260          dvsbq_1d  (ji) =  MIN( zzero, dvsbq_1d(ji) ) 
    261          !clem rdm_snw_1d(ji) =  rdm_snw_1d(ji) + rhosn * dvsbq_1d(ji) 
     306      !---------------------- 
     307      ! 3.2 Snow sublimation  
     308      !---------------------- 
     309      ! qla_ice is always >=0 (upwards), heat goes to the atmosphere, therefore snow sublimates 
     310      IF( lk_cpl ) THEN 
     311         ! coupled mode: sublimation already included in emp_ice (to do in limsbc_ice) 
     312         zdh_s_sub(:)      =  0._wp  
     313      ELSE 
     314         ! forced  mode: snow thickness change due to sublimation 
     315         DO ji = kideb, kiut 
     316            zdh_s_sub(ji)  =  MAX( - ht_s_b(ji) , - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice ) 
     317            ! Heat flux by sublimation [W.m-2], < 0 
     318            !      sublimate first snow that had fallen, then pre-existing snow 
     319            zcoeff         =      ( MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) )   * zqprec(ji) +   & 
     320               &  ( zdh_s_sub(ji) - MAX( zdh_s_sub(ji), - MAX( 0._wp, zdh_s_pre(ji) + zdh_s_mel(ji) ) ) ) * q_s_b(ji,1) )  & 
     321               &  * a_i_b(ji) * r1_rdtice 
     322            hfx_sub_1d(ji) = hfx_sub_1d(ji) + zcoeff ! diag only (to close heat budget) 
     323            ! heat used for sublimation (>0, W.m-2) 
     324            !!? hfx_tot_1d(ji) = hfx_tot_1d(ji) - zcoeff 
     325            ! Mass flux by sublimation 
     326            wfx_sub_1d(ji) =  wfx_sub_1d(ji) + rhosn * a_i_b(ji) * zdh_s_sub(ji) * r1_rdtice ! diag only 
     327            wfx_snw_1d(ji) =  wfx_snw_1d(ji) + rhosn * a_i_b(ji) * zdh_s_sub(ji) * r1_rdtice 
     328            ! new snow thickness 
     329            ht_s_b(ji)     =  MAX( 0._wp , ht_s_b(ji) + zdh_s_sub(ji) ) 
     330            ! clem debug: variation of enthalpy (J.m-2) 
     331            dq_s(ji) = dq_s(ji) + zdh_s_sub(ji) * q_s_b(ji,1)   
     332         END DO 
     333      ENDIF 
     334 
     335      ! --- Update snow diags --- ! 
     336      DO ji = kideb, kiut 
     337         dh_s_tot(ji)   = zdh_s_mel(ji) + zdh_s_pre(ji) + zdh_s_sub(ji) 
     338         zh_s(ji)       = ht_s_b(ji) / REAL( nlay_s ) 
    262339      END DO ! ji 
    263340 
     341      !------------------------------------------- 
     342      ! 3.3 Update temperature, energy 
     343      !------------------------------------------- 
     344      ! new temp and enthalpy of the snow (remaining snow precip + remaining pre-existing snow) 
     345      zq_s(:) = 0._wp  
     346      DO jk = 1, nlay_s 
     347         DO ji = kideb,kiut 
     348            zindh  =  MAX(  0._wp , SIGN( 1._wp, - ht_s_b(ji) + epsi20 )  ) 
     349            q_s_b(ji,jk) = ( 1._wp - zindh ) / MAX( ht_s_b(ji), epsi20 ) *             & 
     350              &            ( (   MAX( 0._wp, dh_s_tot(ji) )              ) * zqprec(ji) +  & 
     351              &              ( - MAX( 0._wp, dh_s_tot(ji) ) + ht_s_b(ji) ) * rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) ) 
     352            zq_s(ji)     =  zq_s(ji) + q_s_b(ji,jk) 
     353         END DO 
     354      END DO 
     355 
    264356      !-------------------------- 
    265       ! 3.2 Surface ice ablation  
     357      ! 3.4 Surface ice ablation  
    266358      !-------------------------- 
    267       DO ji = kideb, kiut  
    268          z_f_surf (ji) =  zqfont_su(ji) * r1_rdtice   ! heat conservation test 
    269          zdq_i    (ji) =  0._wp 
    270       END DO ! ji 
    271  
     359      zdeltah(:,:) = 0._wp ! important 
    272360      DO jk = 1, nlay_i 
    273361         DO ji = kideb, kiut  
    274             !                                                    ! melt of layer jk 
    275             zdeltah  (ji,jk) = - zqfont_su(ji) / q_i_b(ji,jk) 
    276             !                                                    ! recompute heat available 
    277             zqfont_su(ji   ) = MAX( 0.0 , - zh_i(ji) - zdeltah(ji,jk) ) * q_i_b(ji,jk)  
    278             !                                                    ! melt of layer jk cannot be higher than its thickness 
    279             zdeltah  (ji,jk) = MAX( zdeltah(ji,jk) , - zh_i(ji) ) 
    280             !                                                    ! update surface melt 
    281             dh_i_surf(ji   ) = dh_i_surf(ji) + zdeltah(ji,jk)  
    282             !                                                    ! for energy conservation 
    283             zdq_i    (ji   ) = zdq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk) * r1_rdtice 
    284             ! 
    285             ! clem 
    286             sfx_thd_1d(ji) = sfx_thd_1d(ji) - sm_i_b(ji) * a_i_b(ji)    & 
    287                &                              * MIN( zdeltah(ji,jk) , 0._wp ) * rhoic / rdt_ice 
     362            zEi            = - q_i_b(ji,jk) / rhoic                ! Specific enthalpy of layer k [J/kg, <0] 
     363 
     364            ztmelts        = - tmut * s_i_b(ji,jk) + rtt           ! Melting point of layer k [K] 
     365 
     366            zEw            =    rcp * ( ztmelts - rt0 )            ! Specific enthalpy of resulting meltwater [J/kg, <0] 
     367 
     368            zdE            =    zEi - zEw                          ! Specific enthalpy difference < 0 
     369 
     370            zfmdt          = - zq_su(ji) / zdE                     ! Mass flux to the ocean [kg/m2, >0] 
     371 
     372            zdeltah(ji,jk) = - zfmdt / rhoic                       ! Melt of layer jk [m, <0] 
     373 
     374            zdeltah(ji,jk) = MIN( 0._wp , MAX( zdeltah(ji,jk) , - zh_i(ji,jk) ) )    ! Melt of layer jk cannot exceed the layer thickness [m, <0] 
     375 
     376            zq_su(ji)      = MAX( 0._wp , zq_su(ji) - zdeltah(ji,jk) * rhoic * zdE ) ! update available heat 
     377 
     378            dh_i_surf(ji)  = dh_i_surf(ji) + zdeltah(ji,jk)        ! Cumulate surface melt 
     379 
     380            zfmdt          = - rhoic * zdeltah(ji,jk)              ! Recompute mass flux [kg/m2, >0] 
     381 
     382            zQm            = zfmdt * zEw                           ! Energy of the melt water sent to the ocean [J/m2, <0] 
     383 
     384            ! Contribution to salt flux (clem: using sm_i_b and not s_i_b(jk) is ok) 
     385            sfx_sum_1d(ji)   = sfx_sum_1d(ji) - sm_i_b(ji) * a_i_b(ji) * zdeltah(ji,jk) * rhoic * r1_rdtice 
     386 
     387            ! Contribution to heat flux [W.m-2], < 0 
     388            hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice 
     389 
     390            ! Total heat flux used in this process [W.m-2], < 0   
     391            hfx_tot_1d(ji) = hfx_tot_1d(ji) - zfmdt * a_i_b(ji) * zdE * r1_rdtice 
     392 
     393            ! Contribution to mass flux 
     394            wfx_sum_1d(ji) =  wfx_sum_1d(ji) + rhoic * a_i_b(ji) * zdeltah(ji,jk) * r1_rdtice 
     395            
     396            ! record which layers have disappeared (for bottom melting)  
     397            !    => icount=0 : no layer has vanished 
     398            !    => icount=5 : 5 layers have vanished 
     399            zindh       = NINT( MAX( 0._wp , SIGN( 1._wp , - ( zh_i(ji,jk) + zdeltah(ji,jk) ) ) ) )  
     400            icount(ji)  = icount(ji) + zindh 
     401            zh_i(ji,jk) = MAX( 0._wp , zh_i(ji,jk) + zdeltah(ji,jk) ) 
     402 
     403            ! clem debug: variation of enthalpy (J.m-2) 
     404            dq_i(ji) = dq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk)   
     405 
     406            ! update heat content (J.m-2) and layer thickness 
     407            qh_i_old(ji,jk) = qh_i_old(ji,jk) + zdeltah(ji,jk) * q_i_b(ji,jk) 
     408            h_i_old (ji,jk) = h_i_old (ji,jk) + zdeltah(ji,jk) 
    288409         END DO 
    289410      END DO 
    290  
    291       !                                          !------------------- 
    292       IF( con_i .AND. jiindex_1d > 0 ) THEN      ! Conservation test 
    293          !                                       !------------------- 
    294          numce_dh  = 0 
    295          meance_dh = 0._wp 
    296          DO ji = kideb, kiut 
    297             IF ( ( z_f_surf(ji) + zdq_i(ji) ) .GE. 1.0e-3 ) THEN 
    298                numce_dh  = numce_dh + 1 
    299                meance_dh = meance_dh + z_f_surf(ji) + zdq_i(ji) 
    300             ENDIF 
    301             IF( z_f_surf(ji) + zdq_i(ji) .GE. 1.0e-3  ) THEN! 
    302                WRITE(numout,*) ' ALERTE heat loss for surface melt ' 
    303                WRITE(numout,*) ' ii, ij, jl :', ii, ij, jl 
    304                WRITE(numout,*) ' ht_i_b       : ', ht_i_b(ji) 
    305                WRITE(numout,*) ' z_f_surf     : ', z_f_surf(ji) 
    306                WRITE(numout,*) ' zdq_i        : ', zdq_i(ji) 
    307                WRITE(numout,*) ' ht_i_b       : ', ht_i_b(ji) 
    308                WRITE(numout,*) ' fc_bo_i      : ', fc_bo_i(ji) 
    309                WRITE(numout,*) ' fbif_1d      : ', fbif_1d(ji) 
    310                WRITE(numout,*) ' qlbbq_1d     : ', qlbbq_1d(ji) 
    311                WRITE(numout,*) ' s_i_new      : ', s_i_new(ji) 
    312                WRITE(numout,*) ' sss_m        : ', sss_m(ii,ij) 
    313             ENDIF 
    314          END DO 
    315          ! 
    316          IF( numce_dh > 0 )   meance_dh = meance_dh / numce_dh 
    317          WRITE(numout,*) ' Error report - Category : ', jl 
    318          WRITE(numout,*) ' ~~~~~~~~~~~~ ' 
    319          WRITE(numout,*) ' Number of points where there is sur. me. error : ', numce_dh 
    320          WRITE(numout,*) ' Mean basal growth error on error points : ', meance_dh 
    321          ! 
    322       ENDIF 
    323  
    324       !---------------------- 
    325       ! 3.3 Snow sublimation 
    326       !---------------------- 
    327  
    328       DO ji = kideb, kiut 
    329          ! qla_ice is always >=0 (upwards), heat goes to the atmosphere, therefore snow sublimates 
    330 #if defined key_coupled 
    331          zdh_s_sub(ji)    =  0._wp      ! coupled mode: sublimation already included in emp_ice (to do in limsbc_ice) 
    332 #else 
    333          !                              ! forced  mode: snow thickness change due to sublimation 
    334          zdh_s_sub(ji)    =  - parsub * qla_ice_1d(ji) / ( rhosn * lsub ) * rdt_ice 
    335 #endif 
    336          dh_s_tot (ji)    =  dh_s_tot(ji) + zdh_s_sub(ji) 
    337          zdhcf            =  ht_s_b(ji) + zdh_s_sub(ji)  
    338          ht_s_b   (ji)    =  MAX( zzero , zdhcf ) 
    339          ! we recompute dh_s_tot  
    340          dh_s_tot (ji)    =  ht_s_b(ji) - zhsold(ji) 
    341          qt_s_in  (ji,jl) =  qt_s_in(ji,jl) + zdh_s_sub(ji)*q_s_b(ji,1) 
    342       END DO 
    343  
    344       zqt_dummy(:) = 0.e0 
    345       DO jk = 1, nlay_s 
    346          DO ji = kideb,kiut 
    347             q_s_b    (ji,jk) = rhosn * ( cpic * ( rtt - t_s_b(ji,jk) ) + lfus ) 
    348             zqt_dummy(ji)    =  zqt_dummy(ji) + q_s_b(ji,jk) * ht_s_b(ji) / REAL( nlay_s )            ! heat conservation 
    349          END DO 
    350       END DO 
    351  
    352       DO jk = 1, nlay_s 
    353          DO ji = kideb, kiut 
    354             ! In case of disparition of the snow, we have to update the snow temperatures 
    355             zhisn  =  MAX(  zzero , SIGN( zone, - ht_s_b(ji) )  ) 
    356             t_s_b(ji,jk) = ( 1.0 - zhisn ) * t_s_b(ji,jk) + zhisn * rtt 
    357             q_s_b(ji,jk) = ( 1.0 - zhisn ) * q_s_b(ji,jk) 
    358          END DO 
     411      ! update ice thickness 
     412      DO ji = kideb, kiut 
     413         ht_i_b(ji) =  MAX( 0._wp , ht_i_b(ji) + dh_i_surf(ji) ) 
    359414      END DO 
    360415 
     
    364419      !------------------------------------------------------------------------------! 
    365420      ! 
    366       ! Ice basal growth / melt is given by the ratio of heat budget over basal 
    367       ! ice heat content.  Basal heat budget is given by the difference between 
    368       ! the inner conductive flux  (fc_bo_i), from the open water heat flux  
    369       ! (qlbbqb) and the turbulent ocean flux (fbif).  
    370       ! fc_bo_i is positive downwards. fbif and qlbbq are positive to the ice  
    371  
    372       !----------------------------------------------------- 
    373       ! 4.1 Basal growth - (a) salinity not varying in time  
    374       !----------------------------------------------------- 
    375       IF(  num_sal /= 2  ) THEN   ! ice salinity constant in time 
     421      !------------------ 
     422      ! 4.1 Basal growth  
     423      !------------------ 
     424      ! Basal growth is driven by heat imbalance at the ice-ocean interface, 
     425      ! between the inner conductive flux  (fc_bo_i), from the open water heat flux  
     426      ! (fhldb) and the turbulent ocean flux (fhtur).  
     427      ! fc_bo_i is positive downwards. fhtur and fhld are positive to the ice  
     428 
     429      ! If salinity varies in time, an iterative procedure is required, because 
     430      ! the involved quantities are inter-dependent. 
     431      ! Basal growth (dh_i_bott) depends upon new ice specific enthalpy (zEi), 
     432      ! which depends on forming ice salinity (s_i_new), which depends on dh/dt (dh_i_bott) 
     433      ! -> need for an iterative procedure, which converges quickly 
     434 
     435      IF ( num_sal == 2 ) THEN 
     436         num_iter_max = 5 
     437      ELSE 
     438         num_iter_max = 1 
     439      ENDIF 
     440 
     441      !clem debug. Just to be sure that enthalpy at nlay_i+1 is null 
     442      DO ji = kideb, kiut 
     443         q_i_b(ji,nlay_i+1) = 0._wp 
     444      END DO 
     445 
     446      ! Iterative procedure 
     447      DO iter = 1, num_iter_max 
    376448         DO ji = kideb, kiut 
    377             IF(  ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) < 0._wp  ) THEN 
    378                s_i_new(ji)         =  sm_i_b(ji) 
    379                ! Melting point in K 
    380                ztmelts             =  - tmut * s_i_new(ji) + rtt  
    381                ! New ice heat content (Bitz and Lipscomb, 1999) 
    382                ztform              =  t_i_b(ji,nlay_i)  ! t_bo_b crashes in the 
    383                ! Baltic 
    384                q_i_b(ji,nlay_i+1)  = rhoic * (  cpic * ( ztmelts - ztform )                                & 
    385                   &                           + lfus * (  1.0 - ( ztmelts - rtt ) / ( ztform - rtt )  )    & 
    386                   &                           - rcp  * ( ztmelts - rtt )                                 ) 
    387                ! Basal growth rate = - F*dt / q 
    388                dh_i_bott(ji)       =  - rdt_ice * ( fc_bo_i(ji) + fbif_1d(ji) + qlbbq_1d(ji) ) / q_i_b(ji,nlay_i+1)  
    389                sfx_thd_1d(ji) = sfx_thd_1d(ji) - s_i_new(ji) * a_i_b(ji) * dh_i_bott(ji) * rhoic * r1_rdtice 
     449            IF(  zf_tt(ji) < 0._wp  ) THEN 
     450 
     451               ! New bottom ice salinity (Cox & Weeks, JGR88 ) 
     452               !--- zswi1  if dh/dt < 2.0e-8 
     453               !--- zswi12 if 2.0e-8 < dh/dt < 3.6e-7  
     454               !--- zswi2  if dh/dt > 3.6e-7 
     455               zgrr               = MIN( 1.0e-3, MAX ( dh_i_bott(ji) * r1_rdtice , epsi10 ) ) 
     456               zswi2              = MAX( 0._wp , SIGN( 1._wp , zgrr - 3.6e-7 ) ) 
     457               zswi12             = MAX( 0._wp , SIGN( 1._wp , zgrr - 2.0e-8 ) ) * ( 1.0 - zswi2 ) 
     458               zswi1              = 1. - zswi2 * zswi12 
     459               zfracs             = MIN ( zswi1  * 0.12 + zswi12 * ( 0.8925 + 0.0568 * LOG( 100.0 * zgrr ) )   & 
     460                  &               + zswi2  * 0.26 / ( 0.26 + 0.74 * EXP ( - 724300.0 * zgrr ) )  , 0.5 ) 
     461 
     462               ii = MOD( npb(ji) - 1, jpi ) + 1 ; ij = ( npb(ji) - 1 ) / jpi + 1 
     463 
     464               s_i_new(ji)        = zswitch_sal * zfracs * sss_m(ii,ij)  &  ! New ice salinity 
     465                                  + ( 1. - zswitch_sal ) * sm_i_b(ji)  
     466               ! New ice growth 
     467               ztmelts            = - tmut * s_i_new(ji) + rtt          ! New ice melting point (K) 
     468 
     469               zt_i_new           = zswitch_sal * t_bo_b(ji) + ( 1. - zswitch_sal) * t_i_b(ji, nlay_i) 
     470                
     471               zEi                = cpic * ( zt_i_new - ztmelts ) &     ! Specific enthalpy of forming ice (J/kg, <0)       
     472                  &               - lfus * ( 1.0 - ( ztmelts - rtt ) / ( zt_i_new - rtt ) )   & 
     473                  &               + rcp  * ( ztmelts-rtt )           
     474 
     475               zEw                = rcp  * ( t_bo_b(ji) - rt0 )         ! Specific enthalpy of seawater (J/kg, < 0) 
     476 
     477               zdE                = zEi - zEw                           ! Specific enthalpy difference (J/kg, <0) 
     478 
     479               dh_i_bott(ji)      = rdt_ice * MAX( 0._wp , zf_tt(ji) / ( zdE * rhoic ) ) 
     480 
     481               q_i_b(ji,nlay_i+1) = -zEi * rhoic                        ! New ice energy of melting (J/m3, >0) 
     482                
     483            ENDIF ! fc_bo_i 
     484         END DO ! ji 
     485      END DO ! iter 
     486 
     487      ! Contribution to Energy and Salt Fluxes 
     488      DO ji = kideb, kiut 
     489         IF(  zf_tt(ji) < 0._wp  ) THEN 
     490            ! New ice growth 
     491                                     
     492            zfmdt          = - rhoic * dh_i_bott(ji)                       ! Mass flux x time step (kg/m2, < 0) 
     493             
     494            ! Contribution to heat flux to the ocean [W.m-2], >0   
     495            hfx_thd_1d(ji) = hfx_thd_1d(ji) + zfmdt * a_i_b(ji) * zEw * r1_rdtice 
     496            ! Total heat flux used in this process [W.m-2]   
     497            hfx_tot_1d(ji) = hfx_tot_1d(ji) - zfmdt * a_i_b(ji) * zdE * r1_rdtice 
     498             
     499            ! Contribution to salt flux  () 
     500            sfx_bog_1d(ji) = sfx_bog_1d(ji) + s_i_new(ji) * a_i_b(ji) * zfmdt * r1_rdtice 
     501 
     502            ! Contribution to mass flux 
     503            wfx_bog_1d(ji) =  wfx_bog_1d(ji) + rhoic * a_i_b(ji) * dh_i_bott(ji) * r1_rdtice 
     504 
     505            ! clem debug: variation of enthalpy (J.m-2) 
     506            dq_i(ji) = dq_i(ji) + dh_i_bott(ji) * q_i_b(ji,nlay_i+1)   
     507 
     508            ! update heat content (J.m-2) and layer thickness 
     509            qh_i_old(ji,nlay_i+1) = qh_i_old(ji,nlay_i+1) + dh_i_bott(ji) * q_i_b(ji,nlay_i+1) 
     510            h_i_old (ji,nlay_i+1) = h_i_old (ji,nlay_i+1) + dh_i_bott(ji) 
     511         ENDIF 
     512      END DO 
     513 
     514      !---------------- 
     515      ! 4.2 Basal melt 
     516      !---------------- 
     517      zdeltah(:,:) = 0._wp ! important 
     518      DO jk = nlay_i, 1, -1 
     519         DO ji = kideb, kiut 
     520            IF(  zf_tt(ji)  >=  0._wp  .AND. jk > icount(ji) ) THEN   ! do not calculate where layer has already disappeared from surface melting  
     521 
     522               ztmelts = - tmut * s_i_b(ji,jk) + rtt  ! Melting point of layer jk (K) 
     523 
     524               IF( t_i_b(ji,jk) >= ztmelts ) THEN !!! Internal melting 
     525                  zintermelt(ji)    = 1._wp 
     526 
     527                  zEi               = - q_i_b(ji,jk) / rhoic        ! Specific enthalpy of melting ice (J/kg, <0) 
     528 
     529                  !!zEw               = rcp * ( t_i_b(ji,jk) - rtt )  ! Specific enthalpy of meltwater at T = t_i_b (J/kg, <0) 
     530 
     531                  zdE               = 0._wp                         ! Specific enthalpy difference   (J/kg, <0) 
     532                                                                    ! set up at 0 since no energy is needed to melt water...(it is already melted) 
     533 
     534                  zdeltah   (ji,jk) = MIN( 0._wp , - zh_i(ji,jk) ) ! internal melting occurs when the internal temperature is above freezing      
     535                                                                   ! this should normally not happen, but sometimes, heat diffusion leads to this 
     536 
     537                  dh_i_bott (ji)    = dh_i_bott(ji) + zdeltah(ji,jk) 
     538 
     539                  zfmdt             = - zdeltah(ji,jk) * rhoic          ! Mass flux x time step > 0 
     540 
     541                  ! Contribution to heat flux to the ocean [W.m-2], <0 (ice enthalpy zEi is "sent" to the ocean)  
     542                  hfx_res_1d(ji) = hfx_res_1d(ji) + zfmdt * a_i_b(ji) * zEi * r1_rdtice 
     543 
     544                  ! clem debug: variation of enthalpy (J.m-2) 
     545                  dq_i(ji) = dq_i(ji) + zdeltah(ji,jk) * q_i_b(ji,jk)   
     546 
     547                  ! update heat content (J.m-2) and layer thickness 
     548