1 |
#include "LAYERS_OPTIONS.h" |
2 |
|
3 |
SUBROUTINE LAYERS_OUTPUT( myTime, myIter, myThid ) |
4 |
|
5 |
C !DESCRIPTION: \bv |
6 |
C *==========================================================* |
7 |
C | SUBROUTINE LAYERS_OUTPUT |
8 |
C | o general routine for LAYERS output |
9 |
C *==========================================================* |
10 |
C | write time-average & snap-shot output |
11 |
C *==========================================================* |
12 |
C \ev |
13 |
|
14 |
C !USES: |
15 |
IMPLICIT NONE |
16 |
|
17 |
C === Global variables === |
18 |
#include "SIZE.h" |
19 |
#include "EEPARAMS.h" |
20 |
#include "PARAMS.h" |
21 |
#include "LAYERS_SIZE.h" |
22 |
#include "LAYERS.h" |
23 |
|
24 |
C !INPUT PARAMETERS: |
25 |
C == Routine arguments == |
26 |
C myTime :: Current time of simulation ( s ) |
27 |
C myIter :: Iteration number |
28 |
C myThid :: my Thread Id number |
29 |
_RL myTime |
30 |
INTEGER myIter |
31 |
INTEGER myThid |
32 |
CEOP |
33 |
|
34 |
#ifdef ALLOW_LAYERS |
35 |
|
36 |
C !LOCAL VARIABLES: |
37 |
C == Local variables == |
38 |
LOGICAL DIFFERENT_MULTIPLE |
39 |
EXTERNAL DIFFERENT_MULTIPLE |
40 |
INTEGER bi, bj, K |
41 |
CHARACTER*(MAX_LEN_MBUF) suff |
42 |
CHARACTER*(1) pf |
43 |
|
44 |
IF ( writeBinaryPrec .EQ. precFloat64 ) THEN |
45 |
pf(1:1) = 'D' |
46 |
ELSE |
47 |
pf(1:1) = 'R' |
48 |
ENDIF |
49 |
|
50 |
IF ( DIFFERENT_MULTIPLE(dumpFreq,myTime,deltaTClock) |
51 |
& ) THEN |
52 |
|
53 |
IF ( layers_MDSIO ) THEN |
54 |
WRITE(suff,'(I10.10)') myIter |
55 |
#ifdef LAYERS_UFLUX |
56 |
CALL WRITE_FLD_XYG_RL( |
57 |
& 'layers_UFlux.',suff,layers_UFlux,myIter,myThid) |
58 |
#ifdef LAYERS_THICKNESS |
59 |
CALL WRITE_FLD_XYG_RL( |
60 |
& 'layers_HU.',suff,layers_HU,myIter,myThid) |
61 |
#endif /* LAYERS_THICKNESS */ |
62 |
#endif /* LAYESR_UFLUX */ |
63 |
#ifdef LAYERS_VFLUX |
64 |
CALL WRITE_FLD_XYG_RL( |
65 |
& 'layers_VFlux.',suff,layers_VFlux,myIter,myThid) |
66 |
#ifdef LAYERS_THICKNESS |
67 |
CALL WRITE_FLD_XYG_RL( |
68 |
& 'layers_HV.',suff,layers_HV,myIter,myThid) |
69 |
#endif /* LAYERS_THICKNESS */ |
70 |
#endif /* LAYESR_VFLUX */ |
71 |
ENDIF |
72 |
ENDIF |
73 |
|
74 |
#ifdef ALLOW_MNC |
75 |
#ifdef LAYERS_MNC |
76 |
IF ( layers_MNC) THEN |
77 |
C Do MNC output... |
78 |
C But how? |
79 |
ENDIF |
80 |
#endif /* LAYERS_MNC */ |
81 |
#endif /* ALLOW_MNC */ |
82 |
|
83 |
#ifdef ALLOW_TIMEAVE |
84 |
|
85 |
C Dump files and restart average computation if needed |
86 |
IF ( DIFFERENT_MULTIPLE(taveFreq,myTime,deltaTClock) |
87 |
& ) THEN |
88 |
|
89 |
C Normalize by integrated time |
90 |
DO bj = myByLo(myThid), myByHi(myThid) |
91 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
92 |
|
93 |
#ifdef LAYERS_UFLUX |
94 |
CALL TIMEAVE_NORMALIZ(layers_UFlux_T,layers_timeave,Nlayers, |
95 |
& bi,bj,myThid) |
96 |
#ifdef LAYERS_THICKNESS |
97 |
CALL TIMEAVE_NORMALIZ(layers_HU_T,layers_timeave,Nlayers, |
98 |
& bi,bj,myThid) |
99 |
#endif /* LAYERS_THICKNESS */ |
100 |
#endif /* LAYERS_UFLUX */ |
101 |
|
102 |
#ifdef LAYERS_VFLUX |
103 |
CALL TIMEAVE_NORMALIZ(layers_VFlux_T,layers_timeave,Nlayers, |
104 |
& bi,bj,myThid) |
105 |
#ifdef LAYERS_THICKNESS |
106 |
CALL TIMEAVE_NORMALIZ(layers_HV_T,layers_timeave,Nlayers, |
107 |
& bi,bj,myThid) |
108 |
#endif /* LAYERS_THICKNESS */ |
109 |
#endif /* LAYERS_VFLUX */ |
110 |
|
111 |
ENDDO |
112 |
ENDDO |
113 |
|
114 |
IF ( layers_MDSIO ) THEN |
115 |
WRITE(suff,'(I10.10)') myIter |
116 |
#ifdef LAYERS_UFLUX |
117 |
CALL WRITE_FLD_XYG_RL( |
118 |
& 'layers_UFlux-tave.',suff,layers_UFlux_T,myIter,myThid) |
119 |
#ifdef LAYERS_THICKNESS |
120 |
CALL WRITE_FLD_XYG_RL( |
121 |
& 'layers_HU-tave.',suff,layers_HU_T,myIter,myThid) |
122 |
#endif /* LAYERS_THICKNESS */ |
123 |
#endif /* LAYERS_UFLUX */ |
124 |
#ifdef LAYERS_VFLUX |
125 |
CALL WRITE_FLD_XYG_RL( |
126 |
& 'layers_VFlux-tave.',suff,layers_VFlux_T,myIter,myThid) |
127 |
#ifdef LAYERS_THICKNESS |
128 |
CALL WRITE_FLD_XYG_RL( |
129 |
& 'layers_HV-tave.',suff,layers_HV_T,myIter,myThid) |
130 |
#endif /* LAYERS_THICKNESS */ |
131 |
#endif /* LAYERS_VFLUX */ |
132 |
ENDIF |
133 |
|
134 |
#ifdef ALLOW_MNC |
135 |
C Do MNC output. |
136 |
#endif |
137 |
|
138 |
C Reset averages to zero |
139 |
DO bj = myByLo(myThid), myByHi(myThid) |
140 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
141 |
#ifdef LAYERS_UFLUX |
142 |
CALL TIMEAVE_RESET(layers_UFlux_T,Nlayers,bi,bj,myThid) |
143 |
#ifdef LAYERS_THICKNESS |
144 |
CALL TIMEAVE_RESET(layers_HU_T,Nlayers,bi,bj,myThid) |
145 |
#endif /* LAYERS_THICKNESS */ |
146 |
#endif /* LAYERS_UFLUX */ |
147 |
|
148 |
#ifdef LAYERS_VFLUX |
149 |
CALL TIMEAVE_RESET(layers_VFlux_T,Nlayers,bi,bj,myThid) |
150 |
#ifdef LAYERS_THICKNESS |
151 |
CALL TIMEAVE_RESET(layers_HV_T,Nlayers,bi,bj,myThid) |
152 |
#endif /* LAYERS_THICKNESS */ |
153 |
#endif /* LAYERS_VFLUX */ |
154 |
DO k=1,Nlayers |
155 |
layers_TimeAve(k,bi,bj)=0. |
156 |
ENDDO |
157 |
ENDDO |
158 |
ENDDO |
159 |
|
160 |
ENDIF |
161 |
|
162 |
|
163 |
#endif /* ALLOW_TIMEAVE */ |
164 |
|
165 |
#endif /* ALLOW_LAYERS */ |
166 |
|
167 |
RETURN |
168 |
END |