/[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.2 - (hide annotations) (download)
Wed Jul 25 17:56:31 2012 UTC (13 years ago) by torge
Branch: MAIN
Changes since 1.1: +6 -5 lines
change seaice_itd_sum and seaice_itd_redist to exclude bi,bj loops;
both routines must now be called within bi,bj loops;
this is required in seaice_growth

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

  ViewVC Help
Powered by ViewVC 1.1.22