1 |
C $Header: |
2 |
C $Name: |
3 |
|
4 |
#include "OBCS_OPTIONS.h" |
5 |
|
6 |
CStartofinterface |
7 |
SUBROUTINE OBCS_READ_CHECKPOINT( prec, myIt, suff, myThid ) |
8 |
C /==========================================================\ |
9 |
C | SUBROUTINE OBCS_READ_CHECKPOINT | |
10 |
C | o Read open boundary checkpoint arrays | |
11 |
C |==========================================================| |
12 |
C | | |
13 |
C \==========================================================/ |
14 |
IMPLICIT NONE |
15 |
|
16 |
C === Global variables === |
17 |
#include "SIZE.h" |
18 |
#include "EEPARAMS.h" |
19 |
#include "PARAMS.h" |
20 |
#include "OBCS.h" |
21 |
|
22 |
C == Routine arguments == |
23 |
INTEGER prec |
24 |
INTEGER myIt |
25 |
CHARACTER*(10) suff |
26 |
INTEGER myThid |
27 |
CEndofinterface |
28 |
|
29 |
#ifdef ALLOW_OBCS |
30 |
|
31 |
C == Local variables == |
32 |
CHARACTER*(MAX_LEN_FNAM) fn |
33 |
|
34 |
C READ N and S OB arrays |
35 |
#ifdef ALLOW_OBCS_NORTH |
36 |
WRITE(fn,'(A,A10)') 'pickup_obN.',suff |
37 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBNu,1,myThid) |
38 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBNv,2,myThid) |
39 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBNt,3,myThid) |
40 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBNs,4,myThid) |
41 |
# ifdef ALLOW_NONHYDROSTATIC |
42 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBNw,5,myThid) |
43 |
# endif |
44 |
#endif |
45 |
#ifdef ALLOW_OBCS_SOUTH |
46 |
WRITE(fn,'(A,A10)') 'pickup_obS.',suff |
47 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBSu,1,myThid) |
48 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBSv,2,myThid) |
49 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBSt,3,myThid) |
50 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBSs,4,myThid) |
51 |
# ifdef ALLOW_NONHYDROSTATIC |
52 |
CALL MDSREADFIELDXZ(fn,prec,'RS',Nr,OBSw,5,myThid) |
53 |
# endif |
54 |
#endif |
55 |
|
56 |
C READ E and W OB arrays |
57 |
#ifdef ALLOW_OBCS_EAST |
58 |
WRITE(fn,'(A,A10)') 'pickup_obE.',suff |
59 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBEu,1,myThid) |
60 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBEv,2,myThid) |
61 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBEt,3,myThid) |
62 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBEs,4,myThid) |
63 |
# ifdef ALLOW_NONHYDROSTATIC |
64 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBEw,5,myThid) |
65 |
# endif |
66 |
#endif |
67 |
|
68 |
#ifdef ALLOW_OBCS_WEST |
69 |
WRITE(fn,'(A,A10)') 'pickup_obW.',suff |
70 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBWu,1,myThid) |
71 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBWv,2,myThid) |
72 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBWt,3,myThid) |
73 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBWs,4,myThid) |
74 |
# ifdef ALLOW_NONHYDROSTATIC |
75 |
CALL MDSREADFIELDYZ(fn,prec,'RS',Nr,OBWw,5,myThid) |
76 |
# endif |
77 |
#endif |
78 |
|
79 |
C Fill in edge regions |
80 |
c _EXCH_XZ_R4(OBNu , myThid) |
81 |
c _EXCH_XZ_R4(OBNv , myThid) |
82 |
c _EXCH_XZ_R4(OBNt , myThid) |
83 |
c _EXCH_XZ_R4(OBNs , myThid) |
84 |
c _EXCH_XZ_R4(OBSu , myThid) |
85 |
c _EXCH_XZ_R4(OBSv , myThid) |
86 |
c _EXCH_XZ_R4(OBSt , myThid) |
87 |
c _EXCH_XZ_R4(OBSs , myThid) |
88 |
c#ifdef ALLOW_NONHYDROSTATIC |
89 |
c _EXCH_XZ_R4(OBNw , myThid) |
90 |
c _EXCH_XZ_R4(OBSw , myThid) |
91 |
c#endif |
92 |
|
93 |
C Fill in edge regions |
94 |
c _EXCH_YZ_R4(OBEu , myThid) |
95 |
c _EXCH_YZ_R4(OBEv , myThid) |
96 |
c _EXCH_YZ_R4(OBEt , myThid) |
97 |
c _EXCH_YZ_R4(OBEs , myThid) |
98 |
c _EXCH_YZ_R4(OBWu , myThid) |
99 |
c _EXCH_YZ_R4(OBWv , myThid) |
100 |
c _EXCH_YZ_R4(OBWt , myThid) |
101 |
c _EXCH_YZ_R4(OBWs , myThid) |
102 |
c#ifdef ALLOW_NONHYDROSTATIC |
103 |
c _EXCH_YZ_R4(OBEw , myThid) |
104 |
c _EXCH_YZ_R4(OBWw , myThid) |
105 |
c#endif |
106 |
|
107 |
#ifdef ALLOW_ORLANSKI |
108 |
IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR. |
109 |
& useOrlanskiEast.OR.useOrlanskiWest) THEN |
110 |
CALL ORLANSKI_READ_CHECKPOINT( |
111 |
& prec, myIt, suff, myThid ) |
112 |
ENDIF |
113 |
#endif /* ALLOW_ORLANSKI */ |
114 |
|
115 |
#endif /* ALLOW_OBCS */ |
116 |
RETURN |
117 |
END |
118 |
|
119 |
|
120 |
CStartofinterface |
121 |
SUBROUTINE OBCS_WRITE_CHECKPOINT( prec, lgf, permCheckPoint, |
122 |
& myIt, myThid ) |
123 |
C /==========================================================\ |
124 |
C | SUBROUTINE OBCS_WRITE_CHECKPOINT | |
125 |
C | o Write open boundary checkpoint arrays | |
126 |
C |==========================================================| |
127 |
C | | |
128 |
C \==========================================================/ |
129 |
IMPLICIT NONE |
130 |
|
131 |
C === Global variables === |
132 |
#include "SIZE.h" |
133 |
#include "EEPARAMS.h" |
134 |
#include "PARAMS.h" |
135 |
#include "OBCS.h" |
136 |
|
137 |
C == Routine arguments == |
138 |
INTEGER prec |
139 |
LOGICAL lgf |
140 |
LOGICAL permCheckPoint |
141 |
INTEGER myIt |
142 |
INTEGER myThid |
143 |
CEndofinterface |
144 |
|
145 |
#ifdef ALLOW_OBCS |
146 |
|
147 |
C == Local variables == |
148 |
CHARACTER*(MAX_LEN_FNAM) fn |
149 |
|
150 |
C Write N and S OB arrays |
151 |
#ifdef ALLOW_OBCS_NORTH |
152 |
IF ( permCheckPoint ) THEN |
153 |
WRITE(fn,'(A,I10.10)') 'pickup_obN.',myIt |
154 |
ELSE |
155 |
WRITE(fn,'(A,A)') 'pickup_obN.',checkPtSuff(nCheckLev) |
156 |
ENDIF |
157 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBNu,1,myIt,myThid) |
158 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBNv,2,myIt,myThid) |
159 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBNt,3,myIt,myThid) |
160 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBNs,4,myIt,myThid) |
161 |
# ifdef ALLOW_NONHYDROSTATIC |
162 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBNw,5,myIt,myThid) |
163 |
# endif |
164 |
#endif |
165 |
|
166 |
#ifdef ALLOW_OBCS_SOUTH |
167 |
IF ( permCheckPoint ) THEN |
168 |
WRITE(fn,'(A,I10.10)') 'pickup_obS.',myIt |
169 |
ELSE |
170 |
WRITE(fn,'(A,A)') 'pickup_obS.',checkPtSuff(nCheckLev) |
171 |
ENDIF |
172 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBSu,1,myIt,myThid) |
173 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBSv,2,myIt,myThid) |
174 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBSt,3,myIt,myThid) |
175 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBSs,4,myIt,myThid) |
176 |
# ifdef ALLOW_NONHYDROSTATIC |
177 |
CALL MDSWRITEFIELDXZ(fn,prec,lgf,'RS',Nr,OBSw,5,myIt,myThid) |
178 |
# endif |
179 |
#endif |
180 |
|
181 |
C Write E and W OB arrays |
182 |
#ifdef ALLOW_OBCS_EAST |
183 |
IF ( permCheckPoint ) THEN |
184 |
WRITE(fn,'(A,I10.10)') 'pickup_obE.',myIt |
185 |
ELSE |
186 |
WRITE(fn,'(A,A)') 'pickup_obE.',checkPtSuff(nCheckLev) |
187 |
ENDIF |
188 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBEu,1,myIt,myThid) |
189 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBEv,2,myIt,myThid) |
190 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBEt,3,myIt,myThid) |
191 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBEs,4,myIt,myThid) |
192 |
# ifdef ALLOW_NONHYDROSTATIC |
193 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBEw,5,myIt,myThid) |
194 |
# endif |
195 |
#endif |
196 |
|
197 |
#ifdef ALLOW_OBCS_WEST |
198 |
IF ( permCheckPoint ) THEN |
199 |
WRITE(fn,'(A,I10.10)') 'pickup_obW.',myIt |
200 |
ELSE |
201 |
WRITE(fn,'(A,A)') 'pickup_obW.',checkPtSuff(nCheckLev) |
202 |
ENDIF |
203 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBWu,1,myIt,myThid) |
204 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBWv,2,myIt,myThid) |
205 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBWt,3,myIt,myThid) |
206 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBWs,4,myIt,myThid) |
207 |
# ifdef ALLOW_NONHYDROSTATIC |
208 |
CALL MDSWRITEFIELDYZ(fn,prec,lgf,'RS',Nr,OBWw,5,myIt,myThid) |
209 |
# endif |
210 |
#endif |
211 |
|
212 |
|
213 |
#ifdef ALLOW_ORLANSKI |
214 |
IF (useOrlanskiNorth.OR.useOrlanskiSouth.OR. |
215 |
& useOrlanskiEast.OR.useOrlanskiWest) THEN |
216 |
CALL ORLANSKI_WRITE_CHECKPOINT( |
217 |
& prec, lgf, permCheckPoint, myIt, myThid ) |
218 |
ENDIF |
219 |
#endif /* ALLOW_ORLANSKI */ |
220 |
|
221 |
#endif /* ALLOW_OBCS */ |
222 |
RETURN |
223 |
END |
224 |
|