-
Notifications
You must be signed in to change notification settings - Fork 237
/
obcs_output.F
167 lines (140 loc) · 5.09 KB
/
obcs_output.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include "OBCS_OPTIONS.h"
CBOP
C !ROUTINE: OBCS_OUTPUT
C !INTERFACE:
SUBROUTINE OBCS_OUTPUT( myTime, myIter, myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | SUBROUTINE OBCS_OUTPUT
C | o General routine for OBCS output
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ===
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "OBCS_PARAMS.h"
#include "OBCS_FIELDS.h"
C !INPUT PARAMETERS:
C myTime :: my time in simulation ( s )
C myIter :: my Iteration number
C myThid :: my Thread Id number
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_OBCS
C !FUNCTIONS:
LOGICAL DIFFERENT_MULTIPLE
EXTERNAL DIFFERENT_MULTIPLE
c INTEGER ILNBLNK
c EXTERNAL ILNBLNK
C !LOCAL VARIABLES:
CHARACTER*(10) suff
CHARACTER*(MAX_LEN_FNAM) fn
INTEGER prec
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
IF ( DIFFERENT_MULTIPLE( dumpFreq, myTime, deltaTClock )
& .AND. OBCSprintDiags .AND. myIter.NE.nIter0
& ) THEN
C-- Generaly only thread 1 does IO here. It can not start until
C-- all threads fields are ready.
_BARRIER
#ifdef ALLOW_OBCS_NORTH
CALL PLOT_FIELD_XZRL( OBNu, 'OBNu' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBNv, 'OBNv' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBNt, 'OBNt' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBNs, 'OBNs' , Nr, myIter, myThid )
#endif
#ifdef ALLOW_OBCS_SOUTH
CALL PLOT_FIELD_XZRL( OBSu, 'OBSu' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBSv, 'OBSv' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBSt, 'OBSt' , Nr, myIter, myThid )
CALL PLOT_FIELD_XZRL( OBSs, 'OBSs' , Nr, myIter, myThid )
#endif
#ifdef ALLOW_OBCS_EAST
CALL PLOT_FIELD_YZRL( OBEu, 'OBEu' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBEv, 'OBEv' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBEt, 'OBEt' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBEs, 'OBEs' , Nr, myIter, myThid )
#endif
#ifdef ALLOW_OBCS_WEST
CALL PLOT_FIELD_YZRL( OBWu, 'OBWu' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBWv, 'OBWv' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBWt, 'OBWt' , Nr, myIter, myThid )
CALL PLOT_FIELD_YZRL( OBWs, 'OBWs' , Nr, myIter, myThid )
#endif
ENDIF
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
C-- Write OB aray to binary files (mainly for debugging => use "diagFreq")
IF ( DIFFERENT_MULTIPLE( diagFreq, myTime, deltaTClock )
& .AND. myIter.NE.nIter0
& ) THEN
_BARRIER
c IF ( rwSuffixType.EQ.0 ) THEN
WRITE(suff,'(I10.10)') myIter
c ELSE
c CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid )
c ENDIF
prec = writeBinaryPrec
#ifdef ALLOW_OBCS_NORTH
C Write Northern OB arrays
WRITE(fn,'(A,A)') 'obcs_N.', suff
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNu,1,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNv,2,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNt,3,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNs,4,myIter,myThid)
# ifdef ALLOW_NONHYDROSTATIC
IF ( nonHydrostatic ) THEN
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBNw,5,myIter,myThid)
ENDIF
# endif
#endif
#ifdef ALLOW_OBCS_SOUTH
C Write Southern OB arrays
WRITE(fn,'(A,A)') 'obcs_S.', suff
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSu,1,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSv,2,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSt,3,myIter,myThid)
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSs,4,myIter,myThid)
# ifdef ALLOW_NONHYDROSTATIC
IF ( nonHydrostatic ) THEN
CALL WRITE_REC_XZ_RL(fn,prec,Nr,OBSw,5,myIter,myThid)
ENDIF
# endif
#endif
#ifdef ALLOW_OBCS_EAST
C Write Eastern OB arrays
WRITE(fn,'(A,A)') 'obcs_E.', suff
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEu,1,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEv,2,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEt,3,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEs,4,myIter,myThid)
# ifdef ALLOW_NONHYDROSTATIC
IF ( nonHydrostatic ) THEN
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBEw,5,myIter,myThid)
ENDIF
# endif
#endif
#ifdef ALLOW_OBCS_WEST
C Write Western OB arrays
WRITE(fn,'(A,A)') 'obcs_W.', suff
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWu,1,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWv,2,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWt,3,myIter,myThid)
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWs,4,myIter,myThid)
# ifdef ALLOW_NONHYDROSTATIC
IF ( nonHydrostatic ) THEN
CALL WRITE_REC_YZ_RL(fn,prec,Nr,OBWw,5,myIter,myThid)
ENDIF
# endif
#endif
_BARRIER
ENDIF
C-- Compute and print statistics of dynamic fields at OB:
CALL OBCS_MONITOR( myTime, myIter, myThid )
#endif /* ALLOW_OBCS */
RETURN
END