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 77 for trunk/NEMO/LIM_SRC – NEMO

Changeset 77 for trunk/NEMO/LIM_SRC


Ignore:
Timestamp:
2004-04-22T14:49:55+02:00 (20 years ago)
Author:
opalod
Message:

CT : UPDATE051 : Change variable name jeq to njeq and use a new algorithm to compute njeq based on Coriolis value

Location:
trunk/NEMO/LIM_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/LIM_SRC/dom_ice.F90

    r12 r77  
    1313 
    1414   IMPLICIT NONE 
    15    PUBLIC 
     15   PRIVATE 
    1616 
    17    REAL(wp) ::  &   !: 
    18       dz            !: depht of the 1st ocean level 
     17   !! * Share module variables 
     18   LOGICAL, PUBLIC ::   &  !: 
     19      l_jeq = .TRUE.       !: Equator inside the domain flag 
    1920 
    20    REAL(wp),DIMENSION(jpi,jpj) ::  &  !: 
    21       area          !: Surface of a grid square 
     21   INTEGER, PUBLIC ::   &  !: 
     22      njeq , njeqm1        !: j-index of the equator if it is inside the domain 
     23      !                    !  (otherwise = jpj+10 (SH) or -10 (SH) ) 
    2224 
    23    REAL(wp),DIMENSION(jpi,jpj,2,2) ::  &  !: 
    24       wght   ,   &  !: weight of the 4 neighbours to compute averages 
    25       akappa ,   &  !: first group of metric coefficients 
    26       bkappa        !: third group of metric coefficients 
     25   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   &  !: 
     26      fs2cor ,          &  !: coriolis factor 
     27      fcor   ,          &  !: coriolis coefficient 
     28      covrai ,          &  !: sine of geographic latitude 
     29      area   ,          &  !: surface of grid cell  
     30      tms    , tmu         !: temperature and velocity points masks 
    2731 
    28    REAL(wp),DIMENSION(jpi,jpj) :: &  !: 
    29       tms , tmu     !: masks arrays 
     32   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2,2) ::   &  !: 
     33      wght   ,          &  !: weight of the 4 neighbours to compute averages 
     34      akappa ,          &  !: first group of metric coefficients 
     35      bkappa               !: third group of metric coefficients 
    3036 
    31    REAL(wp),DIMENSION(jpi,jpj,2,2,2,2) ::  &  !: 
    32       alambd        !: second group of metric coefficients 
    33  
    34    REAL(wp),DIMENSION(jpi,jpj) ::  &  !: 
    35       fs2cor ,   &  !:  coriolis factor 
    36       fcor   ,   &  !:  coriolis coefficient 
    37       covrai ,   &  !:  sine of geographic latitude 
    38       aire          !:  total area  
    39  
    40    INTEGER  :: &    !: 
    41       jeq , jeqm1   !: 
     37   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2,2,2,2) ::   &  !: 
     38      alambd               !: second group of metric coefficients 
    4239 
    4340   !!====================================================================== 
  • trunk/NEMO/LIM_SRC/limdia.F90

    r12 r77  
    1212   !!---------------------------------------------------------------------- 
    1313   !! * Modules used 
    14    USE phycst 
    15    USE in_out_manager 
     14   USE phycst          !  
     15   USE par_ice         ! ice parameters 
    1616   USE ice_oce         ! ice variables 
    17    USE daymod 
    18    USE dom_ice 
    19    USE ice 
    20    USE iceini 
    21    USE limistate 
     17   USE daymod          ! 
     18   USE dom_ice         ! 
     19   USE ice             ! 
     20   USE iceini          ! 
     21   USE limistate       ! 
     22   USE in_out_manager  ! I/O manager 
    2223 
    2324   IMPLICIT NONE 
     
    2829 
    2930   !! * Shared module variables 
    30    INTEGER, PUBLIC  ::  & 
     31   INTEGER, PUBLIC  ::  &  !: 
    3132      ntmoy   = 1 ,     &  !: instantaneous values of ice evolution or averaging ntmoy 
    3233      ninfo   = 1          !: frequency of ouputs on file ice_evolu in case of averaging 
    3334 
    3435   !! * Module variables 
    35    INTEGER          ::  & 
    36       nfrinf  = 4          ! number of variables written in one line  
    37   
    38    INTEGER          ::  & 
     36   INTEGER, PARAMETER ::   &  ! Parameters for outputs to files "evolu" 
     37      jpinfmx = 100         ,    &  ! maximum number of key variables 
     38      jpchinf = 5           ,    &  ! ??? 
     39      jpchsep = jpchinf + 2         ! ??? 
     40 
     41   INTEGER ::   & 
     42      nfrinf  = 4 ,     &  ! number of variables written in one line  
    3943      nferme ,          &  ! last time step at which the var. are written on file 
    4044      nvinfo ,          &  ! number of total variables  
    4145      nbvt   ,          &  ! number of time variables 
    4246      naveg                ! number of step for accumulation before averaging 
    43   
    44    REAL(wp), DIMENSION(ninfmx) ::  & 
    45       vinfom               ! temporary working space 
    46  
    47    CHARACTER(len=8) ::  & 
     47 
     48   CHARACTER(len=8) ::   & 
    4849      fmtinf  = '1PE13.5 ' ! format of the output values   
    49  
    50    CHARACTER(len=30) :: & 
     50   CHARACTER(len=30) ::   & 
    5151      fmtw  ,           &  ! formats 
    5252      fmtr  ,           &  ! ??? 
    5353      fmtitr               ! ??? 
    54  
    55    CHARACTER(len=nchsep), DIMENSION(ninfmx) ::   & 
     54   CHARACTER(len=jpchsep), DIMENSION(jpinfmx) ::   & 
    5655      titvar               ! title of key variables 
    57  
    58    REAL(wp) :: & 
    59       epsi06 = 1.e-06 
     56  
     57   REAL(wp) ::   & 
     58      epsi06 = 1.e-06      ! ??? 
     59   REAL(wp), DIMENSION(jpinfmx) ::  & 
     60      vinfom               ! temporary working space 
     61   REAL(wp), DIMENSION(jpi,jpj) ::   & 
     62      aire                 ! masked grid cell area 
    6063 
    6164   !! * Substitutions 
     
    8184       INTEGER  ::   jv,ji, jj   ! dummy loop indices 
    8285       INTEGER  ::   nv          ! indice of variable  
    83        REAL(wp), DIMENSION(ninfmx) ::  &  
     86       REAL(wp), DIMENSION(jpinfmx) ::  &  
    8487          vinfor           ! temporary working space  
    8588       REAL(wp) ::    & 
     
    98101 
    99102       nv = 1  
    100        vinfor(nv) = REAL(numit) 
     103       vinfor(nv) = REAL( numit ) 
    101104       nv = nv + 1 
    102105       vinfor(nv) = nyear 
    103106  
    104107       DO jv = nbvt + 1, nvinfo 
    105           vinfor(jv) = 0.0 
     108          vinfor(jv) = 0.e0 
    106109       END DO 
    107110 
     
    109112       zextent85 = 0.e0 
    110113       ! variables in northern Hemis 
    111        DO jj = jeq, jpjm1 
     114       DO jj = njeq, jpjm1 
    112115          DO ji = fs_2, fs_jpim1   ! vector opt. 
    113116             IF( tms(ji,jj) == 1 ) THEN 
     
    135138      ! variables in southern Hemis 
    136139       nv = nv + 1 
    137        DO jj = 2, jeqm1 
     140       DO jj = 2, njeqm1 
    138141          DO ji = fs_2, fs_jpim1   ! vector opt. 
    139142             IF( tms(ji,jj) == 1 ) THEN 
     
    169172          naveg = 0 
    170173          DO jv = 1, nvinfo 
    171              vinfom(jv)=0.0 
     174             vinfom(jv) = 0.e0 
    172175          END DO 
    173176       ENDIF 
     
    199202       REAL(wp) ::   zxx0, zxx1    ! temporary scalars 
    200203 
    201        CHARACTER(len=nchinf) ::   titinf 
     204       CHARACTER(len=jpchinf) ::   titinf 
    202205       !!------------------------------------------------------------------- 
    203  
    204206 
    205207       ! Read Namelist namicedia 
     
    216218       ENDIF 
    217219 
     220       ! masked grid cell area 
     221       aire(:,:) = area(:,:) * tms(:,:) 
     222 
    218223       ! Titles of ice key variables : 
    219224       nv = 1 
     
    265270 
    266271       ! definition of formats  
    267        WRITE( fmtw  , '(A,I3,A2,I1,A)' )  '(', nfrinf, '(A', nchsep, ','//fmtinf//'))' 
    268        WRITE( fmtr  , '(A,I3,A,I1,A)'  )  '(', nfrinf, '(', nchsep, 'X,'//fmtinf//'))' 
    269        WRITE( fmtitr, '(A,I3,A,I1,A)'  )  '(', nvinfo, 'A', nchinf, ')' 
     272       WRITE( fmtw  , '(A,I3,A2,I1,A)' )  '(', nfrinf, '(A', jpchsep, ','//fmtinf//'))' 
     273       WRITE( fmtr  , '(A,I3,A,I1,A)'  )  '(', nfrinf, '(', jpchsep, 'X,'//fmtinf//'))' 
     274       WRITE( fmtitr, '(A,I3,A,I1,A)'  )  '(', nvinfo, 'A', jpchinf, ')' 
    270275 
    271276       ! opening  "ice_evolu" file 
    272        irecl = ( nchinf + 1 ) * nvinfo  
     277       irecl = ( jpchinf + 1 ) * nvinfo  
    273278       OPEN( numevo_ice, file='ice.evolu', status='unknown', RECL = irecl) 
    274279       OPEN( numevo_ice, file='ice.evolu', status='unknown') 
     
    276281       !- ecriture de 2 lignes d''entete : 
    277282       WRITE(numevo_ice,1000) fmtr, fmtw, fmtitr, nvinfo, ntot, 0, nfrinf 
    278        zxx0 = 0.001 * REAL(ninfo) 
    279        zxx1 = 0.001 * REAL(ndeb) 
    280        WRITE(numevo_ice,1111) REAL(nchinf), 0., zxx1, zxx0, 0., 0., 0 
     283       zxx0 = 0.001 * REAL( ninfo ) 
     284       zxx1 = 0.001 * REAL( ndeb  ) 
     285       WRITE(numevo_ice,1111) REAL(jpchinf), 0., zxx1, zxx0, 0., 0., 0 
    281286 
    282287       !- ecriture de 2 lignes de titre : 
     
    289294       !--preparation de "titvar" pour l''ecriture parmi les valeurs numeriques : 
    290295       DO  jv = 2 , nvinfo 
    291           titinf     = titvar(jv)(:nchinf) 
     296          titinf     = titvar(jv)(:jpchinf) 
    292297          titvar(jv) = '  '//titinf 
    293298       END DO 
  • trunk/NEMO/LIM_SRC/limistate.F90

    r3 r77  
    1616   USE oce             ! dynamics and tracers variables 
    1717   USE dom_oce 
     18   USE par_ice         ! ice parameters 
    1819   USE ice_oce         ! ice variables 
    1920   USE in_out_manager 
     
    3839      alins  = 0.1          ! initial leads area in the south 
    3940 
    40    REAL(wp)  ::            &  ! constant values 
    41       zzero   = 0.0     ,  & 
    42       zone    = 1.0 
     41   REAL(wp)  ::          &  ! constant values 
     42      zzero   = 0.e0  ,  & 
     43      zone    = 1.e0 
    4344   !!---------------------------------------------------------------------- 
    4445   !!   LIM 2.0 , UCL-LODYC-IPSL  (2003) 
     
    5051      !!------------------------------------------------------------------- 
    5152      !!                    ***  ROUTINE lim_istate  *** 
    52       !!  Purpose  :    
    53       !!  restart from a state defined in a binary file and arbitrary sea 
    54       !!  ice conditions 
     53      !! 
     54      !! ** Purpose :   defined the sea-ice initial state 
     55      !! 
     56      !! ** Method  :   restart from a state defined in a binary file 
     57      !!                or from arbitrary sea-ice conditions 
    5558      !! 
    5659      !! History : 
     
    5962      !! * Local variables 
    6063      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    61  
    6264      REAL(wp) ::   zidto,    &  ! temporary scalar 
    6365         zs0, ztf, zbin 
     
    8284 
    8385 
    84       u_io  (:,:) = 0. 
    85       v_io  (:,:) = 0. 
     86      u_io  (:,:) = 0.e0 
     87      v_io  (:,:) = 0.e0 
    8688      sst_io(:,:) = ( nfice - 1 ) * ( tn(:,:,1) + rt0 )   ! use the ocean initial values 
    8789      sss_io(:,:) = ( nfice - 1 ) *   sn(:,:,1)           ! tricky trick *(nfice-1) ! 
     
    9698      tfu(:,:)  = ztf    
    9799    
    98       !--  Northern hemisphere. 
    99       DO jj = jeq , jpj 
    100          DO ji = 1 , jpi 
     100      DO jj = 1, jpj 
     101         DO ji = 1, jpi 
    101102            !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice 
    102103            zidto  = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - tfu(ji,jj) - ttest) ) ) 
    103104 
    104             hicif(ji,jj)   = zidto * hginn 
    105             frld(ji,jj)    = zidto * alinn + ( 1.0 - zidto ) * 1.0 
    106             hsnif(ji,jj)   = zidto * hninn 
    107          ENDDO 
    108       ENDDO 
    109  
    110       !---  Southern hemisphere. 
    111       DO jj = 1, jeqm1 
    112          DO ji = 1, jpi 
    113             !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice. 
    114             zidto  = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - tfu(ji,jj) - ttest) ) ) 
    115  
    116             hicif(ji,jj)   = zidto * hgins 
    117             frld(ji,jj)    = zidto * alins + ( 1.0 - zidto ) * 1.0 
    118             hsnif(ji,jj)   = zidto * hnins 
    119          ENDDO 
    120       ENDDO 
     105            IF( fcor(ji,jj) >= 0.e0 ) THEN     !--  Northern hemisphere. 
     106               hicif(ji,jj)   = zidto * hginn 
     107               frld(ji,jj)    = zidto * alinn + ( 1.0 - zidto ) * 1.0 
     108               hsnif(ji,jj)   = zidto * hninn 
     109            ELSE                               !---  Southern hemisphere. 
     110               hicif(ji,jj)   = zidto * hgins 
     111               frld(ji,jj)    = zidto * alins + ( 1.0 - zidto ) * 1.0 
     112               hsnif(ji,jj)   = zidto * hnins 
     113            ENDIF 
     114         END DO 
     115      END DO 
    121116 
    122117      sist  (:,:)   = tfu(:,:) 
     
    132127# endif 
    133128 
    134  
    135          !---  Moments for advection.              
    136  
    137          sxice (:,:)  = 0.e0   ;   sxsn (:,:)  = 0.e0   ;   sxa  (:,:)  = 0.e0 
    138          syice (:,:)  = 0.e0   ;   sysn (:,:)  = 0.e0   ;   sya  (:,:)  = 0.e0 
    139          sxxice(:,:)  = 0.e0   ;   sxxsn(:,:)  = 0.e0   ;   sxxa (:,:)  = 0.e0 
    140          syyice(:,:)  = 0.e0   ;   syysn(:,:)  = 0.e0   ;   syya (:,:)  = 0.e0 
    141          sxyice(:,:)  = 0.e0   ;   sxysn(:,:)  = 0.e0   ;   sxya (:,:)  = 0.e0 
    142  
    143          sxc0  (:,:)  = 0.e0   ;   sxc1 (:,:)  = 0.e0   ;   sxc2 (:,:)  = 0.e0 
    144          syc0  (:,:)  = 0.e0   ;   syc1 (:,:)  = 0.e0   ;   syc2 (:,:)  = 0.e0 
    145          sxxc0 (:,:)  = 0.e0   ;   sxxc1(:,:)  = 0.e0   ;   sxxc2(:,:)  = 0.e0 
    146          syyc0 (:,:)  = 0.e0   ;   syyc1(:,:)  = 0.e0   ;   syyc2(:,:)  = 0.e0 
    147          sxyc0 (:,:)  = 0.e0   ;   sxyc1(:,:)  = 0.e0   ;   sxyc2(:,:)  = 0.e0 
    148  
    149          sxst  (:,:)  = 0.e0 
    150          syst  (:,:)  = 0.e0 
    151          sxxst (:,:)  = 0.e0 
    152          syyst (:,:)  = 0.e0 
    153          sxyst (:,:)  = 0.e0 
    154  
    155          !-- lateral boundary conditions 
    156          CALL lbc_lnk( hicif, 'T', 1. ) 
    157          CALL lbc_lnk( frld , 'T', 1. ) 
     129      !---  Moments for advection.              
     130 
     131      sxice (:,:)  = 0.e0   ;   sxsn (:,:)  = 0.e0   ;   sxa  (:,:)  = 0.e0 
     132      syice (:,:)  = 0.e0   ;   sysn (:,:)  = 0.e0   ;   sya  (:,:)  = 0.e0 
     133      sxxice(:,:)  = 0.e0   ;   sxxsn(:,:)  = 0.e0   ;   sxxa (:,:)  = 0.e0 
     134      syyice(:,:)  = 0.e0   ;   syysn(:,:)  = 0.e0   ;   syya (:,:)  = 0.e0 
     135      sxyice(:,:)  = 0.e0   ;   sxysn(:,:)  = 0.e0   ;   sxya (:,:)  = 0.e0 
     136 
     137      sxc0  (:,:)  = 0.e0   ;   sxc1 (:,:)  = 0.e0   ;   sxc2 (:,:)  = 0.e0 
     138      syc0  (:,:)  = 0.e0   ;   syc1 (:,:)  = 0.e0   ;   syc2 (:,:)  = 0.e0 
     139      sxxc0 (:,:)  = 0.e0   ;   sxxc1(:,:)  = 0.e0   ;   sxxc2(:,:)  = 0.e0 
     140      syyc0 (:,:)  = 0.e0   ;   syyc1(:,:)  = 0.e0   ;   syyc2(:,:)  = 0.e0 
     141      sxyc0 (:,:)  = 0.e0   ;   sxyc1(:,:)  = 0.e0   ;   sxyc2(:,:)  = 0.e0 
     142 
     143      sxst  (:,:)  = 0.e0 
     144      syst  (:,:)  = 0.e0 
     145      sxxst (:,:)  = 0.e0 
     146      syyst (:,:)  = 0.e0 
     147      sxyst (:,:)  = 0.e0 
     148 
     149      !-- lateral boundary conditions 
     150      CALL lbc_lnk( hicif, 'T', 1. ) 
     151      CALL lbc_lnk( frld , 'T', 1. ) 
    158152!i bug frld = 1 over land 
    159          frld(:,:) = tms(:,:) * frld(:,:) + ( 1. - tms(:,:) )   ! put 1 over land 
     153      frld(:,:) = tms(:,:) * frld(:,:) + ( 1. - tms(:,:) )   ! put 1 over land 
    160154!i 
    161          CALL lbc_lnk( hsnif, 'T', 1. ) 
    162          CALL lbc_lnk( sist , 'T', 1. ) 
    163          DO jk = 1, nlayersp1 
    164             CALL lbc_lnk(tbif(:,:,jk), 'T', 1. ) 
    165          END DO 
    166          CALL lbc_lnk( fsbbq  , 'T', 1. ) 
    167          CALL lbc_lnk( qstoif , 'T', 1. ) 
    168          CALL lbc_lnk( sss_io , 'T', 1. ) 
     155      CALL lbc_lnk( hsnif, 'T', 1. ) 
     156      CALL lbc_lnk( sist , 'T', 1. ) 
     157      DO jk = 1, jplayersp1 
     158         CALL lbc_lnk(tbif(:,:,jk), 'T', 1. ) 
     159      END DO 
     160      CALL lbc_lnk( fsbbq  , 'T', 1. ) 
     161      CALL lbc_lnk( qstoif , 'T', 1. ) 
     162      CALL lbc_lnk( sss_io , 'T', 1. ) 
    169163 
    170164   END SUBROUTINE lim_istate 
     
    175169      !!                   ***  ROUTINE lim_istate_init  *** 
    176170      !!         
    177       !! ** Purpose : Definition of initial state of the ice  
    178       !! 
    179       !! ** Method : Read the namiceini namelist and check the parameter  
     171      !! ** Purpose :   Definition of initial state of the ice  
     172      !! 
     173      !! ** Method  :  Read the namiceini namelist and check the parameter  
    180174      !!       values called at the first timestep (nit000) 
    181175      !! 
    182       !! ** input :  
    183       !!        Namelist namiceini 
    184       !! 
    185       !! history : 
     176      !! ** input   :   Namelist namiceini 
     177      !! 
     178      !! history 
    186179      !!  8.5  ! 03-08 (C. Ethe) original code 
    187180      !!------------------------------------------------------------------- 
     
    189182      !!------------------------------------------------------------------- 
    190183 
    191       ! Define the initial parameters 
    192       ! ------------------------- 
    193  
    194184      ! Read Namelist namiceini  
     185 
    195186      REWIND ( numnam_ice ) 
    196187      READ   ( numnam_ice , namiceini ) 
     
    199190         WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 
    200191         WRITE(numout,*) '~~~~~~~~~~~~~~~' 
    201          WRITE(numout,*) '   threshold water temp. for initial sea-ice    ttest      = ', ttest 
    202          WRITE(numout,*) '   initial snow thickness in the north          hninn      = ', hninn 
    203          WRITE(numout,*) '   initial ice thickness in the north           hginn      = ', hginn  
    204          WRITE(numout,*) '   initial leads area in the north              alinn      = ', alinn             
    205          WRITE(numout,*) '   initial snow thickness in the south          hnins      = ', hnins  
    206          WRITE(numout,*) '   initial ice thickness in the south           hgins      = ', hgins 
    207          WRITE(numout,*) '   initial leads area in the south              alins      = ', alins 
     192         WRITE(numout,*) '         threshold water temp. for initial sea-ice    ttest      = ', ttest 
     193         WRITE(numout,*) '         initial snow thickness in the north          hninn      = ', hninn 
     194         WRITE(numout,*) '         initial ice thickness in the north           hginn      = ', hginn  
     195         WRITE(numout,*) '         initial leads area in the north              alinn      = ', alinn             
     196         WRITE(numout,*) '         initial snow thickness in the south          hnins      = ', hnins  
     197         WRITE(numout,*) '         initial ice thickness in the south           hgins      = ', hgins 
     198         WRITE(numout,*) '         initial leads area in the south              alins      = ', alins 
    208199      ENDIF 
    209200             
  • trunk/NEMO/LIM_SRC/limrhg.F90

    r12 r77  
    11MODULE limrhg 
    2 #if defined key_ice_lim 
    32   !!====================================================================== 
    43   !!                     ***  MODULE  limrhg  *** 
    54   !!   Ice rheology :  performs sea ice rheology 
    65   !!====================================================================== 
    7  
     6#if defined key_ice_lim 
     7   !!---------------------------------------------------------------------- 
     8   !!   'key_ice_lim'                                     LIM sea-ice model 
    89   !!---------------------------------------------------------------------- 
    910   !!   lim_rhg   : computes ice velocities 
     
    1112   !! * Modules used 
    1213   USE phycst 
     14   USE par_oce 
    1315   USE ice_oce         ! ice variables 
    1416   USE dom_ice 
    1517   USE ice 
    1618   USE lbclnk 
     19   USE lib_mpp 
    1720   USE in_out_manager  ! I/O manager 
    1821 
     
    2427 
    2528   !! * Module variables 
    26      REAL(wp)  ::            &  ! constant values 
    27          rzero   = 0.e0   ,  & 
    28          rone    = 1.e0 
     29   REAL(wp)  ::            &  ! constant values 
     30      rzero   = 0.e0   ,  & 
     31      rone    = 1.e0 
    2932   !!---------------------------------------------------------------------- 
    3033   !!   LIM 2.0 , UCL-LODYC-IPSL  (2003) 
     
    3336CONTAINS 
    3437 
    35    SUBROUTINE lim_rhg( khemi ) 
     38   SUBROUTINE lim_rhg( k_j1, k_jpj ) 
    3639      !!------------------------------------------------------------------- 
    3740      !!                 ***  SUBROUTINR lim_rhg  *** 
     41      !! 
    3842      !! ** purpose :   determines the velocity field of sea ice by using 
    3943      !!  atmospheric (wind stress) and oceanic (water stress and surface 
     
    4953      !!------------------------------------------------------------------- 
    5054      ! * Arguments 
    51       INTEGER, INTENT(in) ::   khemi   ! -1/1 = South/North hemisphere flag 
     55      INTEGER, INTENT(in) ::   k_j1 ,  &  ! southern j-index for ice computation 
     56         &                     k_jpj      ! northern j-index for ice computation 
    5257 
    5358      ! * Local variables 
     
    5560 
    5661      INTEGER  :: & 
    57          i_j1, i_j2, i_jpj, i_jpjm1, & ! ???? 
    5862         iim1, ijm1, iip1 , ijp1   , & ! temporary integers 
    5963         iter, jter                    !    "          " 
     
    6973         zmpzas, zstms, zindu, zindu1, zusdtp, zmassdt, zcorlal,  & 
    7074         ztrace2, zdeter, zdelta, zsang, zmask, zdgp, zdgi, zdiag 
    71       REAL(wp),DIMENSION(jpj) ::   & 
    72          zind                                 ! i-averaged indicator of sea-ice 
    7375      REAL(wp),DIMENSION(jpi,jpj) ::   & 
    7476         zpresh, zfrld, zmass, zcorl,     & 
     
    7779         zc1, zc2, zd1, zd2, zden, zu_ice, zv_ice, zresr 
    7880      REAL(wp),DIMENSION(jpi,jpj,2,2) :: & 
    79          zsigm11, zsigm12, zsigm22, zsigm21 
     81         zs11, zs12, zs22, zs21 
    8082      !!------------------------------------------------------------------- 
    8183       
    82       !  Store initial velocities. 
     84      !  Store initial velocities 
     85      !  ------------------------ 
    8386      zu0(:,:) = u_ice(:,:) 
    8487      zv0(:,:) = v_ice(:,:) 
    8588 
    86       ! Numerical characteristics.                                        
    87       ! -------------------------- 
    88  
    89       !  Define the j-limits where ice dynamics is computed 
    90       ! --------------------------------------------------- 
    91  
    92       DO jj = 1, jpj 
    93          zind(jj) = SUM( frld(:,jj) )   ! = FLOAT(jpj) if ocean everwhere on a j-line 
    94       END DO 
    95  
    96       IF( khemi ==  1 )  THEN      ! Northern hemisphere 
    97          i_j1  = jeq 
    98          i_jpj = jpj 
    99          DO jj = jpj, jeq, -1 
    100             IF( zind(jj) < FLOAT(jpi) )   i_j1 = jj 
    101          END DO 
    102          i_j1 = MAX( 1, i_j1-1) 
    103          IF( l_ctl .AND. lwp ) WRITE(numout,*) 'lim_rhg : NH i_j1 = ', i_j1, ' ij_pj = ', i_jpj 
    104       ELSE                         ! Southern hemisphere 
    105          i_j1  = 2 
    106          i_jpj = jpj 
    107          DO jj = 1, jeq 
    108             IF( zind(jj) < FLOAT(jpi) ) i_jpj = jj 
    109          END DO 
    110          i_jpj = MIN( jpj, i_jpj+2) 
    111          IF( l_ctl .AND. lwp ) WRITE(numout,*) 'lim_rhg : SH i_j1 = ', i_j1, ' ij_pj = ', i_jpj 
    112       ENDIF 
    113       i_j2    = i_j1  + 1   ! inner domain indices 
    114       i_jpjm1 = i_jpj - 1 
    115  
    116  
    117       !  2) Sign of turning angle for oceanic drag.                          | 
    118       !----------------------------------------------------------------------- 
    119  
    120       zsang = REAL( khemi ) * sangvg   ! only the sinus changes its sign with the hemisphere 
    121  
    122  
    123       !  3) Ice mass, ice strength, and wind stress at the center            | 
    124       !     of the grid squares.                                             | 
    125       !----------------------------------------------------------------------- 
    126  
    127       DO jj = i_j1 , i_jpjm1 
     89      ! Ice mass, ice strength, and wind stress at the center            | 
     90      ! of the grid squares.                                             | 
     91      !------------------------------------------------------------------- 
     92 
     93      DO jj = k_j1 , k_jpj-1 
    12894         DO ji = 1 , jpi 
    12995            za1(ji,jj)    = tms(ji,jj) * ( rhosn * hsnm(ji,jj) + rhoic * hicm(ji,jj) ) 
     
    145111      !--------------------------------------------------------------------------- 
    146112          
    147       DO jj = i_j2, i_jpjm1 
     113      DO jj = k_j1+1, k_jpj-1 
    148114         DO ji = 2, jpi 
    149115            zstms = tms(ji,jj  ) * wght(ji,jj,2,2) + tms(ji-1,jj  ) * wght(ji,jj,1,2)   & 
     
    211177         ! Computation of free drift field for free slip boundary conditions. 
    212178 
    213            DO jj = i_j1, i_jpjm1 
     179           DO jj = k_j1, k_jpj-1 
    214180              DO ji = 1, jpim1 
    215181                 !- Rate of strain tensor. 
     
    242208 
    243209           !-  Determination of zc1u, zc2u, zc1v and zc2v. 
    244            DO jj = i_j2, i_jpjm1 
     210           DO jj = k_j1+1, k_jpj-1 
    245211              DO ji = 2, jpim1 
    246212                 ze11   =  akappa(ji-1,jj-1,1,1) 
     
    254220 
    255221                 zdiag = zvis22 * ( ze11 + ze22 ) 
    256                  zsigm11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
    257                  zsigm12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
    258                  zsigm22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
    259                  zsigm21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
     222                 zs11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
     223                 zs12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
     224                 zs22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
     225                 zs21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
    260226 
    261227                 ze11   = -akappa(ji,jj-1,1,1) 
     
    269235 
    270236                 zdiag = zvis22 * ( ze11 + ze22 ) 
    271                  zsigm11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
    272                  zsigm12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
    273                  zsigm22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
    274                  zsigm21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
     237                 zs11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
     238                 zs12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
     239                 zs22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
     240                 zs21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
    275241 
    276242                 ze11   =  akappa(ji-1,jj,1,1) 
     
    284250 
    285251                 zdiag = zvis22 * ( ze11 + ze22 )  
    286                  zsigm11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
    287                  zsigm12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
    288                  zsigm22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
    289                  zsigm21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
     252                 zs11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
     253                 zs12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
     254                 zs22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
     255                 zs21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
    290256 
    291257                 ze11   = -akappa(ji,jj,1,1) 
     
    299265 
    300266                 zdiag = zvis22 * ( ze11 + ze22 ) 
    301                  zsigm11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
    302                  zsigm12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
    303                  zsigm22(ji,jj,2,2) =  zvis11 * ze22 + zdiag  
    304                  zsigm21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
     267                 zs11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
     268                 zs12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
     269                 zs22(ji,jj,2,2) =  zvis11 * ze22 + zdiag  
     270                 zs21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
    305271              END DO 
    306272           END DO 
    307273 
    308            DO jj = i_j2, i_jpjm1 
     274           DO jj = k_j1+1, k_jpj-1 
    309275              DO ji = 2, jpim1 
    310                  zc1u(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm11(ji,jj,2,2)   & 
    311                     &        - alambd(ji,jj,2,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm11(ji,jj,1,2)   & 
    312                     &        - alambd(ji,jj,1,1,2,1) * zsigm12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm12(ji,jj,1,1)   & 
    313                     &        + alambd(ji,jj,1,1,2,2) * zsigm12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm12(ji,jj,1,2)   & 
    314                     &        + alambd(ji,jj,1,2,1,1) * zsigm21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zsigm21(ji,jj,2,1)   & 
    315                     &        + alambd(ji,jj,1,2,1,2) * zsigm21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zsigm21(ji,jj,2,2)   & 
    316                     &        - alambd(ji,jj,2,1,1,1) * zsigm22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zsigm22(ji,jj,2,1)   & 
    317                     &        - alambd(ji,jj,2,1,1,2) * zsigm22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zsigm22(ji,jj,2,2) 
     276                 zc1u(ji,jj) =   & 
     277                    + alambd(ji,jj,2,2,2,1) * zs11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs11(ji,jj,2,2)   & 
     278                    - alambd(ji,jj,2,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs11(ji,jj,1,2)   & 
     279                    - alambd(ji,jj,1,1,2,1) * zs12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs12(ji,jj,1,1)   & 
     280                    + alambd(ji,jj,1,1,2,2) * zs12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs12(ji,jj,1,2)   & 
     281                    + alambd(ji,jj,1,2,1,1) * zs21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zs21(ji,jj,2,1)   & 
     282                    + alambd(ji,jj,1,2,1,2) * zs21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zs21(ji,jj,2,2)   & 
     283                    - alambd(ji,jj,2,1,1,1) * zs22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zs22(ji,jj,2,1)   & 
     284                    - alambd(ji,jj,2,1,1,2) * zs22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zs22(ji,jj,2,2) 
    318285                  
    319                  zc2u(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm21(ji,jj,2,2)   & 
    320                     &        - alambd(ji,jj,2,2,1,1) * zsigm21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm21(ji,jj,1,2)   & 
    321                     &        - alambd(ji,jj,1,1,2,1) * zsigm22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm22(ji,jj,1,1)   & 
    322                     &        + alambd(ji,jj,1,1,2,2) * zsigm22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm22(ji,jj,1,2)   & 
    323                     &        - alambd(ji,jj,1,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zsigm11(ji,jj,2,1)   & 
    324                     &        - alambd(ji,jj,1,2,1,2) * zsigm11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zsigm11(ji,jj,2,2)   & 
    325                     &        + alambd(ji,jj,2,1,1,1) * zsigm12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zsigm12(ji,jj,2,1)   & 
    326                     &        + alambd(ji,jj,2,1,1,2) * zsigm12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zsigm12(ji,jj,2,2) 
     286                 zc2u(ji,jj) =   & 
     287                    + alambd(ji,jj,2,2,2,1) * zs21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs21(ji,jj,2,2)   & 
     288                    - alambd(ji,jj,2,2,1,1) * zs21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs21(ji,jj,1,2)   & 
     289                    - alambd(ji,jj,1,1,2,1) * zs22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs22(ji,jj,1,1)   & 
     290                    + alambd(ji,jj,1,1,2,2) * zs22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs22(ji,jj,1,2)   & 
     291                    - alambd(ji,jj,1,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zs11(ji,jj,2,1)   & 
     292                    - alambd(ji,jj,1,2,1,2) * zs11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zs11(ji,jj,2,2)   & 
     293                    + alambd(ji,jj,2,1,1,1) * zs12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zs12(ji,jj,2,1)   & 
     294                    + alambd(ji,jj,2,1,1,2) * zs12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zs12(ji,jj,2,2) 
    327295             END DO 
    328296           END DO 
    329297 
    330            DO jj = i_j2, i_jpjm1 
     298           DO jj = k_j1+1, k_jpj-1 
    331299              DO ji = 2, jpim1 
    332300                 !  zc1v , zc2v. 
     
    341309 
    342310                 zdiag = zvis22 * ( ze11 + ze22 ) 
    343                  zsigm11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
    344                  zsigm12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
    345                  zsigm22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
    346                  zsigm21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
     311                 zs11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
     312                 zs12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
     313                 zs22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
     314                 zs21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
    347315  
    348316                 ze11   =  akappa(ji,jj-1,1,2) 
     
    356324 
    357325                 zdiag = zvis22 * ( ze11 + ze22 ) 
    358                  zsigm11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
    359                  zsigm12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
    360                  zsigm22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
    361                  zsigm21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
     326                 zs11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
     327                 zs12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
     328                 zs22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
     329                 zs21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
    362330 
    363331                 ze11   =  akappa(ji-1,jj,1,2) 
     
    371339 
    372340                 zdiag = zvis22 * ( ze11 + ze22 ) 
    373                  zsigm11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
    374                  zsigm12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
    375                  zsigm22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
    376                  zsigm21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
     341                 zs11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
     342                 zs12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
     343                 zs22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
     344                 zs21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
    377345 
    378346                 ze11   =  akappa(ji,jj,1,2) 
     
    386354 
    387355                 zdiag = zvis22 * ( ze11 + ze22 ) 
    388                  zsigm11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
    389                  zsigm12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
    390                  zsigm22(ji,jj,2,2) =  zvis11 * ze22 + zdiag 
    391                  zsigm21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
     356                 zs11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
     357                 zs12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
     358                 zs22(ji,jj,2,2) =  zvis11 * ze22 + zdiag 
     359                 zs21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
    392360 
    393361              END DO 
    394362           END DO 
    395363 
    396            DO jj = i_j2, i_jpjm1 
     364           DO jj = k_j1+1, k_jpj-1 
    397365              DO ji = 2, jpim1 
    398                  zc1v(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm11(ji,jj,2,2)   & 
    399                     &        - alambd(ji,jj,2,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm11(ji,jj,1,2)   & 
    400                     &        - alambd(ji,jj,1,1,2,1) * zsigm12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm12(ji,jj,1,1)   & 
    401                     &        + alambd(ji,jj,1,1,2,2) * zsigm12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm12(ji,jj,1,2)   & 
    402                     &        + alambd(ji,jj,1,2,1,1) * zsigm21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zsigm21(ji,jj,2,1)   & 
    403                     &        + alambd(ji,jj,1,2,1,2) * zsigm21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zsigm21(ji,jj,2,2)   & 
    404                     &        - alambd(ji,jj,2,1,1,1) * zsigm22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zsigm22(ji,jj,2,1)   & 
    405                     &        - alambd(ji,jj,2,1,1,2) * zsigm22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zsigm22(ji,jj,2,2) 
    406                  zc2v(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm21(ji,jj,2,2)   & 
    407                     &        - alambd(ji,jj,2,2,1,1) * zsigm21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm21(ji,jj,1,2)   & 
    408                     &        - alambd(ji,jj,1,1,2,1) * zsigm22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm22(ji,jj,1,1)   & 
    409                     &        + alambd(ji,jj,1,1,2,2) * zsigm22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm22(ji,jj,1,2)   & 
    410                     &        - alambd(ji,jj,1,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zsigm11(ji,jj,2,1)   & 
    411                     &        - alambd(ji,jj,1,2,1,2) * zsigm11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zsigm11(ji,jj,2,2)   & 
    412                     &        + alambd(ji,jj,2,1,1,1) * zsigm12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zsigm12(ji,jj,2,1)   & 
    413                     &        + alambd(ji,jj,2,1,1,2) * zsigm12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zsigm12(ji,jj,2,2) 
     366                 zc1v(ji,jj) =   & 
     367                    + alambd(ji,jj,2,2,2,1) * zs11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs11(ji,jj,2,2)   & 
     368                    - alambd(ji,jj,2,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs11(ji,jj,1,2)   & 
     369                    - alambd(ji,jj,1,1,2,1) * zs12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs12(ji,jj,1,1)   & 
     370                    + alambd(ji,jj,1,1,2,2) * zs12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs12(ji,jj,1,2)   & 
     371                    + alambd(ji,jj,1,2,1,1) * zs21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zs21(ji,jj,2,1)   & 
     372                    + alambd(ji,jj,1,2,1,2) * zs21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zs21(ji,jj,2,2)   & 
     373                    - alambd(ji,jj,2,1,1,1) * zs22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zs22(ji,jj,2,1)   & 
     374                    - alambd(ji,jj,2,1,1,2) * zs22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zs22(ji,jj,2,2) 
     375                 zc2v(ji,jj) =   & 
     376                    + alambd(ji,jj,2,2,2,1) * zs21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs21(ji,jj,2,2)   & 
     377                    - alambd(ji,jj,2,2,1,1) * zs21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs21(ji,jj,1,2)   & 
     378                    - alambd(ji,jj,1,1,2,1) * zs22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs22(ji,jj,1,1)   & 
     379                    + alambd(ji,jj,1,1,2,2) * zs22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs22(ji,jj,1,2)   & 
     380                    - alambd(ji,jj,1,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zs11(ji,jj,2,1)   & 
     381                    - alambd(ji,jj,1,2,1,2) * zs11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zs11(ji,jj,2,2)   & 
     382                    + alambd(ji,jj,2,1,1,1) * zs12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zs12(ji,jj,2,1)   & 
     383                    + alambd(ji,jj,2,1,1,2) * zs12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zs12(ji,jj,2,2) 
    414384              END DO 
    415385           END DO 
     
    420390 
    421391            !  Store previous drift field.    
    422             DO jj = i_j1, i_jpjm1 
     392            DO jj = k_j1, k_jpj-1 
    423393               zu_ice(:,jj) = u_ice(:,jj) 
    424394               zv_ice(:,jj) = v_ice(:,jj) 
    425395            END DO 
    426396 
    427             DO jj = i_j2, i_jpjm1 
    428                 DO ji = 2, jpim1 
    429                   zur     = u_ice(ji,jj) - u_oce(ji,jj) 
    430                   zvr     = v_ice(ji,jj) - v_oce(ji,jj) 
    431                   zmod    = SQRT( zur * zur + zvr * zvr) * ( 1.0 - zfrld(ji,jj) ) 
    432                   za      = rhoco * zmod 
    433                   zac     = za * cangvg 
     397            DO jj = k_j1+1, k_jpj-1 
     398               zsang  = SIGN( 1.e0, fcor(1,jj) ) * sangvg   ! only the sinus changes its sign with the hemisphere 
     399               DO ji = 2, jpim1 
     400                 zur     = u_ice(ji,jj) - u_oce(ji,jj) 
     401                 zvr     = v_ice(ji,jj) - v_oce(ji,jj) 
     402                 zmod    = SQRT( zur * zur + zvr * zvr) * ( 1.0 - zfrld(ji,jj) ) 
     403                 za      = rhoco * zmod 
     404                 zac     = za * cangvg 
    434405                  zmpzas  = alpha * zcorl(ji,jj) + za * zsang 
    435406                  zmassdt = zusdtp * zmass(ji,jj) 
     
    456427            ! Terms that do not involve already up-dated velocities. 
    457428          
    458             DO jj = i_j2, i_jpjm1 
     429            DO jj = k_j1+1, k_jpj-1 
    459430               DO ji = 2, jpim1 
    460431                  iim1 = ji 
     
    471442                  zvis21 =       zviseta (iim1,ijm1) 
    472443                  zdiag = zvis22 * ( ze11 + ze22 ) 
    473                   zsigm11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
    474                   zsigm12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
    475                   zsigm22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
    476                   zsigm21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
     444                  zs11(ji,jj,2,1) =  zvis11 * ze11 + zdiag 
     445                  zs12(ji,jj,2,1) =  zvis12 * ze12 + zvis21 * ze21 
     446                  zs22(ji,jj,2,1) =  zvis11 * ze22 + zdiag 
     447                  zs21(ji,jj,2,1) =  zvis12 * ze21 + zvis21 * ze12 
    477448 
    478449 
     
    494465                  zvis21 =       zviseta (iim1,ijm1) 
    495466                  zdiag = zvis22 * ( ze11 + ze22 ) 
    496                   zsigm11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
    497                   zsigm12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
    498                   zsigm22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
    499                   zsigm21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
     467                  zs11(ji,jj,1,2) =  zvis11 * ze11 + zdiag 
     468                  zs12(ji,jj,1,2) =  zvis12 * ze12 + zvis21 * ze21 
     469                  zs22(ji,jj,1,2) =  zvis11 * ze22 + zdiag 
     470                  zs21(ji,jj,1,2) =  zvis12 * ze21 + zvis21 * ze12 
    500471 
    501472                  iim1 = ji 
     
    517488 
    518489                  zdiag = zvis22 * ( ze11 + ze22 ) 
    519                   zsigm11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
    520                   zsigm12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
    521                   zsigm22(ji,jj,2,2) =  zvis11 * ze22 + zdiag 
    522                   zsigm21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
     490                  zs11(ji,jj,2,2) =  zvis11 * ze11 + zdiag 
     491                  zs12(ji,jj,2,2) =  zvis12 * ze12 + zvis21 * ze21 
     492                  zs22(ji,jj,2,2) =  zvis11 * ze22 + zdiag 
     493                  zs21(ji,jj,2,2) =  zvis12 * ze21 + zvis21 * ze12 
    523494 
    524495               END DO 
     
    529500            ! Using arrays u and v in the computation of the terms ze leads to GAUSS-SEIDEL method.    
    530501              
    531             DO jj = i_j2, i_jpjm1 
     502            DO jj = k_j1+1, k_jpj-1 
    532503               DO ji = 2, jpim1 
    533504                  iim1 = ji - 1 
     
    549520 
    550521                  zdiag = zvis22 * ( ze11 + ze22 ) 
    551                   zsigm11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
    552                   zsigm12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
    553                   zsigm22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
    554                   zsigm21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
     522                  zs11(ji,jj,1,1) =  zvis11 * ze11 + zdiag 
     523                  zs12(ji,jj,1,1) =  zvis12 * ze12 + zvis21 * ze21 
     524                  zs22(ji,jj,1,1) =  zvis11 * ze22 + zdiag 
     525                  zs21(ji,jj,1,1) =  zvis12 * ze21 + zvis21 * ze12 
    555526 
    556527 
     
    572543 
    573544                  zdiag = zvis22 * ( ze11 + ze22 ) 
    574                   zsigm11(ji,jj,2,1) =  zsigm11(ji,jj,2,1) + zvis11 * ze11 + zdiag 
    575                   zsigm12(ji,jj,2,1) =  zsigm12(ji,jj,2,1) + zvis12 * ze12 + zvis21 * ze21 
    576                   zsigm22(ji,jj,2,1) =  zsigm22(ji,jj,2,1) + zvis11 * ze22 + zdiag 
    577                   zsigm21(ji,jj,2,1) =  zsigm21(ji,jj,2,1) + zvis12 * ze21 + zvis21 * ze12 
     545                  zs11(ji,jj,2,1) =  zs11(ji,jj,2,1) + zvis11 * ze11 + zdiag 
     546                  zs12(ji,jj,2,1) =  zs12(ji,jj,2,1) + zvis12 * ze12 + zvis21 * ze21 
     547                  zs22(ji,jj,2,1) =  zs22(ji,jj,2,1) + zvis11 * ze22 + zdiag 
     548                  zs21(ji,jj,2,1) =  zs21(ji,jj,2,1) + zvis12 * ze21 + zvis21 * ze12 
    578549 
    579550 
     
    590561 
    591562                  zdiag = zvis22 * ( ze11 + ze22 ) 
    592                   zsigm11(ji,jj,1,2) =  zsigm11(ji,jj,1,2) + zvis11 * ze11 + zdiag  
    593                   zsigm12(ji,jj,1,2) =  zsigm12(ji,jj,1,2) + zvis12 * ze12 + zvis21 * ze21 
    594                   zsigm22(ji,jj,1,2) =  zsigm22(ji,jj,1,2) + zvis11 * ze22 + zdiag 
    595                   zsigm21(ji,jj,1,2) =  zsigm21(ji,jj,1,2) + zvis12 * ze21 + zvis21 * ze12 
     563                  zs11(ji,jj,1,2) =  zs11(ji,jj,1,2) + zvis11 * ze11 + zdiag  
     564                  zs12(ji,jj,1,2) =  zs12(ji,jj,1,2) + zvis12 * ze12 + zvis21 * ze21 
     565                  zs22(ji,jj,1,2) =  zs22(ji,jj,1,2) + zvis11 * ze22 + zdiag 
     566                  zs21(ji,jj,1,2) =  zs21(ji,jj,1,2) + zvis12 * ze21 + zvis21 * ze12 
    596567 
    597568!i             END DO 
    598569!i          END DO 
    599570 
    600 !i          DO jj = i_j2, i_jpjm1 
     571!i          DO jj = k_j1+1, k_jpj-1 
    601572!i             DO ji = 2, jpim1 
    602                   zd1(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm11(ji,jj,2,2)  & 
    603                      &       - alambd(ji,jj,2,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm11(ji,jj,1,2)  & 
    604                      &       - alambd(ji,jj,1,1,2,1) * zsigm12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm12(ji,jj,1,1)  & 
    605                      &       + alambd(ji,jj,1,1,2,2) * zsigm12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm12(ji,jj,1,2)  & 
    606                      &       + alambd(ji,jj,1,2,1,1) * zsigm21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zsigm21(ji,jj,2,1)  & 
    607                      &       + alambd(ji,jj,1,2,1,2) * zsigm21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zsigm21(ji,jj,2,2)  & 
    608                      &       - alambd(ji,jj,2,1,1,1) * zsigm22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zsigm22(ji,jj,2,1)  & 
    609                      &       - alambd(ji,jj,2,1,1,2) * zsigm22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zsigm22(ji,jj,2,2) 
    610  
    611                   zd2(ji,jj) = alambd(ji,jj,2,2,2,1) * zsigm21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zsigm21(ji,jj,2,2)  & 
    612                      &       - alambd(ji,jj,2,2,1,1) * zsigm21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zsigm21(ji,jj,1,2)  & 
    613                      &       - alambd(ji,jj,1,1,2,1) * zsigm22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zsigm22(ji,jj,1,1)  & 
    614                      &       + alambd(ji,jj,1,1,2,2) * zsigm22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zsigm22(ji,jj,1,2)  & 
    615                      &       - alambd(ji,jj,1,2,1,1) * zsigm11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zsigm11(ji,jj,2,1)  & 
    616                      &       - alambd(ji,jj,1,2,1,2) * zsigm11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zsigm11(ji,jj,2,2)  & 
    617                      &       + alambd(ji,jj,2,1,1,1) * zsigm12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zsigm12(ji,jj,2,1)  & 
    618                      &       + alambd(ji,jj,2,1,1,2) * zsigm12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zsigm12(ji,jj,2,2) 
     573                  zd1(ji,jj) =   & 
     574                     + alambd(ji,jj,2,2,2,1) * zs11(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs11(ji,jj,2,2)  & 
     575                     - alambd(ji,jj,2,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs11(ji,jj,1,2)  & 
     576                     - alambd(ji,jj,1,1,2,1) * zs12(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs12(ji,jj,1,1)  & 
     577                     + alambd(ji,jj,1,1,2,2) * zs12(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs12(ji,jj,1,2)  & 
     578                     + alambd(ji,jj,1,2,1,1) * zs21(ji,jj,1,1) + alambd(ji,jj,1,2,2,1) * zs21(ji,jj,2,1)  & 
     579                     + alambd(ji,jj,1,2,1,2) * zs21(ji,jj,1,2) + alambd(ji,jj,1,2,2,2) * zs21(ji,jj,2,2)  & 
     580                     - alambd(ji,jj,2,1,1,1) * zs22(ji,jj,1,1) - alambd(ji,jj,2,1,2,1) * zs22(ji,jj,2,1)  & 
     581                     - alambd(ji,jj,2,1,1,2) * zs22(ji,jj,1,2) - alambd(ji,jj,2,1,2,2) * zs22(ji,jj,2,2) 
     582                  zd2(ji,jj) =   & 
     583                     + alambd(ji,jj,2,2,2,1) * zs21(ji,jj,2,1) + alambd(ji,jj,2,2,2,2) * zs21(ji,jj,2,2)  & 
     584                     - alambd(ji,jj,2,2,1,1) * zs21(ji,jj,1,1) - alambd(ji,jj,2,2,1,2) * zs21(ji,jj,1,2)  & 
     585                     - alambd(ji,jj,1,1,2,1) * zs22(ji,jj,2,1) - alambd(ji,jj,1,1,1,1) * zs22(ji,jj,1,1)  & 
     586                     + alambd(ji,jj,1,1,2,2) * zs22(ji,jj,2,2) + alambd(ji,jj,1,1,1,2) * zs22(ji,jj,1,2)  & 
     587                     - alambd(ji,jj,1,2,1,1) * zs11(ji,jj,1,1) - alambd(ji,jj,1,2,2,1) * zs11(ji,jj,2,1)  & 
     588                     - alambd(ji,jj,1,2,1,2) * zs11(ji,jj,1,2) - alambd(ji,jj,1,2,2,2) * zs11(ji,jj,2,2)  & 
     589                     + alambd(ji,jj,2,1,1,1) * zs12(ji,jj,1,1) + alambd(ji,jj,2,1,2,1) * zs12(ji,jj,2,1)  & 
     590                     + alambd(ji,jj,2,1,1,2) * zs12(ji,jj,1,2) + alambd(ji,jj,2,1,2,2) * zs12(ji,jj,2,2) 
    619591               END DO 
    620592            END DO 
    621593 
    622             DO jj = i_j2, i_jpjm1 
     594            DO jj = k_j1+1, k_jpj-1 
    623595               DO ji = 2, jpim1 
    624596                  zunw = (  ( za1(ji,jj) + zd1(ji,jj) ) * zc2(ji,jj)        & 
     
    639611 
    640612            !---  5.2.5.4. Convergence test. 
    641             DO jj = i_j2 , i_jpjm1 
     613            DO jj = k_j1+1 , k_jpj-1 
    642614               zresr(:,jj) = MAX( ABS( u_ice(:,jj) - zu_ice(:,jj) ) , ABS( v_ice(:,jj) - zv_ice(:,jj) ) ) 
    643615            END DO 
    644             zresm = MAXVAL( zresr( 1:jpi , i_j2:i_jpjm1 ) ) 
     616            zresm = MAXVAL( zresr( 1:jpi , k_j1+1:k_jpj-1 ) ) 
     617            IF( lk_mpp )   CALL mpp_max( zresm )   ! max over the global domain 
    645618 
    646619            IF ( zresm <= resl) EXIT iflag 
     
    649622 
    650623         zindu1 = 1.0 - zindu 
    651          DO jj = i_j1 , i_jpjm1 
     624         DO jj = k_j1 , k_jpj-1 
    652625            zu0(:,jj) = zindu * zu0(:,jj) + zindu1 * u_ice(:,jj) 
    653626            zv0(:,jj) = zindu * zv0(:,jj) + zindu1 * v_ice(:,jj) 
     
    657630      !                                                   ! ==================== ! 
    658631 
    659       IF( l_ctl .AND. lwp ) THEN 
     632      IF(l_ctl) THEN 
    660633         WRITE(numout,*) ' lim_rhg  : res= ', zresm, 'iter= ', jter,' u_ice ', SUM( u_ice ) , ' v_ice ', SUM( v_ice ) 
    661634      ENDIF 
    662635 
    663636   END SUBROUTINE lim_rhg 
     637 
    664638#else 
     639   !!---------------------------------------------------------------------- 
     640   !!   Default option          Dummy module           NO LIM sea-ice model 
     641   !!---------------------------------------------------------------------- 
     642CONTAINS 
     643   SUBROUTINE lim_rhg( k1 , k2 )         ! Dummy routine 
     644      WRITE(*,*) 'lim_rhg: You should not have seen this print! error?', k1, k2 
     645   END SUBROUTINE lim_rhg 
     646#endif 
     647 
    665648   !!============================================================================== 
    666    !!                       ***  MODULE limrhg   *** 
    667    !!                              No sea ice 
    668    !!============================================================================== 
    669 CONTAINS 
    670    SUBROUTINE lim_rhg         ! Empty routine 
    671    END SUBROUTINE lim_rhg 
    672  
    673 #endif 
    674  
    675649END MODULE limrhg 
Note: See TracChangeset for help on using the changeset viewer.