File indexing completed on 2026-05-23 05:08:16 UTC
view on githubraw file Latest commit 9b89fcf6 on 2026-05-22 13:35:26 UTC
21cb76c218 Jean*0001 #include "PACKAGES_CONFIG.h"
0002 #include "CPP_OPTIONS.h"
0003
0004
0005
0006
0007 SUBROUTINE DIAGS_OCEANIC_SURF_FLUX( myTime, myIter, myThid )
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 IMPLICIT NONE
0018
0019
0020 #include "SIZE.h"
0021 #include "EEPARAMS.h"
0022 #include "PARAMS.h"
0023 #include "GRID.h"
0024 #include "DYNVARS.h"
0025 #include "SURFACE.h"
0026 #include "FFIELDS.h"
9b89fcf692 antn*0027 #ifdef ALLOW_LAYERS
0028 # include "LAYERS_P2SHARE.h"
0029 #endif
21cb76c218 Jean*0030
0031
0032
0033
0034
0035
0036 _RL myTime
0037 INTEGER myIter
b0bbe4b4f5 Jean*0038 INTEGER myThid
21cb76c218 Jean*0039
0040
0041 #ifdef ALLOW_DIAGNOSTICS
2e1c236acd Jean*0042
0043 LOGICAL DIAGNOSTICS_IS_ON
0044 EXTERNAL DIAGNOSTICS_IS_ON
0045
21cb76c218 Jean*0046
0047
0048
0049 INTEGER i,j,bi,bj
0050 INTEGER ks
0051 _RL tmp1k(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
0052 _RL tmpFac
0053
0054
0055 IF ( usingPCoords ) THEN
0056 ks=Nr
0057 ELSE
0058 ks=1
0059 ENDIF
0060
b0bbe4b4f5 Jean*0061
b5f408f39d Jean*0062 tmpFac = -1. _d 0
2841828649 Jean*0063 CALL DIAGNOSTICS_SCALE_FILL_RS( EmPmR,tmpFac,1,
b0bbe4b4f5 Jean*0064 & 'oceFWflx',0, 1,0,1,1,myThid )
0065
ba0b047096 Mart*0066
b0bbe4b4f5 Jean*0067 tmpFac = -1. _d 0
2841828649 Jean*0068 CALL DIAGNOSTICS_SCALE_FILL_RS( saltFlux,tmpFac,1,
b0bbe4b4f5 Jean*0069 & 'oceSflux',0, 1,0,1,1,myThid )
0070
0071
0072 tmpFac = -1. _d 0
2841828649 Jean*0073 CALL DIAGNOSTICS_SCALE_FILL_RS( Qnet,tmpFac,1,
b0bbe4b4f5 Jean*0074 & 'oceQnet ',0, 1,0,1,1,myThid )
0075
0076
0077 tmpFac = -1. _d 0
2841828649 Jean*0078 CALL DIAGNOSTICS_SCALE_FILL_RS( Qsw,tmpFac,1,
b0bbe4b4f5 Jean*0079 & 'oceQsw ',0, 1,0,1,1,myThid )
0080
c18b173e8a Jean*0081 IF ( fluidIsWater .OR. useAtm_Phys ) THEN
0082
0083 CALL DIAGNOSTICS_SCALE_FILL_RS( fu,foFacMom,1,
0084 & 'oceTAUX ',0, 1,0,1,1,myThid )
0085
0086
0087 CALL DIAGNOSTICS_SCALE_FILL_RS( fv,foFacMom,1,
0088 & 'oceTAUY ',0, 1,0,1,1,myThid )
0089 ENDIF
0090
0091
0092 CALL DIAGNOSTICS_FILL_RS( sIceLoad,'sIceLoad',0,1,0,1,1,myThid )
0093
0094 IF ( fluidIsWater ) THEN
118f5617eb Jean*0095
c18b173e8a Jean*0096 CALL DIAGNOSTICS_FILL_RS( pLoad, 'atmPload',0,1,0,1,1,myThid )
0097
b0bbe4b4f5 Jean*0098
0b1017b546 Jean*0099 tmpFac = HeatCapacity_Cp*rUnit2mass
538310b333 Jean*0100 CALL DIAGNOSTICS_SCALE_FILL( adjustColdSST_diag,tmpFac,1,
b0bbe4b4f5 Jean*0101 & 'oceFreez',0, 1,0,1,1,myThid )
0102
0103
0b1017b546 Jean*0104 tmpFac = HeatCapacity_Cp*rUnit2mass
b0bbe4b4f5 Jean*0105 CALL DIAGNOSTICS_SCALE_FILL( surfaceForcingT,tmpFac,1,
0106 & 'surForcT',0, 1,0,1,1,myThid )
0107
0108
0b1017b546 Jean*0109 tmpFac = rUnit2mass
b0bbe4b4f5 Jean*0110 CALL DIAGNOSTICS_SCALE_FILL( surfaceForcingS,tmpFac,1,
0111 & 'surForcS',0, 1,0,1,1,myThid )
c18b173e8a Jean*0112 ENDIF
b0bbe4b4f5 Jean*0113
0114
9b89fcf692 antn*0115 IF ( fluidIsWater .AND. (
0116 & DIAGNOSTICS_IS_ON('TFLUX ',myThid)
0117 #ifdef ALLOW_LAYERS
0118 & .OR. layers_useThermo
0119 #endif
0120 & ) ) THEN
21cb76c218 Jean*0121 DO bj = myByLo(myThid), myByHi(myThid)
0122 DO bi = myBxLo(myThid), myBxHi(myThid)
0123 DO j = 1,sNy
0124 DO i = 1,sNx
0125 tmp1k(i,j,bi,bj) =
538310b333 Jean*0126 & (surfaceForcingT(i,j,bi,bj)+adjustColdSST_diag(i,j,bi,bj))
0b1017b546 Jean*0127 & *HeatCapacity_Cp*rUnit2mass
21cb76c218 Jean*0128 ENDDO
0129 ENDDO
00c7090dc0 Mart*0130 #ifdef SHORTWAVE_HEATING
0131 IF ( selectPenetratingSW .GE. 1 ) THEN
0132 DO j = 1,sNy
0133 DO i = 1,sNx
0134 tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj) - Qsw(i,j,bi,bj)
0135 ENDDO
0136 ENDDO
0137 ENDIF
0138 #endif
21cb76c218 Jean*0139 #ifdef NONLIN_FRSURF
0140 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
0141 & .AND. useRealFreshWaterFlux ) THEN
0142 DO j=1,sNy
0143 DO i=1,sNx
0144 tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj)
b5f408f39d Jean*0145 & + PmEpR(i,j,bi,bj)*theta(i,j,ks,bi,bj)*HeatCapacity_Cp
21cb76c218 Jean*0146 ENDDO
0147 ENDDO
0148 ENDIF
0149 #endif /* NONLIN_FRSURF */
0150 ENDDO
0151 ENDDO
b0bbe4b4f5 Jean*0152 CALL DIAGNOSTICS_FILL( tmp1k,'TFLUX ',0,1,0,1,1,myThid )
cf336ab6c5 Ryan*0153 #ifdef ALLOW_LAYERS
9b89fcf692 antn*0154 IF ( layers_useThermo ) THEN
50d8304171 Ryan*0155 CALL LAYERS_FILL( tmp1k, 1, 'SUR', 0,1,0,1,1,myThid )
ee16a2cae4 Ryan*0156 ENDIF
cf336ab6c5 Ryan*0157 #endif /* ALLOW_LAYERS */
21cb76c218 Jean*0158 ENDIF
0159
b0bbe4b4f5 Jean*0160
9b89fcf692 antn*0161 IF ( fluidIsWater .AND. (
0162 & DIAGNOSTICS_IS_ON('SFLUX ',myThid)
0163 #ifdef ALLOW_LAYERS
0164 & .OR. layers_useThermo
0165 #endif
0166 & ) ) THEN
21cb76c218 Jean*0167 DO bj = myByLo(myThid), myByHi(myThid)
0168 DO bi = myBxLo(myThid), myBxHi(myThid)
0169 DO j = 1,sNy
0170 DO i = 1,sNx
0171 tmp1k(i,j,bi,bj) =
0b1017b546 Jean*0172 & surfaceForcingS(i,j,bi,bj)*rUnit2mass
21cb76c218 Jean*0173 ENDDO
0174 ENDDO
8f80badf99 Dimi*0175
ee8b184348 Jean*0176 #ifdef NONLIN_FRSURF
0177 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
0178 & .AND. useRealFreshWaterFlux ) THEN
0179 DO j=1,sNy
0180 DO i=1,sNx
0181 tmp1k(i,j,bi,bj) = tmp1k(i,j,bi,bj)
b5f408f39d Jean*0182 & + PmEpR(i,j,bi,bj)*salt(i,j,ks,bi,bj)
ee8b184348 Jean*0183 ENDDO
0184 ENDDO
0185 ENDIF
0186 #endif /* NONLIN_FRSURF */
8f80badf99 Dimi*0187
21cb76c218 Jean*0188 ENDDO
0189 ENDDO
b0bbe4b4f5 Jean*0190 CALL DIAGNOSTICS_FILL( tmp1k,'SFLUX ',0,1,0,1,1,myThid )
cf336ab6c5 Ryan*0191 #ifdef ALLOW_LAYERS
9b89fcf692 antn*0192 IF ( layers_useThermo ) THEN
50d8304171 Ryan*0193 CALL LAYERS_FILL( tmp1k, 2, 'SUR', 0,1,0,1,1,myThid )
ee16a2cae4 Ryan*0194 ENDIF
cf336ab6c5 Ryan*0195 #endif /* ALLOW_LAYERS */
21cb76c218 Jean*0196 ENDIF
0197 #endif /* ALLOW_DIAGNOSTICS */
0198
b0bbe4b4f5 Jean*0199 RETURN
21cb76c218 Jean*0200 END