| 1 | C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_ave.F,v 1.2 2004/04/07 23:40:34 jmc Exp $ | 
| 2 | C $Name:  $ | 
| 3 |  | 
| 4 | #include "THSICE_OPTIONS.h" | 
| 5 |  | 
| 6 | CBOP | 
| 7 | C     !ROUTINE: THSICE_AVE | 
| 8 | C     !INTERFACE: | 
| 9 | SUBROUTINE THSICE_AVE( | 
| 10 | I                      frwAtm, flxAtm, | 
| 11 | I                      bi, bj, myTime, myIter, myThid ) | 
| 12 | C     !DESCRIPTION: \bv | 
| 13 | C     *==========================================================* | 
| 14 | C     | S/R  THSICE_AVE | 
| 15 | C     | o save values for timeaveraging | 
| 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 "FFIELDS.h" | 
| 27 | #include "THSICE_PARAMS.h" | 
| 28 | #include "THSICE_VARS.h" | 
| 29 | #include "THSICE_TAVE.h" | 
| 30 |  | 
| 31 | C     !INPUT/OUTPUT PARAMETERS: | 
| 32 | C     == Routine Arguments == | 
| 33 | C     frwAtm  :: net fresh-water flux (E-P) to the atmosphere [kg/m2/s] | 
| 34 | C     flxAtm  :: net heat flux from the atmosphere (+=down) [W/m2] | 
| 35 | C     myTime  :: time counter for this thread | 
| 36 | C     bi,bj   :: tile indices | 
| 37 | C     myIter  :: iteration counter for this thread | 
| 38 | C     myThid  :: thread number for this instance of the routine. | 
| 39 | _RL frwAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) | 
| 40 | _RL flxAtm(1-OLx:sNx+OLx,1-OLy:sNy+OLy) | 
| 41 | INTEGER bi,bj | 
| 42 | _RL  myTime | 
| 43 | INTEGER myIter | 
| 44 | INTEGER myThid | 
| 45 | CEOP | 
| 46 |  | 
| 47 | #ifdef ALLOW_THSICE | 
| 48 | C     == Local variables == | 
| 49 | LOGICAL  DIFFERENT_MULTIPLE | 
| 50 | EXTERNAL DIFFERENT_MULTIPLE | 
| 51 | INTEGER wrtIter | 
| 52 |  | 
| 53 | #ifdef ALLOW_TIMEAVE | 
| 54 |  | 
| 55 | IF ( thSIce_taveFreq .GT. 0. _d 0 ) THEN | 
| 56 |  | 
| 57 | C--    Time-average | 
| 58 | CALL TIMEAVE_CUMULATE(ice_fract_Ave, iceMask, | 
| 59 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 60 | C-- area weighted average (with ice-fraction) | 
| 61 | CALL TIMEAVE_CUMUL_2V( ice_iceH_Ave,  iceheight, iceMask, | 
| 62 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 63 | CALL TIMEAVE_CUMUL_2V( ice_snowH_Ave, snowheight, iceMask, | 
| 64 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 65 | CALL TIMEAVE_CUMUL_2V( ice_Tsrf_Ave,  Tsrf,  iceMask, | 
| 66 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 67 | CALL TIMEAVE_CUMUL_2V( ice_Tice1_Ave, Tice1, iceMask, | 
| 68 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 69 | CALL TIMEAVE_CUMUL_2V( ice_Tice2_Ave, Tice2, iceMask, | 
| 70 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 71 | CALL TIMEAVE_CUMUL_2V( ice_snowPr_Ave,snowPrc, iceMask, | 
| 72 | &                    1, 0, thSIce_deltaT, bi, bj, myThid ) | 
| 73 | C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| | 
| 74 | C-- simple average (without ice-fraction) | 
| 75 | c      CALL TIMEAVE_CUMULATE(ice_iceH_Ave,iceheight, | 
| 76 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 77 | c      CALL TIMEAVE_CUMULATE(ice_snowH_Ave,snowHeight, | 
| 78 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 79 | c      CALL TIMEAVE_CUMULATE(ice_Tsrf_Ave, Tsrf, | 
| 80 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 81 | c      CALL TIMEAVE_CUMULATE(ice_Tice1_Ave,Tice1, | 
| 82 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 83 | c      CALL TIMEAVE_CUMULATE(ice_Tice2_Ave,Tice2, | 
| 84 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 85 | c      CALL TIMEAVE_CUMULATE(ice_snowPr_Ave, snowPrc, | 
| 86 | c    &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 87 |  | 
| 88 | C-- average of atmospheric fluxes : | 
| 89 | #ifdef ALLOW_TIMEAVE | 
| 90 | IF ( buoyancyRelation(1:7) .EQ. 'OCEANIC' ) THEN | 
| 91 | CALL TIMEAVE_CUMUL_1T(ice_flxAtm_Ave, flxAtm, | 
| 92 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 93 | CALL TIMEAVE_CUMUL_1T(ice_frwAtm_Ave, frwAtm, | 
| 94 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 95 | ENDIF | 
| 96 | #endif /*ALLOW_TIMEAVE*/ | 
| 97 |  | 
| 98 | C-- average of oceanic fluxes : | 
| 99 | #ifndef CHECK_ENERGY_CONSERV | 
| 100 | CALL TIMEAVE_CUMULATE(ice_flx2oc_Ave, Qnet, | 
| 101 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 102 | CALL TIMEAVE_CUMULATE(ice_frw2oc_Ave, EmPmR, | 
| 103 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 104 | CALL TIMEAVE_CUMULATE(ice_salFx_Ave, saltFlux, | 
| 105 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 106 | #endif /* CHECK_ENERGY_CONSERV */ | 
| 107 |  | 
| 108 | C-- average of Ocean Mixed-Layer temp. & salinity | 
| 109 | IF ( stepFwd_oceMxL ) THEN | 
| 110 | CALL TIMEAVE_CUMULATE(ice_tMxL_Ave, tOceMxL, | 
| 111 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 112 | CALL TIMEAVE_CUMULATE(ice_sMxL_Ave, sOceMxL, | 
| 113 | &                       1, thSIce_deltaT, bi, bj, myThid ) | 
| 114 | ENDIF | 
| 115 |  | 
| 116 | ice_timeAve(1,bi,bj)=ice_timeAve(1,bi,bj)+thSIce_deltaT | 
| 117 |  | 
| 118 | ENDIF | 
| 119 | #endif /* ALLOW_TIMEAVE */ | 
| 120 |  | 
| 121 | IF ( DIFFERENT_MULTIPLE(thSIce_diagFreq,myTime+deltaTClock,myTime) | 
| 122 | &     .AND. buoyancyRelation(1:7) .EQ. 'OCEANIC' ) THEN | 
| 123 | wrtIter = myIter+1 | 
| 124 | CALL WRITE_LOCAL_RL('ice_flxAtm','I10',1,flxAtm, | 
| 125 | &                      bi,bj,1,wrtIter,myThid) | 
| 126 | CALL WRITE_LOCAL_RL('ice_frwAtm','I10',1,frwAtm, | 
| 127 | &                      bi,bj,1,wrtIter,myThid) | 
| 128 | ENDIF | 
| 129 |  | 
| 130 | #endif  /* ALLOW_THSICE */ | 
| 131 |  | 
| 132 | RETURN | 
| 133 | END |