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

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

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


Revision 1.1 - (hide annotations) (download)
Fri Apr 1 10:19:37 2016 UTC (9 years, 3 months ago) by dgoldberg
Branch: MAIN
CVS Tags: HEAD
Added rough code to dig ice shelf to make continuous ocean

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

  ViewVC Help
Powered by ViewVC 1.1.22