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

Annotation 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.1 - (hide annotations) (download)
Fri Apr 27 22:25:23 2012 UTC (13 years, 3 months ago) by dimitri
Branch: MAIN
first check in of itd code

1 dimitri 1.1 C $Header: $
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 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 myTime :: current time
53     C myIter :: iteration number
54     C myThid :: Thread no. that called this routine.
55     _RL myTime
56     INTEGER myIter
57     INTEGER myThid
58     CEndOfInterface
59    
60     #ifdef SEAICE_ITD
61    
62     C !LOCAL VARIABLES: ====================================================
63     C === Local variables ===
64     C i,j,bi,bj,k :: Loop counters
65     C nITD :: number of sea ice thickness categories
66     C openwater :: open water area fraction
67     C
68     INTEGER i, j, bi, bj, k
69     #ifdef ALLOW_AUTODIFF_TAMC
70     INTEGER itmpkey
71     #endif /* ALLOW_AUTODIFF_TAMC */
72     #ifdef SEAICE_AGE
73     INTEGER iTracer
74     #endif
75     _RL openwater(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
76    
77     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
78    
79     DO bj=myByLo(myThid),myByHi(myThid)
80     DO bi=myBxLo(myThid),myBxHi(myThid)
81    
82     C calculate area of open water
83     DO j=1-OLy,sNy+OLy
84     DO i=1-OLx,sNx+OLx
85     openwater(i,j) = ONE
86     ENDDO
87     ENDDO
88     DO k=1,nITD
89     DO j=1-OLy,sNy+OLy
90     DO i=1-OLx,sNx+OLx
91     openwater(i,j) = openwater(i,j) - AREAITD(i,j,k,bi,bj)
92     ENDDO
93     ENDDO
94     ENDDO
95    
96     C ----------------------------------------------------
97     C | redistribute/"advect" sea ice in thickness space |
98     C | as described in Bitz et al. (2001) |
99     C ----------------------------------------------------
100    
101     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
102    
103     C --- Hibler-type "ridging", i.e. cut back excessive ice area fraction ---
104     C in case ice concentration exceeds 100% assume that
105     C convergence of floe field has eliminated all open water
106     C and eventual rafting occured in thinnest category:
107     DO j=1-OLy,sNy+OLy
108     DO i=1-OLx,sNx+OLx
109     IF (openwater(i,j) .lt. 0.0)
110     & AREAITD(i,j,1,bi,bj) = openwater(i,j) + AREAITD(i,j,1,bi,bj)
111     ENDDO
112     ENDDO
113     C check if more thicker ice needs to be rafted to accomodate area excess:
114     DO k=1,nITD-1
115     DO j=1-OLy,sNy+OLy
116     DO i=1-OLx,sNx+OLx
117     IF (AREAITD(i,j,k,bi,bj) .lt. 0.0) THEN
118     C --- pass concentration deficit up to next thicker category
119     C --- since all quantities are extensive, we add instead of average
120     AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
121     & + AREAITD (i,j,k,bi,bj)
122     AREAITD (i,j,k ,bi,bj) = ZERO
123     HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
124     & + HEFFITD (i,j,k,bi,bj)
125     HEFFITD (i,j,k ,bi,bj) = ZERO
126     HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
127     & + HSNOWITD(i,j,k,bi,bj)
128     HSNOWITD(i,j,k ,bi,bj) = ZERO
129     C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
130     C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
131     C age(k+1)=age(k+1)+age(k);age(k)= ZERO
132     C this is for ridged sea ice volume fraction
133     C IF (PRESENT(rdg)) THEN
134     C rdg(k+1)=rdg(k+1)+rdg(k); rdg(k)= ZERO
135     C ENDIF
136     ENDIF
137     ENDDO
138     ENDDO
139     ENDDO
140    
141     C --- ice thickness redistribution ---
142     C now check that ice thickness stays within category limits
143     DO k=1,nITD-1
144     DO j=1-OLy,sNy+OLy
145     DO i=1-OLx,sNx+OLx
146     IF (HEFFITD(i,j,k,bi,bj) .gt.
147     & Hlimit(k)*AREAITD(i,j,k,bi,bj)) THEN
148     C --- the upper thickness limit is exceeded: move ice up to next thicker category
149     AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
150     & + AREAITD (i,j,k,bi,bj)
151     AREAITD (i,j,k ,bi,bj) = ZERO
152     HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
153     & + HEFFITD (i,j,k,bi,bj)
154     HEFFITD (i,j,k ,bi,bj) = ZERO
155     HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
156     & + HSNOWITD(i,j,k,bi,bj)
157     HSNOWITD(i,j,k ,bi,bj) = ZERO
158     C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
159     C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
160     C age(k+1)=age(k+1)+age(k);age(k)= ZERO
161     C IF (PRESENT(rdg)) THEN
162     C rdg(k+1)=rdg(k+1)+rdg(k);rdg(k)= ZERO
163     C ENDIF
164     ENDIF
165     ENDDO
166     ENDDO
167     ENDDO
168     C
169     DO k=nITD,2,-1
170     DO j=1-OLy,sNy+OLy
171     DO i=1-OLx,sNx+OLx
172     IF (HEFFITD(i,j,k,bi,bj) .lt.
173     & Hlimit(k-1)*AREAITD(i,j,k,bi,bj)) THEN
174     C --- the lower thickness limit is exceeded: move ice down to next thinner category
175     AREAITD (i,j,k-1,bi,bj) = AREAITD (i,j,k-1,bi,bj)
176     & + AREAITD (i,j,k,bi,bj)
177     AREAITD (i,j,k ,bi,bj) = ZERO
178     HEFFITD (i,j,k-1,bi,bj) = HEFFITD (i,j,k-1,bi,bj)
179     & + HEFFITD (i,j,k,bi,bj)
180     HEFFITD (i,j,k ,bi,bj) = ZERO
181     HSNOWITD(i,j,k-1,bi,bj) = HSNOWITD(i,j,k-1,bi,bj)
182     & + HSNOWITD(i,j,k,bi,bj)
183     HSNOWITD(i,j,k ,bi,bj) = ZERO
184     c snow(k-1) = snow(k-1)+snow(k); snow(k) = ZERO
185     C t1(k-1) = t1(k-1)+t1(k); t1(k) = ZERO
186     C t2(k-1) = t2(k-1)+t2(k); t2(k) = ZERO
187     C age(k-1)=age(k-1)+age(k);age(k)= ZERO
188     C IF (PRESENT(rdg)) THEN
189     C rdg(k-1)=rdg(k-1)+rdg(k);rdg(k)= ZERO
190     C ENDIF
191     ENDIF
192     ENDDO
193     ENDDO
194     ENDDO
195    
196     C end bi,bj loop
197     ENDDO
198     ENDDO
199    
200     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
201     #endif /* SEAICE_ITD */
202     RETURN
203     END SUBROUTINE SEAICE_ITD_REDIST
204    

  ViewVC Help
Powered by ViewVC 1.1.22