/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_advect_thickness_x.F
ViewVC logotype

Contents of /MITgcm_contrib/dgoldberg/streamice/streamice_advect_thickness_x.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Wed May 2 02:36:01 2012 UTC (13 years, 2 months ago) by heimbach
Branch: MAIN
Various updates to streamice code

1 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_init_varia.F,v 1.6 2011/06/29 16:24:10 dng Exp $
2 C $Name: $
3
4 #include "STREAMICE_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7
8 SUBROUTINE STREAMICE_ADVECT_THICKNESS_X ( myThid ,
9 O hflux_x ,
10 O h ,
11 I time_step )
12
13 IMPLICIT NONE
14
15 C O hflux_x ! flux per unit width across face
16 C O h
17 C I time_step
18
19 C === Global variables ===
20 #include "SIZE.h"
21 #include "GRID.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "STREAMICE.h"
25
26 INTEGER myThid
27 _RL hflux_x (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
28 _RL h (1-Olx:sNx+Olx,1-Oly:sNy+Oly,nSx,nSy)
29 _RL time_step
30
31 #ifdef ALLOW_STREAMICE
32
33 C LOCAL VARIABLES
34
35 INTEGER i, j, bi, bj, Gi, Gj, k
36 _RL uface, phi
37 _RL stencil (-1:1)
38 LOGICAL H0_valid ! there are valid cells to calculate a
39 ! slope-limited 2nd order flux
40 _RL SLOPE_LIMITER
41 _RL total_vol_out
42 external SLOPE_LIMITER
43
44 total_vol_out = 0.0
45
46 DO bj=myByLo(myThid),myByHi(myThid)
47 DO bi=myBxLo(myThid),myBxHi(myThid)
48 DO j=1-3,sNy+3
49 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
50 IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN
51 DO i=1-2,sNx+3
52 C THESE ARRAY BOUNDS INSURE THAT AFTER THIS STEP,
53 C VALUES WILL BE RELIABLE 2 GRID CELLS OUT IN THE
54 C X DIRECTION AND 3 CELLS OUT IN THE Y DIR
55 IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .or.
56 & ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and.
57 & (STREAMICE_hmask(i,j,bi,bj).ne.1.0))) THEN
58
59 Gi = (myXGlobalLo-1)+(bi-1)*sNx+i
60
61 IF (STREAMICE_ufacemask(i,j,bi,bj).eq.4.0) THEN
62 hflux_x (i,j,bi,bj) = u_flux_bdry_SI (i,j,bi,bj)
63 ELSE
64
65 uface = .5 *
66 & (U_streamice(i,j,bi,bj)+U_streamice(i,j+1,bi,bj))
67
68
69 IF (uface .gt. 0. _d 0) THEN
70 DO k=-1,1
71 stencil (k) = h(i+k-1,j,bi,bj)
72 ENDDO
73 IF ((STREAMICE_hmask(i,j,bi,bj).eq.1.0) .and.
74 & (STREAMICE_hmask(i-2,j,bi,bj).eq.1.0)) H0_valid=.true.
75
76 IF ((Gi.eq.1).and.(STREAMICE_hmask(i-1,j,bi,bj).eq.3.0))
77 & THEN ! we are at western bdry and there is a thick. bdry cond
78 hflux_x (i,j,bi,bj) = h(i-1,j,bi,bj) * uface
79 ELSEIF (H0_valid) THEN
80 phi = SLOPE_LIMITER (
81 & stencil(0)-stencil(-1),
82 & stencil(1)-stencil(0))
83 hflux_x (i,j,bi,bj) = uface *
84 & (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))
85 ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme
86 hflux_x (i,j,bi,bj) = uface * stencil(0)
87 ENDIF
88
89 ELSE ! uface <= 0
90
91 DO k=-1,1
92 stencil (k) = h(i-k,j,bi,bj)
93 ENDDO
94 IF ((STREAMICE_hmask(i-1,j,bi,bj).eq.1.0) .and.
95 & (STREAMICE_hmask(i+1,j,bi,bj).eq.1.0)) H0_valid=.true.
96
97 IF ((Gi.eq.Nx).and.(STREAMICE_hmask(i+1,j,bi,bj).eq.3.0))
98 & THEN ! we are at western bdry and there is a thick. bdry cond
99 hflux_x (i,j,bi,bj) = h(i+1,j,bi,bj) * uface
100 ELSEIF (H0_valid) THEN
101 phi = SLOPE_LIMITER (
102 & stencil(0)-stencil(-1),
103 & stencil(1)-stencil(0))
104 hflux_x (i,j,bi,bj) = uface *
105 & (stencil(0) - phi * .5 * (stencil(0)-stencil(1)))
106 ELSE ! one of the two cells needed for a HO scheme is missing, use FO scheme
107 hflux_x (i,j,bi,bj) = uface * stencil(0)
108 ENDIF
109
110 ENDIF
111
112 ENDIF
113
114 if (streamice_ufacemask(i,j,bi,bj).eq.2.0) THEN
115 total_vol_out = total_vol_out +
116 & hflux_x (i,j,bi,bj) * time_step
117 ENDIF
118
119 ENDIF
120 ENDDO
121 ENDIF
122 ENDDO
123 ENDDO
124 ENDDO
125
126 C X-FLUXES AT CELL BOUNDARIES CALCULATED; NOW TAKE FLUX DIVERGENCE TO INCREMENT THICKNESS
127
128 DO bj=myByLo(myThid),myByHi(myThid)
129 DO bi=myBxLo(myThid),myBxHi(myThid)
130 DO j=1-3,sNy+3
131 Gj = (myYGlobalLo-1)+(bj-1)*sNy+j
132 IF ((Gj .ge. 1) .and. (Gj .le. Ny)) THEN
133 DO i=1-2,sNx+2
134 IF (STREAMICE_hmask(i,j,bi,bj).eq.1.0) THEN
135 h(i,j,bi,bj) = h(i,j,bi,bj) - time_step *
136 & (hflux_x(i+1,j,bi,bj)*dyG(i+1,j,bi,bj) -
137 & hflux_x(i,j,bi,bj)*dyG(i,j,bi,bj)) *
138 & recip_rA (i,j,bi,bj)
139 ENDIF
140 ENDDO
141 ENDIF
142 ENDDO
143 ENDDO
144 ENDDO
145
146 ! PRINT *, "TOTAL VOLUME OUT: ", total_vol_out
147
148 #endif
149 RETURN
150 END SUBROUTINE STREAMICE_ADVECT_THICKNESS_X
151

  ViewVC Help
Powered by ViewVC 1.1.22