/[MITgcm]/MITgcm/model/src/ini_forcing.F
ViewVC logotype

Contents of /MITgcm/model/src/ini_forcing.F

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


Revision 1.52 - (show annotations) (download)
Fri Nov 9 22:43:53 2012 UTC (11 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65a, checkpoint65, checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f
Changes since 1.51: +36 -5 lines
- add initialisation of frictional-heating and addMass forcing;
- read-in time-constant addMass field from file (addMassFile);

1 C $Header: /u/gcmpack/MITgcm/model/src/ini_forcing.F,v 1.51 2011/04/14 21:11:21 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: INI_FORCING
9 C !INTERFACE:
10 SUBROUTINE INI_FORCING( myThid )
11
12 C !DESCRIPTION: \bv
13 C *==========================================================*
14 C | SUBROUTINE INI_FORCING
15 C | o Set model initial forcing fields.
16 C *==========================================================*
17 C \ev
18
19 C !USES:
20 IMPLICIT NONE
21 C === Global variables ===
22 #include "SIZE.h"
23 #include "EEPARAMS.h"
24 #include "PARAMS.h"
25 #include "GRID.h"
26 #include "SURFACE.h"
27 #include "FFIELDS.h"
28
29 C !INPUT/OUTPUT PARAMETERS:
30 C == Routine arguments ==
31 C myThid :: my Thread Id number
32 INTEGER myThid
33
34 C !LOCAL VARIABLES:
35 C == Local variables ==
36 C bi,bj :: Tile indices
37 C i, j :: Loop counters
38 INTEGER bi, bj
39 INTEGER i, j
40 #if (defined ALLOW_ADDFLUID) || (defined ALLOW_FRICTION_HEATING)
41 INTEGER k
42 #endif
43 CEOP
44
45 C- Initialise all arrays in common blocks
46 DO bj = myByLo(myThid), myByHi(myThid)
47 DO bi = myBxLo(myThid), myBxHi(myThid)
48 DO j=1-OLy,sNy+OLy
49 DO i=1-OLx,sNx+OLx
50 fu (i,j,bi,bj) = 0. _d 0
51 fv (i,j,bi,bj) = 0. _d 0
52 Qnet (i,j,bi,bj) = 0. _d 0
53 EmPmR (i,j,bi,bj) = 0. _d 0
54 saltFlux (i,j,bi,bj) = 0. _d 0
55 SST (i,j,bi,bj) = 0. _d 0
56 SSS (i,j,bi,bj) = 0. _d 0
57 Qsw (i,j,bi,bj) = 0. _d 0
58 pLoad (i,j,bi,bj) = 0. _d 0
59 sIceLoad (i,j,bi,bj) = 0. _d 0
60 surfaceForcingU (i,j,bi,bj) = 0. _d 0
61 surfaceForcingV (i,j,bi,bj) = 0. _d 0
62 surfaceForcingT (i,j,bi,bj) = 0. _d 0
63 surfaceForcingS (i,j,bi,bj) = 0. _d 0
64 surfaceForcingTice(i,j,bi,bj) = 0. _d 0
65 #ifndef EXCLUDE_FFIELDS_LOAD
66 taux0 (i,j,bi,bj) = 0. _d 0
67 taux1 (i,j,bi,bj) = 0. _d 0
68 tauy0 (i,j,bi,bj) = 0. _d 0
69 tauy1 (i,j,bi,bj) = 0. _d 0
70 Qnet0 (i,j,bi,bj) = 0. _d 0
71 Qnet1 (i,j,bi,bj) = 0. _d 0
72 EmPmR0 (i,j,bi,bj) = 0. _d 0
73 EmPmR1 (i,j,bi,bj) = 0. _d 0
74 saltFlux0 (i,j,bi,bj) = 0. _d 0
75 saltFlux1 (i,j,bi,bj) = 0. _d 0
76 SST0 (i,j,bi,bj) = 0. _d 0
77 SST1 (i,j,bi,bj) = 0. _d 0
78 SSS0 (i,j,bi,bj) = 0. _d 0
79 SSS1 (i,j,bi,bj) = 0. _d 0
80 #ifdef SHORTWAVE_HEATING
81 Qsw0 (i,j,bi,bj) = 0. _d 0
82 Qsw1 (i,j,bi,bj) = 0. _d 0
83 #endif
84 #ifdef ATMOSPHERIC_LOADING
85 pLoad0 (i,j,bi,bj) = 0. _d 0
86 pLoad1 (i,j,bi,bj) = 0. _d 0
87 #endif
88 #endif /* EXCLUDE_FFIELDS_LOAD */
89 ENDDO
90 ENDDO
91 #ifndef EXCLUDE_FFIELDS_LOAD
92 loadedRec(bi,bj) = 0
93 #endif /* EXCLUDE_FFIELDS_LOAD */
94 DO j=1-OLy,sNy+OLy
95 DO i=1-OLx,sNx+OLx
96 ENDDO
97 ENDDO
98 #ifdef ALLOW_ADDFLUID
99 DO k=1,Nr
100 DO j=1-OLy,sNy+OLy
101 DO i=1-OLx,sNx+OLx
102 addMass(i,j,k,bi,bj) = 0. _d 0
103 ENDDO
104 ENDDO
105 ENDDO
106 #endif /* ALLOW_ADDFLUID */
107 #ifdef ALLOW_FRICTION_HEATING
108 DO k=1,Nr
109 DO j=1-OLy,sNy+OLy
110 DO i=1-OLx,sNx+OLx
111 frictionHeating(i,j,k,bi,bj) = 0. _d 0
112 ENDDO
113 ENDDO
114 ENDDO
115 #endif /* ALLOW_FRICTION_HEATING */
116 ENDDO
117 ENDDO
118
119 DO bj = myByLo(myThid), myByHi(myThid)
120 DO bi = myBxLo(myThid), myBxHi(myThid)
121 DO j=1-OLy,sNy+OLy
122 DO i=1-OLx,sNx+OLx
123 IF ( doThetaClimRelax .AND.
124 & ABS(yC(i,j,bi,bj)).LE.latBandClimRelax ) THEN
125 lambdaThetaClimRelax(i,j,bi,bj) = 1. _d 0/tauThetaClimRelax
126 ELSE
127 lambdaThetaClimRelax(i,j,bi,bj) = 0. _d 0
128 ENDIF
129 IF ( doSaltClimRelax .AND.
130 & ABS(yC(i,j,bi,bj)).LE.latBandClimRelax ) THEN
131 lambdaSaltClimRelax(i,j,bi,bj) = 1. _d 0/tauSaltClimRelax
132 ELSE
133 lambdaSaltClimRelax(i,j,bi,bj) = 0. _d 0
134 ENDIF
135 ENDDO
136 ENDDO
137 ENDDO
138 ENDDO
139
140 C- every-one waits before master thread loads from file
141 C this is done within IO routines => no longer needed
142 c _BARRIER
143
144 IF ( zonalWindFile .NE. ' ' ) THEN
145 CALL READ_FLD_XY_RS( zonalWindFile, ' ', fu, 0, myThid )
146 ENDIF
147 IF ( meridWindFile .NE. ' ' ) THEN
148 CALL READ_FLD_XY_RS( meridWindFile, ' ', fv, 0, myThid )
149 ENDIF
150 IF ( surfQFile .NE. ' ' ) THEN
151 CALL READ_FLD_XY_RS( surfQFile, ' ', Qnet, 0, myThid )
152 ELSEIF ( surfQnetFile .NE. ' ' ) THEN
153 CALL READ_FLD_XY_RS( surfQnetFile, ' ', Qnet, 0, myThid )
154 ENDIF
155 IF ( EmPmRfile .NE. ' ' ) THEN
156 CALL READ_FLD_XY_RS( EmPmRfile, ' ', EmPmR, 0, myThid )
157 c IF ( convertEmP2rUnit.EQ.mass2rUnit ) THEN
158 C- EmPmR is now (after c59h) expressed in kg/m2/s (fresh water mass flux)
159 DO bj = myByLo(myThid), myByHi(myThid)
160 DO bi = myBxLo(myThid), myBxHi(myThid)
161 DO j=1-OLy,sNy+OLy
162 DO i=1-OLx,sNx+OLx
163 EmPmR(i,j,bi,bj) = EmPmR(i,j,bi,bj)*rhoConstFresh
164 ENDDO
165 ENDDO
166 ENDDO
167 ENDDO
168 c ENDIF
169 ENDIF
170 IF ( saltFluxFile .NE. ' ' ) THEN
171 CALL READ_FLD_XY_RS( saltFluxFile, ' ', saltFlux, 0, myThid )
172 ENDIF
173 IF ( thetaClimFile .NE. ' ' ) THEN
174 CALL READ_FLD_XY_RS( thetaClimFile, ' ', SST, 0, myThid )
175 ENDIF
176 IF ( saltClimFile .NE. ' ' ) THEN
177 CALL READ_FLD_XY_RS( saltClimFile, ' ', SSS, 0, myThid )
178 ENDIF
179 IF ( lambdaThetaFile .NE. ' ' ) THEN
180 CALL READ_FLD_XY_RS( lambdaThetaFile, ' ',
181 & lambdaThetaClimRelax, 0, myThid )
182 ENDIF
183 IF ( lambdaSaltFile .NE. ' ' ) THEN
184 CALL READ_FLD_XY_RS( lambdaSaltFile, ' ',
185 & lambdaSaltClimRelax, 0, myThid )
186 ENDIF
187 #ifdef SHORTWAVE_HEATING
188 IF ( surfQswFile .NE. ' ' ) THEN
189 CALL READ_FLD_XY_RS( surfQswFile, ' ', Qsw, 0, myThid )
190 IF ( surfQFile .NE. ' ' ) THEN
191 C- Qnet is now (after c54) the net Heat Flux (including SW)
192 DO bj = myByLo(myThid), myByHi(myThid)
193 DO bi = myBxLo(myThid), myBxHi(myThid)
194 DO j=1-OLy,sNy+OLy
195 DO i=1-OLx,sNx+OLx
196 Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) + Qsw(i,j,bi,bj)
197 ENDDO
198 ENDDO
199 ENDDO
200 ENDDO
201 ENDIF
202 ENDIF
203 #endif
204 #ifdef ATMOSPHERIC_LOADING
205 IF ( pLoadFile .NE. ' ' ) THEN
206 CALL READ_FLD_XY_RS( pLoadFile, ' ', pLoad, 0, myThid )
207 ENDIF
208 #endif
209 #ifdef ALLOW_ADDFLUID
210 IF ( addMassFile .NE. ' ' ) THEN
211 CALL READ_FLD_XYZ_RL( addMassFile, ' ', addMass, 0, myThid )
212 CALL EXCH_XYZ_RL( addMass, myThid )
213 ENDIF
214 #endif /* ALLOW_ADDFLUID */
215
216 CALL EXCH_UV_XY_RS( fu,fv, .TRUE., myThid )
217 CALL EXCH_XY_RS( Qnet , myThid )
218 CALL EXCH_XY_RS( EmPmR, myThid )
219 CALL EXCH_XY_RS( saltFlux, myThid )
220 CALL EXCH_XY_RS( SST , myThid )
221 CALL EXCH_XY_RS( SSS , myThid )
222 CALL EXCH_XY_RS( lambdaThetaClimRelax, myThid )
223 CALL EXCH_XY_RS( lambdaSaltClimRelax , myThid )
224 #ifdef SHORTWAVE_HEATING
225 CALL EXCH_XY_RS(Qsw , myThid )
226 #endif
227 #ifdef ATMOSPHERIC_LOADING
228 CALL EXCH_XY_RS(pLoad , myThid )
229 C CALL PLOT_FIELD_XYRS( pLoad, 'S/R INI_FORCING pLoad',1,myThid)
230 #endif
231 C CALL PLOT_FIELD_XYRS( fu, 'S/R INI_FORCING FU',1,myThid)
232 C CALL PLOT_FIELD_XYRS( fv, 'S/R INI_FORCING FV',1,myThid)
233
234 #ifdef ATMOSPHERIC_LOADING
235 IF ( pLoadFile .NE. ' ' .AND. usingPCoords ) THEN
236 C-- This is a hack used to read phi0surf from a file (pLoadFile)
237 C instead of computing it from bathymetry & density ref. profile.
238 C- Ocean: The true atmospheric P-loading is not yet implemented for P-coord
239 C (requires time varying dP(Nr) like dP(k-bottom) with NonLin FS).
240 C- Atmos: sometime usefull to overwrite phi0surf with fixed-in-time field
241 C read from file (and anyway, pressure loading is meaningless here)
242 DO bj = myByLo(myThid), myByHi(myThid)
243 DO bi = myBxLo(myThid), myBxHi(myThid)
244 DO j=1-OLy,sNy+OLy
245 DO i=1-OLx,sNx+OLx
246 phi0surf(i,j,bi,bj) = pLoad(i,j,bi,bj)
247 ENDDO
248 ENDDO
249 ENDDO
250 ENDDO
251 ENDIF
252 #endif /* ATMOSPHERIC_LOADING */
253
254 RETURN
255 END

  ViewVC Help
Powered by ViewVC 1.1.22