New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 921 for trunk/NEMO/OPA_SRC – NEMO

Changeset 921 for trunk/NEMO/OPA_SRC


Ignore:
Timestamp:
2008-05-13T10:28:52+02:00 (16 years ago)
Author:
rblod
Message:

Correct indentation and print for debug in LIM3, see ticket #134, step I

Location:
trunk/NEMO/OPA_SRC/SBC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/SBC/sbcblk_clio.F90

    r914 r921  
    5858   LOGICAL ::   lbulk_init = .TRUE.               ! flag, bulk initialization done or not) 
    5959 
     60#if ! defined key_lim3                           
     61   ! in namicerun with LIM3 
    6062   REAL(wp) ::   cai = 1.40e-3 ! best estimate of atm drag in order to get correct FS export in ORCA2-LIM 
    6163   REAL(wp) ::   cao = 1.00e-3 ! chosen by default  ==> should depends on many things...  !!gmto be updated 
     64#endif 
    6265 
    6366   REAL(wp) ::   yearday     !: number of days per year    
  • trunk/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r918 r921  
    22   !!====================================================================== 
    33   !!                       ***  MODULE  sbcice_lim  *** 
    4    !! Surface module :  update surface ocean boundary condition over ice 
    5    !!                   covered area using LIM sea-ice model 
     4   !! Surface module :  update the ocean surface boundary condition over ice 
     5   !!       &           covered area using LIM sea-ice model 
    66   !! Sea-Ice model  :  LIM 3.0 Sea ice model time-stepping 
    77   !!====================================================================== 
    8    !! History :  9.0   !  06-12  (M. Vancoppenolle) Original code 
    9    !!            9.0   !  06-06  (G. Madec)  Surface module from icestp.F90 
     8   !! History :  2.0   !  2006-12  (M. Vancoppenolle) Original code 
     9   !!            3.0   !  2008-02  (C. Talandier)  Surface module from icestp.F90 
     10   !!            9.0   !  2008-04  (G. Madec)  sltyle and lim_ctl routine 
    1011   !!---------------------------------------------------------------------- 
    1112#if defined key_lim3 
     
    1314   !!   'key_lim3' :                                  LIM 3.0 sea-ice model 
    1415   !!---------------------------------------------------------------------- 
    15    !!---------------------------------------------------------------------- 
    16    !!   sbc_ice_lim  : sea-ice model time-stepping and 
    17    !!                  update ocean sbc over ice-covered area 
     16   !!   sbc_ice_lim  : sea-ice model time-stepping and update ocean sbc over ice-covered area 
     17   !!   lim_ctl       : alerts in case of ice model crash 
     18   !!   lim_prt_state : ice control print at a given grid point 
    1819   !!---------------------------------------------------------------------- 
    1920   USE oce             ! ocean dynamics and tracers 
     
    5253   USE in_out_manager  ! I/O manager 
    5354   USE prtctl          ! Print control 
    54    USE ocfzpt          ! ocean freezing point 
    5555 
    5656   IMPLICIT NONE 
     
    6161   CHARACTER(len=1) ::   cl_grid = 'C'     ! type of grid used in ice dynamics 
    6262 
     63   INTEGER          ::   nn_ico_cpl = 0    ! ice-ocean coupling indicator:         !!gm   ===>> to be put in namelist 
     64   !                                       !  = 0   LIM-3 old case 
     65   !                                       !  = 1   stresses computed using now ocean velocity 
     66   !                                       !  = 2   combination of 0 and 1 cases 
     67 
     68 
    6369   !! * Substitutions 
    6470#  include "domzgr_substitute.h90" 
    6571#  include "vectopt_loop_substitute.h90" 
    6672   !!---------------------------------------------------------------------- 
    67    !!   OPA 9.0 , LOCEAN-IPSL (2006)  
    68    !! $ Id: $ 
     73   !! NEMO/LIM 3.0 , UCL-LOCEAN-IPSL  (2008) 
     74   !! $Id: $ 
    6975   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    7076   !!---------------------------------------------------------------------- 
     
    94100      INTEGER, INTENT(in) ::   kt      ! ocean time step 
    95101      INTEGER, INTENT(in) ::   kblk    ! type of bulk (=3 CLIO, =4 CORE) 
    96       INTEGER, INTENT(in) ::   kico    ! type of ice-ocean stress 
     102      INTEGER, INTENT(in) ::   kico    ! ice-ocean stress treatment 
    97103      !! 
    98       INTEGER  ::   ji, jj, jk, jl     ! dummy loop indices 
    99       INTEGER  ::   indx               ! indexes for ice points 
    100       INTEGER  ::   numaltests         ! number of alert tests (max 20) 
    101       INTEGER  ::   alert_id           ! number of the current alert 
    102       REAL(wp) ::   ztmelts            ! ice layer melting point 
    103       REAL(wp) ::   zinda     
    104       INTEGER , DIMENSION(20) ::  numal                  ! number of alerts positive 
    105       CHARACTER (len=30), DIMENSION(20) ::   alname      ! name of alert 
     104      REAL(wp) ::   zcoef              ! temporary scalar 
    106105      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   alb_ice_os   ! albedo of the ice under overcast sky 
    107106      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   alb_ice_cs   ! albedo of ice under clear sky 
     
    111110         IF(lwp) WRITE(numout,*) 
    112111         IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition'  
    113          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   via Louvain la Neuve Ice Model (LIM) time stepping' 
    114  
     112         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   via Louvain la Neuve Ice Model (LIM-3) time stepping' 
     113         ! 
    115114         CALL ice_init 
    116  
    117          !+++++ 
    118          indx = 12 
    119          jiindx = 44 
    120          jjindx = 140 
    121          WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx,  & 
    122                                                   ' jjindx : ',jjindx 
    123          !+++++ 
    124  
     115         ! 
     116         IF( ln_nicep ) THEN      ! control print at a given point 
     117            jiindx = 44   ;   jjindx = 140 
     118            WRITE(numout,*) ' The debugging point is : jiindx : ',jiindx, ' jjindx : ',jjindx 
     119         ENDIF 
    125120      ENDIF 
    126121 
    127       IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
    128          ! 
    129          ! ... mean surface ocean current at ice dynamics point 
    130          !     C-grid dynamics :  U- & V-points as the ocean 
    131          u_oce(:,:) = ssu_m(:,:) * tmu(:,:) 
    132          v_oce(:,:) = ssv_m(:,:) * tmv(:,:) 
    133          ! 
    134          CALL lbc_lnk( u_oce, 'U', -1. )   ! U-point 
    135          CALL lbc_lnk( v_oce, 'V', -1. )   ! V-point 
    136  
    137          ! ... masked sea surface freezing temperature [Kelvin] (set to rt0 over land) 
    138          t_bo(:,:) = tfreez( sss_m ) +  rt0  
    139  
    140  
    141          ! ... ice albedo 
    142          CALL albedo_ice( t_su, ht_i, ht_s, alb_ice_cs, alb_ice_os ) 
    143  
    144          ! ... Sea-ice surface boundary conditions output from bulk formulae : 
    145          !     - utaui_ice  ! surface ice stress i-component (I-point)   [N/m2] 
    146          !     - vtaui_ice  ! surface ice stress j-component (I-point)   [N/m2] 
    147          !     - qns_ice    ! non solar heat flux over ice   (T-point)   [W/m2] 
    148          !     - qsr_ice    !     solar heat flux over ice   (T-point)   [W/m2] 
    149          !     - qla_ice    ! latent    heat flux over ice   (T-point)   [W/m2] 
    150          !     - dqns_ice   ! non solar heat sensistivity    (T-point)   [W/m2] 
    151          !     - dqla_ice   ! latent    heat sensistivity    (T-point)   [W/m2] 
    152          !     - tprecip    ! total precipitation            (T-point)   [Kg/m2/s] 
    153          !     - sprecip    ! solid precipitation            (T-point)   [Kg/m2/s] 
    154          !     - fr1_i0     ! 1sr fraction of qsr penetration in ice     [%] 
    155          !     - fr2_i0     ! 2nd fraction of qsr penetration in ice     [%] 
     122      !                                        !----------------------! 
     123      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN     !  Ice time-step only  ! 
     124         !                                     !----------------------! 
     125         !                                           !  Bulk Formulea ! 
     126         !                                           !----------------! 
     127         ! 
     128         u_oce(:,:) = ssu_m(:,:)                     ! mean surface ocean current at ice velocity point 
     129         v_oce(:,:) = ssv_m(:,:)                     ! (C-grid dynamics :  U- & V-points as the ocean) 
     130         ! 
     131         t_bo(:,:) = tfreez( sss_m ) +  rt0          ! masked sea surface freezing temperature [Kelvin] 
     132         !                                           ! (set to rt0 over land) 
     133         CALL albedo_ice( t_su, ht_i, ht_s, alb_ice_cs, alb_ice_os )  ! ... ice albedo 
     134 
     135                                                     ! Bulk formulea - provides the following fields: 
     136         ! utaui_ice, vtaui_ice : surface ice stress                     (U- & V-points)   [N/m2] 
     137         ! qsr_ice  , qns_ice   : solar & non solar heat flux over ice   (T-point)         [W/m2] 
     138         ! qla_ice              : latent heat flux over ice              (T-point)         [W/m2] 
     139         ! dqns_ice , dqla_ice  : non solar & latent heat sensistivity   (T-point)         [W/m2] 
     140         ! tprecip  , sprecip   : total & solid precipitation            (T-point)         [Kg/m2/s] 
     141         ! fr1_i0   , fr2_i0    : 1sr & 2nd fraction of qsr penetration in ice             [%] 
    156142         ! 
    157143         SELECT CASE( kblk ) 
    158          CASE( 3 )           ! CLIO bulk formulation 
    159             CALL blk_ice_clio( t_su , u_ice , v_ice   , alb_ice_cs, alb_ice_os,            & 
    160                &                             utaui_ice, vtaui_ice , qns_ice   , qsr_ice,   & 
    161                &                             qla_ice  , dqns_ice  , dqla_ice  ,            & 
    162                &                             tprecip  , sprecip   ,                        & 
    163                &                             fr1_i0   , fr2_i0    , cl_grid  ) 
    164  
    165             ! CAUTION: ocean shortwave radiation sets to zero if more than 50% of sea-ice !!gm to be removed 
    166             DO jj = 1, jpj 
    167                DO ji = 1, jpi 
    168                   zinda    = MAX(  0.e0, SIGN(  1.e0, -( -1.5 - freeze(ji,jj) )  )  ) 
    169                   qsr(ji,jj) = zinda * qsr(ji,jj) 
    170                END DO 
    171             END DO 
    172  
    173          CASE( 4 )           ! CORE bulk formulation 
    174             CALL blk_ice_core( t_su , u_ice , v_ice   , alb_ice_cs,                      & 
    175                &                             utaui_ice, vtaui_ice , qns_ice , qsr_ice,   & 
    176                &                             qla_ice  , dqns_ice  , dqla_ice,            & 
    177                &                             tprecip  , sprecip   ,                      & 
    178                &                             fr1_i0   , fr2_i0    , cl_grid  ) 
     144         CASE( 3 )                                       ! CLIO bulk formulation 
     145            CALL blk_ice_clio( t_su , u_ice    , v_ice     , alb_ice_cs, alb_ice_os,   & 
     146               &                      utaui_ice, vtaui_ice , qns_ice   , qsr_ice   ,   & 
     147               &                      qla_ice  , dqns_ice  , dqla_ice  ,               & 
     148               &                      tprecip  , sprecip   ,                           & 
     149               &                      fr1_i0   , fr2_i0    , cl_grid  ) 
     150            !          
     151         CASE( 4 )                                       ! CORE bulk formulation 
     152            CALL blk_ice_core( t_su , u_ice    , v_ice     , alb_ice_cs,               & 
     153               &                      utaui_ice, vtaui_ice , qns_ice   , qsr_ice   ,   & 
     154               &                      qla_ice  , dqns_ice  , dqla_ice  ,               & 
     155               &                      tprecip  , sprecip   ,                           & 
     156               &                      fr1_i0   , fr2_i0    , cl_grid  ) 
    179157         END SELECT 
    180158 
    181          IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
    182             CALL prt_ctl_info( 'Ice Forcings ' ) 
    183             CALL prt_ctl( tab2d_1=tprecip  ,clinfo1=' sbc_ice_lim: precip   : ' ) 
    184             CALL prt_ctl( tab2d_1=utaui_ice,clinfo1=' sbc_ice_lim: utaui_ice: ', tab2d_2=vtaui_ice, clinfo2=' vtaui_ice: ' ) 
    185             CALL prt_ctl( tab2d_1=sst_m    ,clinfo1=' sbc_ice_lim: sst      : ', tab2d_2=sss_m    , clinfo2=' sss      : ' ) 
    186             CALL prt_ctl( tab2d_1=u_oce    ,clinfo1=' sbc_ice_lim: u_io     : ', tab2d_2=v_oce    , clinfo2=' v_io     : ' ) 
    187             CALL prt_ctl( tab2d_1=frld     ,clinfo1=' sbc_ice_lim: frld   1 : ' ) 
    188             ! 
    189             DO jl = 1, jpl 
    190                CALL prt_ctl_info('* - category number ', ivar1=jl) 
    191                CALL prt_ctl(tab3d_1=t_su    , clinfo1=' sbc_ice_lim: t_su      : ', kdim=jl) 
    192                CALL prt_ctl(tab3d_1=qsr_ice , clinfo1=' sbc_ice_lim: qsr_ice   : ', kdim=jl) 
    193                CALL prt_ctl(tab3d_1=qns_ice , clinfo1=' sbc_ice_lim: qns_ice   : ', kdim=jl) 
    194                CALL prt_ctl(tab3d_1=dqns_ice, clinfo1=' sbc_ice_lim: dqns_ice  : ', kdim=jl) 
    195                CALL prt_ctl(tab3d_1=qla_ice , clinfo1=' sbc_ice_lim: qla_ice   : ', kdim=jl) 
    196                CALL prt_ctl(tab3d_1=dqla_ice, clinfo1=' sbc_ice_lim: dqla_ice  : ', kdim=jl) 
    197             END DO 
    198             ! 
    199          ENDIF 
    200  
    201          !------------------------------------------------ 
    202          ! Store old values of ice model global variables 
    203          !------------------------------------------------ 
    204  
     159         !                                           !----------------------! 
     160         !                                           ! LIM-3  time-stepping ! 
     161         !                                           !----------------------! 
     162         !  
     163         numit = numit + nn_fsbc                     ! Ice model time step 
     164         ! 
     165         !                                           ! Store previous ice values 
     166!!gm : remark   old_...   should becomes ...b  as tn versus tb   
    205167         old_a_i(:,:,:)   = a_i(:,:,:)     ! ice area 
    206168         old_e_i(:,:,:,:) = e_i(:,:,:,:)   ! ice thermal energy 
     
    211173         old_oa_i(:,:,:)  = oa_i(:,:,:)    ! areal age content 
    212174 
     175         !                                           ! intialisation to zero    !!gm is it truly necessary ??? 
    213176         d_a_i_thd(:,:,:)   = 0.e0 ; d_a_i_trp(:,:,:)   = 0.e0 
    214177         d_v_i_thd(:,:,:)   = 0.e0 ; d_v_i_trp(:,:,:)   = 0.e0 
     
    218181         d_smv_i_thd(:,:,:) = 0.e0 ; d_smv_i_trp(:,:,:) = 0.e0 
    219182         d_oa_i_thd(:,:,:)  = 0.e0 ; d_oa_i_trp(:,:,:)  = 0.e0 
    220  
     183         ! 
    221184         fseqv(:,:)     = 0.e0 
    222185         fsbri(:,:)     = 0.e0     ; fsalt_res(:,:) = 0.e0 
     
    226189         fheat_rpo(:,:) = 0.e0     ; focea2D(:,:)   = 0.e0 
    227190         fsup2D(:,:)    = 0.e0 
    228  
     191         !  
    229192         diag_sni_gr(:,:) = 0.e0   ; diag_lat_gr(:,:) = 0.e0 
    230193         diag_bot_gr(:,:) = 0.e0   ; diag_dyn_gr(:,:) = 0.e0 
    231194         diag_bot_me(:,:) = 0.e0   ; diag_sur_me(:,:) = 0.e0 
    232  
    233195         ! dynamical invariants 
    234          delta_i(:,:) = 0.e0 
    235          divu_i(:,:)  = 0.e0 
    236          shear_i(:,:) = 0.e0 
    237  
    238          !----------------! 
    239          ! Ice model step ! 
    240          !----------------! 
    241                          numit = numit + nn_fsbc 
    242                          CALL lim_rst_opn( kt )          ! Open Ice restart file 
    243                          !+++++ 
    244                          WRITE(numout,*) ' - Beginning the time step - ' 
    245                          CALL lim_inst_state(jiindx,jjindx,1) 
    246                          WRITE(numout,*) ' ' 
    247                          !+++++ 
    248          !---------------------| 
    249          ! Dynamical processes |        
    250          !---------------------| 
    251          IF( .NOT. lk_c1d ) THEN                         ! Ice dynamics & transport (not in 1D case) 
    252                          CALL lim_dyn                         ! Ice dynamics    ( rheology/dynamics ) 
    253                          CALL lim_trp                         ! Ice transport   ( Advection/diffusion ) 
    254                          CALL lim_var_agg(1)                  ! aggregate categories, requested 
    255                          CALL lim_var_glo2eqv                 ! equivalent variables, requested for rafting 
    256                          !+++++ 
    257                          WRITE(numout,*) ' - After ice dynamics and transport ' 
    258                          CALL lim_inst_state( jiindx, jjindx, 1 ) 
    259                          WRITE(numout,*) 
    260                          WRITE(numout,*) ' Mechanical Check ************** ' 
    261                          WRITE(numout,*) ' Check what means ice divergence ' 
    262                          WRITE(numout,*) ' Total ice concentration ', at_i (jiindx,jjindx) 
    263                          WRITE(numout,*) ' Total lead fraction     ', ato_i(jiindx,jjindx) 
    264                          WRITE(numout,*) ' Sum of both             ', ato_i(jiindx,jjindx) + at_i(jiindx,jjindx) 
    265                          WRITE(numout,*) ' Sum of both minus 1     ', ato_i(jiindx,jjindx) + at_i(jiindx,jjindx) - 1.00 
    266                          !+++++ 
    267                          CALL lim_itd_me                      ! Mechanical redistribution ! (ridging/rafting) 
     196         delta_i(:,:) = 0.e0       ; divu_i (:,:) = 0.e0       ;    shear_i(:,:) = 0.e0 
     197 
     198                          CALL lim_rst_opn( kt )     ! Open Ice restart file 
     199         ! 
     200         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 1, ' - Beginning the time step - ' )   ! control print 
     201         ! 
     202         IF( .NOT. lk_c1d ) THEN                     ! Ice dynamics & transport (not in 1D case) 
     203                          CALL lim_dyn( kt )              ! Ice dynamics    ( rheology/dynamics ) 
     204                          CALL lim_trp( kt )              ! Ice transport   ( Advection/diffusion ) 
     205                          CALL lim_var_agg(1)             ! aggregate categories, requested 
     206                          CALL lim_var_glo2eqv            ! equivalent variables, requested for rafting 
     207         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx,-1, ' - ice dyn & trp - ' )   ! control print 
     208                          CALL lim_itd_me                 ! Mechanical redistribution ! (ridging/rafting) 
    268209         ENDIF 
    269          !--------------------| 
    270          ! Ice thermodynamics | 
    271          !--------------------| 
    272                          CALL lim_var_glo2eqv            ! equivalent variables 
    273                          CALL lim_var_agg(1)             ! aggregate ice categories 
    274                          CALL lim_var_bv                 ! bulk brine volume (diag) 
    275                          CALL lim_thd                    ! Ice thermodynamics  
    276                          oa_i(:,:,:) = oa_i(:,:,:)   & 
    277                             &         + a_i(:,:,:)   & 
    278                             &         * rdt_ice      & 
    279                             &         / 86400.00         ! Ice natural aging 
    280                          CALL lim_var_glo2eqv            ! except info message that follows,  
    281                          !                               ! this CALL is maybe not necessary 
    282                          !+++++ 
    283                          WRITE(numout,*) ' - After ice thermodynamics ' 
    284                          CALL lim_inst_state(jiindx,jjindx,1) 
    285                          !+++++ 
    286                          CALL lim_itd_th                 !  Remap ice categories, lateral accretion  ! 
    287          !-------------------------| 
    288          ! Global variables update | 
    289          !-------------------------| 
    290                          CALL lim_var_agg(1)             ! requested by limupdate 
    291                          CALL lim_update                 ! Global variables update 
    292                          CALL lim_var_glo2eqv            ! equivalent variables (outputs) 
    293                          CALL lim_var_agg(2)             ! aggregate ice thickness categories 
    294                          !+++++ 
    295                          IF(ln_nicep) THEN 
    296                             WRITE(numout,*) ' - Final ice state after lim_update ' 
    297                             CALL lim_inst_state(jiindx,jjindx,2) 
    298                             WRITE(numout,*) ' ' 
    299                          ENDIF 
    300                          !+++++ 
    301          !--------------------------------------| 
    302          ! Fluxes of mass and heat to the ocean | 
    303          !--------------------------------------| 
     210         ! 
     211         !                                           ! Ice thermodynamics  
     212                          CALL lim_var_glo2eqv            ! equivalent variables 
     213                          CALL lim_var_agg(1)             ! aggregate ice categories 
     214                          CALL lim_var_bv                 ! bulk brine volume (diag) 
     215                          CALL lim_thd( kt )              ! Ice thermodynamics  
     216                          zcoef = rdt_ice / 86400.e0      !  Ice natural aging 
     217                          oa_i(:,:,:) = oa_i(:,:,:) + a_i(:,:,:) * zcoef 
     218                          CALL lim_var_glo2eqv            ! this CALL is maybe not necessary (Martin) 
     219         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 1, ' - ice thermodyn. - ' )   ! control print 
     220                          CALL lim_itd_th( kt )           !  Remap ice categories, lateral accretion  ! 
     221         ! 
     222         !                                           ! Global variables update | 
     223                          CALL lim_var_agg( 1 )           ! requested by limupdate 
     224                          CALL lim_update                 ! Global variables update 
     225                          CALL lim_var_glo2eqv            ! equivalent variables (outputs) 
     226                          CALL lim_var_agg(2)             ! aggregate ice thickness categories 
     227         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 2, ' - Final state - ' )   ! control print 
     228         ! 
     229         !                                           ! Fluxes of mass and heat to the ocean | 
    304230                         CALL lim_sbc_flx( kt )           ! Ice/Ocean heat freshwater/salt fluxes 
    305231         IF( ln_limdyn .AND. kico == 0 )   &              ! Ice/Ocean stresses (only in ice-dynamic case) 
    306232            &            CALL lim_sbc_tau( kt, kico )     ! otherwise the atm.-ocean stresses are used everywhere 
    307  
    308                          !+++++ 
    309                          WRITE(numout,*) ' - Final ice state after lim_flx    ' 
    310                          CALL lim_inst_state(jiindx,jjindx,3) 
    311                          WRITE(numout,*) ' ' 
    312                          !+++++ 
    313          !-------------------------| 
    314          ! Diagnostics and outputs | 
    315          !-------------------------| 
    316          IF( MOD( kt+nn_fsbc-1, ninfo ) == 0 .OR. ntmoy == 1 )   & 
    317           &              CALL lim_dia                    ! Ice Diagnostics  
    318                          CALL lim_wri      ( 1  )        ! Ice outputs  
    319          IF( lrst_ice )  CALL lim_rst_write( kt )        ! Ice restart file  
    320                          CALL lim_var_glo2eqv 
    321          ! 
    322          !-------------------------------| 
    323          ! Alerts in case of model crash | 
    324          !-------------------------------| 
    325  
    326          numaltests = 10 
    327          numal(:) = 0 
    328  
    329          ! Alert if incompatible volume and concentration 
    330          alert_id = 2 ! reference number of this alert 
    331          alname(alert_id) = ' Incompat vol and con         ' ! name of the alert 
    332  
    333          DO jl = 1, jpl 
    334             DO jj = 1, jpj 
    335                DO ji = 1, jpi 
    336                      IF ((v_i(ji,jj,jl).NE.0.0).AND.(a_i(ji,jj,jl).EQ.0.0)) THEN 
    337                         WRITE(numout,*) ' ALERTE 2 ' 
    338                         WRITE(numout,*) ' Incompatible volume and concentration ' 
    339                         WRITE(numout,*) ' at_i     ', at_i(ji,jj) 
    340                         WRITE(numout,*) ' Point - category', ji, jj, jl 
    341                         WRITE(numout,*) 
    342                         WRITE(numout,*) ' a_i *** a_i_old ', a_i(ji,jj,jl), old_a_i(ji,jj,jl) 
    343                         WRITE(numout,*) ' v_i *** v_i_old ', v_i(ji,jj,jl), old_v_i(ji,jj,jl) 
    344                         WRITE(numout,*) ' d_a_i_thd/trp   ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl) 
    345                         WRITE(numout,*) ' d_v_i_thd/trp   ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl) 
    346                         numal(alert_id) = numal(alert_id) + 1 
    347                      ENDIF 
    348                END DO 
    349             END DO 
    350          END DO 
    351  
    352          ! Alerte if very thick ice 
    353          alert_id = 3 ! reference number of this alert 
    354          alname(alert_id) = ' Very thick ice               ' ! name of the alert 
    355          jl = jpl  
     233         ! 
     234         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 3, ' - Final state lim_sbc - ' )   ! control print 
     235         ! 
     236         !                                           ! Diagnostics and outputs  
     237                          !                               ! Ice Diagnostics  
     238         IF( MOD( kt+nn_fsbc-1, ninfo ) == 0 .OR. ntmoy == 1 )   CALL lim_dia  
     239                          CALL lim_wri( 1  )              ! Ice outputs  
     240         IF( lrst_ice )   CALL lim_rst_write( kt )        ! Ice restart file  
     241                          CALL lim_var_glo2eqv            ! ??? 
     242         ! 
     243         IF( ln_nicep )   CALL lim_ctl               ! alerts in case of model crash 
     244         ! 
     245      ENDIF                                          ! End sea-ice time step only 
     246 
     247      !                                              !--------------------------! 
     248      ! Ice/Ocean stresses (nn_ico_cpl=1 or 2 cases) !  at all ocean time step  ! 
     249      !                                              !--------------------------! 
     250      IF( ln_limdyn .AND. nn_ico_cpl /= 0 )   & 
     251         &                CALL lim_sbc_tau( kt, nn_ico_cpl )  
     252!!gm   remark, in this case the ocean-ice stress is not saved in diag call above .....  find a solution!!! 
     253      ! 
     254   END SUBROUTINE sbc_ice_lim 
     255 
     256 
     257   SUBROUTINE lim_ctl 
     258      !!----------------------------------------------------------------------- 
     259      !!                   ***  ROUTINE lim_ctl ***  
     260      !!                  
     261      !! ** Purpose :   Alerts in case of model crash 
     262      !!------------------------------------------------------------------- 
     263      INTEGER  ::   ji, jj, jk,  jl   ! dummy loop indices 
     264      INTEGER  ::   inb_altests       ! number of alert tests (max 20) 
     265      INTEGER  ::   ialert_id         ! number of the current alert 
     266      REAL(wp) ::   ztmelts           ! ice layer melting point 
     267      CHARACTER (len=30), DIMENSION(20)      ::   cl_alname   ! name of alert 
     268      INTEGER           , DIMENSION(20)      ::   inb_alp     ! number of alerts positive 
     269      !!------------------------------------------------------------------- 
     270 
     271      inb_altests = 10 
     272      inb_alp(:) = 0 
     273 
     274      ! Alert if incompatible volume and concentration 
     275      ialert_id = 2 ! reference number of this alert 
     276      cl_alname(ialert_id) = ' Incompat vol and con         '    ! name of the alert 
     277 
     278      DO jl = 1, jpl 
    356279         DO jj = 1, jpj 
    357280            DO ji = 1, jpi 
    358                IF (ht_i(ji,jj,jl) .GT. 50.0 ) THEN 
    359                   WRITE(numout,*) ' ALERTE 3 ' 
    360                   WRITE(numout,*) ' Very thick ice ' 
    361                   CALL lim_inst_state(ji,jj,2) 
    362                   WRITE(numout,*) ' ' 
    363                   numal(alert_id) = numal(alert_id) + 1 
     281               IF(  v_i(ji,jj,jl) /= 0.e0   .AND.   a_i(ji,jj,jl) == 0.e0   ) THEN 
     282                  WRITE(numout,*) ' ALERTE 2 :   Incompatible volume and concentration ' 
     283                  WRITE(numout,*) ' at_i     ', at_i(ji,jj) 
     284                  WRITE(numout,*) ' Point - category', ji, jj, jl 
     285                  WRITE(numout,*) ' a_i *** a_i_old ', a_i      (ji,jj,jl), old_a_i  (ji,jj,jl) 
     286                  WRITE(numout,*) ' v_i *** v_i_old ', v_i      (ji,jj,jl), old_v_i  (ji,jj,jl) 
     287                  WRITE(numout,*) ' d_a_i_thd/trp   ', d_a_i_thd(ji,jj,jl), d_a_i_trp(ji,jj,jl) 
     288                  WRITE(numout,*) ' d_v_i_thd/trp   ', d_v_i_thd(ji,jj,jl), d_v_i_trp(ji,jj,jl) 
     289                  inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    364290               ENDIF 
    365291            END DO 
    366292         END DO 
    367  
    368          ! Alert if very fast ice 
    369          alert_id = 4 ! reference number of this alert 
    370          alname(alert_id) = ' Very fast ice               ' ! name of the alert 
     293      END DO 
     294 
     295      ! Alerte if very thick ice 
     296      ialert_id = 3 ! reference number of this alert 
     297      cl_alname(ialert_id) = ' Very thick ice               ' ! name of the alert 
     298      jl = jpl  
     299      DO jj = 1, jpj 
     300         DO ji = 1, jpi 
     301            IF(   ht_i(ji,jj,jl) .GT. 50.0   ) THEN 
     302               CALL lim_prt_state( ji, jj, 2, ' ALERTE 3 :   Very thick ice ' ) 
     303               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     304            ENDIF 
     305         END DO 
     306      END DO 
     307 
     308      ! Alert if very fast ice 
     309      ialert_id = 4 ! reference number of this alert 
     310      cl_alname(ialert_id) = ' Very fast ice               ' ! name of the alert 
     311      DO jj = 1, jpj 
     312         DO ji = 1, jpi 
     313            IF(   MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) .GT. 0.5  .AND.  & 
     314               &  at_i(ji,jj) .GT. 0.e0   ) THEN 
     315               CALL lim_prt_state( ji, jj, 1, ' ALERTE 4 :   Very fast ice ' ) 
     316               WRITE(numout,*) ' ice strength             : ', strength(ji,jj) 
     317               WRITE(numout,*) ' oceanic stress utau      : ', utau(ji,jj)  
     318               WRITE(numout,*) ' oceanic stress vtau      : ', vtau(ji,jj) 
     319               WRITE(numout,*) ' sea-ice stress utaui_ice : ', utaui_ice(ji,jj)  
     320               WRITE(numout,*) ' sea-ice stress vtaui_ice : ', vtaui_ice(ji,jj) 
     321               WRITE(numout,*) ' oceanic speed u          : ', u_oce(ji,jj) 
     322               WRITE(numout,*) ' oceanic speed v          : ', v_oce(ji,jj) 
     323               WRITE(numout,*) ' sst                      : ', sst_m(ji,jj) 
     324               WRITE(numout,*) ' sss                      : ', sss_m(ji,jj) 
     325               WRITE(numout,*)  
     326               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     327            ENDIF 
     328         END DO 
     329      END DO 
     330 
     331      ! Alert if there is ice on continents 
     332      ialert_id = 6 ! reference number of this alert 
     333      cl_alname(ialert_id) = ' Ice on continents           ' ! name of the alert 
     334      DO jj = 1, jpj 
     335         DO ji = 1, jpi 
     336            IF(   tms(ji,jj) .LE. 0.0   .AND.   at_i(ji,jj) .GT. 0.e0   ) THEN  
     337               CALL lim_prt_state( ji, jj, 1, ' ALERTE 6 :   Ice on continents ' ) 
     338               WRITE(numout,*) ' masks s, u, v        : ', tms(ji,jj), tmu(ji,jj), tmv(ji,jj)  
     339               WRITE(numout,*) ' sst                  : ', sst_m(ji,jj) 
     340               WRITE(numout,*) ' sss                  : ', sss_m(ji,jj) 
     341               WRITE(numout,*) ' at_i(ji,jj)          : ', at_i(ji,jj) 
     342               WRITE(numout,*) ' v_ice(ji,jj)         : ', v_ice(ji,jj) 
     343               WRITE(numout,*) ' v_ice(ji,jj-1)       : ', v_ice(ji,jj-1) 
     344               WRITE(numout,*) ' u_ice(ji-1,jj)       : ', u_ice(ji-1,jj) 
     345               WRITE(numout,*) ' u_ice(ji,jj)         : ', v_ice(ji,jj) 
     346               ! 
     347               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     348            ENDIF 
     349         END DO 
     350      END DO 
     351 
     352! 
     353!     ! Alert if very fresh ice 
     354      ialert_id = 7 ! reference number of this alert 
     355      cl_alname(ialert_id) = ' Very fresh ice               ' ! name of the alert 
     356      DO jl = 1, jpl 
    371357         DO jj = 1, jpj 
    372358            DO ji = 1, jpi 
    373                IF ( ( ( ABS( u_ice(ji,jj) ) .GT. 0.50) .OR. & 
    374                       ( ABS( v_ice(ji,jj) ) .GT. 0.50) ) .AND. & 
    375                     ( at_i(ji,jj) .GT. 0.0 ) ) THEN 
    376                   WRITE(numout,*) ' ALERTE 4 ' 
    377                   WRITE(numout,*) ' Very fast ice ' 
    378                   CALL lim_inst_state(ji,jj,1) 
    379                   WRITE(numout,*) ' ice strength             : ', strength(ji,jj) 
    380                   WRITE(numout,*) ' oceanic stress utau      : ', utau(ji,jj)  
    381                   WRITE(numout,*) ' oceanic stress vtau      : ', vtau(ji,jj) 
    382                   WRITE(numout,*) ' sea-ice stress utaui_ice : ', utaui_ice(ji,jj)  
    383                   WRITE(numout,*) ' sea-ice stress vtaui_ice : ', vtaui_ice(ji,jj) 
    384                   WRITE(numout,*) ' oceanic speed u          : ', u_oce(ji,jj) 
    385                   WRITE(numout,*) ' oceanic speed v          : ', v_oce(ji,jj) 
    386                   WRITE(numout,*) ' sst                      : ', sst_m(ji,jj) 
    387                   WRITE(numout,*) ' sss                      : ', sss_m(ji,jj) 
    388                   WRITE(numout,*)  
    389                   numal(alert_id) = numal(alert_id) + 1 
    390                ENDIF 
    391             END DO 
    392          END DO 
    393  
    394          ! Alert if there is ice on continents 
    395          alert_id = 6 ! reference number of this alert 
    396          alname(alert_id) = ' Ice on continents           ' ! name of the alert 
    397          DO jj = 1, jpj 
    398             DO ji = 1, jpi 
    399                IF ( ( tms(ji,jj) .LE. 0.0 ) .AND. ( at_i(ji,jj) .GT. 0.0 ) ) THEN  
    400                   WRITE(numout,*) ' ALERTE 6 ' 
    401                   WRITE(numout,*) ' Ice on continents ' 
    402                   CALL lim_inst_state(ji,jj,1) 
    403                   WRITE(numout,*) ' masks s, u, v        : ', tms(ji,jj), & 
    404                                                               tmu(ji,jj), & 
    405                                                               tmv(ji,jj)  
    406                   WRITE(numout,*) ' sst                  : ', sst_m(ji,jj) 
    407                   WRITE(numout,*) ' sss                  : ', sss_m(ji,jj) 
    408                   WRITE(numout,*) ' at_i(ji,jj)          : ', at_i(ji,jj) 
    409                   WRITE(numout,*) ' v_ice(ji,jj)         : ', v_ice(ji,jj) 
    410                   WRITE(numout,*) ' v_ice(ji,jj-1)       : ', v_ice(ji,jj-1) 
    411                   WRITE(numout,*) ' u_ice(ji-1,jj)       : ', u_ice(ji-1,jj) 
    412                   WRITE(numout,*) ' u_ice(ji,jj)         : ', v_ice(ji,jj) 
    413  
    414                   numal(alert_id) = numal(alert_id) + 1 
    415  
    416                ENDIF 
    417             END DO 
    418          END DO 
    419  
    420          ! Alert if very fresh ice 
    421          alert_id = 7 ! reference number of this alert 
    422          alname(alert_id) = ' Very fresh ice               ' ! name of the alert 
    423          DO jl = 1, jpl 
    424          DO jj = 1, jpj 
    425             DO ji = 1, jpi 
    426                IF ( ( ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) .OR. & 
    427                       ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) ) .AND. & 
    428                     ( a_i(ji,jj,jl) .GT. 0.0 ) ) THEN 
    429 !                 WRITE(numout,*) ' ALERTE 7 ' 
    430 !                 WRITE(numout,*) ' Very fresh ice ' 
    431 !                 CALL lim_inst_state(ji,jj,1) 
     359!!gm  test twice sm_i ...  ????  bug? 
     360               IF( ( ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) .OR. & 
     361                     ( ABS( sm_i(ji,jj,jl) ) .LT. 0.50) ) .AND. & 
     362                             ( a_i(ji,jj,jl) .GT. 0.e0 ) ) THEN 
     363!                 CALL lim_prt_state(ji,jj,1, ' ALERTE 7 :   Very fresh ice ' ) 
    432364!                 WRITE(numout,*) ' sst                  : ', sst_m(ji,jj) 
    433365!                 WRITE(numout,*) ' sss                  : ', sss_m(ji,jj) 
    434366!                 WRITE(numout,*) ' s_i_newice           : ', s_i_newice(ji,jj,1:jpl) 
    435367!                 WRITE(numout,*)  
    436                   numal(alert_id) = numal(alert_id) + 1 
     368                  inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    437369               ENDIF 
    438370            END DO 
    439371         END DO 
    440          END DO 
    441  
    442          ! Alert if too old ice 
    443          alert_id = 9 ! reference number of this alert 
    444          alname(alert_id) = ' Very old   ice               ' ! name of the alert 
    445          DO jl = 1, jpl 
     372      END DO 
     373! 
     374 
     375!     ! Alert if too old ice 
     376      ialert_id = 9 ! reference number of this alert 
     377      cl_alname(ialert_id) = ' Very old   ice               ' ! name of the alert 
     378      DO jl = 1, jpl 
    446379         DO jj = 1, jpj 
    447380            DO ji = 1, jpi 
    448381               IF ( ( ( ABS( o_i(ji,jj,jl) ) .GT. rdt_ice ) .OR. & 
    449382                      ( ABS( o_i(ji,jj,jl) ) .LT. 0.00) ) .AND. & 
    450                     ( a_i(ji,jj,jl) .GT. 0.0 ) ) THEN 
    451                   WRITE(numout,*) ' ALERTE 9 ' 
    452                   WRITE(numout,*) ' Wrong ice age ' 
    453                   CALL lim_inst_state(ji,jj,1) 
    454                   WRITE(numout,*)  
    455                   numal(alert_id) = numal(alert_id) + 1 
     383                             ( a_i(ji,jj,jl) .GT. 0.0 ) ) THEN 
     384                  CALL lim_prt_state( ji, jj, 1, ' ALERTE 9 :   Wrong ice age ') 
     385                  inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
    456386               ENDIF 
    457387            END DO 
    458388         END DO 
    459  
    460          END DO 
    461  
    462          ! Alert on salt flux 
    463          alert_id = 5 ! reference number of this alert 
    464          alname(alert_id) = ' High salt flux               ' ! name of the alert 
    465          DO jj = 1, jpj 
    466             DO ji = 1, jpi 
    467                IF (ABS(emps(ji,jj)).gt.1.0e-2) THEN 
    468                WRITE(numout,*) ' ALERTE 5 ' 
    469                WRITE(numout,*) ' High salt flux ' 
    470                CALL lim_inst_state(ji,jj,3) 
    471                WRITE(numout,*) ' ' 
     389      END DO 
     390  
     391      ! Alert on salt flux 
     392      ialert_id = 5 ! reference number of this alert 
     393      cl_alname(ialert_id) = ' High salt flux               ' ! name of the alert 
     394      DO jj = 1, jpj 
     395         DO ji = 1, jpi 
     396            IF( ABS( emps(ji,jj) ) .GT. 1.0e-2 ) THEN 
     397               CALL lim_prt_state( ji, jj, 3, ' ALERTE 5 :   High salt flux ' ) 
    472398               DO jl = 1, jpl 
    473399                  WRITE(numout,*) ' Category no: ', jl 
    474                   WRITE(numout,*) ' a_i        : ', a_i(ji,jj,jl)     , & 
    475                                   ' old_a_i    : ', old_a_i(ji,jj,jl)    
    476                   WRITE(numout,*) ' d_a_i_trp  : ', d_a_i_trp(ji,jj,jl) , & 
    477                                   ' d_a_i_thd  : ', d_a_i_thd(ji,jj,jl)  
    478                   WRITE(numout,*) ' v_i        : ', v_i(ji,jj,jl)    , & 
    479                                   ' old_v_i    : ', old_v_i(ji,jj,jl)    
    480                   WRITE(numout,*) ' d_v_i_trp  : ', d_v_i_trp(ji,jj,jl) , & 
    481                                   ' d_v_i_thd  : ', d_v_i_thd(ji,jj,jl)  
     400                  WRITE(numout,*) ' a_i        : ', a_i      (ji,jj,jl) , ' old_a_i    : ', old_a_i  (ji,jj,jl)    
     401                  WRITE(numout,*) ' d_a_i_trp  : ', d_a_i_trp(ji,jj,jl) , ' d_a_i_thd  : ', d_a_i_thd(ji,jj,jl)  
     402                  WRITE(numout,*) ' v_i        : ', v_i      (ji,jj,jl) , ' old_v_i    : ', old_v_i  (ji,jj,jl)    
     403                  WRITE(numout,*) ' d_v_i_trp  : ', d_v_i_trp(ji,jj,jl) , ' d_v_i_thd  : ', d_v_i_thd(ji,jj,jl)  
    482404                  WRITE(numout,*) ' ' 
    483                   END DO 
    484                   numal(alert_id) = numal(alert_id) + 1 
    485                ENDIF 
     405               END DO 
     406               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     407            ENDIF 
     408         END DO 
     409      END DO 
     410 
     411      ! Alert if qns very big 
     412      ialert_id = 8 ! reference number of this alert 
     413      cl_alname(ialert_id) = ' fnsolar very big             ' ! name of the alert 
     414      DO jj = 1, jpj 
     415         DO ji = 1, jpi 
     416            IF(   ABS( qns(ji,jj) ) .GT. 1500.0   .AND.  ( at_i(ji,jj) .GT. 0.0 ) )  THEN 
     417               ! 
     418               WRITE(numout,*) ' ALERTE 8 :   Very high non-solar heat flux' 
     419               WRITE(numout,*) ' ji, jj    : ', ji, jj 
     420               WRITE(numout,*) ' qns       : ', qns(ji,jj) 
     421               WRITE(numout,*) ' sst       : ', sst_m(ji,jj) 
     422               WRITE(numout,*) ' sss       : ', sss_m(ji,jj) 
     423               WRITE(numout,*) ' qcmif     : ', qcmif(ji,jj) 
     424               WRITE(numout,*) ' qldif     : ', qldif(ji,jj) 
     425               WRITE(numout,*) ' qcmif     : ', qcmif(ji,jj) / rdt_ice 
     426               WRITE(numout,*) ' qldif     : ', qldif(ji,jj) / rdt_ice 
     427               WRITE(numout,*) ' qfvbq     : ', qfvbq(ji,jj) 
     428               WRITE(numout,*) ' qdtcn     : ', qdtcn(ji,jj) 
     429               WRITE(numout,*) ' qfvbq / dt: ', qfvbq(ji,jj) / rdt_ice 
     430               WRITE(numout,*) ' qdtcn / dt: ', qdtcn(ji,jj) / rdt_ice 
     431               WRITE(numout,*) ' fdtcn     : ', fdtcn(ji,jj)  
     432               WRITE(numout,*) ' fhmec     : ', fhmec(ji,jj)  
     433               WRITE(numout,*) ' fheat_rpo : ', fheat_rpo(ji,jj)  
     434               WRITE(numout,*) ' fheat_res : ', fheat_res(ji,jj)  
     435               WRITE(numout,*) ' fhbri     : ', fhbri(ji,jj)  
     436               ! 
     437               CALL lim_prt_state( ji, jj, 2, '   ') 
     438               inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     439               ! 
     440            ENDIF 
     441         END DO 
     442      END DO 
     443      !+++++ 
     444  
     445      ! Alert if very warm ice 
     446      ialert_id = 10 ! reference number of this alert 
     447      cl_alname(ialert_id) = ' Very warm ice                ' ! name of the alert 
     448      inb_alp(ialert_id) = 0 
     449      DO jl = 1, jpl 
     450         DO jk = 1, nlay_i 
     451            DO jj = 1, jpj 
     452               DO ji = 1, jpi 
     453                  ztmelts    =  -tmut * s_i(ji,jj,jk,jl) + rtt 
     454                  IF( t_i(ji,jj,jk,jl) .GE. ztmelts  .AND.  v_i(ji,jj,jl) .GT. 1.e-6   & 
     455                     &                               .AND.  a_i(ji,jj,jl) .GT. 0.e0    ) THEN 
     456                     WRITE(numout,*) ' ALERTE 10 :   Very warm ice' 
     457                     WRITE(numout,*) ' ji, jj, jk, jl : ', ji, jj, jk, jl 
     458                     WRITE(numout,*) ' t_i : ', t_i(ji,jj,jk,jl) 
     459                     WRITE(numout,*) ' e_i : ', e_i(ji,jj,jk,jl) 
     460                     WRITE(numout,*) ' s_i : ', s_i(ji,jj,jk,jl) 
     461                     WRITE(numout,*) ' ztmelts : ', ztmelts 
     462                     inb_alp(ialert_id) = inb_alp(ialert_id) + 1 
     463                  ENDIF 
     464               END DO 
    486465            END DO 
    487466         END DO 
    488  
    489          ! Alert if qns very big 
    490          alert_id = 8 ! reference number of this alert 
    491          alname(alert_id) = ' qns very big             ' ! name of the alert 
    492          DO jj = 1, jpj 
    493             DO ji = 1, jpi 
    494                IF ( ( ABS( qns(ji,jj) ) .GT. 1500.0 ) .AND. & 
    495                     ( at_i(ji,jj) .GT. 0.0 ) )  THEN 
    496  
    497                   WRITE(numout,*) ' ALERTE 8 ' 
    498                   WRITE(numout,*) ' ji, jj    : ', ji, jj 
    499                   WRITE(numout,*) ' qns       : ', qns(ji,jj) 
    500                   WRITE(numout,*) ' Very high non-solar heat flux ' 
    501                   WRITE(numout,*) ' sst       : ', sst_m(ji,jj) 
    502                   WRITE(numout,*) ' sss       : ', sss_m(ji,jj) 
    503                   WRITE(numout,*) ' qcmif     : ', qcmif(jiindx,jjindx) 
    504                   WRITE(numout,*) ' qldif     : ', qldif(jiindx,jjindx) 
    505                   WRITE(numout,*) ' qcmif     : ', qcmif(jiindx,jjindx) / rdt_ice 
    506                   WRITE(numout,*) ' qldif     : ', qldif(jiindx,jjindx) / rdt_ice 
    507                   WRITE(numout,*) ' qfvbq     : ', qfvbq(jiindx,jjindx) 
    508                   WRITE(numout,*) ' qdtcn     : ', qdtcn(jiindx,jjindx) 
    509                   WRITE(numout,*) ' qfvbq / dt: ', qfvbq(jiindx,jjindx) / rdt_ice 
    510                   WRITE(numout,*) ' qdtcn / dt: ', qdtcn(jiindx,jjindx) / rdt_ice 
    511                   WRITE(numout,*) ' fdtcn     : ', fdtcn(jiindx,jjindx)  
    512                   WRITE(numout,*) ' fhmec     : ', fhmec(jiindx,jjindx)  
    513                   WRITE(numout,*) ' fheat_rpo : ', fheat_rpo(jiindx,jjindx)  
    514                   WRITE(numout,*) ' fheat_res : ', fheat_res(jiindx,jjindx)  
    515                   WRITE(numout,*) ' fhbri     : ', fhbri(jiindx,jjindx)  
    516  
    517                   CALL lim_inst_state(ji,jj,2) 
    518                   numal(alert_id) = numal(alert_id) + 1 
    519  
    520                ENDIF 
    521             END DO 
    522          END DO 
    523          !+++++ 
     467      END DO 
     468 
     469      ialert_id = 1                                 ! reference number of this alert 
     470      cl_alname(ialert_id) = ' NO alerte 1      '   ! name of the alert 
     471      WRITE(numout,*) 
     472      WRITE(numout,*) ' All alerts at the end of ice model ' 
     473      DO ialert_id = 1, inb_altests 
     474         WRITE(numout,*) ialert_id, cl_alname(ialert_id)//' : ', inb_alp(ialert_id), ' times ! ' 
     475      END DO 
     476      ! 
     477   END SUBROUTINE lim_ctl 
    524478  
    525          ! Alert if very warm ice 
    526          alert_id = 10 ! reference number of this alert 
    527          alname(alert_id) = ' Very warm ice                ' ! name of the alert 
    528          numal(alert_id) = 0 
    529          DO jl = 1, jpl 
    530          DO jk = 1, nlay_i 
    531          DO jj = 1, jpj 
    532             DO ji = 1, jpi 
    533                ztmelts    =  -tmut*s_i(ji,jj,jk,jl) + rtt 
    534                IF ( ( t_i(ji,jj,jk,jl) .GE. ztmelts) .AND. & 
    535                     ( v_i(ji,jj,jl)   .GT. 1.0e-6)   .AND. & 
    536                     ( a_i(ji,jj,jl) .GT. 0.0     )  ) THEN 
    537                   WRITE(numout,*) ' ALERTE 10 ' 
    538                   WRITE(numout,*) ' ji, jj, jk, jl : ', ji, jj, jk, jl 
    539                   WRITE(numout,*) ' Very warm ice ' 
    540                   WRITE(numout,*) ' t_i : ', t_i(ji,jj,jk,jl) 
    541                   WRITE(numout,*) ' e_i : ', e_i(ji,jj,jk,jl) 
    542                   WRITE(numout,*) ' s_i : ', s_i(ji,jj,jk,jl) 
    543                   WRITE(numout,*) ' ztmelts : ', ztmelts 
    544                   numal(alert_id) = numal(alert_id) + 1 
    545                ENDIF 
    546             END DO 
    547          END DO 
    548          END DO 
    549          END DO 
    550  
    551          alert_id = 1 ! reference number of this alert 
    552          alname(alert_id) = ' Il n''y a pas d''alerte 1       ' ! name of the alert 
    553          WRITE(numout,*) 
    554          WRITE(numout,*) ' All alerts at the end of ice model ' 
    555          DO alert_id = 1, numaltests 
    556             WRITE(numout,*) alert_id, alname(alert_id)//' : ', numal(alert_id), ' times ! ' 
    557          END DO 
    558          ! 
    559       ENDIF  ! End sea-ice coupling 
    560       ! 
    561    END SUBROUTINE sbc_ice_lim 
    562  
    563  
    564    SUBROUTINE lim_inst_state( ki, kj, kn ) 
     479    
     480   SUBROUTINE lim_prt_state( ki, kj, kn, cd1 ) 
    565481      !!----------------------------------------------------------------------- 
    566       !!                   ***  ROUTINE lim_inst_state ***  
     482      !!                   ***  ROUTINE lim_prt_state ***  
    567483      !!                  
    568484      !! ** Purpose :   Writes global ice state on the (i,j) point  
    569485      !!                in ocean.ouput  
    570486      !!                3 possibilities exist  
    571       !!                n = 1 -> simple ice state 
    572       !!                n = 2 -> exhaustive state 
    573       !!                n = 3 -> ice/ocean salt fluxes 
     487      !!                n = 1/-1 -> simple ice state (plus Mechanical Check if -1) 
     488      !!                n = 2    -> exhaustive state 
     489      !!                n = 3    -> ice/ocean salt fluxes 
    574490      !! 
    575491      !! ** input   :   point coordinates (i,j)  
    576492      !!                n : number of the option 
    577493      !!------------------------------------------------------------------- 
    578       INTEGER, INTENT( in ) ::   ki, kj, kn     ! ocean time-step index 
     494      INTEGER         , INTENT(in) ::   ki, kj, kn    ! ocean gridpoint indices 
     495      CHARACTER(len=*), INTENT(in) ::   cd1           ! 
     496      !! 
    579497      INTEGER :: jl 
    580498      !!------------------------------------------------------------------- 
     499 
     500      WRITE(numout,*) cd1             ! print title 
    581501 
    582502      !---------------- 
     
    584504      !---------------- 
    585505 
    586       IF ( kn .EQ. 1 ) THEN 
    587          WRITE(numout,*) ' lim_inst_state - Point : ',ki,kj 
     506      IF ( kn == 1 .OR. kn == -1 ) THEN 
     507         WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 
    588508         WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 
    589509         WRITE(numout,*) ' Simple state ' 
     
    623543         END DO 
    624544      ENDIF 
     545      IF( kn == -1 ) THEN 
     546         WRITE(numout,*) ' Mechanical Check ************** ' 
     547         WRITE(numout,*) ' Check what means ice divergence ' 
     548         WRITE(numout,*) ' Total ice concentration ', at_i (ki,kj) 
     549         WRITE(numout,*) ' Total lead fraction     ', ato_i(ki,kj) 
     550         WRITE(numout,*) ' Sum of both             ', ato_i(ki,kj) + at_i(ki,kj) 
     551         WRITE(numout,*) ' Sum of both minus 1     ', ato_i(ki,kj) + at_i(ki,kj) - 1.00 
     552      ENDIF 
     553 
    625554 
    626555      !-------------------- 
     
    629558 
    630559      IF ( kn .EQ. 2 ) THEN 
    631          WRITE(numout,*) ' lim_inst_state - Point : ',ki,kj 
     560         WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 
    632561         WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 
    633562         WRITE(numout,*) ' Exhaustive state ' 
     
    705634 
    706635     IF ( kn .EQ. 3 ) THEN 
    707         WRITE(numout,*) ' lim_inst_state - Point : ',ki,kj 
     636        WRITE(numout,*) ' lim_prt_state - Point : ',ki,kj 
    708637        WRITE(numout,*) ' ~~~~~~~~~~~~~~ ' 
    709638        WRITE(numout,*) ' - Salt / Heat Fluxes ' 
     
    730659        WRITE(numout,*) ' vtau      : ', vtau(ki,kj) 
    731660      ENDIF 
    732  
    733    END SUBROUTINE lim_inst_state 
     661      WRITE(numout,*) ' ' 
     662      ! 
     663   END SUBROUTINE lim_prt_state 
    734664 
    735665#else 
Note: See TracChangeset for help on using the changeset viewer.