/[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.6 - (hide 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 torge 1.5 C $Header: /u/gcmpack/MITgcm/pkg/seaice/seaice_itd_redist.F,v 1.2 2012/10/23 13:20:49 jmc 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 torge 1.5 C | o checks if absolute ice thickness in any category
16 dimitri 1.1 C | exceeds its category limits
17 torge 1.5 C | o redistributes sea ice area and volume
18 dimitri 1.1 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 torge 1.5 C | redistribute/"advect" sea ice in thickness space |
101 dimitri 1.1 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 torge 1.4 C
117     C the following steps only make sense if there are actually multi-categories
118     IF (nITD .gt. 1) THEN
119     C
120 dimitri 1.1 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 torge 1.5 & + AREAITD (i,j,k,bi,bj)
129 dimitri 1.1 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 torge 1.5 C rdg(k+1)=rdg(k+1)+rdg(k); rdg(k)= ZERO
142 dimitri 1.1 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 torge 1.5 AREAITD (i,j,k ,bi,bj) = ZERO
159 dimitri 1.1 HEFFITD (i,j,k+1,bi,bj) = HEFFITD (i,j,k+1,bi,bj)
160     & + HEFFITD (i,j,k,bi,bj)
161 torge 1.5 HEFFITD (i,j,k ,bi,bj) = ZERO
162 dimitri 1.1 HSNOWITD(i,j,k+1,bi,bj) = HSNOWITD(i,j,k+1,bi,bj)
163     & + HSNOWITD(i,j,k,bi,bj)
164 torge 1.5 HSNOWITD(i,j,k ,bi,bj) = ZERO
165 dimitri 1.1 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 torge 1.5 C rdg(k+1)=rdg(k+1)+rdg(k);rdg(k)= ZERO
170 dimitri 1.1 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 torge 1.5 C rdg(k-1)=rdg(k-1)+rdg(k);rdg(k)= ZERO
197 dimitri 1.1 C ENDIF
198     ENDIF
199     ENDDO
200     ENDDO
201     ENDDO
202 torge 1.4 C
203     C end nITD>1 constraint
204     ENDIF
205 dimitri 1.1
206     C end bi,bj loop
207 torge 1.2 c ENDDO
208     c ENDDO
209 dimitri 1.1
210     C---+-|--1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
211     #endif /* SEAICE_ITD */
212     RETURN
213 torge 1.5 END

  ViewVC Help
Powered by ViewVC 1.1.22