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.
iceadv_prather.F90 in branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3 – NEMO

source: branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceadv_prather.F90 @ 8512

Last change on this file since 8512 was 8512, checked in by clem, 7 years ago

changes in style - part5 - reaching the end

File size: 37.2 KB
Line 
1MODULE iceadv_prather 
2   !!======================================================================
3   !!                       ***  MODULE iceadv_prather   ***
4   !! LIM sea-ice model : sea-ice advection => Prather scheme
5   !!======================================================================
6   !! History :  LIM  ! 2008-03 (M. Vancoppenolle)  LIM-3 from LIM-2 code
7   !!            3.2  ! 2009-06 (F. Dupont)  correct a error in the North fold b.c.
8   !!            4.0  ! 2011-02 (G. Madec) dynamical allocation
9   !!--------------------------------------------------------------------
10#if defined key_lim3
11   !!----------------------------------------------------------------------
12   !!   'key_lim3'                                       LIM3 sea-ice model
13   !!----------------------------------------------------------------------
14   !!   ice_adv_prather     : advection of sea ice using Prather scheme
15   !!----------------------------------------------------------------------
16   USE dom_oce        ! ocean domain
17   USE ice            ! sea-ice variables
18   USE sbc_oce , ONLY : nn_fsbc   ! frequency of sea-ice call
19   !
20   USE lbclnk         ! lateral boundary condition - MPP exchanges
21   USE in_out_manager ! I/O manager
22   USE prtctl         ! Print control
23   USE lib_mpp        ! MPP library
24   USE lib_fortran    ! to use key_nosignedzero
25
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   ice_adv_prather   ! called by iceadv
30
31   !! * Substitutions
32#  include "vectopt_loop_substitute.h90"
33   !!----------------------------------------------------------------------
34   !! NEMO/ICE 4.0 , NEMO Consortium (2017)
35   !! $Id: iceadv.F90 6746 2016-06-27 17:20:57Z clem $
36   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38CONTAINS
39
40   SUBROUTINE ice_adv_prather( kt, pu_ice, pv_ice,  &
41      &                        pato_i, pv_i, pv_s, psmv_i, poa_i, pa_i, pa_ip, pv_ip, pe_s, pe_i )
42      !!----------------------------------------------------------------------
43      !!                **  routine ice_adv_prather  **
44      !! 
45      !! ** purpose :   Computes and adds the advection trend to sea-ice
46      !!
47      !! ** method  :   Uses Prather second order scheme that advects tracers
48      !!                but also their quadratic forms. The method preserves
49      !!                tracer structures by conserving second order moments.
50      !!
51      !! Reference:  Prather, 1986, JGR, 91, D6. 6671-6681.
52      !!----------------------------------------------------------------------
53      INTEGER                     , INTENT(in   ) ::   kt         ! time step
54      REAL(wp), DIMENSION(:,:)    , INTENT(in   ) ::   pu_ice     ! ice i-velocity
55      REAL(wp), DIMENSION(:,:)    , INTENT(in   ) ::   pv_ice     ! ice j-velocity
56      REAL(wp), DIMENSION(:,:)    , INTENT(inout) ::   pato_i     ! open water area
57      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pv_i       ! ice volume
58      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pv_s       ! snw volume
59      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   psmv_i     ! salt content
60      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   poa_i      ! age content
61      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pa_i       ! ice concentration
62      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pa_ip      ! melt pond fraction
63      REAL(wp), DIMENSION(:,:,:)  , INTENT(inout) ::   pv_ip      ! melt pond volume
64      REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) ::   pe_s       ! snw heat content
65      REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) ::   pe_i       ! ice heat content
66      !
67      INTEGER  ::   jk, jl, jt              ! dummy loop indices
68      INTEGER  ::   initad                  ! number of sub-timestep for the advection
69      REAL(wp) ::   zcfl , zusnit           !   -      -
70      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zarea
71      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   z0opw
72      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   z0ice, z0snw, z0ai, z0es , z0smi , z0oi
73      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   z0ap , z0vp
74      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   z0ei
75      !!----------------------------------------------------------------------
76      !
77      IF( kt == nit000 .AND. lwp )   WRITE(numout,*) '-- ice_adv_prather: Prather advection scheme'
78      !
79      ALLOCATE( zarea(jpi,jpj)     , z0opw(jpi,jpj, 1 ) ,                                           &
80         &      z0ice(jpi,jpj,jpl) , z0snw(jpi,jpj,jpl) , z0ai(jpi,jpj,jpl) , z0es(jpi,jpj,jpl) ,   &
81         &      z0smi(jpi,jpj,jpl) , z0oi (jpi,jpj,jpl) , z0ap(jpi,jpj,jpl) , z0vp(jpi,jpj,jpl) ,   &
82         &      z0ei (jpi,jpj,nlay_i,jpl)                                                           )
83      !
84      ! --- If ice drift field is too fast, use an appropriate time step for advection (CFL test for stability) --- !       
85      zcfl  =            MAXVAL( ABS( pu_ice(:,:) ) * rdt_ice * r1_e1u(:,:) )
86      zcfl  = MAX( zcfl, MAXVAL( ABS( pv_ice(:,:) ) * rdt_ice * r1_e2v(:,:) ) )
87      IF( lk_mpp )   CALL mpp_max( zcfl )
88     
89      IF( zcfl > 0.5 ) THEN   ;   initad = 2   ;   zusnit = 0.5_wp
90      ELSE                    ;   initad = 1   ;   zusnit = 1.0_wp
91      ENDIF
92     
93      zarea(:,:) = e1e2t(:,:)
94      !-------------------------
95      ! transported fields                                       
96      !-------------------------
97      z0opw(:,:,1) = pato_i(:,:) * e1e2t(:,:)              ! Open water area
98      DO jl = 1, jpl
99         z0snw(:,:,jl) = pv_s  (:,:,  jl) * e1e2t(:,:)     ! Snow volume
100         z0ice(:,:,jl) = pv_i  (:,:,  jl) * e1e2t(:,:)     ! Ice  volume
101         z0ai (:,:,jl) = pa_i  (:,:,  jl) * e1e2t(:,:)     ! Ice area
102         z0smi(:,:,jl) = psmv_i(:,:,  jl) * e1e2t(:,:)     ! Salt content
103         z0oi (:,:,jl) = poa_i (:,:,  jl) * e1e2t(:,:)     ! Age content
104         z0es (:,:,jl) = pe_s  (:,:,1,jl) * e1e2t(:,:)     ! Snow heat content
105         DO jk = 1, nlay_i
106            z0ei(:,:,jk,jl) = pe_i(:,:,jk,jl) * e1e2t(:,:) ! Ice  heat content
107         END DO
108         IF ( nn_pnd_scheme > 0 ) THEN
109            z0ap(:,:,jl)  = pa_ip(:,:,jl) * e1e2t(:,:)     ! Melt pond fraction
110            z0vp(:,:,jl)  = pv_ip(:,:,jl) * e1e2t(:,:)     ! Melt pond volume
111         ENDIF
112      END DO
113
114      !                                                    !--------------------------------------------!
115      IF( MOD( ( kt - 1) / nn_fsbc , 2 ) == 0 ) THEN       !==  odd ice time step:  adv_x then adv_y  ==!
116         !                                                 !--------------------------------------------!
117         DO jt = 1, initad
118            CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0opw (:,:,1), sxopw(:,:),   &             !--- ice open water area
119               &                                      sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  )
120            CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0opw (:,:,1), sxopw(:,:),   &
121               &                                      sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  )
122            DO jl = 1, jpl
123               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  ---
124                  &                                      sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  )
125               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ice (:,:,jl), sxice(:,:,jl),   &
126                  &                                      sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  )
127               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  ---
128                  &                                      sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  )
129               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0snw (:,:,jl), sxsn (:,:,jl),   &
130                  &                                      sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  )
131               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0smi (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity ---
132                  &                                      sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  )
133               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0smi (:,:,jl), sxsal(:,:,jl),   &
134                  &                                      sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  )
135               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0oi  (:,:,jl), sxage(:,:,jl),   &    !--- ice age      ---     
136                  &                                      sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  )
137               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0oi  (:,:,jl), sxage(:,:,jl),   &
138                  &                                      sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  )
139               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ai  (:,:,jl), sxa  (:,:,jl),   &    !--- ice concentrations ---
140                  &                                      sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  )
141               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ai  (:,:,jl), sxa  (:,:,jl),   & 
142                  &                                      sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  )
143               CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0es  (:,:,jl), sxc0 (:,:,jl),   &    !--- snow heat contents ---
144                  &                                      sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  )
145               CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0es  (:,:,jl), sxc0 (:,:,jl),   &
146                  &                                      sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  )
147               DO jk = 1, nlay_i                                                               !--- ice heat contents ---
148                  CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl),   & 
149                     &                                      sxxe(:,:,jk,jl), sye (:,:,jk,jl),   &
150                     &                                      syye(:,:,jk,jl), sxye(:,:,jk,jl) )
151                  CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl),   & 
152                     &                                      sxxe(:,:,jk,jl), sye (:,:,jk,jl),   &
153                     &                                      syye(:,:,jk,jl), sxye(:,:,jk,jl) )
154               END DO
155               IF ( nn_pnd_scheme > 0 ) THEN
156                  CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0ap  (:,:,jl), sxap (:,:,jl),   &    !--- melt pond fraction --
157                     &                                      sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl)  )
158                  CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0ap  (:,:,jl), sxap (:,:,jl),   & 
159                     &                                      sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl)  )
160                  CALL adv_x( zusnit, pu_ice, 1._wp, zarea, z0vp  (:,:,jl), sxvp (:,:,jl),   &    !--- melt pond volume   --
161                     &                                      sxxvp (:,:,jl), syvp (:,:,jl), syyvp (:,:,jl), sxyvp (:,:,jl)  )
162                  CALL adv_y( zusnit, pv_ice, 0._wp, zarea, z0vp  (:,:,jl), sxvp (:,:,jl),   & 
163                     &                                      sxxvp (:,:,jl), syvp (:,:,jl), syyvp (:,:,jl), sxyvp (:,:,jl)  )
164               ENDIF
165            END DO
166         END DO
167      !                                                    !--------------------------------------------!
168      ELSE                                                 !== even ice time step:  adv_y then adv_x  ==!
169         !                                                 !--------------------------------------------!
170         DO jt = 1, initad
171            CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0opw (:,:,1), sxopw(:,:),   &             !--- ice open water area
172               &                                      sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  )
173            CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0opw (:,:,1), sxopw(:,:),   &
174               &                                      sxxopw(:,:)  , syopw(:,:), syyopw(:,:), sxyopw(:,:)  )
175            DO jl = 1, jpl
176               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ice (:,:,jl), sxice(:,:,jl),   &    !--- ice volume  ---
177                  &                                      sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  )
178               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ice (:,:,jl), sxice(:,:,jl),   &
179                  &                                      sxxice(:,:,jl), syice(:,:,jl), syyice(:,:,jl), sxyice(:,:,jl)  )
180               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0snw (:,:,jl), sxsn (:,:,jl),   &    !--- snow volume  ---
181                  &                                      sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  )
182               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0snw (:,:,jl), sxsn (:,:,jl),   &
183                  &                                      sxxsn (:,:,jl), sysn (:,:,jl), syysn (:,:,jl), sxysn (:,:,jl)  )
184               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0smi (:,:,jl), sxsal(:,:,jl),   &    !--- ice salinity ---
185                  &                                      sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  )
186               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0smi (:,:,jl), sxsal(:,:,jl),   &
187                  &                                      sxxsal(:,:,jl), sysal(:,:,jl), syysal(:,:,jl), sxysal(:,:,jl)  )
188               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0oi  (:,:,jl), sxage(:,:,jl),   &   !--- ice age      ---
189                  &                                      sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  )
190               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0oi  (:,:,jl), sxage(:,:,jl),   &
191                  &                                      sxxage(:,:,jl), syage(:,:,jl), syyage(:,:,jl), sxyage(:,:,jl)  )
192               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ai  (:,:,jl), sxa  (:,:,jl),   &   !--- ice concentrations ---
193                  &                                      sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  )
194               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ai  (:,:,jl), sxa  (:,:,jl),   &
195                  &                                      sxxa  (:,:,jl), sya  (:,:,jl), syya  (:,:,jl), sxya  (:,:,jl)  )
196               CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0es  (:,:,jl), sxc0 (:,:,jl),   &  !--- snow heat contents ---
197                  &                                      sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  )
198               CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0es  (:,:,jl), sxc0 (:,:,jl),   &
199                  &                                      sxxc0 (:,:,jl), syc0 (:,:,jl), syyc0 (:,:,jl), sxyc0 (:,:,jl)  )
200               DO jk = 1, nlay_i                                                             !--- ice heat contents ---
201                  CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl),   & 
202                     &                                      sxxe(:,:,jk,jl), sye (:,:,jk,jl),   &
203                     &                                      syye(:,:,jk,jl), sxye(:,:,jk,jl) )
204                  CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ei(:,:,jk,jl), sxe (:,:,jk,jl),   & 
205                     &                                      sxxe(:,:,jk,jl), sye (:,:,jk,jl),   &
206                     &                                      syye(:,:,jk,jl), sxye(:,:,jk,jl) )
207               END DO
208               IF ( nn_pnd_scheme > 0 ) THEN
209                  CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0ap  (:,:,jl), sxap (:,:,jl),   &   !--- melt pond fraction ---
210                     &                                      sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl)  )
211                  CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0ap  (:,:,jl), sxap (:,:,jl),   &
212                     &                                      sxxap (:,:,jl), syap (:,:,jl), syyap (:,:,jl), sxyap (:,:,jl)  )
213                  CALL adv_y( zusnit, pv_ice, 1._wp, zarea, z0vp  (:,:,jl), sxvp (:,:,jl),   &   !--- melt pond volume   ---
214                     &                                      sxxvp (:,:,jl), syvp (:,:,jl), syyvp (:,:,jl), sxyvp (:,:,jl)  )
215                  CALL adv_x( zusnit, pu_ice, 0._wp, zarea, z0vp  (:,:,jl), sxvp (:,:,jl),   &
216                     &                                      sxxvp (:,:,jl), syvp (:,:,jl), syyvp (:,:,jl), sxyvp (:,:,jl)  )
217               ENDIF
218            END DO
219         END DO
220      ENDIF
221
222      !-------------------------------------------
223      ! Recover the properties from their contents
224      !-------------------------------------------
225      pato_i(:,:) = z0opw(:,:,1) * r1_e1e2t(:,:)
226      DO jl = 1, jpl
227         pv_i  (:,:,  jl) = z0ice(:,:,jl) * r1_e1e2t(:,:)
228         pv_s  (:,:,  jl) = z0snw(:,:,jl) * r1_e1e2t(:,:)
229         psmv_i(:,:,  jl) = z0smi(:,:,jl) * r1_e1e2t(:,:)
230         poa_i (:,:,  jl) = z0oi (:,:,jl) * r1_e1e2t(:,:)
231         pa_i  (:,:,  jl) = z0ai (:,:,jl) * r1_e1e2t(:,:)
232         pe_s  (:,:,1,jl) = z0es (:,:,jl) * r1_e1e2t(:,:)
233         DO jk = 1, nlay_i
234            pe_i(:,:,jk,jl) = z0ei(:,:,jk,jl) * r1_e1e2t(:,:)
235         END DO
236         ! MV MP 2016
237         IF ( nn_pnd_scheme > 0 ) THEN
238            pa_ip  (:,:,jl)   = z0ap (:,:,jl) * r1_e1e2t(:,:)
239            pv_ip  (:,:,jl)   = z0vp (:,:,jl) * r1_e1e2t(:,:)
240         ENDIF
241         ! END MV MP 2016
242      END DO
243      !
244      DEALLOCATE( zarea , z0opw , z0ice, z0snw , z0ai , z0es , z0smi , z0oi , z0ap , z0vp , z0ei )
245      !
246   END SUBROUTINE ice_adv_prather
247   
248   SUBROUTINE adv_x( pdf, put , pcrh, psm , ps0 ,   &
249      &              psx, psxx, psy , psyy, psxy )
250      !!----------------------------------------------------------------------
251      !!                **  routine adv_x  **
252      !! 
253      !! ** purpose :   Computes and adds the advection trend to sea-ice
254      !!                variable on x axis
255      !!----------------------------------------------------------------------
256      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step
257      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call adv_x then adv_y (=1) or the opposite (=0)
258      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   put                ! i-direction ice velocity at U-point [m/s]
259      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psm                ! area
260      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   ps0                ! field to be advected
261      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psx , psy          ! 1st moments
262      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psxx, psyy, psxy   ! 2nd moments
263      !!
264      INTEGER  ::   ji, jj                               ! dummy loop indices
265      REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp         ! local scalars
266      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !   -      -
267      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !   -      -
268      REAL(wp), DIMENSION(jpi,jpj) ::   zf0 , zfx  , zfy   , zbet   ! 2D workspace
269      REAL(wp), DIMENSION(jpi,jpj) ::   zfm , zfxx , zfyy  , zfxy   !  -      -
270      REAL(wp), DIMENSION(jpi,jpj) ::   zalg, zalg1, zalg1q         !  -      -
271      !-----------------------------------------------------------------------
272
273      ! Limitation of moments.                                           
274
275      zrdt = rdt_ice * pdf      ! If ice drift field is too fast, use an appropriate time step for advection.
276
277      DO jj = 1, jpj
278         DO ji = 1, jpi
279            zslpmax = MAX( 0._wp, ps0(ji,jj) )
280            zs1max  = 1.5 * zslpmax
281            zs1new  = MIN( zs1max, MAX( -zs1max, psx(ji,jj) ) )
282            zs2new  = MIN(  2.0 * zslpmax - 0.3334 * ABS( zs1new ),      &
283               &            MAX( ABS( zs1new ) - zslpmax, psxx(ji,jj) )  )
284            rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask
285
286            ps0 (ji,jj) = zslpmax 
287            psx (ji,jj) = zs1new      * rswitch
288            psxx(ji,jj) = zs2new      * rswitch
289            psy (ji,jj) = psy (ji,jj) * rswitch
290            psyy(ji,jj) = psyy(ji,jj) * rswitch
291            psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch
292         END DO
293      END DO
294
295      !  Initialize volumes of boxes  (=area if adv_x first called, =psm otherwise)                                     
296      psm (:,:)  = MAX( pcrh * e1e2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20 )
297
298      !  Calculate fluxes and moments between boxes i<-->i+1             
299      DO jj = 1, jpj                      !  Flux from i to i+1 WHEN u GT 0
300         DO ji = 1, jpi
301            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, put(ji,jj) ) )
302            zalf         =  MAX( 0._wp, put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji,jj)
303            zalfq        =  zalf * zalf
304            zalf1        =  1.0 - zalf
305            zalf1q       =  zalf1 * zalf1
306            !
307            zfm (ji,jj)  =  zalf  *   psm (ji,jj)
308            zf0 (ji,jj)  =  zalf  * ( ps0 (ji,jj) + zalf1 * ( psx(ji,jj) + (zalf1 - zalf) * psxx(ji,jj) )  )
309            zfx (ji,jj)  =  zalfq * ( psx (ji,jj) + 3.0 * zalf1 * psxx(ji,jj) )
310            zfxx(ji,jj)  =  zalf  *   psxx(ji,jj) * zalfq
311            zfy (ji,jj)  =  zalf  * ( psy (ji,jj) + zalf1 * psxy(ji,jj) )
312            zfxy(ji,jj)  =  zalfq *   psxy(ji,jj)
313            zfyy(ji,jj)  =  zalf  *   psyy(ji,jj)
314
315            !  Readjust moments remaining in the box.
316            psm (ji,jj)  =  psm (ji,jj) - zfm(ji,jj)
317            ps0 (ji,jj)  =  ps0 (ji,jj) - zf0(ji,jj)
318            psx (ji,jj)  =  zalf1q * ( psx(ji,jj) - 3.0 * zalf * psxx(ji,jj) )
319            psxx(ji,jj)  =  zalf1  * zalf1q * psxx(ji,jj)
320            psy (ji,jj)  =  psy (ji,jj) - zfy(ji,jj)
321            psyy(ji,jj)  =  psyy(ji,jj) - zfyy(ji,jj)
322            psxy(ji,jj)  =  zalf1q * psxy(ji,jj)
323         END DO
324      END DO
325
326      DO jj = 1, jpjm1                      !  Flux from i+1 to i when u LT 0.
327         DO ji = 1, fs_jpim1
328            zalf          = MAX( 0._wp, -put(ji,jj) ) * zrdt * e2u(ji,jj) / psm(ji+1,jj) 
329            zalg  (ji,jj) = zalf
330            zalfq         = zalf * zalf
331            zalf1         = 1.0 - zalf
332            zalg1 (ji,jj) = zalf1
333            zalf1q        = zalf1 * zalf1
334            zalg1q(ji,jj) = zalf1q
335            !
336            zfm   (ji,jj) = zfm (ji,jj) + zalf  *   psm (ji+1,jj)
337            zf0   (ji,jj) = zf0 (ji,jj) + zalf  * ( ps0 (ji+1,jj) - zalf1 * ( psx(ji+1,jj) - (zalf1 - zalf ) * psxx(ji+1,jj) ) )
338            zfx   (ji,jj) = zfx (ji,jj) + zalfq * ( psx (ji+1,jj) - 3.0 * zalf1 * psxx(ji+1,jj) )
339            zfxx  (ji,jj) = zfxx(ji,jj) + zalf  *   psxx(ji+1,jj) * zalfq
340            zfy   (ji,jj) = zfy (ji,jj) + zalf  * ( psy (ji+1,jj) - zalf1 * psxy(ji+1,jj) )
341            zfxy  (ji,jj) = zfxy(ji,jj) + zalfq *   psxy(ji+1,jj)
342            zfyy  (ji,jj) = zfyy(ji,jj) + zalf  *   psyy(ji+1,jj)
343         END DO
344      END DO
345
346      DO jj = 2, jpjm1                     !  Readjust moments remaining in the box.
347         DO ji = fs_2, fs_jpim1
348            zbt  =       zbet(ji-1,jj)
349            zbt1 = 1.0 - zbet(ji-1,jj)
350            !
351            psm (ji,jj) = zbt * psm(ji,jj) + zbt1 * ( psm(ji,jj) - zfm(ji-1,jj) )
352            ps0 (ji,jj) = zbt * ps0(ji,jj) + zbt1 * ( ps0(ji,jj) - zf0(ji-1,jj) )
353            psx (ji,jj) = zalg1q(ji-1,jj) * ( psx(ji,jj) + 3.0 * zalg(ji-1,jj) * psxx(ji,jj) )
354            psxx(ji,jj) = zalg1 (ji-1,jj) * zalg1q(ji-1,jj) * psxx(ji,jj)
355            psy (ji,jj) = zbt * psy (ji,jj) + zbt1 * ( psy (ji,jj) - zfy (ji-1,jj) )
356            psyy(ji,jj) = zbt * psyy(ji,jj) + zbt1 * ( psyy(ji,jj) - zfyy(ji-1,jj) )
357            psxy(ji,jj) = zalg1q(ji-1,jj) * psxy(ji,jj)
358         END DO
359      END DO
360
361      !   Put the temporary moments into appropriate neighboring boxes.   
362      DO jj = 2, jpjm1                     !   Flux from i to i+1 IF u GT 0.
363         DO ji = fs_2, fs_jpim1
364            zbt  =       zbet(ji-1,jj)
365            zbt1 = 1.0 - zbet(ji-1,jj)
366            psm(ji,jj)  = zbt * ( psm(ji,jj) + zfm(ji-1,jj) ) + zbt1 * psm(ji,jj)
367            zalf        = zbt * zfm(ji-1,jj) / psm(ji,jj)
368            zalf1       = 1.0 - zalf
369            ztemp       = zalf * ps0(ji,jj) - zalf1 * zf0(ji-1,jj)
370            !
371            ps0 (ji,jj) = zbt * ( ps0(ji,jj) + zf0(ji-1,jj) ) + zbt1 * ps0(ji,jj)
372            psx (ji,jj) = zbt * ( zalf * zfx(ji-1,jj) + zalf1 * psx(ji,jj) + 3.0 * ztemp ) + zbt1 * psx(ji,jj)
373            psxx(ji,jj) = zbt * ( zalf * zalf * zfxx(ji-1,jj) + zalf1 * zalf1 * psxx(ji,jj)                               &
374               &                + 5.0 * ( zalf * zalf1 * ( psx (ji,jj) - zfx(ji-1,jj) ) - ( zalf1 - zalf ) * ztemp )  )   &
375               &                                                + zbt1 * psxx(ji,jj)
376            psxy(ji,jj) = zbt * ( zalf * zfxy(ji-1,jj) + zalf1 * psxy(ji,jj)             &
377               &                + 3.0 * (- zalf1*zfy(ji-1,jj)  + zalf * psy(ji,jj) ) )   &
378               &                                                + zbt1 * psxy(ji,jj)
379            psy (ji,jj) = zbt * ( psy (ji,jj) + zfy (ji-1,jj) ) + zbt1 * psy (ji,jj)
380            psyy(ji,jj) = zbt * ( psyy(ji,jj) + zfyy(ji-1,jj) ) + zbt1 * psyy(ji,jj)
381         END DO
382      END DO
383
384      DO jj = 2, jpjm1                     !  Flux from i+1 to i IF u LT 0.
385         DO ji = fs_2, fs_jpim1
386            zbt  =       zbet(ji,jj)
387            zbt1 = 1.0 - zbet(ji,jj)
388            psm(ji,jj)  = zbt * psm(ji,jj)  + zbt1 * ( psm(ji,jj) + zfm(ji,jj) )
389            zalf        = zbt1 * zfm(ji,jj) / psm(ji,jj)
390            zalf1       = 1.0 - zalf
391            ztemp       = - zalf * ps0(ji,jj) + zalf1 * zf0(ji,jj)
392            !
393            ps0(ji,jj)  = zbt * ps0 (ji,jj) + zbt1 * ( ps0(ji,jj) + zf0(ji,jj) )
394            psx(ji,jj)  = zbt * psx (ji,jj) + zbt1 * ( zalf * zfx(ji,jj) + zalf1 * psx(ji,jj) + 3.0 * ztemp )
395            psxx(ji,jj) = zbt * psxx(ji,jj) + zbt1 * ( zalf * zalf * zfxx(ji,jj)  + zalf1 * zalf1 * psxx(ji,jj)  &
396               &                                      + 5.0 *( zalf * zalf1 * ( - psx(ji,jj) + zfx(ji,jj) )      &
397               &                                      + ( zalf1 - zalf ) * ztemp ) )
398            psxy(ji,jj) = zbt * psxy(ji,jj) + zbt1 * (  zalf * zfxy(ji,jj) + zalf1 * psxy(ji,jj)  &
399               &                                      + 3.0 * ( zalf1 * zfy(ji,jj) - zalf * psy(ji,jj) )  )
400            psy(ji,jj)  = zbt * psy (ji,jj)  + zbt1 * ( psy (ji,jj) + zfy (ji,jj) )
401            psyy(ji,jj) = zbt * psyy(ji,jj)  + zbt1 * ( psyy(ji,jj) + zfyy(ji,jj) )
402         END DO
403      END DO
404
405      !-- Lateral boundary conditions
406      CALL lbc_lnk_multi( psm , 'T',  1., ps0 , 'T',  1.   &
407         &              , psx , 'T', -1., psy , 'T', -1.   &   ! caution gradient ==> the sign changes
408         &              , psxx, 'T',  1., psyy, 'T',  1.   &
409         &              , psxy, 'T',  1. )
410
411      IF(ln_ctl) THEN
412         CALL prt_ctl(tab2d_1=psm  , clinfo1=' adv_x: psm  :', tab2d_2=ps0 , clinfo2=' ps0  : ')
413         CALL prt_ctl(tab2d_1=psx  , clinfo1=' adv_x: psx  :', tab2d_2=psxx, clinfo2=' psxx : ')
414         CALL prt_ctl(tab2d_1=psy  , clinfo1=' adv_x: psy  :', tab2d_2=psyy, clinfo2=' psyy : ')
415         CALL prt_ctl(tab2d_1=psxy , clinfo1=' adv_x: psxy :')
416      ENDIF
417      !
418   END SUBROUTINE adv_x
419
420
421   SUBROUTINE adv_y( pdf, pvt , pcrh, psm , ps0 ,   &
422      &              psx, psxx, psy , psyy, psxy )
423      !!---------------------------------------------------------------------
424      !!                **  routine adv_y  **
425      !!           
426      !! ** purpose :   Computes and adds the advection trend to sea-ice
427      !!                variable on y axis
428      !!---------------------------------------------------------------------
429      REAL(wp)                    , INTENT(in   ) ::   pdf                ! reduction factor for the time step
430      REAL(wp)                    , INTENT(in   ) ::   pcrh               ! call adv_x then adv_y (=1) or the opposite (=0)
431      REAL(wp), DIMENSION(jpi,jpj), INTENT(in   ) ::   pvt                ! j-direction ice velocity at V-point [m/s]
432      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psm                ! area
433      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   ps0                ! field to be advected
434      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psx , psy          ! 1st moments
435      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   psxx, psyy, psxy   ! 2nd moments
436      !!
437      INTEGER  ::   ji, jj                               ! dummy loop indices
438      REAL(wp) ::   zs1max, zrdt, zslpmax, ztemp         ! temporary scalars
439      REAL(wp) ::   zs1new, zalf , zalfq , zbt           !    -         -
440      REAL(wp) ::   zs2new, zalf1, zalf1q, zbt1          !    -         -
441      REAL(wp), DIMENSION(jpi,jpj) ::   zf0, zfx , zfy , zbet   ! 2D workspace
442      REAL(wp), DIMENSION(jpi,jpj) ::   zfm, zfxx, zfyy, zfxy   !  -      -
443      REAL(wp), DIMENSION(jpi,jpj) ::   zalg, zalg1, zalg1q     !  -      -
444      !---------------------------------------------------------------------
445
446      ! Limitation of moments.
447
448      zrdt = rdt_ice * pdf ! If ice drift field is too fast, use an appropriate time step for advection.
449
450      DO jj = 1, jpj
451         DO ji = 1, jpi
452            zslpmax = MAX( 0._wp, ps0(ji,jj) )
453            zs1max  = 1.5 * zslpmax
454            zs1new  = MIN( zs1max, MAX( -zs1max, psy(ji,jj) ) )
455            zs2new  = MIN(  ( 2.0 * zslpmax - 0.3334 * ABS( zs1new ) ),   &
456               &             MAX( ABS( zs1new )-zslpmax, psyy(ji,jj) )  )
457            rswitch = ( 1.0 - MAX( 0._wp, SIGN( 1._wp, -zslpmax) ) ) * tmask(ji,jj,1)   ! Case of empty boxes & Apply mask
458            !
459            ps0 (ji,jj) = zslpmax 
460            psx (ji,jj) = psx (ji,jj) * rswitch
461            psxx(ji,jj) = psxx(ji,jj) * rswitch
462            psy (ji,jj) = zs1new * rswitch
463            psyy(ji,jj) = zs2new * rswitch
464            psxy(ji,jj) = MIN( zslpmax, MAX( -zslpmax, psxy(ji,jj) ) ) * rswitch
465         END DO
466      END DO
467
468      !  Initialize volumes of boxes (=area if adv_x first called, =psm otherwise)
469      psm(:,:)  = MAX(  pcrh * e1e2t(:,:) + ( 1.0 - pcrh ) * psm(:,:) , epsi20  )
470
471      !  Calculate fluxes and moments between boxes j<-->j+1             
472      DO jj = 1, jpj                     !  Flux from j to j+1 WHEN v GT 0   
473         DO ji = 1, jpi
474            zbet(ji,jj)  =  MAX( 0._wp, SIGN( 1._wp, pvt(ji,jj) ) )
475            zalf         =  MAX( 0._wp, pvt(ji,jj) ) * zrdt * e1v(ji,jj) / psm(ji,jj)
476            zalfq        =  zalf * zalf
477            zalf1        =  1.0 - zalf
478            zalf1q       =  zalf1 * zalf1
479            !
480            zfm (ji,jj)  =  zalf  * psm(ji,jj)
481            zf0 (ji,jj)  =  zalf  * ( ps0(ji,jj) + zalf1 * ( psy(ji,jj)  + (zalf1-zalf) * psyy(ji,jj)  ) ) 
482            zfy (ji,jj)  =  zalfq *( psy(ji,jj) + 3.0*zalf1*psyy(ji,jj) )
483            zfyy(ji,jj)  =  zalf  * zalfq * psyy(ji,jj)
484            zfx (ji,jj)  =  zalf  * ( psx(ji,jj) + zalf1 * psxy(ji,jj) )
485            zfxy(ji,jj)  =  zalfq * psxy(ji,jj)
486            zfxx(ji,jj)  =  zalf  * psxx(ji,jj)
487            !
488            !  Readjust moments remaining in the box.
489            psm (ji,jj)  =  psm (ji,jj) - zfm(ji,jj)
490            ps0 (ji,jj)  =  ps0 (ji,jj) - zf0(ji,jj)
491            psy (ji,jj)  =  zalf1q * ( psy(ji,jj) -3.0 * zalf * psyy(ji,jj) )
492            psyy(ji,jj)  =  zalf1 * zalf1q * psyy(ji,jj)
493            psx (ji,jj)  =  psx (ji,jj) - zfx(ji,jj)
494            psxx(ji,jj)  =  psxx(ji,jj) - zfxx(ji,jj)
495            psxy(ji,jj)  =  zalf1q * psxy(ji,jj)
496         END DO
497      END DO
498      !
499      DO jj = 1, jpjm1                   !  Flux from j+1 to j when v LT 0.
500         DO ji = 1, jpi
501            zalf          = ( MAX(0._wp, -pvt(ji,jj) ) * zrdt * e1v(ji,jj) ) / psm(ji,jj+1) 
502            zalg  (ji,jj) = zalf
503            zalfq         = zalf * zalf
504            zalf1         = 1.0 - zalf
505            zalg1 (ji,jj) = zalf1
506            zalf1q        = zalf1 * zalf1
507            zalg1q(ji,jj) = zalf1q
508            !
509            zfm   (ji,jj) = zfm (ji,jj) + zalf  *   psm (ji,jj+1)
510            zf0   (ji,jj) = zf0 (ji,jj) + zalf  * ( ps0 (ji,jj+1) - zalf1 * (psy(ji,jj+1) - (zalf1 - zalf ) * psyy(ji,jj+1) ) )
511            zfy   (ji,jj) = zfy (ji,jj) + zalfq * ( psy (ji,jj+1) - 3.0 * zalf1 * psyy(ji,jj+1) )
512            zfyy  (ji,jj) = zfyy(ji,jj) + zalf  *   psyy(ji,jj+1) * zalfq
513            zfx   (ji,jj) = zfx (ji,jj) + zalf  * ( psx (ji,jj+1) - zalf1 * psxy(ji,jj+1) )
514            zfxy  (ji,jj) = zfxy(ji,jj) + zalfq *   psxy(ji,jj+1)
515            zfxx  (ji,jj) = zfxx(ji,jj) + zalf  *   psxx(ji,jj+1)
516         END DO
517      END DO
518
519      !  Readjust moments remaining in the box.
520      DO jj = 2, jpj
521         DO ji = 1, jpi
522            zbt  =         zbet(ji,jj-1)
523            zbt1 = ( 1.0 - zbet(ji,jj-1) )
524            !
525            psm (ji,jj) = zbt * psm(ji,jj) + zbt1 * ( psm(ji,jj) - zfm(ji,jj-1) )
526            ps0 (ji,jj) = zbt * ps0(ji,jj) + zbt1 * ( ps0(ji,jj) - zf0(ji,jj-1) )
527            psy (ji,jj) = zalg1q(ji,jj-1) * ( psy(ji,jj) + 3.0 * zalg(ji,jj-1) * psyy(ji,jj) )
528            psyy(ji,jj) = zalg1 (ji,jj-1) * zalg1q(ji,jj-1) * psyy(ji,jj)
529            psx (ji,jj) = zbt * psx (ji,jj) + zbt1 * ( psx (ji,jj) - zfx (ji,jj-1) )
530            psxx(ji,jj) = zbt * psxx(ji,jj) + zbt1 * ( psxx(ji,jj) - zfxx(ji,jj-1) )
531            psxy(ji,jj) = zalg1q(ji,jj-1) * psxy(ji,jj)
532         END DO
533      END DO
534
535      !   Put the temporary moments into appropriate neighboring boxes.   
536      DO jj = 2, jpjm1                    !   Flux from j to j+1 IF v GT 0.
537         DO ji = 1, jpi
538            zbt  =         zbet(ji,jj-1)
539            zbt1 = ( 1.0 - zbet(ji,jj-1) )
540            psm(ji,jj)  = zbt * ( psm(ji,jj) + zfm(ji,jj-1) ) + zbt1 * psm(ji,jj) 
541            zalf        = zbt * zfm(ji,jj-1) / psm(ji,jj) 
542            zalf1       = 1.0 - zalf
543            ztemp       = zalf * ps0(ji,jj) - zalf1 * zf0(ji,jj-1)
544            !
545            ps0(ji,jj)  = zbt  * ( ps0(ji,jj) + zf0(ji,jj-1) ) + zbt1 * ps0(ji,jj)
546            psy(ji,jj)  = zbt  * ( zalf * zfy(ji,jj-1) + zalf1 * psy(ji,jj) + 3.0 * ztemp )   &
547               &                                               + zbt1 * psy(ji,jj) 
548            psyy(ji,jj) = zbt  * ( zalf * zalf * zfyy(ji,jj-1) + zalf1 * zalf1 * psyy(ji,jj)                             &
549               &                 + 5.0 * ( zalf * zalf1 * ( psy(ji,jj) - zfy(ji,jj-1) ) - ( zalf1 - zalf ) * ztemp ) )   & 
550               &                                               + zbt1 * psyy(ji,jj)
551            psxy(ji,jj) = zbt  * (  zalf * zfxy(ji,jj-1) + zalf1 * psxy(ji,jj)               &
552               &                  + 3.0 * (- zalf1 * zfx(ji,jj-1) + zalf * psx(ji,jj) )  )   &
553               &                                                + zbt1 * psxy(ji,jj)
554            psx (ji,jj) = zbt * ( psx (ji,jj) + zfx (ji,jj-1) ) + zbt1 * psx (ji,jj)
555            psxx(ji,jj) = zbt * ( psxx(ji,jj) + zfxx(ji,jj-1) ) + zbt1 * psxx(ji,jj)
556         END DO
557      END DO
558
559      DO jj = 2, jpjm1                   !  Flux from j+1 to j IF v LT 0.
560         DO ji = 1, jpi
561            zbt  =         zbet(ji,jj)
562            zbt1 = ( 1.0 - zbet(ji,jj) )
563            psm(ji,jj)  = zbt * psm(ji,jj) + zbt1 * ( psm(ji,jj) + zfm(ji,jj) )
564            zalf        = zbt1 * zfm(ji,jj) / psm(ji,jj)
565            zalf1       = 1.0 - zalf
566            ztemp       = - zalf * ps0 (ji,jj) + zalf1 * zf0(ji,jj)
567            ps0 (ji,jj) =   zbt  * ps0 (ji,jj) + zbt1  * ( ps0(ji,jj) + zf0(ji,jj) )
568            psy (ji,jj) =   zbt  * psy (ji,jj) + zbt1  * ( zalf * zfy(ji,jj) + zalf1 * psy(ji,jj) + 3.0 * ztemp )
569            psyy(ji,jj) =   zbt  * psyy(ji,jj) + zbt1 * (  zalf * zalf * zfyy(ji,jj) + zalf1 * zalf1 * psyy(ji,jj)   &
570               &                                         + 5.0 *( zalf *zalf1 *( -psy(ji,jj) + zfy(ji,jj) )          &
571               &                                         + ( zalf1 - zalf ) * ztemp )                                )
572            psxy(ji,jj) =   zbt  * psxy(ji,jj) + zbt1 * (  zalf * zfxy(ji,jj) + zalf1 * psxy(ji,jj)       &
573               &                                         + 3.0 * ( zalf1 * zfx(ji,jj) - zalf * psx(ji,jj) )  )
574            psx (ji,jj) =   zbt  * psx (ji,jj) + zbt1 * ( psx (ji,jj) + zfx (ji,jj) )
575            psxx(ji,jj) =   zbt  * psxx(ji,jj) + zbt1 * ( psxx(ji,jj) + zfxx(ji,jj) )
576         END DO
577      END DO
578
579      !-- Lateral boundary conditions
580      CALL lbc_lnk_multi( psm , 'T',  1.,  ps0 , 'T',  1.   &
581         &              , psx , 'T', -1.,  psy , 'T', -1.   &   ! caution gradient ==> the sign changes
582         &              , psxx, 'T',  1.,  psyy, 'T',  1.   &
583         &              , psxy, 'T',  1. )
584
585      IF(ln_ctl) THEN
586         CALL prt_ctl(tab2d_1=psm  , clinfo1=' adv_y: psm  :', tab2d_2=ps0 , clinfo2=' ps0  : ')
587         CALL prt_ctl(tab2d_1=psx  , clinfo1=' adv_y: psx  :', tab2d_2=psxx, clinfo2=' psxx : ')
588         CALL prt_ctl(tab2d_1=psy  , clinfo1=' adv_y: psy  :', tab2d_2=psyy, clinfo2=' psyy : ')
589         CALL prt_ctl(tab2d_1=psxy , clinfo1=' adv_y: psxy :')
590      ENDIF
591      !
592   END SUBROUTINE adv_y
593
594#else
595   !!----------------------------------------------------------------------
596   !!   Default option            Dummy module         NO LIM sea-ice model
597   !!----------------------------------------------------------------------
598#endif
599
600   !!======================================================================
601END MODULE iceadv_prather
Note: See TracBrowser for help on using the repository browser.