2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
#include "THSICE_OPTIONS.h" |
#include "THSICE_OPTIONS.h" |
5 |
|
#ifdef ALLOW_ATM2D |
6 |
|
# include "ctrparam.h" |
7 |
|
#endif |
8 |
|
|
9 |
CBOP |
CBOP |
10 |
C !ROUTINE: THSICE_STEP_FWD |
C !ROUTINE: THSICE_STEP_FWD |
28 |
#include "EEPARAMS.h" |
#include "EEPARAMS.h" |
29 |
#include "PARAMS.h" |
#include "PARAMS.h" |
30 |
#include "FFIELDS.h" |
#include "FFIELDS.h" |
31 |
|
#ifdef ALLOW_ATM2D |
32 |
|
# include "ATMSIZE.h" |
33 |
|
# include "ATM2D_VARS.h" |
34 |
|
#endif |
35 |
#include "THSICE_SIZE.h" |
#include "THSICE_SIZE.h" |
36 |
#include "THSICE_PARAMS.h" |
#include "THSICE_PARAMS.h" |
37 |
#include "THSICE_VARS.h" |
#include "THSICE_VARS.h" |
127 |
DO j = 1-OLy, sNy+OLy |
DO j = 1-OLy, sNy+OLy |
128 |
DO i = 1-OLx, sNx+OLx |
DO i = 1-OLx, sNx+OLx |
129 |
isIceFree(i,j) = .FALSE. |
isIceFree(i,j) = .FALSE. |
130 |
|
#ifdef ALLOW_ATM2D |
131 |
|
sFluxFromIce(i,j) = 0. _d 0 |
132 |
|
#else |
133 |
saltFlux(i,j,bi,bj) = 0. _d 0 |
saltFlux(i,j,bi,bj) = 0. _d 0 |
134 |
|
#endif |
135 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
136 |
iceFrac(i,j) = 0. |
iceFrac(i,j) = 0. |
137 |
#endif |
#endif |
168 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
169 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
170 |
tmpFac = 1. _d 0 |
tmpFac = 1. _d 0 |
171 |
|
CALL DIAGNOSTICS_FILL(iceMask,'SI_FrcFx',0,1,1,bi,bj,myThid) |
172 |
CALL DIAGNOSTICS_FRACT_FILL( |
CALL DIAGNOSTICS_FRACT_FILL( |
173 |
I snowPrc, iceMask,tmpFac,1,'SIsnwPrc', |
I snowPrc, iceMask,tmpFac,1,'SIsnwPrc', |
174 |
I 0,1,1,bi,bj,myThid) |
I 0,1,1,bi,bj,myThid) |
261 |
#endif |
#endif |
262 |
icFrac = iceMask(i,j,bi,bj) |
icFrac = iceMask(i,j,bi,bj) |
263 |
opFrac= 1. _d 0-icFrac |
opFrac= 1. _d 0-icFrac |
264 |
|
#ifdef ALLOW_ATM2D |
265 |
|
pass_qnet(i,j) = pass_qnet(i,j) - icFrac*flx2oc(i,j) |
266 |
|
pass_evap(i,j) = pass_evap(i,j) - icFrac*frw2oc(i,j)/rhofw |
267 |
|
sFluxFromIce(i,j) = -icFrac*fsalt(i,j) |
268 |
|
#else |
269 |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
270 |
& - opFrac*Qnet(i,j,bi,bj) |
& - opFrac*Qnet(i,j,bi,bj) |
271 |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
274 |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw |
275 |
& + opFrac*EmPmR(i,j,bi,bj) |
& + opFrac*EmPmR(i,j,bi,bj) |
276 |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
277 |
|
#endif |
278 |
|
|
279 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
280 |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
317 |
DO i = iMin, iMax |
DO i = iMin, iMax |
318 |
IF (frzmltMxL(i,j).GT.0. _d 0) THEN |
IF (frzmltMxL(i,j).GT.0. _d 0) THEN |
319 |
C-- Net fluxes : |
C-- Net fluxes : |
320 |
|
#ifdef ALLOW_ATM2D |
321 |
|
pass_qnet(i,j) = pass_qnet(i,j) - flx2oc(i,j) |
322 |
|
pass_evap(i,j) = pass_evap(i,j) - frw2oc(i,j)/rhofw |
323 |
|
sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j) |
324 |
|
#else |
325 |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j) |
Qnet(i,j,bi,bj) = Qnet(i,j,bi,bj) - flx2oc(i,j) |
326 |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j)/rhofw |
EmPmR(i,j,bi,bj)= EmPmR(i,j,bi,bj)- frw2oc(i,j)/rhofw |
327 |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j) |
saltFlux(i,j,bi,bj)=saltFlux(i,j,bi,bj) - fsalt(i,j) |
328 |
|
#endif |
329 |
|
|
330 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
331 |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
356 |
ENDDO |
ENDDO |
357 |
ENDDO |
ENDDO |
358 |
|
|
|
#ifdef ATMOSPHERIC_LOADING |
|
359 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
360 |
CADJ STORE snowHeight(:,:,bi,bj) = |
CADJ STORE snowHeight(:,:,bi,bj) = |
361 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
368 |
& )*iceMask(i,j,bi,bj) |
& )*iceMask(i,j,bi,bj) |
369 |
ENDDO |
ENDDO |
370 |
ENDDO |
ENDDO |
|
#endif |
|
371 |
|
|
372 |
IF ( thSIceAdvScheme.GT.0 ) THEN |
IF ( thSIceAdvScheme.GT.0 ) THEN |
373 |
C-- note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux |
C-- note: those fluxes should to be added directly to Qnet, EmPmR & saltFlux |