/[MITgcm]/MITgcm_contrib/torge/itd/code/seaice_itd_redist.F
ViewVC logotype

Contents of /MITgcm_contrib/torge/itd/code/seaice_itd_redist.F

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


Revision 1.6 - (show annotations) (download)
Wed Mar 27 18:59:52 2013 UTC (12 years, 4 months ago) by torge
Branch: MAIN
CVS Tags: HEAD
Changes since 1.5: +0 -0 lines
updating my MITgcm_contrib directory to include latest changes on main branch;
settings are to run a 1D test szenario with ITD code and 7 categories

1 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_itd_redist.F,v 1.2 2012/10/23 13:20:49 jmc Exp $
2 C $Name: $
3
4 #include "SEAICE_OPTIONS.h"
5
6 C !ROUTINE: SEAICE_ITD_REDIST
7
8 C !INTERFACE: ==========================================================
9 SUBROUTINE SEAICE_ITD_REDIST(
10 I bi, bj, myTime, myIter, myThid )
11
12 C !DESCRIPTION: \bv
13 C *===========================================================*
14 C | SUBROUTINE SEAICE_ITD_REDIST
15 C | o checks if absolute ice thickness in any category
16 C | exceeds its category limits
17 C | o redistributes sea ice area and volume
18 C | and associated ice properties in thickness space
19 C |
20 C | Torge Martin, Feb. 2012, torge@mit.edu
21 C *===========================================================*
22 C \ev
23
24 C !USES: ===============================================================
25 IMPLICIT NONE
26
27 C === Global variables to be checked and redistributed ===
28 C AREAITD :: sea ice area by category
29 C HEFFITD :: sea ice thickness by category
30 C
31 C === Global variables to be redistributed ===
32 C HSNOWITD :: snow thickness by category
33 C enthalpy ?
34 C temperature ?
35 C salinity ?
36 C age ?
37 C
38 #include "SIZE.h"
39 #include "EEPARAMS.h"
40 #include "PARAMS.h"
41 #include "GRID.h"
42 #include "SEAICE_SIZE.h"
43 #include "SEAICE_PARAMS.h"
44 #include "SEAICE.h"
45
46 #ifdef ALLOW_AUTODIFF_TAMC
47 # include "tamc.h"
48 #endif
49
50 C !INPUT PARAMETERS: ===================================================
51 C === Routine arguments ===
52 C bi, bj :: outer loop counters
53 C myTime :: current time
54 C myIter :: iteration number
55 C myThid :: Thread no. that called this routine.
56 _RL myTime
57 INTEGER bi,bj
58 INTEGER myIter
59 INTEGER myThid
60 CEndOfInterface
61
62 #ifdef SEAICE_ITD
63
64 C !LOCAL VARIABLES: ====================================================
65 C === Local variables ===
66 C i,j,k :: inner loop counters
67 C nITD :: number of sea ice thickness categories
68 C openwater :: open water area fraction
69 C
70 INTEGER i, j, k
71 #ifdef ALLOW_AUTODIFF_TAMC
72 INTEGER itmpkey
73 #endif /* ALLOW_AUTODIFF_TAMC */
74 #ifdef SEAICE_AGE
75 INTEGER iTracer
76 #endif
77 _RL openwater(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
78
79 C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
80
81 c DO bj=myByLo(myThid),myByHi(myThid)
82 c DO bi=myBxLo(myThid),myBxHi(myThid)
83 C must now be called within bi,bj loop
84
85 C calculate area of open water
86 DO j=1-OLy,sNy+OLy
87 DO i=1-OLx,sNx+OLx
88 openwater(i,j) = ONE
89 ENDDO
90 ENDDO
91 DO k=1,nITD
92 DO j=1-OLy,sNy+OLy
93 DO i=1-OLx,sNx+OLx
94 openwater(i,j) = openwater(i,j) - AREAITD(i,j,k,bi,bj)
95 ENDDO
96 ENDDO
97 ENDDO
98
99 C ----------------------------------------------------
100 C | redistribute/"advect" sea ice in thickness space |
101 C | as described in Bitz et al. (2001) |
102 C ----------------------------------------------------
103
104 C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
105
106 C --- Hibler-type "ridging", i.e. cut back excessive ice area fraction ---
107 C in case ice concentration exceeds 100% assume that
108 C convergence of floe field has eliminated all open water
109 C and eventual rafting occured in thinnest category:
110 DO j=1-OLy,sNy+OLy
111 DO i=1-OLx,sNx+OLx
112 IF (openwater(i,j) .lt. 0.0)
113 & AREAITD(i,j,1,bi,bj) = openwater(i,j) + AREAITD(i,j,1,bi,bj)
114 ENDDO
115 ENDDO
116 C
117 C the following steps only make sense if there are actually multi-categories
118 IF (nITD .gt. 1) THEN
119 C
120 C check if more thicker ice needs to be rafted to accomodate area excess:
121 DO k=1,nITD-1
122 DO j=1-OLy,sNy+OLy
123 DO i=1-OLx,sNx+OLx
124 IF (AREAITD(i,j,k,bi,bj) .lt. 0.0) THEN
125 C --- pass concentration deficit up to next thicker category
126 C --- since all quantities are extensive, we add instead of average
127 AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
128 & + AREAITD (i,j,k,bi,bj)
129 AREAITD (i,j,k ,bi,bj) = ZERO
130 HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
131 & + HEFFITD (i,j,k,bi,bj)
132 HEFFITD (i,j,k ,bi,bj) = ZERO
133 HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
134 & + HSNOWITD(i,j,k,bi,bj)
135 HSNOWITD(i,j,k ,bi,bj) = ZERO
136 C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
137 C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
138 C age(k+1)=age(k+1)+age(k);age(k)= ZERO
139 C this is for ridged sea ice volume fraction
140 C IF (PRESENT(rdg)) THEN
141 C rdg(k+1)=rdg(k+1)+rdg(k); rdg(k)= ZERO
142 C ENDIF
143 ENDIF
144 ENDDO
145 ENDDO
146 ENDDO
147
148 C --- ice thickness redistribution ---
149 C now check that ice thickness stays within category limits
150 DO k=1,nITD-1
151 DO j=1-OLy,sNy+OLy
152 DO i=1-OLx,sNx+OLx
153 IF (HEFFITD(i,j,k,bi,bj) .gt.
154 & Hlimit(k)*AREAITD(i,j,k,bi,bj)) THEN
155 C --- the upper thickness limit is exceeded: move ice up to next thicker category
156 AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
157 & + AREAITD (i,j,k,bi,bj)
158 AREAITD (i,j,k ,bi,bj) = ZERO
159 HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
160 & + HEFFITD (i,j,k,bi,bj)
161 HEFFITD (i,j,k ,bi,bj) = ZERO
162 HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
163 & + HSNOWITD(i,j,k,bi,bj)
164 HSNOWITD(i,j,k ,bi,bj) = ZERO
165 C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
166 C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
167 C age(k+1)=age(k+1)+age(k);age(k)= ZERO
168 C IF (PRESENT(rdg)) THEN
169 C rdg(k+1)=rdg(k+1)+rdg(k);rdg(k)= ZERO
170 C ENDIF
171 ENDIF
172 ENDDO
173 ENDDO
174 ENDDO
175 C
176 DO k=nITD,2,-1
177 DO j=1-OLy,sNy+OLy
178 DO i=1-OLx,sNx+OLx
179 IF (HEFFITD(i,j,k,bi,bj) .lt.
180 & Hlimit(k-1)*AREAITD(i,j,k,bi,bj)) THEN
181 C --- the lower thickness limit is exceeded: move ice down to next thinner category
182 AREAITD (i,j,k-1,bi,bj) = AREAITD (i,j,k-1,bi,bj)
183 & + AREAITD (i,j,k,bi,bj)
184 AREAITD (i,j,k ,bi,bj) = ZERO
185 HEFFITD (i,j,k-1,bi,bj) = HEFFITD (i,j,k-1,bi,bj)
186 & + HEFFITD (i,j,k,bi,bj)
187 HEFFITD (i,j,k ,bi,bj) = ZERO
188 HSNOWITD(i,j,k-1,bi,bj) = HSNOWITD(i,j,k-1,bi,bj)
189 & + HSNOWITD(i,j,k,bi,bj)
190 HSNOWITD(i,j,k ,bi,bj) = ZERO
191 c snow(k-1) = snow(k-1)+snow(k); snow(k) = ZERO
192 C t1(k-1) = t1(k-1)+t1(k); t1(k) = ZERO
193 C t2(k-1) = t2(k-1)+t2(k); t2(k) = ZERO
194 C age(k-1)=age(k-1)+age(k);age(k)= ZERO
195 C IF (PRESENT(rdg)) THEN
196 C rdg(k-1)=rdg(k-1)+rdg(k);rdg(k)= ZERO
197 C ENDIF
198 ENDIF
199 ENDDO
200 ENDDO
201 ENDDO
202 C
203 C end nITD>1 constraint
204 ENDIF
205
206 C end bi,bj loop
207 c ENDDO
208 c ENDDO
209
210 C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
211 #endif /* SEAICE_ITD */
212 RETURN
213 END

  ViewVC Help
Powered by ViewVC 1.1.22