/[MITgcm]/MITgcm/pkg/thsice/thsice_main.F
ViewVC logotype

Annotation of /MITgcm/pkg/thsice/thsice_main.F

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


Revision 1.12 - (hide annotations) (download)
Wed Apr 4 02:40:42 2007 UTC (17 years, 1 month ago) by jmc
Branch: MAIN
CVS Tags: checkpoint58y_post
Changes since 1.11: +14 -10 lines
code to advect pkg/thSIce fields (testing is in progress).

1 jmc 1.12 C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_main.F,v 1.11 2006/06/25 22:31:02 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "THSICE_OPTIONS.h"
5 jmc 1.8
6 jmc 1.2 CBOP
7 jmc 1.1 C !ROUTINE: THSICE_MAIN
8     C !INTERFACE:
9 jmc 1.8 SUBROUTINE THSICE_MAIN(
10 jmc 1.1 I myTime, myIter, myThid )
11 jmc 1.2 C !DESCRIPTION: \bv
12 jmc 1.1 C *==========================================================*
13 jmc 1.8 C | S/R THSICE_MAIN
14     C | o Therm_SeaIce main routine.
15 jmc 1.1 C | step forward Thermodynamic_SeaIce variables and modify
16     C | ocean surface forcing accordingly.
17     C *==========================================================*
18    
19     C !USES:
20     IMPLICIT NONE
21 jmc 1.2
22 jmc 1.1 C === Global variables ===
23     #include "SIZE.h"
24     #include "EEPARAMS.h"
25     #include "PARAMS.h"
26 jmc 1.2 #include "GRID.h"
27 jmc 1.3 #include "SURFACE.h"
28 jmc 1.2 #include "DYNVARS.h"
29 jmc 1.1 #include "FFIELDS.h"
30     #include "THSICE_PARAMS.h"
31 jmc 1.2 #include "THSICE_VARS.h"
32 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
33     # include "tamc.h"
34     # include "tamc_keys.h"
35     #endif
36 jmc 1.8
37 jmc 1.1 C !INPUT/OUTPUT PARAMETERS:
38     C === Routine arguments ===
39 jmc 1.12 C myTime :: Current time in simulation (s)
40     C myIter :: Current iteration number
41     C myThid :: My Thread Id. number
42     _RL myTime
43 jmc 1.1 INTEGER myIter
44     INTEGER myThid
45 jmc 1.2 CEOP
46 jmc 1.1
47     #ifdef ALLOW_THSICE
48     C !LOCAL VARIABLES:
49     C === Local variables ===
50     INTEGER i,j
51     INTEGER bi,bj
52     INTEGER iMin, iMax
53     INTEGER jMin, jMax
54 jmc 1.2 _RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55 jmc 1.8 c _RL evpAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56     c _RL flxAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57     c _RL flxSW (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58 jmc 1.1
59     _RL tauFac
60    
61     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
62    
63     IF ( stressReduction.GT. 0. _d 0 ) THEN
64 jmc 1.5 C- needs new Ice Fraction in halo region to apply wind-stress reduction
65 jmc 1.8 iMin = 1-OLx
66     iMax = sNx+OLx-1
67     jMin = 1-OLy
68     jMax = sNy+OLy-1
69 jmc 1.5 #ifdef ATMOSPHERIC_LOADING
70 jmc 1.11 ELSEIF ( useRealFreshWaterFlux .AND. .NOT.useSEAICE ) THEN
71 jmc 1.5 C- needs sea-ice loading in part of the halo regions for grad.Phi0surf
72     C to be valid at the boundaries ( d/dx 1:sNx+1 ; d/dy 1:sNy+1 )
73     iMin = 0
74     iMax = sNx+1
75     jMin = 0
76     jMax = sNy+1
77     #endif /* ATMOSPHERIC_LOADING */
78 jmc 1.1 ELSE
79     iMin = 1
80     iMax = sNx
81     jMin = 1
82     jMax = sNy
83     ENDIF
84    
85     DO bj=myByLo(myThid),myByHi(myThid)
86     DO bi=myBxLo(myThid),myBxHi(myThid)
87 jmc 1.2
88 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
89     act1 = bi - myBxLo(myThid)
90     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
91     act2 = bj - myByLo(myThid)
92     max2 = myByHi(myThid) - myByLo(myThid) + 1
93     act3 = myThid - 1
94     max3 = nTx*nTy
95     act4 = ikey_dynamics - 1
96     iicekey = (act1 + 1) + act2*max1
97     & + act3*max1*max2
98     & + act4*max1*max2*max3
99     #endif /* ALLOW_AUTODIFF_TAMC */
100    
101 jmc 1.3 C-- Mixed layer thickness: take the 1rst layer
102     #ifdef NONLIN_FRSURF
103     IF ( staggerTimeStep .AND. nonlinFreeSurf.GT.0 ) THEN
104     IF ( select_rStar.GT.0 ) THEN
105     DO j = jMin, jMax
106     DO i = iMin, iMax
107     hOceMxL(i,j,bi,bj) = drF(1)*h0FacC(i,j,1,bi,bj)
108 jmc 1.8 & *rStarFacC(i,j,bi,bj)
109 jmc 1.3 ENDDO
110     ENDDO
111     ELSE
112     DO j = jMin, jMax
113     DO i = iMin, iMax
114     IF ( ksurfC(i,j,bi,bj).EQ.1 ) THEN
115     hOceMxL(i,j,bi,bj) = drF(1)*hFac_surfC(i,j,bi,bj)
116     ELSE
117 jmc 1.12 hOceMxL(i,j,bi,bj) = drF(1)*hFacC(i,j,1,bi,bj)
118 jmc 1.3 ENDIF
119     ENDDO
120     ENDDO
121     ENDIF
122     ELSE
123     #else /* ndef NONLIN_FRSURF */
124     IF (.TRUE.) THEN
125     #endif /* NONLIN_FRSURF */
126     DO j = jMin, jMax
127     DO i = iMin, iMax
128 jmc 1.12 hOceMxL(i,j,bi,bj) = drF(1)*hFacC(i,j,1,bi,bj)
129 jmc 1.3 ENDDO
130     ENDDO
131     ENDIF
132    
133 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
134     CADJ STORE uvel (:,:,1,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
135     CADJ STORE vvel (:,:,1,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
136     #endif
137    
138 mlosch 1.10 DO j = jMin, jMax
139     DO i = iMin, iMax
140     tOceMxL(i,j,bi,bj) = theta(i,j,1,bi,bj)
141     sOceMxL(i,j,bi,bj) = salt (i,j,1,bi,bj)
142     v2ocMxL(i,j,bi,bj) =
143 jmc 1.2 & ( uvel(i,j,1,bi,bj)*uvel(i,j,1,bi,bj)
144     & + uvel(i+1,j,1,bi,bj)*uvel(i+1,j,1,bi,bj)
145     & + vvel(i,j+1,1,bi,bj)*vvel(i,j+1,1,bi,bj)
146     & + vvel(i,j,1,bi,bj)*vvel(i,j,1,bi,bj)
147     & )*0.5 _d 0
148 mlosch 1.10 prcAtm(i,j) = 0.
149     icFrwAtm(i,j,bi,bj) = 0. _d 0
150     icFlxAtm(i,j,bi,bj) = 0. _d 0
151     icFlxSW (i,j,bi,bj) = 0. _d 0
152     snowPrc(i,j,bi,bj) = 0. _d 0
153     siceAlb(i,j,bi,bj) = 0. _d 0
154 jmc 1.6 ENDDO
155 mlosch 1.10 ENDDO
156 heimbach 1.7
157     #ifdef ALLOW_AUTODIFF_TAMC
158     CADJ STORE iceMask = comlev1, key = iicekey
159     CADJ STORE iceHeight = comlev1, key = iicekey
160     CADJ STORE snowHeight = comlev1, key = iicekey
161     CADJ STORE Tsrf = comlev1, key = iicekey
162     CADJ STORE Qice1 = comlev1, key = iicekey
163     CADJ STORE Qice2 = comlev1, key = iicekey
164     CADJ STORE snowAge = comlev1, key = iicekey
165    
166     CADJ STORE sHeating = comlev1, key = iicekey
167     CADJ STORE flxCndBt = comlev1, key = iicekey
168     CADJ STORE snowPrc = comlev1, key = iicekey
169    
170     CADJ STORE hOceMxL = comlev1, key = iicekey
171     CADJ STORE tOceMxL = comlev1, key = iicekey
172     CADJ STORE sOceMxL = comlev1, key = iicekey
173     CADJ STORE v2ocMxL = comlev1, key = iicekey
174    
175     CADJ STORE empmr = comlev1, key = iicekey
176     CADJ STORE qnet = comlev1, key = iicekey
177     #endif
178    
179 jmc 1.12 C- do sea-ice advection before getting surface fluxes
180     C Note: will inline this S/R once thSIce in Atmos. set-up is settled
181     IF ( thSIceAdvScheme.GT.0 )
182     & CALL THSICE_DO_ADVECT(
183     I bi,bj, myTime, myIter, myThid )
184    
185 jmc 1.2 #ifdef ALLOW_BULK_FORCE
186 mlosch 1.10 IF ( useBulkforce ) THEN
187     CALL THSICE_GET_PRECIP(
188 jmc 1.6 I iceMask,
189 jmc 1.8 O prcAtm, snowPrc(1-OLx,1-OLy,bi,bj),
190     O icFlxSW(1-OLx,1-OLy,bi,bj),
191 jmc 1.6 I iMin,iMax,jMin,jMax, bi,bj, myThid )
192 mlosch 1.10 ENDIF
193 jmc 1.2 #endif
194 mlosch 1.9 #ifdef ALLOW_EXF
195 mlosch 1.10 IF ( useEXF ) THEN
196     CALL THSICE_MAP_EXF(
197 mlosch 1.9 I iceMask,
198     O prcAtm, snowPrc(1-OLx,1-OLy,bi,bj),
199     O icFlxSW(1-OLx,1-OLy,bi,bj),
200     I iMin,iMax,jMin,jMax, bi,bj, myThid )
201 mlosch 1.10 ENDIF
202 mlosch 1.9 #endif
203 jmc 1.2
204 heimbach 1.7
205 mlosch 1.10 CALL THSICE_STEP_TEMP(
206 jmc 1.8 I bi, bj, iMin, iMax, jMin, jMax,
207     I myTime, myIter, myThid )
208    
209 mlosch 1.10 CALL THSICE_STEP_FWD(
210 jmc 1.8 I bi, bj, iMin, iMax, jMin, jMax,
211     I prcAtm,
212 jmc 1.1 I myTime, myIter, myThid )
213 jmc 1.2
214 mlosch 1.10 CALL THSICE_AVE(
215 jmc 1.8 I bi,bj, myTime, myIter, myThid )
216 jmc 1.2
217 jmc 1.1 c ENDDO
218     c ENDDO
219    
220 jmc 1.11 C-- note: If useSEAICE=.true., the stress is computed in seaice_model,
221     C-- and stressReduction is always set to zero
222 heimbach 1.7 #ifdef ALLOW_AUTODIFF_TAMC
223     CADJ STORE fu(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
224     CADJ STORE fv(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
225     #endif
226 jmc 1.11 IF ( stressReduction.GT. 0. _d 0 ) THEN
227 mlosch 1.10 DO j = jMin, jMax
228     DO i = iMin+1,iMax
229 jmc 1.1 tauFac = stressReduction
230     & *(iceMask(i-1,j,bi,bj)+iceMask(i,j,bi,bj))*0.5 _d 0
231     fu(i,j,bi,bj) = (1. _d 0 - tauFac)*fu(i,j,bi,bj)
232 mlosch 1.10 ENDDO
233 jmc 1.1 ENDDO
234 mlosch 1.10 DO j = jMin+1, jMax
235     DO i = iMin, iMax
236 jmc 1.1 tauFac = stressReduction
237     & *(iceMask(i,j-1,bi,bj)+iceMask(i,j,bi,bj))*0.5 _d 0
238     fv(i,j,bi,bj) = (1. _d 0 - tauFac)*fv(i,j,bi,bj)
239 mlosch 1.10 ENDDO
240 jmc 1.1 ENDDO
241     ENDIF
242    
243     C-- end bi,bj loop
244     ENDDO
245     ENDDO
246    
247 jmc 1.5
248 jmc 1.12 IF ( useSEAICE .OR. thSIceAdvScheme.GT.0 ) THEN
249 mlosch 1.10 C-- Exchange fields that are advected by seaice dynamics
250 jmc 1.11 _EXCH_XY_R8( iceMask, myThid )
251     _EXCH_XY_R8( iceHeight, myThid )
252     _EXCH_XY_R8( snowHeight, myThid )
253     _EXCH_XY_R8( Qice1, myThid )
254     _EXCH_XY_R8( Qice2, myThid )
255     #ifdef ATMOSPHERIC_LOADING
256     IF (useRealFreshWaterFlux)
257     & _EXCH_XY_RS( sIceLoad, myThid )
258     #endif
259 mlosch 1.10 ENDIF
260 jmc 1.11
261 jmc 1.1 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
262     #endif /*ALLOW_THSICE*/
263    
264     RETURN
265     END

  ViewVC Help
Powered by ViewVC 1.1.22