/[MITgcm]/MITgcm/pkg/shelfice/shelfice_output.F
ViewVC logotype

Diff of /MITgcm/pkg/shelfice/shelfice_output.F

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

revision 1.1 by jmc, Wed Jun 17 14:48:04 2009 UTC revision 1.2 by jmc, Sun Jan 3 00:39:46 2010 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "SHELFICE_OPTIONS.h"  #include "SHELFICE_OPTIONS.h"
5    
6    CBOP
7    C     !ROUTINE: SHELFICE_OUTPUT
8    C     !INTERFACE:
9        SUBROUTINE SHELFICE_OUTPUT( myTime, myIter, myThid )        SUBROUTINE SHELFICE_OUTPUT( myTime, myIter, myThid )
10    
11    C     !DESCRIPTION: \bv
12  C     *==========================================================*  C     *==========================================================*
13  C     | SUBROUTINE SHELFICE_OUTPUT  C     | SUBROUTINE SHELFICE_OUTPUT
14  C     | o Do SHELFICE diagnostic output.  C     | o Do SHELFICE snapshot output
15    C     |   and compute & write time-average output.
16  C     *==========================================================*  C     *==========================================================*
17    C     \ev
18    
19    C     !USES:
20        IMPLICIT NONE        IMPLICIT NONE
21    
22  C     === Global variables ===  C     === Global variables ===
# Line 17  C     === Global variables === Line 26  C     === Global variables ===
26  #include "SHELFICE.h"  #include "SHELFICE.h"
27  #include "SHELFICE_TAVE.h"  #include "SHELFICE_TAVE.h"
28    
29    C     !INPUT/OUTPUT PARAMETERS:
30  C     == Routine arguments ==  C     == Routine arguments ==
31  C     myTime :: my time in simulation ( s )  C     myTime :: my time in simulation ( s )
32  C     myIter :: my Iteration number  C     myIter :: my Iteration number
# Line 25  C     myThid :: my Thread Id number Line 35  C     myThid :: my Thread Id number
35        INTEGER myIter        INTEGER myIter
36        INTEGER myThid        INTEGER myThid
37    
38  C     == Local variables ==  C     !FUNCTIONS:
       CHARACTER*(MAX_LEN_MBUF) suff  
39        LOGICAL  DIFFERENT_MULTIPLE        LOGICAL  DIFFERENT_MULTIPLE
40        EXTERNAL DIFFERENT_MULTIPLE        EXTERNAL DIFFERENT_MULTIPLE
41        INTEGER i, j, k, bi, bj  
42    C     !LOCAL VARIABLES:
43    C     == Local variables ==
44          CHARACTER*(MAX_LEN_MBUF) suff
45    #ifdef ALLOW_TIMEAVE
46          INTEGER i, j, bi, bj
47        LOGICAL dumpFiles        LOGICAL dumpFiles
48    #endif
49    #ifdef ALLOW_MNC
50        CHARACTER*(1) pf        CHARACTER*(1) pf
51    #endif
52        IF ( writeBinaryPrec .EQ. precFloat64 ) THEN  CEOP
         pf(1:1) = 'D'  
       ELSE  
         pf(1:1) = 'R'  
       ENDIF  
53    
54        IF (SHELFICEwriteState) THEN        IF (SHELFICEwriteState) THEN
55    
56         IF ( DIFFERENT_MULTIPLE(SHELFICE_dumpFreq,myTime,deltaTClock)  C- note: surf.Fluxes have not yet been computed when called @ nIter0
57       &      ) THEN         IF ( myIter .NE. nIter0 .AND.
58         &      DIFFERENT_MULTIPLE(SHELFICE_dumpFreq,myTime,deltaTClock)
59         &    ) THEN
60    
61  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
62          IF ( useMNC .AND. SHELFICE_dump_mnc ) THEN          IF ( useMNC .AND. SHELFICE_dump_mnc ) THEN
63             IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
64               pf(1:1) = 'D'
65             ELSE
66               pf(1:1) = 'R'
67             ENDIF
68           CALL MNC_CW_SET_UDIM('shelfice', -1, myThid)           CALL MNC_CW_SET_UDIM('shelfice', -1, myThid)
69           CALL MNC_CW_RL_W_S('D','shelfice',0,0,'T', myTime, myThid)           CALL MNC_CW_RL_W_S('D','shelfice',0,0,'T', myTime, myThid)
70           CALL MNC_CW_SET_UDIM('shelfice', 0, myThid)           CALL MNC_CW_SET_UDIM('shelfice', 0, myThid)
# Line 60  C     == Local variables == Line 79  C     == Local variables ==
79  #endif  #endif
80          IF (SHELFICE_dump_mdsio) THEN          IF (SHELFICE_dump_mdsio) THEN
81           WRITE(suff,'(I10.10)') myIter           WRITE(suff,'(I10.10)') myIter
          _BARRIER  
82           CALL WRITE_FLD_XY_RS( 'SHICE_fwFlux.',suff,           CALL WRITE_FLD_XY_RS( 'SHICE_fwFlux.',suff,
83       &        shelficeFreshWaterFlux,myIter,myThid)       &        shelficeFreshWaterFlux,myIter,myThid)
84           CALL WRITE_FLD_XY_RS( 'SHICE_heatFlux.',suff,           CALL WRITE_FLD_XY_RS( 'SHICE_heatFlux.',suff,
85       &        shelficeHeatFlux,myIter,myThid)       &        shelficeHeatFlux,myIter,myThid)
          _BARRIER  
86          ENDIF          ENDIF
87    
88         ENDIF         ENDIF
# Line 76  C     Do SHELFICE time averaging. Line 93  C     Do SHELFICE time averaging.
93  C----------------------------------------------------------------  C----------------------------------------------------------------
94    
95  #ifdef ALLOW_TIMEAVE  #ifdef ALLOW_TIMEAVE
   
96        IF ( SHELFICE_taveFreq .GT. 0 ) THEN        IF ( SHELFICE_taveFreq .GT. 0 ) THEN
97    
98           IF ( myIter.EQ.nIter0 ) THEN
99    C--    Initialise averages to zero
100            DO bj = myByLo(myThid), myByHi(myThid)
101             DO bi = myBxLo(myThid), myBxHi(myThid)
102              CALL TIMEAVE_RESET( shelfice_frshFluxtave, 1, bi,bj, myThid )
103              CALL TIMEAVE_RESET( shelfice_heatFluxtave, 1, bi,bj, myThid )
104              SHELFICE_timeAve(bi,bj) = 0. _d 0
105             ENDDO
106            ENDDO
107           ELSE
108  C--   Time-cumulations  C--   Time-cumulations
109        DO bj = myByLo(myThid), myByHi(myThid)  C- note: surf.Fluxes have not yet been computed when called @ nIter0
110         DO bi = myBxLo(myThid), myBxHi(myThid)          DO bj = myByLo(myThid), myByHi(myThid)
111          DO j=1,sNy           DO bi = myBxLo(myThid), myBxHi(myThid)
112           DO i=1,sNx            DO j=1,sNy
113            shelfice_FrshFluxtave(i,j,1,bi,bj)=             DO i=1,sNx
114                shelfice_FrshFluxtave(i,j,1,bi,bj)=
115       &         shelfice_frshFluxtave(i,j,1,bi,bj)       &         shelfice_frshFluxtave(i,j,1,bi,bj)
116       &         + shelficeFreshWaterFlux(i,j,bi,bj) *deltaTclock       &         + shelficeFreshWaterFlux(i,j,bi,bj) *deltaTclock
117            shelfice_heatFluxtave(i,j,1,bi,bj) =              shelfice_heatFluxtave(i,j,1,bi,bj) =
118       &         shelfice_heatFluxtave(i,j,1,bi,bj)       &         shelfice_heatFluxtave(i,j,1,bi,bj)
119       &         + shelficeHeatFlux(i,j,bi,bj)  *deltaTclock       &         + shelficeHeatFlux(i,j,bi,bj)  *deltaTclock
120               ENDDO
121              ENDDO
122              SHELFICE_timeAve(bi,bj) = SHELFICE_timeAve(bi,bj)+deltaTclock
123           ENDDO           ENDDO
124          ENDDO          ENDDO
125          SHELFICE_TimeAve(1,bi,bj)=SHELFICE_TimeAve(1,bi,bj)+deltaTclock         ENDIF
        ENDDO  
       ENDDO  
126    
127  C     Dump files and restart average computation if needed  C     Dump files and restart average computation if needed
128        dumpFiles = .FALSE.         dumpFiles = .FALSE.
129        IF ( myIter .NE. nIter0 ) THEN         IF ( myIter .NE. nIter0 ) THEN
130          dumpFiles =          dumpFiles =
131       &     DIFFERENT_MULTIPLE(SHELFICE_taveFreq,myTime,deltaTClock)       &     DIFFERENT_MULTIPLE(SHELFICE_taveFreq,myTime,deltaTClock)
132  #ifdef ALLOW_CAL  #ifdef ALLOW_CAL
# Line 107  C     Dump files and restart average com Line 136  C     Dump files and restart average com
136       I                        myTime, myIter, myThid )       I                        myTime, myIter, myThid )
137          ENDIF          ENDIF
138  #endif  #endif
139        ENDIF         ENDIF
140    
141        IF (dumpFiles) THEN         IF (dumpFiles) THEN
142  C      Normalize by integrated time  C-     Normalize by integrated time
143         DO bj = myByLo(myThid), myByHi(myThid)          DO bj = myByLo(myThid), myByHi(myThid)
144          DO bi = myBxLo(myThid), myBxHi(myThid)           DO bi = myBxLo(myThid), myBxHi(myThid)
145           CALL TIMEAVE_NORMALIZ(shelfice_frshFluxtave,SHELFICE_timeave,            CALL TIMEAVE_NORMALIZE( shelfice_frshFluxtave,
146       &        1,bi,bj,myThid)       &                            SHELFICE_timeAve, 1, bi, bj, myThid )
147           CALL TIMEAVE_NORMALIZ(shelfice_heatFluxtave,SHELFICE_timeave,            CALL TIMEAVE_NORMALIZE( shelfice_heatFluxtave,
148       &        1,bi,bj,myThid)       &                            SHELFICE_timeAve, 1, bi, bj, myThid )
149             ENDDO
150          ENDDO          ENDDO
        ENDDO  
151    
152  #ifdef ALLOW_MNC  #ifdef ALLOW_MNC
153         IF (useMNC .AND. SHELFICE_tave_mnc) THEN          IF (useMNC .AND. SHELFICE_tave_mnc) THEN
154          CALL MNC_CW_SET_UDIM('shelfice_tave', -1, myThid)           IF ( writeBinaryPrec .EQ. precFloat64 ) THEN
155          CALL MNC_CW_RL_W_S('D','shelfice_tave',0,0,'T', myTime, myThid)             pf(1:1) = 'D'
156          CALL MNC_CW_SET_UDIM('shelfice_tave', 0, myThid)           ELSE
157          CALL MNC_CW_I_W_S('I','shelfice_tave',0,0,'iter', myIter,             pf(1:1) = 'R'
158       &       myThid)           ENDIF
159  C        CALL MNC_CW_RL_W_S('D','shelfice_tave',0,0,'model_time',           CALL MNC_CW_SET_UDIM('shelfice_tave', -1, myThid)
160  C     &        myTime,myThid)           CALL MNC_CW_RL_W_S( 'D','shelfice_tave', 0, 0,
161          CALL MNC_CW_RL_W(pf,'shelfice_tave',0,0,       &                       'T', myTime, myThid )
162       &       'fwFluxtave',Shelfice_FrshFluxtave,myThid)           CALL MNC_CW_SET_UDIM('shelfice_tave', 0, myThid)
163          CALL MNC_CW_RL_W(pf,'shelfice_tave',0,0,           CALL MNC_CW_I_W_S( 'I', 'shelfice_tave', 0, 0,
164       &       'heatFluxtave',Shelfice_HeatFluxtave,myThid)       &                       'iter', myIter, myThid )
165         ENDIF  C        CALL MNC_CW_RL_W_S( 'D','shelfice_tave', 0, 0,
166    C     &                      'model_time', myTime, myThid )
167             CALL MNC_CW_RL_W( pf, 'shelfice_tave', 0, 0,
168         &             'fwFluxtave', Shelfice_FrshFluxtave, myThid )
169             CALL MNC_CW_RL_W( pf, 'shelfice_tave', 0, 0,
170         &           'heatFluxtave', Shelfice_HeatFluxtave, myThid )
171            ENDIF
172  #endif  #endif
173         IF (SHELFICE_tave_mdsio) THEN          IF (SHELFICE_tave_mdsio) THEN
174          WRITE(suff,'(I10.10)') myIter           WRITE(suff,'(I10.10)') myIter
175          _BARRIER           CALL WRITE_FLD_XY_RL( 'SHICE_fwFluxtave.', suff,
176          CALL WRITE_FLD_XY_RL('SHICE_fwFluxtave.',suff,       &                         shelfice_frshFluxtave, myIter, myThid )
177       &       shelfice_frshFluxtave,myIter,myThid)           CALL WRITE_FLD_XY_RL( 'SHICE_heatFluxtave.', suff,
178          CALL WRITE_FLD_XY_RL('SHICE_heatFluxtave.',suff,       &                         shelfice_heatFluxtave, myIter, myThid )
179       &       shelfice_heatFluxtave ,myIter,myThid)          ENDIF
         _BARRIER  
        ENDIF  
180    
181  C      Reset averages to zero  C-     Reset averages to zero
182         DO bj = myByLo(myThid), myByHi(myThid)          DO bj = myByLo(myThid), myByHi(myThid)
183          DO bi = myBxLo(myThid), myBxHi(myThid)           DO bi = myBxLo(myThid), myBxHi(myThid)
184           CALL TIMEAVE_RESET(shelfice_frshFluxtave,1,bi,bj,myThid)            CALL TIMEAVE_RESET( shelfice_frshFluxtave, 1, bi,bj, myThid )
185           CALL TIMEAVE_RESET(shelfice_heatFluxtave ,1,bi,bj,myThid)            CALL TIMEAVE_RESET( shelfice_heatFluxtave, 1, bi,bj, myThid )
186           SHELFICE_TimeAve(1,bi,bj) = 0. _d 0            SHELFICE_timeAve(bi,bj) = 0. _d 0
187             ENDDO
188          ENDDO          ENDDO
        ENDDO  
189    
190        ENDIF  C--   end if dumpFiles
191  C     ( SHELFICE_taveFreq .GT. 0 )         ENDIF
192    
193    C--   end if SHELFICE_taveFreq > 0
194        ENDIF        ENDIF
195  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
196    

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

  ViewVC Help
Powered by ViewVC 1.1.22