4#if defined ICE_MOMENTUM && defined ICE_EVP
37 SUBROUTINE ice_evp_sig (ng, tile, model)
44 integer,
intent(in) :: ng, tile, model
48 character (len=*),
parameter :: MyFile = &
54 CALL wclock_on (ng, model, 42, __line__, myfile)
56 CALL ice_evp_sig_tile (ng, tile, model, &
57 & lbi, ubi, lbj, ubj, &
58 & imins, imaxs, jmins, jmaxs, &
59 & liold(ng), lieol(ng), lienw(ng), &
65 CALL wclock_off (ng, model, 42, __line__, myfile)
69 END SUBROUTINE ice_evp_sig
72 SUBROUTINE ice_evp_sig_tile (ng, tile, model, &
73 & LBi, UBi, LBj, UBj, &
74 & IminS, ImaxS, JminS, JmaxS, &
75 & liold, lieol, lienw, &
82 integer,
intent(in) :: ng, tile, model
83 integer,
intent(in) :: LBi, UBi, LBj, UBj
84 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
85 integer,
intent(in) :: liold, lieol, lienw
88 real(r8),
intent(in) :: pm(LBi:,LBj:)
89 real(r8),
intent(in) :: pn(LBi:,LBj:)
90 real(r8),
intent(in) :: Fi(LBi:,LBj:,:)
91 real(r8),
intent(inout) :: Si(LBi:,LBj:,:,:)
93 real(r8),
intent(in) :: pm(LBi:UBi,LBj:UBj)
94 real(r8),
intent(in) :: pn(LBi:UBi,LBj:UBj)
95 real(r8),
intent(in) :: Fi(LBi:UBi,LBj:UBj,nIceF)
96 real(r8),
intent(inout) :: Si(LBi:UBi,LBj:UBj,2,nIceS)
103 real(r8) :: alfa, beta, cff, f1, f2, f3, f4, gamma
104 real(r8) :: E, E0, ee, ees, ep, epx, epy
106 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: eps_xx
107 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: eps_xy
108 real(r8),
dimension(IminS:ImaxS,JminS:JmaxS) :: eps_yy
110# include "set_bounds.h"
125 eps_xx(i,j)=(si(i+1,j,lieol,
isuevp)- &
126 & si(i ,j,lieol,
isuevp))*pm(i,j)
127 eps_yy(i,j)=(si(i,j+1,lieol,
isvevp)- &
128 & si(i,j ,lieol,
isvevp))*pn(i,j)
129 epx=0.25_r8*(si(i+1,j+1,lieol,
isvevp)+ &
130 & si(i+1,j ,lieol,
isvevp)- &
131 & si(i-1,j+1,lieol,
isvevp)- &
132 & si(i-1,j ,lieol,
isvevp))*pm(i,j)
133 epy=0.25_r8*(si(i+1,j+1,lieol,
isuevp)+ &
134 & si(i ,j+1,lieol,
isuevp)- &
135 & si(i+1,j-1,lieol,
isuevp)- &
136 & si(i ,j-1,lieol,
isuevp))*pn(i,j)
137 eps_xy(i,j)=0.5_r8*(epx+epy)
146 IF (si(i,j,liold,
ishice).gt.0.01_r8)
THEN
148 & (pm(i,j)*
dtevp(ng))**2
150 ee =e/(2.0_r8*fi(i,j,
icsvis)+1.0e-8_r8)
154 cff =1.0_r8/
dtevp(ng)
157 gamma=1.0_r8/
dtevp(ng)+ee
158 f1=e*eps_xx(i,j)+cff*si(i,j,lieol,
isisxx)-ep
159 f2=e*eps_yy(i,j)+cff*si(i,j,lieol,
isisyy)-ep
160 f3=e*eps_xy(i,j)+cff*si(i,j,lieol,
isisxy)
161 f4=1.0_r8/(alfa**2-beta**2)
162 si(i,j,lienw,
isisxx)=f4*(alfa*f1-beta*f2)
163 si(i,j,lienw,
isisxy)=f3/gamma
164 si(i,j,lienw,
isisyy)=f4*(alfa*f2-beta*f1)
166 si(i,j,lienw,
isisxx)=2.0_r8*fi(i,j,
icsvis)*eps_xx(i,j)+ &
168 & (eps_xx(i,j)+eps_yy(i,j))- &
170 si(i,j,lienw,
isisyy)=2.0_r8*fi(i,j,
icsvis)*eps_yy(i,j)+ &
172 & (eps_xx(i,j)+eps_yy(i,j))- &
181 CALL ice_bc2d_tile (ng, tile, model,
isisxx, &
182 & lbi, ubi, lbj, ubj, &
183 & imins, imaxs, jmins, jmaxs, &
190 CALL ice_bc2d_tile (ng, tile, model,
isisxy, &
191 & lbi, ubi, lbj, ubj, &
192 & imins, imaxs, jmins, jmaxs, &
199 CALL ice_bc2d_tile (ng, tile, model,
isisyy, &
200 & lbi, ubi, lbj, ubj, &
201 & imins, imaxs, jmins, jmaxs, &
210 & lbi, ubi, lbj, ubj, &
214 & lbi, ubi, lbj, ubj, &
218 & lbi, ubi, lbj, ubj, &
225 & lbi, ubi, lbj, ubj, &
233 END SUBROUTINE ice_evp_sig_tile
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
type(t_grid), dimension(:), allocatable grid
integer, parameter icpice
integer, dimension(:), allocatable dtevp
integer, parameter icsvis
integer, parameter icbvis
integer, parameter isisxx
real(r8), dimension(:), allocatable icerho
type(t_ice), dimension(:), allocatable ice
integer, dimension(nices) ibice
integer, parameter isisxy
integer, parameter isuevp
integer, parameter isvevp
integer, parameter ishice
integer, parameter isisyy
type(t_lbc), dimension(:,:,:), allocatable lbc
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)