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 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90 – NEMO

Ignore:
Timestamp:
2010-12-27T18:33:53+01:00 (13 years ago)
Author:
rblod
Message:

Update NEMOGCM from branch nemo_v3_3_beta

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r1715 r2528  
    55   !!       &           covered area using LIM sea-ice model 
    66   !! Sea-Ice model  :  LIM 3.0 Sea ice model time-stepping 
    7    !!====================================================================== 
    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 
     7   !!===================================================================== 
     8   !! History :  2.0  ! 2006-12  (M. Vancoppenolle) Original code 
     9   !!            3.0  ! 2008-02  (C. Talandier)  Surface module from icestp.F90 
     10   !!             -   ! 2008-04  (G. Madec)  sltyle and lim_ctl routine 
     11   !!            3.3  ! 2010-11  (G. Madec) ice-ocean stress always computed at each ocean time-step 
    1112   !!---------------------------------------------------------------------- 
    1213#if defined key_lim3 
     
    1920   !!---------------------------------------------------------------------- 
    2021   USE oce             ! ocean dynamics and tracers 
    21    USE c1d             ! 1d configuration 
    2222   USE dom_oce         ! ocean space and time domain 
    23    USE lib_mpp 
     23   USE lib_mpp         ! MPP library 
    2424   USE par_ice         ! sea-ice parameters 
    25    USE ice 
    26    USE iceini 
    27    USE dom_ice 
     25   USE ice             ! LIM-3: ice variables 
     26   USE iceini          ! LIM-3: ice initialisation 
     27   USE dom_ice         ! LIM-3: ice domain 
    2828 
    2929   USE sbc_oce         ! Surface boundary condition: ocean fields 
     
    3131   USE sbcblk_core     ! Surface boundary condition: CORE bulk 
    3232   USE sbcblk_clio     ! Surface boundary condition: CLIO bulk 
    33    USE albedo 
     33   USE albedo          ! ocean & ice albedo 
    3434 
    3535   USE phycst          ! Define parameters for the routines 
     
    4747   USE limvar          ! Ice variables switch 
    4848 
    49    USE lbclnk 
     49   USE c1d             ! 1D vertical configuration 
     50   USE lbclnk          ! lateral boundary condition - MPP link 
    5051   USE iom             ! I/O manager library 
    5152   USE in_out_manager  ! I/O manager 
     
    5758   PUBLIC sbc_ice_lim  ! routine called by sbcmod.F90 
    5859    
    59    CHARACTER(len=1) ::   cl_grid = 'C'     ! type of grid used in ice dynamics 
    60  
    6160   !! * Substitutions 
    6261#  include "domzgr_substitute.h90" 
    6362#  include "vectopt_loop_substitute.h90" 
    6463   !!---------------------------------------------------------------------- 
    65    !! NEMO/LIM 3.0 , UCL-LOCEAN-IPSL  (2008) 
     64   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    6665   !! $Id$ 
    67    !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    68    !!---------------------------------------------------------------------- 
    69  
     66   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     67   !!---------------------------------------------------------------------- 
    7068CONTAINS 
    7169 
    72    SUBROUTINE sbc_ice_lim( kt, kblk, kico ) 
     70   SUBROUTINE sbc_ice_lim( kt, kblk ) 
    7371      !!--------------------------------------------------------------------- 
    7472      !!                  ***  ROUTINE sbc_ice_lim  *** 
     
    9290      INTEGER, INTENT(in) ::   kt      ! ocean time step 
    9391      INTEGER, INTENT(in) ::   kblk    ! type of bulk (=3 CLIO, =4 CORE) 
    94       INTEGER, INTENT(in) ::   kico    ! ice-ocean stress treatment 
    9592      !! 
    9693      INTEGER  ::   jl                 ! loop index 
     
    143140               &                      qla_ice   , dqns_ice  , dqla_ice  ,               & 
    144141               &                      tprecip   , sprecip   ,                           & 
    145                &                      fr1_i0    , fr2_i0    , cl_grid, jpl  ) 
     142               &                      fr1_i0    , fr2_i0    , cp_ice_msh, jpl  ) 
    146143            !          
    147144         CASE( 4 )                                       ! CORE bulk formulation 
     
    150147               &                      qla_ice   , dqns_ice  , dqla_ice  ,               & 
    151148               &                      tprecip   , sprecip   ,                           & 
    152                &                      fr1_i0    , fr2_i0    , cl_grid, jpl  ) 
     149               &                      fr1_i0    , fr2_i0    , cp_ice_msh, jpl  ) 
    153150         END SELECT 
    154151 
     
    161158         !                                           ! Store previous ice values 
    162159!!gm : remark   old_...   should becomes ...b  as tn versus tb   
    163          old_a_i(:,:,:)   = a_i(:,:,:)     ! ice area 
    164          old_e_i(:,:,:,:) = e_i(:,:,:,:)   ! ice thermal energy 
    165          old_v_i(:,:,:)   = v_i(:,:,:)     ! ice volume 
    166          old_v_s(:,:,:)   = v_s(:,:,:)     ! snow volume  
    167          old_e_s(:,:,:,:) = e_s(:,:,:,:)   ! snow thermal energy 
    168          old_smv_i(:,:,:) = smv_i(:,:,:)   ! salt content 
    169          old_oa_i(:,:,:)  = oa_i(:,:,:)    ! areal age content 
     160         old_a_i  (:,:,:)   = a_i  (:,:,:)     ! ice area 
     161         old_e_i  (:,:,:,:) = e_i  (:,:,:,:)   ! ice thermal energy 
     162         old_v_i  (:,:,:)   = v_i  (:,:,:)     ! ice volume 
     163         old_v_s  (:,:,:)   = v_s  (:,:,:)     ! snow volume  
     164         old_e_s  (:,:,:,:) = e_s  (:,:,:,:)   ! snow thermal energy 
     165         old_smv_i(:,:,:)   = smv_i(:,:,:)     ! salt content 
     166         old_oa_i (:,:,:)   = oa_i (:,:,:)     ! areal age content 
    170167 
    171168         !                                           ! intialisation to zero    !!gm is it truly necessary ??? 
    172          d_a_i_thd(:,:,:)   = 0.e0 ; d_a_i_trp(:,:,:)   = 0.e0 
    173          d_v_i_thd(:,:,:)   = 0.e0 ; d_v_i_trp(:,:,:)   = 0.e0 
    174          d_e_i_thd(:,:,:,:) = 0.e0 ; d_e_i_trp(:,:,:,:) = 0.e0 
    175          d_v_s_thd(:,:,:)   = 0.e0 ; d_v_s_trp(:,:,:)   = 0.e0 
    176          d_e_s_thd(:,:,:,:) = 0.e0 ; d_e_s_trp(:,:,:,:) = 0.e0 
    177          d_smv_i_thd(:,:,:) = 0.e0 ; d_smv_i_trp(:,:,:) = 0.e0 
    178          d_oa_i_thd(:,:,:)  = 0.e0 ; d_oa_i_trp(:,:,:)  = 0.e0 
    179          ! 
    180          fseqv(:,:)    = 0.e0 
    181          fsbri(:,:)     = 0.e0     ; fsalt_res(:,:) = 0.e0 
     169         d_a_i_thd  (:,:,:)   = 0.e0   ;   d_a_i_trp  (:,:,:)   = 0.e0 
     170         d_v_i_thd  (:,:,:)   = 0.e0   ;   d_v_i_trp  (:,:,:)   = 0.e0 
     171         d_e_i_thd  (:,:,:,:) = 0.e0   ;   d_e_i_trp  (:,:,:,:) = 0.e0 
     172         d_v_s_thd  (:,:,:)   = 0.e0   ;   d_v_s_trp  (:,:,:)   = 0.e0 
     173         d_e_s_thd  (:,:,:,:) = 0.e0   ;   d_e_s_trp  (:,:,:,:) = 0.e0 
     174         d_smv_i_thd(:,:,:)   = 0.e0   ;   d_smv_i_trp(:,:,:)  = 0.e0 
     175         d_oa_i_thd (:,:,:)   = 0.e0   ;   d_oa_i_trp (:,:,:)   = 0.e0 
     176         ! 
     177         fseqv    (:,:) = 0.e0 
     178         fsbri    (:,:) = 0.e0     ;  fsalt_res(:,:) = 0.e0 
    182179         fsalt_rpo(:,:) = 0.e0 
    183          fhmec(:,:)     = 0.e0     ; fhbri(:,:)    = 0.e0 
    184          fmmec(:,:)     = 0.e0     ; fheat_res(:,:) = 0.e0 
    185          fheat_rpo(:,:) = 0.e0     ; focea2D(:,:)  = 0.e0 
    186          fsup2D(:,:)    = 0.e0 
     180         fhmec    (:,:) = 0.e0     ;   fhbri    (:,:) = 0.e0 
     181         fmmec    (:,:) = 0.e0     ;  fheat_res(:,:) = 0.e0 
     182         fheat_rpo(:,:) = 0.e0     ;   focea2D  (:,:) = 0.e0 
     183         fsup2D   (:,:) = 0.e0 
    187184         !  
    188          diag_sni_gr(:,:) = 0.e0   ; diag_lat_gr(:,:) = 0.e0 
    189          diag_bot_gr(:,:) = 0.e0   ; diag_dyn_gr(:,:) = 0.e0 
    190          diag_bot_me(:,:) = 0.e0   ; diag_sur_me(:,:) = 0.e0 
     185         diag_sni_gr(:,:) = 0.e0   ;   diag_lat_gr(:,:) = 0.e0 
     186         diag_bot_gr(:,:) = 0.e0   ;   diag_dyn_gr(:,:) = 0.e0 
     187         diag_bot_me(:,:) = 0.e0   ;   diag_sur_me(:,:) = 0.e0 
    191188         ! dynamical invariants 
    192          delta_i(:,:) = 0.e0       ; divu_i (:,:) = 0.e0       ;    shear_i(:,:) = 0.e0 
     189         delta_i(:,:) = 0.e0       ;   divu_i(:,:) = 0.e0       ;   shear_i(:,:) = 0.e0 
    193190 
    194191                          CALL lim_rst_opn( kt )     ! Open Ice restart file 
     
    196193         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 1, ' - Beginning the time step - ' )   ! control print 
    197194         ! 
    198          IF( .NOT. lk_c1d ) THEN                     ! Ice dynamics & transport (not in 1D case) 
     195         IF( .NOT. lk_c1d ) THEN 
     196                                                     ! Ice dynamics & transport (not in 1D case) 
    199197                          CALL lim_dyn( kt )              ! Ice dynamics    ( rheology/dynamics ) 
    200198                          CALL lim_trp( kt )              ! Ice transport   ( Advection/diffusion ) 
     
    204202                          CALL lim_itd_me                 ! Mechanical redistribution ! (ridging/rafting) 
    205203         ENDIF 
    206          ! 
    207204         !                                           ! Ice thermodynamics  
    208205                          CALL lim_var_glo2eqv            ! equivalent variables 
     
    216213                          CALL lim_itd_th( kt )           !  Remap ice categories, lateral accretion  ! 
    217214         ! 
    218          !                                           ! Global variables update | 
     215         !                                           ! Global variables update 
    219216                          CALL lim_var_agg( 1 )           ! requested by limupdate 
    220217                          CALL lim_update                 ! Global variables update 
     
    223220         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 2, ' - Final state - ' )   ! control print 
    224221         ! 
    225          !                                           ! Fluxes of mass and heat to the ocean | 
    226                          CALL lim_sbc_flx( kt )           ! Ice/Ocean heat freshwater/salt fluxes 
    227          IF( ln_limdyn .AND. kico == 0 )   &              ! Ice/Ocean stresses (only in ice-dynamic case) 
    228             &            CALL lim_sbc_tau( kt, kico )     ! otherwise the atm.-ocean stresses are used everywhere 
     222                          CALL lim_sbc_flx( kt )     ! Update surface ocean mass, heat and salt fluxes 
    229223         ! 
    230224         IF( ln_nicep )   CALL lim_prt_state( jiindx, jjindx, 3, ' - Final state lim_sbc - ' )   ! control print 
     
    239233         IF( ln_nicep )   CALL lim_ctl               ! alerts in case of model crash 
    240234         ! 
    241       ENDIF                                          ! End sea-ice time step only 
    242  
    243       !                                              !--------------------------! 
    244       ! Ice/Ocean stresses (nn_ico_cpl=1 or 2 cases) !  at all ocean time step  ! 
    245       !                                              !--------------------------! 
    246       IF( ln_limdyn .AND. kico /= 0 )   & 
    247          &                CALL lim_sbc_tau( kt, kico )  
    248 !!gm   remark, in this case the ocean-ice stress is not saved in diag call above .....  find a solution!!! 
     235      ENDIF                                    ! End sea-ice time step only 
     236 
     237      !                                        !--------------------------! 
     238      !                                        !  at all ocean time step  ! 
     239      !                                        !--------------------------! 
     240      !                                                
     241      !                                              ! Update surface ocean stresses (only in ice-dynamic case) 
     242      !                                                   ! otherwise the atm.-ocean stresses are used everywhere 
     243      IF( ln_limdyn )     CALL lim_sbc_tau( kt, ub(:,:,1), vb(:,:,1) )  ! using before instantaneous surf. currents 
     244       
     245!!gm   remark, the ocean-ice stress is not saved in ice diag call above .....  find a solution!!! 
    249246      ! 
    250247   END SUBROUTINE sbc_ice_lim 
     
    664661   !!---------------------------------------------------------------------- 
    665662CONTAINS 
    666    SUBROUTINE sbc_ice_lim ( kt, kblk, kico )     ! Dummy routine 
    667       WRITE(*,*) 'sbc_ice_lim: You should not have seen this print! error?', kt, kblk, kico 
     663   SUBROUTINE sbc_ice_lim ( kt, kblk )     ! Dummy routine 
     664      WRITE(*,*) 'sbc_ice_lim: You should not have seen this print! error?', kt, kblk 
    668665   END SUBROUTINE sbc_ice_lim 
    669666#endif 
Note: See TracChangeset for help on using the changeset viewer.