4#if defined ICE_MODEL && defined ICE_THERMO
40 PUBLIC :: freezing_point
46 SUBROUTINE ice_frazil (ng, tile, model)
53 integer,
intent(in) :: ng, tile, model
57 character (len=*),
parameter :: MyFile = &
63 CALL wclock_on (ng, model, 42, __line__, myfile)
65 CALL ice_frazil_tile (ng, tile, model, &
66 & lbi, ubi, lbj, ubj, &
67 & imins, imaxs, jmins, jmaxs, &
73 &
grid(ng) % rmask_wet, &
81 CALL wclock_off (ng, model, 42, __line__, myfile)
85 END SUBROUTINE ice_frazil
88 SUBROUTINE ice_frazil_tile (ng, tile, model, &
89 & LBi, UBi, LBj, UBj, &
90 & IminS, ImaxS, JminS, JmaxS, &
104 integer,
intent(in) :: ng, tile, model
105 integer,
intent(in) :: LBi, UBi, LBj, UBj
106 integer,
intent(in) :: IminS, ImaxS, JminS, JmaxS
107 integer,
intent(in) :: nnew
111 real(r8),
intent(in) :: rmask(LBi:,LBj:)
114 real(r8),
intent(in) :: rmask_wet(LBi:,LBj:)
116 real(r8),
intent(in) :: Hz(LBi:,LBj:,:)
117 real(r8),
intent(in) :: z_r(LBi:,LBj:,:)
118 real(r8),
intent(in) :: rho(LBi:,LBj:,:)
119 real(r8),
intent(inout) :: t(LBi:,LBj:,:,:,:)
120 real(r8),
intent(inout) :: Fi(LBi:,LBj:,:)
123 real(r8),
intent(in) :: rmask(LBi:UBi,LBj:UBj)
126 real(r8),
intent(in) :: rmask_wet(LBi:UBi,LBj:UBj)
128 real(r8),
intent(in) :: Hz(LBi:UBi,LBj:UBj,N(ng))
129 real(r8),
intent(in) :: z_r(LBi:UBi,LBj:UBj,N(ng))
130 real(r8),
intent(in) :: rho(LBi:UBi,LBj:UBj,N(ng))
131 real(r8),
intent(inout) :: t(LBi:UBi,LBj:UBj,N(ng),3,NT(ng))
132 real(r8),
intent(inout) :: Fi(LBi:UBi,LBj:UBj,nIceF)
139 integer :: i, j, k, itrc
141 real(r8),
parameter :: Lhat = 79.2_r8
142 real(r8),
parameter :: r = 0.5_r8
144 real(r8) :: delta_wfr, gamma_k, orhoi, pfac, t_fr
147 real(r8),
allocatable :: buffer(:)
148 character (len=3),
allocatable :: op_handle(:)
151# include "set_bounds.h"
172 overland=rmask(i,j).lt.1.0_r8
174 overland=overland.or.(rmask_wet(i,j).lt.1.0_r8)
179 IF (.not.overland)
THEN
181 t_fr=freezing_point(t(i,j,k,nnew,
isalt), z_r(i,j,k))
182 IF (t(i,j,k,nnew,
itemp).lt.t_fr)
THEN
183 gamma_k=pfac*(t_fr-t(i,j,k,nnew,
itemp))/ &
185 t(i,j,k,nnew,
itemp)*(1.0_r8-r)+ &
186 & 0.0543_r8*t(i,j,k,nnew,
isalt))
187 IF ((gamma_k.lt.0.0_r8).and.(k.eq.n(ng)))
THEN
191 & gamma_k*hz(i,j,k)* &
192 & (1000.0_r8+rho(i,j,k))*orhoi
196 & t(i,j,k,nnew,
itemp)*(1.0_r8-r))
202 ELSE IF ((fi(i,j,
icw_fr).gt.0.0_r8).and. &
203 & (t(i,j,k,nnew,
itemp).gt.t_fr))
THEN
204 gamma_k=pfac*(t_fr-t(i,j,k,nnew,
itemp))/ &
205 & (lhat+t(i,j,k,nnew,
itemp)*(1.0_r8-r)+ &
206 & 0.0543_r8*t(i,j,k,nnew,
isalt))
207 delta_wfr=gamma_k*hz(i,j,k)*(
rho0+rho(i,j,k))*orhoi
208 IF ((fi(i,j,
icw_fr)+delta_wfr).gt.0.0_r8)
THEN
211 gamma_k=-fi(i,j,
icw_fr)* &
218 & t(i,j,k,nnew,
itemp)*(1.0_r8-r))
230 IF (fi(i,j,
icw_fr).lt.0.0_r8)
THEN
239 & lbi, ubi, lbj, ubj, &
245 & lbi, ubi, lbj, ubj, &
251 END SUBROUTINE ice_frazil_tile
254 FUNCTION freezing_point (S, Z)
RESULT (FP)
259 real(r8),
intent(in) :: S, Z
281 END FUNCTION freezing_point
subroutine bc_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
type(t_grid), dimension(:), allocatable grid
real(r8), dimension(:), allocatable icerho
type(t_ice), dimension(:), allocatable ice
integer, parameter icw_fr
type(t_ocean), dimension(:), allocatable ocean
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
integer, dimension(:), allocatable nnew
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)