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

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

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


Revision 1.8 - (show annotations) (download)
Mon Dec 12 19:00:10 2011 UTC (12 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: 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, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63g, checkpoint64, checkpoint65, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.7: +36 -6 lines
- move delX,delY to new header file (SET_GRID.h) and adjust length to 1rst
  face dimensions.
- move default setting of latBandClimRelax from ini_cartesian_grid.F
  and ini_cylinder_grid.F to load_grid_spacing.F

1 C $Header: /u/gcmpack/MITgcm/model/src/load_grid_spacing.F,v 1.7 2010/12/27 23:26:39 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6 #ifdef ALLOW_EXCH2
7 # include "W2_OPTIONS.h"
8 #endif /* ALLOW_EXCH2 */
9
10 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
11 CBOP
12 C !ROUTINE: LOAD_GRID_SPACING
13 C !INTERFACE:
14 SUBROUTINE LOAD_GRID_SPACING( myThid )
15
16 C !DESCRIPTION:
17 C load grid-spacing (vector array) delX, delY, delR or delRc from file.
18
19 C !USES:
20 IMPLICIT NONE
21 #include "SIZE.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #ifdef ALLOW_EXCH2
25 # include "W2_EXCH2_SIZE.h"
26 # include "W2_EXCH2_TOPOLOGY.h"
27 #endif /* ALLOW_EXCH2 */
28 #include "GRID.h"
29 #include "SET_GRID.h"
30
31 C !INPUT/OUTPUT PARAMETERS:
32 C myThid :: my Thread Id. number
33 INTEGER myThid
34 CEOP
35
36 C !FUNCTIONS:
37 INTEGER ILNBLNK
38 EXTERNAL ILNBLNK
39
40 C !LOCAL VARIABLES:
41 C msgBuf :: Informational/error message buffer
42 C delYsum :: delY full-domain sum
43 INTEGER iLen
44 INTEGER i, j, n
45 INTEGER gridNx, gridNy
46 CHARACTER*(MAX_LEN_MBUF) msgBuf
47 _RL delYsum
48
49 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
50
51 #ifdef ALLOW_EXCH2
52 gridNx = exch2_mydNx(1)
53 gridNy = exch2_mydNy(1)
54 #else /* ALLOW_EXCH2 */
55 gridNx = Nx
56 gridNy = Ny
57 #endif /* ALLOW_EXCH2 */
58
59 _BEGIN_MASTER( myThid )
60
61 C-- X coordinate
62 IF ( delXFile .NE. ' ' ) THEN
63 iLen = ILNBLNK(delXFile)
64 CALL READ_GLVEC_RL( delXFile, ' ', delX, gridNx, 1, myThid )
65 WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
66 & ' delX loaded from file: ', delXFile(1:iLen)
67 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
68 & SQUEEZE_RIGHT , myThid )
69 ENDIF
70
71 C-- Y coordinate
72 IF ( delYFile .NE. ' ' ) THEN
73 iLen = ILNBLNK(delYFile)
74 CALL READ_GLVEC_RL( delYFile, ' ', delY, gridNy, 1, myThid )
75 WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
76 & ' delY loaded from file: ', delYFile(1:iLen)
77 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
78 & SQUEEZE_RIGHT , myThid )
79 ENDIF
80
81 C-- vertical coordinate "R"
82 IF ( delRFile .NE. ' ' ) THEN
83 iLen = ILNBLNK(delRFile)
84 CALL READ_GLVEC_RL( delRFile, ' ', delR, Nr, 1, myThid )
85 WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
86 & ' delR loaded from file: ', delRFile(1:iLen)
87 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
88 & SQUEEZE_RIGHT , myThid )
89 ENDIF
90
91 IF ( delRcFile .NE. ' ' ) THEN
92 iLen = ILNBLNK(delRcFile)
93 CALL READ_GLVEC_RL( delRcFile, ' ', delRc, Nr+1, 1, myThid )
94 WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
95 & ' delRc loaded from file: ', delRcFile(1:iLen)
96 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
97 & SQUEEZE_RIGHT , myThid )
98 ENDIF
99
100 C-- hybrid sigma vertical coordinate coefficient
101 IF ( hybSigmFile .NE. ' ' ) THEN
102 iLen = ILNBLNK(hybSigmFile)
103 CALL READ_GLVEC_RS( hybSigmFile,' ',aHybSigmF,Nr+1, 1,myThid )
104 CALL READ_GLVEC_RS( hybSigmFile,' ',bHybSigmF,Nr+1, 2,myThid )
105 WRITE(msgBuf,'(3A)') 'S/R LOAD_GRID_SPACING:',
106 & ' a&b_HybSigmF loaded from file: ', hybSigmFile(1:iLen)
107 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
108 & SQUEEZE_RIGHT , myThid )
109 ENDIF
110
111 C-- Check horizontal grid-spacing
112 IF ( .NOT.usingCurvilinearGrid ) THEN
113 C Note: To avoid multiple copies of the same code in several horiz.grid
114 C initialisation S/R, check horiz.grid spacing here, after
115 C loading delX,delY (and before calling any of these S/R).
116
117 C-- Check delX grid-spacing:
118 n = 0
119 DO i=1,gridNx
120 C- check that delX has been set
121 IF ( delX(i).EQ.UNSET_RL ) THEN
122 n = n+1
123 WRITE(msgBuf,'(2A,I5)') 'S/R LOAD_GRID_SPACING:',
124 & ' No value for delX at i =', i
125 CALL PRINT_ERROR( msgBuf, myThid )
126 ENDIF
127 C- check that delX is > 0
128 IF ( delX(i).LE.0. ) THEN
129 n = n+1
130 WRITE(msgBuf,'(2A,I5,A,1PE16.8,A)') 'S/R LOAD_GRID_SPACING:',
131 & ' delX(i=', i, ')=', delX(i), ' : MUST BE >0'
132 CALL PRINT_ERROR( msgBuf, myThid )
133 ENDIF
134 ENDDO
135 IF ( n.GE.1 ) THEN
136 WRITE(msgBuf,'(2A,I5,A)') 'S/R LOAD_GRID_SPACING:',
137 & ' found', n, ' invalid delX values'
138 CALL PRINT_ERROR( msgBuf, myThid )
139 STOP 'ABNORMAL END: S/R LOAD_GRID_SPACING'
140 ENDIF
141
142 C-- Check delY grid-spacing:
143 n = 0
144 DO j=1,gridNy
145 C- check that delY has been set
146 IF ( delY(j).EQ.UNSET_RL ) THEN
147 n = n+1
148 WRITE(msgBuf,'(2A,I5)') 'S/R LOAD_GRID_SPACING:',
149 & ' No value for delY at j =', j
150 CALL PRINT_ERROR( msgBuf, myThid )
151 ENDIF
152 C- check that delY is > 0
153 IF ( delY(j).LE.0. ) THEN
154 n = n+1
155 WRITE(msgBuf,'(2A,I5,A,1PE16.8,A)') 'S/R LOAD_GRID_SPACING:',
156 & ' delY(j=', j, ')=', delY(j), ' : MUST BE >0'
157 CALL PRINT_ERROR( msgBuf, myThid )
158 ENDIF
159 ENDDO
160 IF ( n.GE.1 ) THEN
161 WRITE(msgBuf,'(2A,I5,A)') 'S/R LOAD_GRID_SPACING:',
162 & ' found', n, ' invalid delY values'
163 CALL PRINT_ERROR( msgBuf, myThid )
164 STOP 'ABNORMAL END: S/R LOAD_GRID_SPACING'
165 ENDIF
166 C-- end of grid-spacing check (not usingCurvilinearGrid)
167 ENDIF
168
169 C-- Set default (=whole domain) for where relaxation to climatology applies
170 IF ( usingCartesianGrid .OR. usingSphericalPolarGrid ) THEN
171 delYsum = 0.
172 DO j=1,gridNy
173 delYsum = delYsum + delY(j)
174 ENDDO
175 IF ( latBandClimRelax.EQ.UNSET_RL ) THEN
176 latBandClimRelax = delYsum*3. _d 0
177 ENDIF
178 ENDIF
179
180 _END_MASTER(myThid)
181 C-- Everyone else must wait for the parameters to be loaded
182 _BARRIER
183
184 RETURN
185 END

  ViewVC Help
Powered by ViewVC 1.1.22