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

Annotation 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 - (hide 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 heimbach 1.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