8 |
I UG, |
I UG, |
9 |
U TSURF, |
U TSURF, |
10 |
O netHeatFlux, SWHeatFlux, |
O netHeatFlux, SWHeatFlux, |
11 |
I bi, bj, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
12 |
C /================================================================\ |
C /================================================================\ |
13 |
C | SUBROUTINE seaice_budget_ocean | |
C | SUBROUTINE seaice_budget_ocean | |
14 |
C | o Calculate surface heat fluxes over open ocean | |
C | o Calculate surface heat fluxes over open ocean | |
37 |
C UG :: thermal wind of atmosphere |
C UG :: thermal wind of atmosphere |
38 |
C TSURF :: surface temperature of ocean in Kelvin |
C TSURF :: surface temperature of ocean in Kelvin |
39 |
C bi,bj :: loop indices |
C bi,bj :: loop indices |
40 |
|
C myTime :: Simulation time |
41 |
|
C myIter :: Simulation timestep number |
42 |
C myThid :: Thread no. that called this routine. |
C myThid :: Thread no. that called this routine. |
43 |
C OUTPUT: |
C OUTPUT: |
44 |
C netHeatFlux :: net surface heat flux over open water or under ice |
C netHeatFlux :: net surface heat flux over open water or under ice |
45 |
C SWHeatFlux :: short wave heat flux over open water or under ice |
C SWHeatFlux :: short wave heat flux over open water or under ice |
46 |
_RL UG (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL UG (1:sNx,1:sNy) |
47 |
_RL TSURF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
_RL TSURF (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) |
48 |
_RL netHeatFlux(1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL netHeatFlux(1:sNx,1:sNy) |
49 |
_RL SWHeatFlux (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL SWHeatFlux (1:sNx,1:sNy) |
50 |
INTEGER bi, bj, myThid |
_RL myTime |
51 |
|
INTEGER bi, bj, myIter, myThid |
52 |
CEndOfInterface |
CEndOfInterface |
53 |
|
|
54 |
C === Local variables === |
C === Local variables === |
65 |
_RL t1, t2, t3, t4 |
_RL t1, t2, t3, t4 |
66 |
|
|
67 |
C local copies of global variables |
C local copies of global variables |
68 |
_RL tsurfLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL tsurfLoc (1:sNx,1:sNy) |
69 |
_RL atempLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL atempLoc (1:sNx,1:sNy) |
70 |
_RL lwdownLoc (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL lwdownLoc (1:sNx,1:sNy) |
71 |
_RL ALB (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL ALB (1:sNx,1:sNy) |
72 |
C coefficients of Hibler (1980), appendix B |
C coefficients of Hibler (1980), appendix B |
73 |
_RL A1 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL A1 (1:sNx,1:sNy) |
74 |
_RL A2 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL A2 (1:sNx,1:sNy) |
|
_RL A3 (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
|
75 |
C auxiliary variable |
C auxiliary variable |
76 |
_RL B (1-OLx:sNx+OLx,1-OLy:sNy+OLy) |
_RL B (1:sNx,1:sNy) |
77 |
|
|
78 |
C NOW DEFINE ASSORTED CONSTANTS |
C NOW DEFINE ASSORTED CONSTANTS |
79 |
C SATURATION VAPOR PRESSURE CONSTANT |
C SATURATION VAPOR PRESSURE CONSTANT |
95 |
SWHeatFlux (I,J) = 0. _d 0 |
SWHeatFlux (I,J) = 0. _d 0 |
96 |
C |
C |
97 |
tsurfLoc (I,J) = MIN(273.16 _d 0+MAX_TICE,TSURF(I,J,bi,bj)) |
tsurfLoc (I,J) = MIN(273.16 _d 0+MAX_TICE,TSURF(I,J,bi,bj)) |
98 |
|
# ifdef ALLOW_ATM_TEMP |
99 |
C Is this necessary? |
C Is this necessary? |
|
#ifdef ALLOW_ATM_TEMP |
|
100 |
atempLoc (I,J) = MAX(273.16 _d 0+MIN_ATEMP,ATEMP(I,J,bi,bj)) |
atempLoc (I,J) = MAX(273.16 _d 0+MIN_ATEMP,ATEMP(I,J,bi,bj)) |
101 |
#else /* ALLOW_ATM_TEMP */ |
# endif |
102 |
STOP 'ABNORMAL END: S/R SEAICE_BUDGET_OCE: ATM_TEMP undef' |
# ifdef ALLOW_DOWNWARD_RADIATION |
|
#endif /* ALLOW_ATM_TEMP */ |
|
|
#ifdef ALLOW_DOWNWARD_RADIATION |
|
103 |
lwdownLoc(I,J) = MAX(MIN_LWDOWN,LWDOWN(I,J,bi,bj)) |
lwdownLoc(I,J) = MAX(MIN_LWDOWN,LWDOWN(I,J,bi,bj)) |
104 |
#else |
# endif |
|
STOP |
|
|
& 'ABNORMAL END: S/R SEAICE_BUDGET_OCE: DOWNWARD_RADIATION undef' |
|
|
#endif |
|
105 |
ENDDO |
ENDDO |
106 |
ENDDO |
ENDDO |
107 |
#endif /* SEAICE_EXTERNAL_FLUXES */ |
#endif /* SEAICE_EXTERNAL_FLUXES */ |
115 |
SWHeatFlux (I,J) = Qsw(I,J,bi,bj) |
SWHeatFlux (I,J) = Qsw(I,J,bi,bj) |
116 |
#else /* SEAICE_EXTERNAL_FLUXES undefined */ |
#else /* SEAICE_EXTERNAL_FLUXES undefined */ |
117 |
ALB(I,J)=SEAICE_waterAlbedo |
ALB(I,J)=SEAICE_waterAlbedo |
118 |
#if defined(ALLOW_DOWNWARD_RADIATION) && defined(ALLOW_ATM_TEMP) |
# ifdef ALLOW_DOWNWARD_RADIATION |
119 |
A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj) |
A1(I,J)=(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj) |
120 |
& +lwdownLoc(I,J)*0.97 _d 0 |
& +lwdownLoc(I,J)*0.97 _d 0 |
121 |
& +D1*UG(I,J)*atempLoc(I,J)+D1W*UG(I,J)*AQH(I,J,bi,bj) |
& +D1*UG(I,J)*atempLoc(I,J)+D1W*UG(I,J)*AQH(I,J,bi,bj) |
126 |
& -D3*(tsurfLoc(I,J)**4) |
& -D3*(tsurfLoc(I,J)**4) |
127 |
netHeatFlux(I,J)=-A1(I,J)-A2(I,J) |
netHeatFlux(I,J)=-A1(I,J)-A2(I,J) |
128 |
SWHeatFlux (I,J)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj) |
SWHeatFlux (I,J)=-(ONE-ALB(I,J))*SWDOWN(I,J,bi,bj) |
129 |
#else |
# endif /* ALLOW_DOWNWARD_RADIATION */ |
|
STOP |
|
|
& 'ABNORMAL END: S/R SEAICE_BUDGET_OCE: DOWNWARD_RADIATION undef' |
|
|
#endif |
|
130 |
#endif /* SEAICE_EXTERNAL_FLUXES */ |
#endif /* SEAICE_EXTERNAL_FLUXES */ |
131 |
ENDDO |
ENDDO |
132 |
ENDDO |
ENDDO |