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

Contents 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.4 - (show annotations) (download)
Fri Jan 22 10:26:50 2016 UTC (9 years, 6 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +9 -2 lines
Overlap bug fixing

1 C $Header: /u/gcmpack/MITgcm_contrib/verification_other/shelfice_remeshing/code/shelfice_forcing_surf.F,v 1.1 2015/12/11 19:48:32 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 #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 IF (J .GT. 395) THEN
109
110 IF ((myTime/86400) .EQ.
111 & INT (myTime/86400) .AND. myTime
112 & .NE. 0.0 ) THEN
113 SeaLevelRestore(i,j,bi,bj) = etaN(i,j,bi,bj)*1030/86400
114 ENDIF
115 EmPmR(i,j,bi,bj)=SeaLevelRestore(i,j,bi,bj)
116 ENDIF
117
118 c ENDIF
119 ENDDO
120 ENDDO
121 #endif /* ALLOW_AUTODIFF */
122 ENDIF
123
124
125
126
127 C-- end if not SHELFICEboundaryLayer
128
129 #ifdef EXACT_CONSERV
130 IF ( staggerTimeStep ) THEN
131 DO j=1-OLy,sNy+OLy
132 DO i=1-OLx,sNx+OLx
133 PmEpR(i,j,bi,bj) = -EmPmR(i,j,bi,bj)
134 ENDDO
135 ENDDO
136 ENDIF
137 #endif /* EXACT_CONSERV */
138
139 IF ( usingZCoords ) THEN
140 DO j = jMin, jMax
141 DO i = iMin, iMax
142 phi0surf(i,j,bi,bj) = phi0surf(i,j,bi,bj)
143 & + shelficeLoadAnomaly(i,j,bi,bj)*recip_rhoConst
144 ENDDO
145 ENDDO
146 ENDIF
147
148 c ENDDO
149 c ENDDO
150
151 #endif /* ALLOW_SHELFICE */
152 RETURN
153 END

  ViewVC Help
Powered by ViewVC 1.1.22