/[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.3 - (hide annotations) (download)
Wed Sep 26 17:36:00 2012 UTC (12 years, 10 months ago) by torge
Branch: MAIN
Changes since 1.2: +5 -3 lines
remove declaration of outer loop counters bi,bj

1 torge 1.2 C $Header: /u/gcmpack/MITgcm_contrib/torge/itd/code/seaice_itd_redist.F,v 1.1 2012/04/27 22:25:23 dimitri Exp $
2 dimitri 1.1 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 torge 1.3 I bi, bj, myTime, myIter, myThid )
11 dimitri 1.1
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 torge 1.3 C bi, bj :: outer loop counters
53 dimitri 1.1 C myTime :: current time
54     C myIter :: iteration number
55     C myThid :: Thread no. that called this routine.
56     _RL myTime
57 torge 1.3 INTEGER bi,bj
58 dimitri 1.1 INTEGER myIter
59     INTEGER myThid
60     CEndOfInterface
61    
62     #ifdef SEAICE_ITD
63    
64     C !LOCAL VARIABLES: ====================================================
65     C === Local variables ===
66 torge 1.3 C i,j,k :: inner loop counters
67 dimitri 1.1 C nITD :: number of sea ice thickness categories
68     C openwater :: open water area fraction
69     C
70 torge 1.3 INTEGER i, j, k
71 dimitri 1.1 #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 torge 1.2 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 dimitri 1.1
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 check if more thicker ice needs to be rafted to accomodate area excess:
117     DO k=1,nITD-1
118     DO j=1-OLy,sNy+OLy
119     DO i=1-OLx,sNx+OLx
120     IF (AREAITD(i,j,k,bi,bj) .lt. 0.0) THEN
121     C --- pass concentration deficit up to next thicker category
122     C --- since all quantities are extensive, we add instead of average
123     AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
124     & + AREAITD (i,j,k,bi,bj)
125     AREAITD (i,j,k ,bi,bj) = ZERO
126     HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
127     & + HEFFITD (i,j,k,bi,bj)
128     HEFFITD (i,j,k ,bi,bj) = ZERO
129     HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
130     & + HSNOWITD(i,j,k,bi,bj)
131     HSNOWITD(i,j,k ,bi,bj) = ZERO
132     C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
133     C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
134     C age(k+1)=age(k+1)+age(k);age(k)= ZERO
135     C this is for ridged sea ice volume fraction
136     C IF (PRESENT(rdg)) THEN
137     C rdg(k+1)=rdg(k+1)+rdg(k); rdg(k)= ZERO
138     C ENDIF
139     ENDIF
140     ENDDO
141     ENDDO
142     ENDDO
143    
144     C --- ice thickness redistribution ---
145     C now check that ice thickness stays within category limits
146     DO k=1,nITD-1
147     DO j=1-OLy,sNy+OLy
148     DO i=1-OLx,sNx+OLx
149     IF (HEFFITD(i,j,k,bi,bj) .gt.
150     & Hlimit(k)*AREAITD(i,j,k,bi,bj)) THEN
151     C --- the upper thickness limit is exceeded: move ice up to next thicker category
152     AREAITD (i,j,k+1,bi,bj) = AREAITD (i,j,k+1,bi,bj)
153     & + AREAITD (i,j,k,bi,bj)
154     AREAITD (i,j,k ,bi,bj) = ZERO
155     HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
156     & + HEFFITD (i,j,k,bi,bj)
157     HEFFITD (i,j,k ,bi,bj) = ZERO
158     HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
159     & + HSNOWITD(i,j,k,bi,bj)
160     HSNOWITD(i,j,k ,bi,bj) = ZERO
161     C t1(k+1) = t1(k+1)+t1(k); t1(k) = ZERO
162     C t2(k+1) = t2(k+1)+t2(k); t2(k) = ZERO
163     C age(k+1)=age(k+1)+age(k);age(k)= ZERO
164     C IF (PRESENT(rdg)) THEN
165     C rdg(k+1)=rdg(k+1)+rdg(k);rdg(k)= ZERO
166     C ENDIF
167     ENDIF
168     ENDDO
169     ENDDO
170     ENDDO
171     C
172     DO k=nITD,2,-1
173     DO j=1-OLy,sNy+OLy
174     DO i=1-OLx,sNx+OLx
175     IF (HEFFITD(i,j,k,bi,bj) .lt.
176     & Hlimit(k-1)*AREAITD(i,j,k,bi,bj)) THEN
177     C --- the lower thickness limit is exceeded: move ice down to next thinner category
178     AREAITD (i,j,k-1,bi,bj) = AREAITD (i,j,k-1,bi,bj)
179     & + AREAITD (i,j,k,bi,bj)
180     AREAITD (i,j,k ,bi,bj) = ZERO
181     HEFFITD (i,j,k-1,bi,bj) = HEFFITD (i,j,k-1,bi,bj)
182     & + HEFFITD (i,j,k,bi,bj)
183     HEFFITD (i,j,k ,bi,bj) = ZERO
184     HSNOWITD(i,j,k-1,bi,bj) = HSNOWITD(i,j,k-1,bi,bj)
185     & + HSNOWITD(i,j,k,bi,bj)
186     HSNOWITD(i,j,k ,bi,bj) = ZERO
187     c snow(k-1) = snow(k-1)+snow(k); snow(k) = ZERO
188     C t1(k-1) = t1(k-1)+t1(k); t1(k) = ZERO
189     C t2(k-1) = t2(k-1)+t2(k); t2(k) = ZERO
190     C age(k-1)=age(k-1)+age(k);age(k)= ZERO
191     C IF (PRESENT(rdg)) THEN
192     C rdg(k-1)=rdg(k-1)+rdg(k);rdg(k)= ZERO
193     C ENDIF
194     ENDIF
195     ENDDO
196     ENDDO
197     ENDDO
198    
199     C end bi,bj loop
200 torge 1.2 c ENDDO
201     c ENDDO
202 dimitri 1.1
203     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
204     #endif /* SEAICE_ITD */
205     RETURN
206     END SUBROUTINE SEAICE_ITD_REDIST
207    

  ViewVC Help
Powered by ViewVC 1.1.22