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" |
38 |
#include "THSICE_TAVE.h" |
#include "THSICE_TAVE.h" |
|
#include "THSICE_2DYN.h" |
|
39 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
40 |
# include "tamc.h" |
# include "tamc.h" |
41 |
# include "tamc_keys.h" |
# include "tamc_keys.h" |
126 |
DO j = 1-OLy, sNy+OLy |
DO j = 1-OLy, sNy+OLy |
127 |
DO i = 1-OLx, sNx+OLx |
DO i = 1-OLx, sNx+OLx |
128 |
isIceFree(i,j) = .FALSE. |
isIceFree(i,j) = .FALSE. |
129 |
|
#ifdef ALLOW_ATM2D |
130 |
|
sFluxFromIce(i,j) = 0. _d 0 |
131 |
|
#else |
132 |
saltFlux(i,j,bi,bj) = 0. _d 0 |
saltFlux(i,j,bi,bj) = 0. _d 0 |
133 |
|
#endif |
134 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
135 |
iceFrac(i,j) = 0. |
iceFrac(i,j) = 0. |
136 |
#endif |
#endif |
167 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
168 |
IF ( useDiagnostics ) THEN |
IF ( useDiagnostics ) THEN |
169 |
tmpFac = 1. _d 0 |
tmpFac = 1. _d 0 |
170 |
|
CALL DIAGNOSTICS_FILL(iceMask,'SI_FrcFx',0,1,1,bi,bj,myThid) |
171 |
CALL DIAGNOSTICS_FRACT_FILL( |
CALL DIAGNOSTICS_FRACT_FILL( |
172 |
I snowPrc, iceMask,tmpFac,1,'SIsnwPrc', |
I snowPrc, iceMask,tmpFac,1,'SIsnwPrc', |
173 |
I 0,1,1,bi,bj,myThid) |
I 0,1,1,bi,bj,myThid) |
260 |
#endif |
#endif |
261 |
icFrac = iceMask(i,j,bi,bj) |
icFrac = iceMask(i,j,bi,bj) |
262 |
opFrac= 1. _d 0-icFrac |
opFrac= 1. _d 0-icFrac |
263 |
|
#ifdef ALLOW_ATM2D |
264 |
|
pass_qnet(i,j) = pass_qnet(i,j) - icFrac*flx2oc(i,j) |
265 |
|
pass_evap(i,j) = pass_evap(i,j) - icFrac*frw2oc(i,j)/rhofw |
266 |
|
sFluxFromIce(i,j) = -icFrac*fsalt(i,j) |
267 |
|
#else |
268 |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
icFlxAtm(i,j,bi,bj) = icFrac*icFlxAtm(i,j,bi,bj) |
269 |
& - opFrac*Qnet(i,j,bi,bj) |
& - opFrac*Qnet(i,j,bi,bj) |
270 |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
icFrwAtm(i,j,bi,bj) = icFrac*icFrwAtm(i,j,bi,bj) |
273 |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw |
EmPmR(i,j,bi,bj)= -icFrac*frw2oc(i,j)/rhofw |
274 |
& + opFrac*EmPmR(i,j,bi,bj) |
& + opFrac*EmPmR(i,j,bi,bj) |
275 |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
saltFlux(i,j,bi,bj) = -icFrac*fsalt(i,j) |
276 |
|
#endif |
277 |
|
|
278 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
279 |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
316 |
DO i = iMin, iMax |
DO i = iMin, iMax |
317 |
IF (frzmltMxL(i,j).GT.0. _d 0) THEN |
IF (frzmltMxL(i,j).GT.0. _d 0) THEN |
318 |
C-- Net fluxes : |
C-- Net fluxes : |
319 |
|
#ifdef ALLOW_ATM2D |
320 |
|
pass_qnet(i,j) = pass_qnet(i,j) - flx2oc(i,j) |
321 |
|
pass_evap(i,j) = pass_evap(i,j) - frw2oc(i,j)/rhofw |
322 |
|
sFluxFromIce(i,j)= sFluxFromIce(i,j) - fsalt(i,j) |
323 |
|
#else |
324 |
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) |
325 |
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 |
326 |
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) |
327 |
|
#endif |
328 |
|
|
329 |
#ifdef ALLOW_DBUG_THSICE |
#ifdef ALLOW_DBUG_THSICE |
330 |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
IF (dBug(i,j,bi,bj)) WRITE(6,1010) |
355 |
ENDDO |
ENDDO |
356 |
ENDDO |
ENDDO |
357 |
|
|
|
#ifdef ATMOSPHERIC_LOADING |
|
358 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
359 |
CADJ STORE snowHeight(:,:,bi,bj) = |
CADJ STORE snowHeight(:,:,bi,bj) = |
360 |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
CADJ & comlev1_bibj, key=iicekey, byte=isbyte |
367 |
& )*iceMask(i,j,bi,bj) |
& )*iceMask(i,j,bi,bj) |
368 |
ENDDO |
ENDDO |
369 |
ENDDO |
ENDDO |
|
#endif |
|
370 |
|
|
371 |
IF ( thSIceAdvScheme.GT.0 ) THEN |
IF ( thSIceAdvScheme.GT.0 ) THEN |
372 |
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 |