/[MITgcm]/MITgcm_contrib/shelfice_remeshing/CLEAN/code/shelfice_forcing_surf.F
ViewVC logotype

Annotation of /MITgcm_contrib/shelfice_remeshing/CLEAN/code/shelfice_forcing_surf.F

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


Revision 1.1 - (hide annotations) (download)
Mon Dec 7 17:08:44 2015 UTC (9 years, 7 months ago) by dgoldberg
Branch: MAIN
*** empty log message ***

1 dgoldberg 1.1 C $Header: /u/gcmpack/MITgcm_contrib/shelfice_remeshing/AUTO/code/shelfice_forcing_surf.F,v 1.1 2015/10/06 10:38:53 dgoldberg Exp $
2     C $Name: $
3    
4     #include "SHELFICE_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7     CBOP
8     C !ROUTINE: SHELFICE_FORCING_SURF
9     C !INTERFACE:
10     SUBROUTINE SHELFICE_FORCING_SURF(
11     I bi, bj, iMin, iMax, jMin, jMax,
12     I myTime, myIter, myThid )
13     C !DESCRIPTION: \bv
14     C *==========================================================*
15     C | S/R SHELFICE_FORCING_SURF
16     C | o Contains problem specific surface forcing
17     C *==========================================================*
18     C \ev
19    
20     C !USES:
21     IMPLICIT NONE
22     C == Global data ==
23     #include "SIZE.h"
24     #include "EEPARAMS.h"
25     #include "PARAMS.h"
26     #include "GRID.h"
27     c#include "DYNVARS.h"
28     #include "SURFACE.h"
29     #include "FFIELDS.h"
30     #include "SHELFICE.h"
31    
32     C !INPUT/OUTPUT PARAMETERS:
33     C == Routine arguments ==
34     C bi,bj :: Current tile indices
35     C iMin,iMax :: Working range of x-index for applying forcing.
36     C jMin,jMax :: Working range of y-index for applying forcing.
37     C myTime :: Current time in simulation
38     C myIter :: Current iteration number in simulation
39     C myThid :: Thread Id number
40     INTEGER bi, bj
41     INTEGER iMin, iMax, jMin, jMax
42     _RL myTime
43     INTEGER myIter
44     INTEGER myThid
45    
46     #ifdef ALLOW_SHELFICE
47     C !LOCAL VARIABLES:
48     C == Local variables ==
49     C i,j :: Loop counters
50     INTEGER i, j
51     CEOP
52    
53     c DO bj=myByLo(myThid),myByHi(myThid)
54     c DO bi=myBxLo(myThid),myBxHi(myThid)
55    
56     C-- Zero out surface forcing terms below ice-shelf
57     DO j=1-OLy,sNy+OLy
58     DO i=1-OLx,sNx+OLx
59     IF ( kTopC(i,j,bi,bj).NE.0 ) THEN
60     surfaceForcingT(i,j,bi,bj) = 0.
61     surfaceForcingS(i,j,bi,bj) = 0.
62     EmPmR(i,j,bi,bj) = 0.
63     ENDIF
64     ENDDO
65     ENDDO
66     DO j=1-OLy,sNy+OLy
67     DO i=2-OLx,sNx+OLx
68     IF ( MAX( kTopC(i-1,j,bi,bj), kTopC(i,j,bi,bj) ).NE.0 ) THEN
69     surfaceForcingU(i,j,bi,bj) = 0.
70     ENDIF
71     ENDDO
72     ENDDO
73     DO j=2-OLy,sNy+OLy
74     DO i=1-OLx,sNx+OLx
75     IF ( MAX( kTopC(i,j-1,bi,bj), kTopC(i,j,bi,bj) ).NE.0 ) THEN
76     surfaceForcingV(i,j,bi,bj) = 0.
77     ENDIF
78     ENDDO
79     ENDDO
80    
81     C-- Forcing term
82    
83     IF ( .NOT.SHELFICEboundaryLayer ) THEN
84     C- for now, forcing using SHELFICEboundaryLayer is done separately
85     C (calling SHELFICE_FORCING_T & _S from APPLY_FORCING_T & _S)
86    
87     DO j=1,sNy
88     DO i=1,sNx
89     IF ( kTopC(i,j,bi,bj).NE.0 ) THEN
90     surfaceForcingT(i,j,bi,bj) = shelficeForcingT(i,j,bi,bj)
91     surfaceForcingS(i,j,bi,bj) = shelficeForcingS(i,j,bi,bj)
92     ENDIF
93     ENDDO
94     ENDDO
95    
96     ENDIF
97    
98     IF ( useRealFreshWaterFlux.and.
99     & (SHELFICErealFWflux.or.(.not.shelficeboundarylayer))) THEN
100     #ifdef ALLOW_AUTODIFF
101     STOP 'RealFreshWaterFlux disabled in SHELFICE_FORCING_SURF'
102     #else /* ALLOW_AUTODIFF */
103     DO j=1-OLy,sNy+OLy
104     DO i=1-OLx,sNx+OLx
105     c IF ( kTopC(i,j,bi,bj).NE.0 ) THEN
106     EmPmR(i,j,bi,bj) = EmPmR(i,j,bi,bj)
107     & + shelfIceFreshWaterFlux(i,j,bi,bj)
108     c ENDIF
109     ENDDO
110     ENDDO
111     #endif /* ALLOW_AUTODIFF */
112     ENDIF
113    
114    
115    
116    
117     C-- end if not SHELFICEboundaryLayer
118    
119     #ifdef EXACT_CONSERV
120     IF ( staggerTimeStep ) THEN
121     DO j=1-OLy,sNy+OLy
122     DO i=1-OLx,sNx+OLx
123     PmEpR(i,j,bi,bj) = -EmPmR(i,j,bi,bj)
124     ENDDO
125     ENDDO
126     ENDIF
127     #endif /* EXACT_CONSERV */
128    
129     IF ( usingZCoords ) THEN
130     DO j = jMin, jMax
131     DO i = iMin, iMax
132     phi0surf(i,j,bi,bj) = phi0surf(i,j,bi,bj)
133     & + shelficeLoadAnomaly(i,j,bi,bj)*recip_rhoConst
134     ENDDO
135     ENDDO
136     ENDIF
137    
138     DO j=jmin, jmax
139     Do i=imin, imax
140    
141     IF ( R_shelfice(i,j,bi,bj) .EQ. R_grounding(i,j,bi,bj) ) THEN
142    
143    
144     IF (phi0surf(i,j,bi,bj) .GT.gravity*
145     & (shelficeGroundInit(1,5,1,1)+rhoConst*
146     & Ro_surf(1,5,1,1)) *recip_rhoConst ) THEN
147    
148     c phi0surf(i,j,bi,bj) = gravity*
149     c & (shelficeGroundInit(1,5,1,1)+rhoConst*
150     c & Ro_surf(1,5,1,1)) *recip_rhoConst
151     ENDIF
152     ENDIF
153     ENDDO
154     ENDDO
155    
156    
157    
158    
159    
160    
161    
162    
163    
164     c ENDDO
165     c ENDDO
166    
167     #endif /* ALLOW_SHELFICE */
168     RETURN
169     END

  ViewVC Help
Powered by ViewVC 1.1.22