/[MITgcm]/MITgcm/pkg/seaice/groatb.F
ViewVC logotype

Annotation of /MITgcm/pkg/seaice/groatb.F

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


Revision 1.14 - (hide annotations) (download)
Thu Dec 14 08:36:19 2006 UTC (17 years, 5 months ago) by mlosch
Branch: MAIN
CVS Tags: HEAD
Changes since 1.13: +1 -1 lines
FILE REMOVED
 overhaul of thermodynamics
- growth.F and groatb.F are replaced by new routine seaice_growth.F
- budget.F is replaced by two new routines seaice_budget_ocean/ice.F
- move a few global fields out of SEAICE.h into seaice_growth.F and
  make them 2D (FICE/QNETO/ ...)
- remove FO (it is the same as QNETO)
- introduce a few local fields to avoid modifying external fields such
  as atemp, etc.

  lab_sea does not change, but hopefully it will be easier for Patrick
  do the adjoint

1 mlosch 1.14 C $Header: /u/gcmpack/MITgcm/pkg/seaice/groatb.F,v 1.13 2006/11/16 03:25:11 dimitri Exp $
2 edhill 1.10 C $Name: $
3 heimbach 1.2
4     #include "SEAICE_OPTIONS.h"
5 dimitri 1.9
6 heimbach 1.2 CStartOfInterface
7     SUBROUTINE groatb( A22, myThid )
8     C /==========================================================\
9     C | SUBROUTINE groatb |
10     C | o Calculate ice growth |
11     C |==========================================================|
12     C \==========================================================/
13     IMPLICIT NONE
14    
15     C === Global variables ===
16     #include "SIZE.h"
17     #include "EEPARAMS.h"
18     #include "PARAMS.h"
19     #include "DYNVARS.h"
20     #include "FFIELDS.h"
21     #include "SEAICE.h"
22     #include "SEAICE_FFIELDS.h"
23 heimbach 1.8
24     #ifdef ALLOW_AUTODIFF_TAMC
25     # include "tamc.h"
26     #endif
27    
28 dimitri 1.6 COMMON /SEAICE_BOUND_RL/
29     & MAX_HEFF, MIN_ATEMP, MIN_LWDOWN, MAX_TICE, MIN_TICE,
30     & SEAICE_EPS, SEAICE_EPS_SQ
31     _RL SEAICE_EPS, SEAICE_EPS_SQ
32     _RL MAX_HEFF, MIN_ATEMP, MIN_LWDOWN, MAX_TICE, MIN_TICE
33    
34 heimbach 1.2 C === Routine arguments ===
35     C myThid - Thread no. that called this routine.
36     _RL A22
37     INTEGER myThid
38     CEndOfInterface
39    
40     C === Local variables ===
41 dimitri 1.4 C i,j,bi,bj - Loop counters
42 heimbach 1.2
43 dimitri 1.4 INTEGER i, j, bi, bj
44 heimbach 1.2 INTEGER KOPEN
45 dimitri 1.9 _RL SPEED_SQ
46 heimbach 1.2 _RL HICE (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
47     _RL UG (1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
48    
49 dimitri 1.7 #ifdef SEAICE_MULTILEVEL
50     INTEGER it
51 heimbach 1.11 INTEGER ilockey
52 dimitri 1.7 _RL RK
53     _RL HICEP(1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
54     _RL FICEP(1-OLx:sNx+OLx, 1-OLy:sNy+OLy)
55     #endif
56    
57 heimbach 1.8 CADJ loop = parallel
58 heimbach 1.2 DO bj=myByLo(myThid),myByHi(myThid)
59 heimbach 1.8 CADJ loop = parallel
60 heimbach 1.2 DO bi=myBxLo(myThid),myBxHi(myThid)
61 heimbach 1.8 cph(
62     #ifdef ALLOW_AUTODIFF_TAMC
63     act1 = bi - myBxLo(myThid)
64     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
65     act2 = bj - myByLo(myThid)
66     max2 = myByHi(myThid) - myByLo(myThid) + 1
67     act3 = myThid - 1
68     max3 = nTx*nTy
69     act4 = ikey_dynamics - 1
70     iicekey = (act1 + 1) + act2*max1
71     & + act3*max1*max2
72     & + act4*max1*max2*max3
73     #endif /* ALLOW_AUTODIFF_TAMC */
74     c
75     #ifdef ALLOW_AUTODIFF_TAMC
76     CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj,
77     CADJ & key = iicekey, byte = isbyte
78     #endif /* ALLOW_AUTODIFF_TAMC */
79     cph)
80 heimbach 1.2
81     C DETERMINE AMOUNT OF OPEN WATER AND ICE THICKNESS
82     DO J=1,sNy
83     DO I=1,sNx
84 dimitri 1.13 AREA(I,J,3,bi,bj)=MAX(A22,AREA(I,J,2,bi,bj))
85 dimitri 1.3 FHEFF(I,J,bi,bj)=0.0 _d 0
86 dimitri 1.7 #ifdef SEAICE_MULTILEVEL
87     FICEP(I,J)=0.0 _d 0
88     #endif
89 heimbach 1.8 ENDDO
90     ENDDO
91     #ifdef ALLOW_AUTODIFF_TAMC
92     CADJ STORE area(:,:,:,bi,bj) = comlev1_bibj,
93     CADJ & key = iicekey, byte = isbyte
94     #endif /* ALLOW_AUTODIFF_TAMC */
95     DO J=1,sNy
96     DO I=1,sNx
97 dimitri 1.13 HICE(I,J)=HEFF(I,J,2,bi,bj)/AREA(I,J,3,bi,bj)
98 heimbach 1.2 ENDDO
99     ENDDO
100    
101     C NOW DETERMINE MIXED LAYER TEMPERATURE
102     DO J=1,sNy
103     DO I=1,sNx
104 dimitri 1.3 TMIX(I,J,bi,bj)=theta(I,J,1,bi,bj)+273.16 _d +00
105 heimbach 1.2 #ifdef SEAICE_DEBUG
106 dimitri 1.3 TMIX(I,J,bi,bj)=MAX(TMIX(I,J,bi,bj),271.2 _d +00)
107 dimitri 1.5 #endif
108 heimbach 1.2 ENDDO
109     ENDDO
110    
111     DO J=1,sNy
112     DO I=1,sNx
113 dimitri 1.9 SPEED_SQ = UWIND(I,J,bi,bj)**2 + VWIND(I,J,bi,bj)**2
114 dimitri 1.7 IF ( SPEED_SQ .LE. SEAICE_EPS_SQ ) THEN
115 dimitri 1.6 UG(I,J)=SEAICE_EPS
116     ELSE
117     UG(I,J)=SQRT(SPEED_SQ)
118     ENDIF
119 heimbach 1.2 ENDDO
120     ENDDO
121    
122 heimbach 1.8 #ifdef ALLOW_AUTODIFF_TAMC
123     CADJ STORE atemp(:,:,bi,bj) = comlev1_bibj,
124     CADJ & key = iicekey, byte = isbyte
125     CADJ STORE lwdown(:,:,bi,bj) = comlev1_bibj,
126     CADJ & key = iicekey, byte = isbyte
127     #endif /* ALLOW_AUTODIFF_TAMC */
128 heimbach 1.11
129 heimbach 1.2 C NOW DETERMINE GROWTH RATES
130     C FIRST DO OPEN WATER
131     KOPEN=-1
132     CALL BUDGET(UG, TMIX, HICE, FO, KOPEN, bi, bj)
133 heimbach 1.8
134 heimbach 1.2 C NOW DO ICE
135     KOPEN=1
136 dimitri 1.7 #ifdef SEAICE_MULTILEVEL
137 heimbach 1.11 C-- Start loop over muli-levels
138     DO IT=1,MULTDIM
139     #ifdef ALLOW_AUTODIFF_TAMC
140     ilockey = (iicekey-1)*MULTDIM + IT
141     CADJ STORE atemp(:,:,bi,bj) = comlev1_multdim,
142     CADJ & key = ilockey, byte = isbyte
143     CADJ STORE lwdown(:,:,bi,bj) = comlev1_multdim,
144     CADJ & key = ilockey, byte = isbyte
145     CADJ STORE tices(:,:,it,bi,bj) = comlev1_multdim,
146     CADJ & key = ilockey, byte = isbyte
147     #endif /* ALLOW_AUTODIFF_TAMC */
148 dimitri 1.7 DO J=1,sNy
149     DO I=1,sNx
150     RK=IT*1.0
151     HICEP(I,J)=(HICE(I,J)/7.0 _d 0)*((2.0 _d 0*RK)-1.0 _d 0)
152     TICE(I,J,bi,bj)=TICES(I,J,IT,bi,bj)
153     ENDDO
154     ENDDO
155     CALL BUDGET(UG, TICE, HICEP, FICE, KOPEN, bi, bj)
156     DO J=1,sNy
157     DO I=1,sNx
158     FICEP(I,J)=(FICE(I,J,bi,bj)/7.0 _d 0)+FICEP(I,J)
159     TICES(I,J,IT,bi,bj)=TICE(I,J,bi,bj)
160     ENDDO
161     ENDDO
162     ENDDO
163 heimbach 1.11 C-- End loop over muli-levels
164 dimitri 1.7 DO J=1,sNy
165     DO I=1,sNx
166     FICE(I,J,bi,bj)=FICEP(I,J)
167     ENDDO
168     ENDDO
169     #else /* SEAICE_MULTILEVEL */
170 heimbach 1.11 #ifdef ALLOW_AUTODIFF_TAMC
171     CADJ STORE atemp(:,:,bi,bj) = comlev1_bibj,
172     CADJ & key = iicekey, byte = isbyte
173     CADJ STORE lwdown(:,:,bi,bj) = comlev1_bibj,
174     CADJ & key = iicekey, byte = isbyte
175     #endif /* ALLOW_AUTODIFF_TAMC */
176 heimbach 1.2 CALL BUDGET(UG, TICE, HICE, FICE, KOPEN, bi, bj)
177 dimitri 1.7 #endif /* SEAICE_MULTILEVEL */
178 heimbach 1.2
179     ENDDO
180     ENDDO
181    
182     RETURN
183     END

  ViewVC Help
Powered by ViewVC 1.1.22