| 1 |
C $Header: /u/gcmpack/MITgcm/pkg/ocn_compon_interf/cpl_output.F,v 1.4 2016/01/06 00:58:23 jmc Exp $ |
| 2 |
C $Name: $ |
| 3 |
|
| 4 |
#include "OCN_CPL_OPTIONS.h" |
| 5 |
|
| 6 |
CBOP |
| 7 |
C !ROUTINE: CPL_OUTPUT |
| 8 |
C !INTERFACE: |
| 9 |
SUBROUTINE CPL_OUTPUT( myTime, myIter, myThid ) |
| 10 |
|
| 11 |
C !DESCRIPTION: \bv |
| 12 |
C *==========================================================* |
| 13 |
C | S/R CPL_OUTPUT |
| 14 |
C | o Write CPL time-average output |
| 15 |
C | - Oceanic version - |
| 16 |
C *==========================================================* |
| 17 |
C \ev |
| 18 |
|
| 19 |
C !USES: |
| 20 |
IMPLICIT NONE |
| 21 |
|
| 22 |
C === Global variables === |
| 23 |
#include "SIZE.h" |
| 24 |
#include "EEPARAMS.h" |
| 25 |
#include "PARAMS.h" |
| 26 |
#include "CPL_PARAMS.h" |
| 27 |
#include "OCNCPL.h" |
| 28 |
#include "CPL_TAVE.h" |
| 29 |
|
| 30 |
C !INPUT/OUTPUT PARAMETERS: |
| 31 |
C == Routine arguments == |
| 32 |
C myTime :: Current time in simulation |
| 33 |
C myIter :: my Iteration number |
| 34 |
C myThid :: my Thread Id number |
| 35 |
_RL myTime |
| 36 |
INTEGER myIter |
| 37 |
INTEGER myThid |
| 38 |
CEOP |
| 39 |
|
| 40 |
#ifdef COMPONENT_MODULE |
| 41 |
#ifdef ALLOW_TIMEAVE |
| 42 |
|
| 43 |
C !FUNCTIONS: |
| 44 |
LOGICAL DIFFERENT_MULTIPLE |
| 45 |
EXTERNAL DIFFERENT_MULTIPLE |
| 46 |
|
| 47 |
C !LOCAL VARIABLES: |
| 48 |
C == Local variables == |
| 49 |
C bi,bj :: Tile index |
| 50 |
C fn :: File name suffix |
| 51 |
INTEGER bi,bj |
| 52 |
CHARACTER*(10) suff |
| 53 |
CHARACTER*(MAX_LEN_FNAM) fn |
| 54 |
#ifdef ALLOW_MNC |
| 55 |
CHARACTER*(1) pf |
| 56 |
#endif /* ALLOW_MNC */ |
| 57 |
|
| 58 |
C Dump files and restart average computation if needed |
| 59 |
IF ( myIter.NE.nIter0 .AND. |
| 60 |
& DIFFERENT_MULTIPLE(cpl_taveFreq,myTime,deltaTClock) |
| 61 |
& ) THEN |
| 62 |
|
| 63 |
C Normalize by integrated time |
| 64 |
DO bj = myByLo(myThid), myByHi(myThid) |
| 65 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
| 66 |
CALL TIMEAVE_NORMALIZE(SLPtave,CPL_timeAve,1,bi,bj,myThid) |
| 67 |
CALL TIMEAVE_NORMALIZE(HFtave ,CPL_timeAve,1,bi,bj,myThid) |
| 68 |
CALL TIMEAVE_NORMALIZE(QSWtave,CPL_timeAve,1,bi,bj,myThid) |
| 69 |
CALL TIMEAVE_NORMALIZE(TXtave ,CPL_timeAve,1,bi,bj,myThid) |
| 70 |
CALL TIMEAVE_NORMALIZE(TYtave ,CPL_timeAve,1,bi,bj,myThid) |
| 71 |
CALL TIMEAVE_NORMALIZE(FWtave ,CPL_timeAve,1,bi,bj,myThid) |
| 72 |
CALL TIMEAVE_NORMALIZE(SFxtave,CPL_timeAve,1,bi,bj,myThid) |
| 73 |
CALL TIMEAVE_NORMALIZE(SICtave,CPL_timeAve,1,bi,bj,myThid) |
| 74 |
CALL TIMEAVE_NORMALIZE(MXLtave,CPL_timeAve,1,bi,bj,myThid) |
| 75 |
CALL TIMEAVE_NORMALIZE(SSTtave,CPL_timeAve,1,bi,bj,myThid) |
| 76 |
CALL TIMEAVE_NORMALIZE(SSStave,CPL_timeAve,1,bi,bj,myThid) |
| 77 |
CALL TIMEAVE_NORMALIZE(vSqtave,CPL_timeAve,1,bi,bj,myThid) |
| 78 |
#ifdef ALLOW_DIC |
| 79 |
IF ( ocn_cplExch_DIC ) THEN |
| 80 |
CALL TIMEAVE_NORMALIZE(aCO2tave, CPL_timeAve,1,bi,bj,myThid) |
| 81 |
CALL TIMEAVE_NORMALIZE(sWSpdtave,CPL_timeAve,1,bi,bj,myThid) |
| 82 |
CALL TIMEAVE_NORMALIZE(iceftave, CPL_timeAve,1,bi,bj,myThid) |
| 83 |
CALL TIMEAVE_NORMALIZE(fCO2tave, CPL_timeAve,1,bi,bj,myThid) |
| 84 |
ENDIF |
| 85 |
#endif /* ALLOW_DIC */ |
| 86 |
ENDDO |
| 87 |
ENDDO |
| 88 |
|
| 89 |
IF ( cpl_timeave_mdsio ) THEN |
| 90 |
IF ( rwSuffixType.EQ.0 ) THEN |
| 91 |
WRITE(fn,'(A,I10.10)') 'cplFldtave.', myIter |
| 92 |
ELSE |
| 93 |
CALL RW_GET_SUFFIX( suff, myTime, myIter, myThid ) |
| 94 |
WRITE(fn,'(A,A)') 'cplFldtave.', suff |
| 95 |
ENDIF |
| 96 |
CALL WRITE_REC_XY_RL( fn, SLPtave , 1, myIter, myThid ) |
| 97 |
CALL WRITE_REC_XY_RL( fn, HFtave , 2, myIter, myThid ) |
| 98 |
CALL WRITE_REC_XY_RL( fn, QSWtave , 3, myIter, myThid ) |
| 99 |
CALL WRITE_REC_XY_RL( fn, TXtave , 4, myIter, myThid ) |
| 100 |
CALL WRITE_REC_XY_RL( fn, TYtave , 5, myIter, myThid ) |
| 101 |
CALL WRITE_REC_XY_RL( fn, FWtave , 6, myIter, myThid ) |
| 102 |
CALL WRITE_REC_XY_RL( fn, SFxtave , 7, myIter, myThid ) |
| 103 |
CALL WRITE_REC_XY_RL( fn, SICtave , 8, myIter, myThid ) |
| 104 |
CALL WRITE_REC_XY_RL( fn, MXLtave , 9, myIter, myThid ) |
| 105 |
CALL WRITE_REC_XY_RL( fn, SSTtave , 10, myIter, myThid ) |
| 106 |
CALL WRITE_REC_XY_RL( fn, SSStave , 11, myIter, myThid ) |
| 107 |
CALL WRITE_REC_XY_RL( fn, vSqtave , 12, myIter, myThid ) |
| 108 |
#ifdef ALLOW_DIC |
| 109 |
IF ( ocn_cplExch_DIC ) THEN |
| 110 |
CALL WRITE_REC_XY_RL( fn, aCO2tave , 13, myIter, myThid ) |
| 111 |
CALL WRITE_REC_XY_RL( fn, sWSpdtave, 14, myIter, myThid ) |
| 112 |
CALL WRITE_REC_XY_RL( fn, iceftave , 15, myIter, myThid ) |
| 113 |
CALL WRITE_REC_XY_RL( fn, fCO2tave , 16, myIter, myThid ) |
| 114 |
ENDIF |
| 115 |
#endif /* ALLOW_DIC */ |
| 116 |
ENDIF |
| 117 |
|
| 118 |
#ifdef ALLOW_MNC |
| 119 |
IF ( useMNC.AND.cpl_timeave_mnc ) THEN |
| 120 |
IF ( writeBinaryPrec .EQ. precFloat64 ) THEN |
| 121 |
pf(1:1) = 'D' |
| 122 |
ELSE |
| 123 |
pf(1:1) = 'R' |
| 124 |
ENDIF |
| 125 |
CALL MNC_CW_SET_UDIM('cpl_tave', -1, myThid) |
| 126 |
CALL MNC_CW_RL_W_S('D','cpl_tave',0,0,'T',myTime,myThid) |
| 127 |
CALL MNC_CW_SET_UDIM('cpl_tave', 0, myThid) |
| 128 |
CALL MNC_CW_I_W_S('I','cpl_tave',0,0,'iter',myIter,myThid) |
| 129 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 130 |
& 'SLPtave',SLPtave,myThid) |
| 131 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 132 |
& 'HFtave',HFtave,myThid) |
| 133 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 134 |
& 'QSWtave',QSWtave,myThid) |
| 135 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 136 |
& 'TXtave',TXtave,myThid) |
| 137 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 138 |
& 'TYtave',TYtave,myThid) |
| 139 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 140 |
& 'FWtave',FWtave,myThid) |
| 141 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 142 |
& 'SFxtave',SFxtave,myThid) |
| 143 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 144 |
& 'SICtave',SICtave,myThid) |
| 145 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 146 |
& 'MXLtave',MXLtave,myThid) |
| 147 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 148 |
& 'SSTtave',SSTtave,myThid) |
| 149 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 150 |
& 'SSStave',SSStave,myThid) |
| 151 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 152 |
& 'vSqtave',vSqtave,myThid) |
| 153 |
#ifdef ALLOW_DIC |
| 154 |
IF ( ocn_cplExch_DIC ) THEN |
| 155 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 156 |
& 'aCO2tave',aCO2tave,myThid) |
| 157 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 158 |
& 'sWSpdtave',sWSpdtave,myThid) |
| 159 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 160 |
& 'iceftave',iceftave,myThid) |
| 161 |
CALL MNC_CW_RL_W(pf,'cpl_tave',0,0, |
| 162 |
& 'fCO2tave',fCO2tave,myThid) |
| 163 |
ENDIF |
| 164 |
#endif /* ALLOW_DIC */ |
| 165 |
ENDIF |
| 166 |
#endif /* ALLOW_MNC */ |
| 167 |
|
| 168 |
C Reset diagnostic counters |
| 169 |
DO bj = myByLo(myThid), myByHi(myThid) |
| 170 |
DO bi = myBxLo(myThid), myBxHi(myThid) |
| 171 |
CALL TIMEAVE_RESET( SLPtave, 1, bi, bj, myThid ) |
| 172 |
CALL TIMEAVE_RESET( HFtave , 1, bi, bj, myThid ) |
| 173 |
CALL TIMEAVE_RESET( QSWtave, 1, bi, bj, myThid ) |
| 174 |
CALL TIMEAVE_RESET( TXtave , 1, bi, bj, myThid ) |
| 175 |
CALL TIMEAVE_RESET( TYtave , 1, bi, bj, myThid ) |
| 176 |
CALL TIMEAVE_RESET( FWtave , 1, bi, bj, myThid ) |
| 177 |
CALL TIMEAVE_RESET( SFxtave, 1, bi, bj, myThid ) |
| 178 |
CALL TIMEAVE_RESET( SICtave, 1, bi, bj, myThid ) |
| 179 |
CALL TIMEAVE_RESET( MXLtave, 1, bi, bj, myThid ) |
| 180 |
CALL TIMEAVE_RESET( SSTtave, 1, bi, bj, myThid ) |
| 181 |
CALL TIMEAVE_RESET( SSStave, 1, bi, bj, myThid ) |
| 182 |
CALL TIMEAVE_RESET( vSqtave, 1, bi, bj, myThid ) |
| 183 |
#ifdef ALLOW_DIC |
| 184 |
IF ( ocn_cplExch_DIC ) THEN |
| 185 |
CALL TIMEAVE_RESET( aCO2tave , 1, bi, bj, myThid ) |
| 186 |
CALL TIMEAVE_RESET( sWSpdtave, 1, bi, bj, myThid ) |
| 187 |
CALL TIMEAVE_RESET( iceftave , 1, bi, bj, myThid ) |
| 188 |
CALL TIMEAVE_RESET( fCO2tave , 1, bi, bj, myThid ) |
| 189 |
ENDIF |
| 190 |
#endif /* ALLOW_DIC */ |
| 191 |
CPL_timeAve(bi,bj) = 0. |
| 192 |
ENDDO |
| 193 |
ENDDO |
| 194 |
|
| 195 |
ENDIF |
| 196 |
|
| 197 |
#endif /* ALLOW_TIMEAVE */ |
| 198 |
#endif /* COMPONENT_MODULE */ |
| 199 |
|
| 200 |
RETURN |
| 201 |
END |