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

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

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


Revision 1.52 - (hide 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 jmc 1.52 C $Header: /u/gcmpack/MITgcm/model/src/ini_forcing.F,v 1.51 2011/04/14 21:11:21 jmc Exp $
2 cnh 1.22 C $Name: $
3 cnh 1.1
4 edhill 1.26 #include "PACKAGES_CONFIG.h"
5 cnh 1.12 #include "CPP_OPTIONS.h"
6 cnh 1.1
7 cnh 1.22 CBOP
8     C !ROUTINE: INI_FORCING
9     C !INTERFACE:
10 cnh 1.1 SUBROUTINE INI_FORCING( myThid )
11 cnh 1.22
12     C !DESCRIPTION: \bv
13     C *==========================================================*
14 jmc 1.42 C | SUBROUTINE INI_FORCING
15     C | o Set model initial forcing fields.
16 cnh 1.22 C *==========================================================*
17     C \ev
18    
19     C !USES:
20 adcroft 1.14 IMPLICIT NONE
21 cnh 1.1 C === Global variables ===
22     #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25     #include "GRID.h"
26 jmc 1.49 #include "SURFACE.h"
27 cnh 1.1 #include "FFIELDS.h"
28    
29 cnh 1.22 C !INPUT/OUTPUT PARAMETERS:
30 cnh 1.1 C == Routine arguments ==
31 jmc 1.51 C myThid :: my Thread Id number
32 cnh 1.1 INTEGER myThid
33    
34 cnh 1.22 C !LOCAL VARIABLES:
35 cnh 1.1 C == Local variables ==
36 jmc 1.51 C bi,bj :: Tile indices
37     C i, j :: Loop counters
38 cnh 1.1 INTEGER bi, bj
39 jmc 1.42 INTEGER i, j
40 jmc 1.52 #if (defined ALLOW_ADDFLUID) || (defined ALLOW_FRICTION_HEATING)
41     INTEGER k
42     #endif
43 cnh 1.22 CEOP
44 cnh 1.1
45 jmc 1.42 C- Initialise all arrays in common blocks
46 adcroft 1.10 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 heimbach 1.18 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 jmc 1.27 saltFlux (i,j,bi,bj) = 0. _d 0
55 heimbach 1.18 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 jmc 1.44 pLoad (i,j,bi,bj) = 0. _d 0
59 jmc 1.33 sIceLoad (i,j,bi,bj) = 0. _d 0
60 jmc 1.49 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 jmc 1.35 surfaceForcingTice(i,j,bi,bj) = 0. _d 0
65 jmc 1.44 #ifndef EXCLUDE_FFIELDS_LOAD
66 heimbach 1.24 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 jmc 1.37 saltFlux0 (i,j,bi,bj) = 0. _d 0
75     saltFlux1 (i,j,bi,bj) = 0. _d 0
76 heimbach 1.24 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 jmc 1.42 #ifdef SHORTWAVE_HEATING
81 heimbach 1.24 Qsw0 (i,j,bi,bj) = 0. _d 0
82     Qsw1 (i,j,bi,bj) = 0. _d 0
83     #endif
84     #ifdef ATMOSPHERIC_LOADING
85 jmc 1.44 pLoad0 (i,j,bi,bj) = 0. _d 0
86     pLoad1 (i,j,bi,bj) = 0. _d 0
87 heimbach 1.24 #endif
88 jmc 1.44 #endif /* EXCLUDE_FFIELDS_LOAD */
89 adcroft 1.10 ENDDO
90     ENDDO
91 jmc 1.51 #ifndef EXCLUDE_FFIELDS_LOAD
92     loadedRec(bi,bj) = 0
93     #endif /* EXCLUDE_FFIELDS_LOAD */
94 jmc 1.52 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 adcroft 1.10 ENDDO
117     ENDDO
118 jmc 1.42
119 heimbach 1.38 DO bj = myByLo(myThid), myByHi(myThid)
120     DO bi = myBxLo(myThid), myBxHi(myThid)
121 jmc 1.52 DO j=1-OLy,sNy+OLy
122     DO i=1-OLx,sNx+OLx
123 jmc 1.42 IF ( doThetaClimRelax .AND.
124     & ABS(yC(i,j,bi,bj)).LE.latBandClimRelax ) THEN
125     lambdaThetaClimRelax(i,j,bi,bj) = 1. _d 0/tauThetaClimRelax
126 heimbach 1.38 ELSE
127 jmc 1.42 lambdaThetaClimRelax(i,j,bi,bj) = 0. _d 0
128 heimbach 1.38 ENDIF
129     IF ( doSaltClimRelax .AND.
130 jmc 1.42 & ABS(yC(i,j,bi,bj)).LE.latBandClimRelax ) THEN
131     lambdaSaltClimRelax(i,j,bi,bj) = 1. _d 0/tauSaltClimRelax
132 heimbach 1.38 ELSE
133 jmc 1.42 lambdaSaltClimRelax(i,j,bi,bj) = 0. _d 0
134 heimbach 1.38 ENDIF
135     ENDDO
136     ENDDO
137     ENDDO
138     ENDDO
139 jmc 1.42
140     C- every-one waits before master thread loads from file
141 jmc 1.50 C this is done within IO routines => no longer needed
142     c _BARRIER
143 jmc 1.42
144 adcroft 1.16 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 jmc 1.34 ELSEIF ( surfQnetFile .NE. ' ' ) THEN
153     CALL READ_FLD_XY_RS( surfQnetFile, ' ', Qnet, 0, myThid )
154 adcroft 1.16 ENDIF
155     IF ( EmPmRfile .NE. ' ' ) THEN
156     CALL READ_FLD_XY_RS( EmPmRfile, ' ', EmPmR, 0, myThid )
157 jmc 1.47 c IF ( convertEmP2rUnit.EQ.mass2rUnit ) THEN
158 jmc 1.46 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 jmc 1.52 DO j=1-OLy,sNy+OLy
162     DO i=1-OLx,sNx+OLx
163 jmc 1.46 EmPmR(i,j,bi,bj) = EmPmR(i,j,bi,bj)*rhoConstFresh
164     ENDDO
165     ENDDO
166     ENDDO
167     ENDDO
168 jmc 1.47 c ENDIF
169 adcroft 1.16 ENDIF
170 jmc 1.37 IF ( saltFluxFile .NE. ' ' ) THEN
171     CALL READ_FLD_XY_RS( saltFluxFile, ' ', saltFlux, 0, myThid )
172     ENDIF
173 adcroft 1.16 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 heimbach 1.38 IF ( lambdaThetaFile .NE. ' ' ) THEN
180 jmc 1.42 CALL READ_FLD_XY_RS( lambdaThetaFile, ' ',
181 heimbach 1.38 & lambdaThetaClimRelax, 0, myThid )
182     ENDIF
183     IF ( lambdaSaltFile .NE. ' ' ) THEN
184 jmc 1.42 CALL READ_FLD_XY_RS( lambdaSaltFile, ' ',
185 heimbach 1.38 & lambdaSaltClimRelax, 0, myThid )
186     ENDIF
187 heimbach 1.18 #ifdef SHORTWAVE_HEATING
188     IF ( surfQswFile .NE. ' ' ) THEN
189     CALL READ_FLD_XY_RS( surfQswFile, ' ', Qsw, 0, myThid )
190 jmc 1.34 IF ( surfQFile .NE. ' ' ) THEN
191     C- Qnet is now (after c54) the net Heat Flux (including SW)
192 jmc 1.42 DO bj = myByLo(myThid), myByHi(myThid)
193     DO bi = myBxLo(myThid), myBxHi(myThid)
194 jmc 1.36 DO j=1-OLy,sNy+OLy
195     DO i=1-OLx,sNx+OLx
196 jmc 1.34 Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) + Qsw(i,j,bi,bj)
197 jmc 1.36 ENDDO
198 jmc 1.34 ENDDO
199     ENDDO
200 jmc 1.36 ENDDO
201 jmc 1.34 ENDIF
202 heimbach 1.18 ENDIF
203     #endif
204 mlosch 1.23 #ifdef ATMOSPHERIC_LOADING
205     IF ( pLoadFile .NE. ' ' ) THEN
206 jmc 1.44 CALL READ_FLD_XY_RS( pLoadFile, ' ', pLoad, 0, myThid )
207 mlosch 1.23 ENDIF
208     #endif
209 jmc 1.52 #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 heimbach 1.40
216 jmc 1.43 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 mlosch 1.23 #ifdef SHORTWAVE_HEATING
225 jmc 1.43 CALL EXCH_XY_RS(Qsw , myThid )
226 mlosch 1.23 #endif
227     #ifdef ATMOSPHERIC_LOADING
228 jmc 1.44 CALL EXCH_XY_RS(pLoad , myThid )
229     C CALL PLOT_FIELD_XYRS( pLoad, 'S/R INI_FORCING pLoad',1,myThid)
230 mlosch 1.23 #endif
231 adcroft 1.15 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 cnh 1.1
234 jmc 1.49 #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 cnh 1.1 RETURN
255     END

  ViewVC Help
Powered by ViewVC 1.1.22