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

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

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

revision 1.6 by jmc, Sun Jan 22 15:58:39 2006 UTC revision 1.9 by mlosch, Tue May 30 22:49:00 2006 UTC
# Line 2  C $Header$ Line 2  C $Header$
2  C $Name$  C $Name$
3    
4  #include "THSICE_OPTIONS.h"  #include "THSICE_OPTIONS.h"
5    
6  CBOP  CBOP
7  C     !ROUTINE: THSICE_MAIN  C     !ROUTINE: THSICE_MAIN
8  C     !INTERFACE:  C     !INTERFACE:
9        SUBROUTINE THSICE_MAIN(        SUBROUTINE THSICE_MAIN(
10       I                        myTime, myIter, myThid )       I                        myTime, myIter, myThid )
11  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
12  C     *==========================================================*  C     *==========================================================*
13  C     | S/R  THSICE_MAIN              C     | S/R  THSICE_MAIN
14  C     | o Therm_SeaIce main routine.  C     | o Therm_SeaIce main routine.
15  C     |   step forward Thermodynamic_SeaIce variables and modify  C     |   step forward Thermodynamic_SeaIce variables and modify
16  C     |    ocean surface forcing accordingly.  C     |    ocean surface forcing accordingly.
17  C     *==========================================================*  C     *==========================================================*
# Line 29  C     === Global variables === Line 29  C     === Global variables ===
29  #include "FFIELDS.h"  #include "FFIELDS.h"
30  #include "THSICE_PARAMS.h"  #include "THSICE_PARAMS.h"
31  #include "THSICE_VARS.h"  #include "THSICE_VARS.h"
32    #ifdef ALLOW_AUTODIFF_TAMC
33    # include "tamc.h"
34    # include "tamc_keys.h"
35    #endif
36    
37  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
38  C     === Routine arguments ===  C     === Routine arguments ===
39  C     myIter :: iteration counter for this thread  C     myIter :: iteration counter for this thread
# Line 48  C     === Local variables === Line 52  C     === Local variables ===
52        INTEGER iMin, iMax        INTEGER iMin, iMax
53        INTEGER jMin, jMax        INTEGER jMin, jMax
54        _RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL prcAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
55        _RL evpAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)  c     _RL evpAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
56        _RL flxSW (1-OLx:sNx+OLx,1-OLy:sNy+OLy)  c     _RL flxAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
57    c     _RL flxSW (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
58    
59        _RL tauFac        _RL tauFac
60    
# Line 57  C---+----1----+----2----+----3----+----4 Line 62  C---+----1----+----2----+----3----+----4
62    
63        IF ( stressReduction.GT. 0. _d 0 ) THEN        IF ( stressReduction.GT. 0. _d 0 ) THEN
64  C-     needs new Ice Fraction in halo region to apply wind-stress reduction  C-     needs new Ice Fraction in halo region to apply wind-stress reduction
65         iMin = 1-Olx         iMin = 1-OLx
66         iMax = sNx+Olx-1         iMax = sNx+OLx-1
67         jMin = 1-Oly         jMin = 1-OLy
68         jMax = sNy+Oly-1         jMax = sNy+OLy-1
69  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
70        ELSEIF ( useRealFreshWaterFlux ) THEN        ELSEIF ( useRealFreshWaterFlux ) THEN
71  C-     needs sea-ice loading in part of the halo regions for grad.Phi0surf  C-     needs sea-ice loading in part of the halo regions for grad.Phi0surf
# Line 80  C      to be valid at the boundaries ( d Line 85  C      to be valid at the boundaries ( d
85        DO bj=myByLo(myThid),myByHi(myThid)        DO bj=myByLo(myThid),myByHi(myThid)
86         DO bi=myBxLo(myThid),myBxHi(myThid)         DO bi=myBxLo(myThid),myBxHi(myThid)
87    
88    #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  C--     Mixed layer thickness: take the 1rst layer  C--     Mixed layer thickness: take the 1rst layer
102  #ifdef NONLIN_FRSURF  #ifdef NONLIN_FRSURF
103          IF ( staggerTimeStep .AND. nonlinFreeSurf.GT.0 ) THEN          IF ( staggerTimeStep .AND. nonlinFreeSurf.GT.0 ) THEN
# Line 87  C--     Mixed layer thickness: take the Line 105  C--     Mixed layer thickness: take the
105            DO j = jMin, jMax            DO j = jMin, jMax
106             DO i = iMin, iMax             DO i = iMin, iMax
107               hOceMxL(i,j,bi,bj) = drF(1)*h0FacC(i,j,1,bi,bj)               hOceMxL(i,j,bi,bj) = drF(1)*h0FacC(i,j,1,bi,bj)
108       &                                  *rStarFacC(i,j,bi,bj)       &                                  *rStarFacC(i,j,bi,bj)
109             ENDDO             ENDDO
110            ENDDO            ENDDO
111           ELSE           ELSE
# Line 112  C--     Mixed layer thickness: take the Line 130  C--     Mixed layer thickness: take the
130            ENDDO            ENDDO
131          ENDIF          ENDIF
132    
133    #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           DO j = jMin, jMax           DO j = jMin, jMax
139            DO i = iMin, iMax            DO i = iMin, iMax
140             tOceMxL(i,j,bi,bj) = theta(i,j,1,bi,bj)             tOceMxL(i,j,bi,bj) = theta(i,j,1,bi,bj)
141             sOceMxL(i,j,bi,bj) = salt (i,j,1,bi,bj)             sOceMxL(i,j,bi,bj) = salt (i,j,1,bi,bj)
142             v2ocMxL(i,j,bi,bj) =             v2ocMxL(i,j,bi,bj) =
143       &              ( uvel(i,j,1,bi,bj)*uvel(i,j,1,bi,bj)       &              ( 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)       &              + 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)       &              + 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)       &              + vvel(i,j,1,bi,bj)*vvel(i,j,1,bi,bj)
147       &              )*0.5 _d 0       &              )*0.5 _d 0
148             prcAtm(i,j) = 0.             prcAtm(i,j) = 0.
149             evpAtm(i,j) = 0.             icFrwAtm(i,j,bi,bj) = 0. _d 0
150             flxSW (i,j) = 0.             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             snowPrc(i,j,bi,bj) = 0. _d 0
153             siceAlb(i,j,bi,bj) = 0. _d 0             siceAlb(i,j,bi,bj) = 0. _d 0
154            ENDDO            ENDDO
155           ENDDO           ENDDO
156    
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  #ifdef ALLOW_BULK_FORCE  #ifdef ALLOW_BULK_FORCE
180           IF ( useBulkforce ) THEN           IF ( useBulkforce ) THEN
181             CALL THSICE_GET_PRECIP(             CALL THSICE_GET_PRECIP(
182       I                  iceMask,       I                  iceMask,
183       O                  prcAtm, snowPrc(1-Olx,1-Oly,bi,bj), flxSW,       O                  prcAtm, snowPrc(1-OLx,1-OLy,bi,bj),
184         O                  icFlxSW(1-OLx,1-OLy,bi,bj),
185         I                  iMin,iMax,jMin,jMax, bi,bj, myThid )
186             ENDIF
187    #endif
188    #ifdef ALLOW_EXF
189             IF ( useEXF ) THEN
190               CALL THSICE_MAP_EXF(
191         I                  iceMask,
192         O                  prcAtm, snowPrc(1-OLx,1-OLy,bi,bj),
193         O                  icFlxSW(1-OLx,1-OLy,bi,bj),
194       I                  iMin,iMax,jMin,jMax, bi,bj, myThid )       I                  iMin,iMax,jMin,jMax, bi,bj, myThid )
195           ENDIF           ENDIF
196  #endif  #endif
197    
198           CALL THSICE_STEP_FWD(  
199       I                     bi, bj, iMin, iMax, jMin, jMax,           CALL THSICE_STEP_TEMP(
200       I                     prcAtm,       I                     bi, bj, iMin, iMax, jMin, jMax,
201       U                     evpAtm, flxSW,       I                     myTime, myIter, myThid )
202    
203             CALL THSICE_STEP_FWD(
204         I                     bi, bj, iMin, iMax, jMin, jMax,
205         I                     prcAtm,
206       I                     myTime, myIter, myThid )       I                     myTime, myIter, myThid )
207    
208           CALL THSICE_AVE(           CALL THSICE_AVE(
209       I                   evpAtm, flxSW,       I                     bi,bj, myTime, myIter, myThid )
      I                   bi,bj, myTime, myIter, myThid )  
210    
211  c      ENDDO  c      ENDDO
212  c     ENDDO  c     ENDDO
213    
214  c       IF ( .FALSE. ) THEN  c       IF ( .FALSE. ) THEN
215    #ifdef ALLOW_AUTODIFF_TAMC
216    CADJ STORE fu(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
217    CADJ STORE fv(:,:,bi,bj) = comlev1_bibj, key=iicekey, byte=isbyte
218    #endif
219          IF ( stressReduction.GT. 0. _d 0 ) THEN          IF ( stressReduction.GT. 0. _d 0 ) THEN
220           DO j = jMin, jMax           DO j = jMin, jMax
221            DO i = iMin+1,iMax            DO i = iMin+1,iMax

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.22