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

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

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

revision 1.24 by heimbach, Tue Nov 12 20:39:46 2002 UTC revision 1.52 by jmc, Fri Nov 9 22:43:53 2012 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2  C $Name$  C $Name$
3    
4    #include "PACKAGES_CONFIG.h"
5  #include "CPP_OPTIONS.h"  #include "CPP_OPTIONS.h"
6    
7  CBOP  CBOP
# Line 10  C     !INTERFACE: Line 11  C     !INTERFACE:
11    
12  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
13  C     *==========================================================*  C     *==========================================================*
14  C     | SUBROUTINE INI_FORCING                                      C     | SUBROUTINE INI_FORCING
15  C     | o Set model initial forcing fields.                        C     | o Set model initial forcing fields.
16  C     *==========================================================*  C     *==========================================================*
17  C     \ev  C     \ev
18    
# Line 22  C     === Global variables === Line 23  C     === Global variables ===
23  #include "EEPARAMS.h"  #include "EEPARAMS.h"
24  #include "PARAMS.h"  #include "PARAMS.h"
25  #include "GRID.h"  #include "GRID.h"
26    #include "SURFACE.h"
27  #include "FFIELDS.h"  #include "FFIELDS.h"
28    
29  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
30  C     == Routine arguments ==  C     == Routine arguments ==
31  C     myThid -  Number of this instance of INI_FORCING  C     myThid :: my Thread Id number
32        INTEGER myThid        INTEGER myThid
33    
34  C     !LOCAL VARIABLES:  C     !LOCAL VARIABLES:
35  C     == Local variables ==  C     == Local variables ==
36  C     bi,bj  - Loop counters  C     bi,bj  :: Tile indices
37  C     I,J  C     i, j   :: Loop counters
38        INTEGER bi, bj        INTEGER bi, bj
39        INTEGER  I,  J        INTEGER  i, j
40    #if (defined ALLOW_ADDFLUID) || (defined ALLOW_FRICTION_HEATING)
41          INTEGER k
42    #endif
43  CEOP  CEOP
44    
45        _BARRIER  C-    Initialise all arrays in common blocks
   
46        DO bj = myByLo(myThid), myByHi(myThid)        DO bj = myByLo(myThid), myByHi(myThid)
47         DO bi = myBxLo(myThid), myBxHi(myThid)         DO bi = myBxLo(myThid), myBxHi(myThid)
48          DO j=1-OLy,sNy+OLy          DO j=1-OLy,sNy+OLy
# Line 47  CEOP Line 51  CEOP
51            fv              (i,j,bi,bj) = 0. _d 0            fv              (i,j,bi,bj) = 0. _d 0
52            Qnet            (i,j,bi,bj) = 0. _d 0            Qnet            (i,j,bi,bj) = 0. _d 0
53            EmPmR           (i,j,bi,bj) = 0. _d 0            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            SST             (i,j,bi,bj) = 0. _d 0
56            SSS             (i,j,bi,bj) = 0. _d 0            SSS             (i,j,bi,bj) = 0. _d 0
 #ifdef SHORTWAVE_HEATING            
57            Qsw             (i,j,bi,bj) = 0. _d 0            Qsw             (i,j,bi,bj) = 0. _d 0
58  #else            pLoad           (i,j,bi,bj) = 0. _d 0
59            Qsw             (1,1,1,1)   = 0. _d 0            sIceLoad        (i,j,bi,bj) = 0. _d 0
60  #endif            surfaceForcingU (i,j,bi,bj) = 0. _d 0
61  #ifdef ATMOSPHERIC_LOADING            surfaceForcingV (i,j,bi,bj) = 0. _d 0
62            pload           (i,j,bi,bj) = 0. _d 0            surfaceForcingT (i,j,bi,bj) = 0. _d 0
63  #else            surfaceForcingS (i,j,bi,bj) = 0. _d 0
64            pload           (1,1,1,1)   = 0. _d 0            surfaceForcingTice(i,j,bi,bj) = 0. _d 0
65  #endif  #ifndef EXCLUDE_FFIELDS_LOAD
           surfaceTendencyU(i,j,bi,bj) = 0. _d 0  
           surfaceTendencyV(i,j,bi,bj) = 0. _d 0  
           surfaceTendencyT(i,j,bi,bj) = 0. _d 0  
           surfaceTendencyS(i,j,bi,bj) = 0. _d 0  
 #ifndef INCLUDE_EXTERNAL_FORCING_PACKAGE  
66            taux0           (i,j,bi,bj) = 0. _d 0            taux0           (i,j,bi,bj) = 0. _d 0
67            taux1           (i,j,bi,bj) = 0. _d 0            taux1           (i,j,bi,bj) = 0. _d 0
68            tauy0           (i,j,bi,bj) = 0. _d 0            tauy0           (i,j,bi,bj) = 0. _d 0
# Line 72  CEOP Line 71  CEOP
71            Qnet1           (i,j,bi,bj) = 0. _d 0            Qnet1           (i,j,bi,bj) = 0. _d 0
72            EmPmR0          (i,j,bi,bj) = 0. _d 0            EmPmR0          (i,j,bi,bj) = 0. _d 0
73            EmPmR1          (i,j,bi,bj) = 0. _d 0            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            SST0            (i,j,bi,bj) = 0. _d 0
77            SST1            (i,j,bi,bj) = 0. _d 0            SST1            (i,j,bi,bj) = 0. _d 0
78            SSS0            (i,j,bi,bj) = 0. _d 0            SSS0            (i,j,bi,bj) = 0. _d 0
79            SSS1            (i,j,bi,bj) = 0. _d 0            SSS1            (i,j,bi,bj) = 0. _d 0
80  #ifdef SHORTWAVE_HEATING            #ifdef SHORTWAVE_HEATING
81            Qsw0            (i,j,bi,bj) = 0. _d 0            Qsw0            (i,j,bi,bj) = 0. _d 0
82            Qsw1            (i,j,bi,bj) = 0. _d 0            Qsw1            (i,j,bi,bj) = 0. _d 0
83  #endif  #endif
84  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
85            pload0          (i,j,bi,bj) = 0. _d 0            pLoad0          (i,j,bi,bj) = 0. _d 0
86            pload1          (i,j,bi,bj) = 0. _d 0            pLoad1          (i,j,bi,bj) = 0. _d 0
 #endif  
87  #endif  #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           ENDDO
97          ENDDO          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         ENDDO
117        ENDDO        ENDDO
118  C  
119        _BEGIN_MASTER(myThid)        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        IF ( zonalWindFile .NE. ' '  ) THEN
145         CALL READ_FLD_XY_RS( zonalWindFile, ' ', fu, 0, myThid )         CALL READ_FLD_XY_RS( zonalWindFile, ' ', fu, 0, myThid )
146        ENDIF        ENDIF
# Line 99  C Line 149  C
149        ENDIF        ENDIF
150        IF ( surfQFile .NE. ' '  ) THEN        IF ( surfQFile .NE. ' '  ) THEN
151         CALL READ_FLD_XY_RS( surfQFile, ' ', Qnet, 0, myThid )         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        ENDIF
155        IF ( EmPmRfile .NE. ' '  ) THEN        IF ( EmPmRfile .NE. ' '  ) THEN
156         CALL READ_FLD_XY_RS( EmPmRfile, ' ', EmPmR, 0, myThid )         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        ENDIF
173        IF ( thetaClimFile .NE. ' '  ) THEN        IF ( thetaClimFile .NE. ' '  ) THEN
174         CALL READ_FLD_XY_RS( thetaClimFile, ' ', SST, 0, myThid )         CALL READ_FLD_XY_RS( thetaClimFile, ' ', SST, 0, myThid )
# Line 109  C Line 176  C
176        IF ( saltClimFile .NE. ' '  ) THEN        IF ( saltClimFile .NE. ' '  ) THEN
177         CALL READ_FLD_XY_RS( saltClimFile, ' ', SSS, 0, myThid )         CALL READ_FLD_XY_RS( saltClimFile, ' ', SSS, 0, myThid )
178        ENDIF        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  #ifdef SHORTWAVE_HEATING
188        IF ( surfQswFile .NE. ' '  ) THEN        IF ( surfQswFile .NE. ' '  ) THEN
189         CALL READ_FLD_XY_RS( surfQswFile, ' ', Qsw, 0, myThid )         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        ENDIF
203  #endif  #endif
204  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
205        IF ( pLoadFile .NE. ' '  ) THEN        IF ( pLoadFile .NE. ' '  ) THEN
206         CALL READ_FLD_XY_RS( pLoadFile, ' ', pload, 0, myThid )         CALL READ_FLD_XY_RS( pLoadFile, ' ', pLoad, 0, myThid )
207        ENDIF        ENDIF
208  #endif  #endif
209        _END_MASTER(myThid)  #ifdef ALLOW_ADDFLUID
210  C        IF ( addMassFile .NE. ' ' ) THEN
211        _EXCH_XY_R4(fu   , myThid )         CALL READ_FLD_XYZ_RL( addMassFile, ' ', addMass, 0, myThid )
212        _EXCH_XY_R4(fv   , myThid )         CALL EXCH_XYZ_RL( addMass, myThid )
213        _EXCH_XY_R4(Qnet , myThid )        ENDIF
214        _EXCH_XY_R4(EmPmR, myThid )  #endif /* ALLOW_ADDFLUID */
215        _EXCH_XY_R4(SST  , myThid )  
216        _EXCH_XY_R4(SSS  , myThid )        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  #ifdef SHORTWAVE_HEATING
225        _EXCH_XY_R4(Qsw  , myThid )        CALL EXCH_XY_RS(Qsw  , myThid )
226  #endif  #endif
227  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
228        _EXCH_XY_R4(pload  , myThid )        CALL EXCH_XY_RS(pLoad  , myThid )
229  C     CALL PLOT_FIELD_XYRS( pload, 'S/R INI_FORCING pload',1,myThid)  C     CALL PLOT_FIELD_XYRS( pLoad, 'S/R INI_FORCING pLoad',1,myThid)
230  #endif  #endif
   
231  C     CALL PLOT_FIELD_XYRS( fu, 'S/R INI_FORCING FU',1,myThid)  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)  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        RETURN
255        END        END

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.52

  ViewVC Help
Powered by ViewVC 1.1.22