|
#define SEAICE_GROWTH_LEGACY |
|
|
#define SEAICE_DO_OPEN_WATER_GROWTH |
|
|
#define SEAICE_OCN_MELT_ACT_ON_AREA |
|
1 |
C $Header$ |
C $Header$ |
2 |
C $Name$ |
C $Name$ |
3 |
|
|
4 |
|
#define SEAICE_GROWTH_LEGACY |
5 |
|
#define SEAICE_DO_OPEN_WATER_GROWTH |
6 |
|
#define SEAICE_OCN_MELT_ACT_ON_AREA |
7 |
#include "SEAICE_OPTIONS.h" |
#include "SEAICE_OPTIONS.h" |
8 |
|
|
9 |
CBOP |
CBOP |
51 |
C !LOCAL VARIABLES: |
C !LOCAL VARIABLES: |
52 |
C === Local variables === |
C === Local variables === |
53 |
C |
C |
54 |
C unit/sign convention: |
C unit/sign convention: |
55 |
C Within the thermodynamic computation all stocks, except HSNOW, |
C Within the thermodynamic computation all stocks, except HSNOW, |
56 |
C are in 'effective ice meters' units, and >0 implies more ice. |
C are in 'effective ice meters' units, and >0 implies more ice. |
57 |
C This holds for stocks due to ocean and atmosphere heat, |
C This holds for stocks due to ocean and atmosphere heat, |
58 |
C at the outset of 'PART 2: determine heat fluxes/stocks' |
C at the outset of 'PART 2: determine heat fluxes/stocks' |
59 |
C and until 'PART 7: determine ocean model forcing' |
C and until 'PART 7: determine ocean model forcing' |
60 |
C This strategy minimizes the need for multiplications/divisions |
C This strategy minimizes the need for multiplications/divisions |
61 |
C by ice fraction, heat capacity, etc. The only conversions that |
C by ice fraction, heat capacity, etc. The only conversions that |
62 |
C occurs are for the HSNOW (in effective snow meters) and |
C occurs are for the HSNOW (in effective snow meters) and |
63 |
C PRECIP (fresh water m/s). |
C PRECIP (fresh water m/s). |
64 |
c |
c |
65 |
c HEFF is effective Hice thickness (m3/m2) |
c HEFF is effective Hice thickness (m3/m2) |
66 |
c HSNOW is Heffective snow thickness (m3/m2) |
c HSNOW is Heffective snow thickness (m3/m2) |
68 |
c AREA is the seaice cover fraction (0<=AREA<=1) |
c AREA is the seaice cover fraction (0<=AREA<=1) |
69 |
c Q denotes heat stocks -- converted to ice stocks (m3/m2) early on |
c Q denotes heat stocks -- converted to ice stocks (m3/m2) early on |
70 |
c |
c |
71 |
c For all other stocks/increments, such as d_HEFFbyATMonOCN |
c For all other stocks/increments, such as d_HEFFbyATMonOCN |
72 |
c or a_QbyATM_cover, the naming convention is as follows: |
c or a_QbyATM_cover, the naming convention is as follows: |
73 |
c The prefix 'a_' means available, the prefix 'd_' means delta |
c The prefix 'a_' means available, the prefix 'd_' means delta |
74 |
c (i.e. increment), and the prefix 'r_' means residual. |
c (i.e. increment), and the prefix 'r_' means residual. |
75 |
c The suffix '_cover' denotes a value for the ice covered fraction |
c The suffix '_cover' denotes a value for the ice covered fraction |
76 |
c of the grid cell, whereas '_cover' is for the open water fraction. |
c of the grid cell, whereas '_cover' is for the open water fraction. |
77 |
c The main part of the name states what ice/snow stock is concerned |
c The main part of the name states what ice/snow stock is concerned |
78 |
c (e.g. QbyATM or HEFF), and how it is affected (e.g. d_HEFFbyATMonOCN |
c (e.g. QbyATM or HEFF), and how it is affected (e.g. d_HEFFbyATMonOCN |
79 |
c is the increment of HEFF due to the ATMosphere extracting heat from the |
c is the increment of HEFF due to the ATMosphere extracting heat from the |
80 |
c OCeaN surface, or providing heat to the OCeaN surface). |
c OCeaN surface, or providing heat to the OCeaN surface). |
81 |
|
|
82 |
CEOP |
CEOP |
88 |
_RL TBC, ICE2SNOW |
_RL TBC, ICE2SNOW |
89 |
_RL QI, QS, Lfusion |
_RL QI, QS, Lfusion |
90 |
|
|
91 |
C a_QbyATM_cover :: available heat (in W/m^2) due to the interaction of |
C a_QbyATM_cover :: available heat (in W/m^2) due to the interaction of |
92 |
C the atmosphere and the ocean surface - for ice covered water |
C the atmosphere and the ocean surface - for ice covered water |
93 |
C a_QbyATM_open :: same but for open water |
C a_QbyATM_open :: same but for open water |
94 |
C r_QbyATM_cover :: residual of a_QbyATM_cover after freezing/melting processes |
C r_QbyATM_cover :: residual of a_QbyATM_cover after freezing/melting processes |
101 |
C a_QSWbyATM_cover - short wave heat flux under ice in W/m^2 |
C a_QSWbyATM_cover - short wave heat flux under ice in W/m^2 |
102 |
_RL a_QSWbyATM_open (1:sNx,1:sNy) |
_RL a_QSWbyATM_open (1:sNx,1:sNy) |
103 |
_RL a_QSWbyATM_cover (1:sNx,1:sNy) |
_RL a_QSWbyATM_cover (1:sNx,1:sNy) |
104 |
C a_QbyOCN :: available heat (in in W/m^2) due to the |
C a_QbyOCN :: available heat (in in W/m^2) due to the |
105 |
C interaction of the ice pack and the ocean surface |
C interaction of the ice pack and the ocean surface |
106 |
C r_QbyOCN :: residual of a_QbyOCN after freezing/melting |
C r_QbyOCN :: residual of a_QbyOCN after freezing/melting |
107 |
C processes have been accounted for |
C processes have been accounted for |
108 |
_RL a_QbyOCN (1:sNx,1:sNy) |
_RL a_QbyOCN (1:sNx,1:sNy) |
109 |
_RL r_QbyOCN (1:sNx,1:sNy) |
_RL r_QbyOCN (1:sNx,1:sNy) |
154 |
#ifdef ALLOW_SEAICE_FLOODING |
#ifdef ALLOW_SEAICE_FLOODING |
155 |
_RL hDraft |
_RL hDraft |
156 |
#endif /* ALLOW_SEAICE_FLOODING */ |
#endif /* ALLOW_SEAICE_FLOODING */ |
157 |
|
|
158 |
#ifdef SEAICE_SALINITY |
#ifdef SEAICE_SALINITY |
159 |
_RL saltFluxAdjust (1:sNx,1:sNy) |
_RL saltFluxAdjust (1:sNx,1:sNy) |
160 |
#endif |
#endif |
197 |
hiceMin=0.05 _d +00 |
hiceMin=0.05 _d +00 |
198 |
c note: areaMax slightly less than 1 can be set to specify that there allways are some leads |
c note: areaMax slightly less than 1 can be set to specify that there allways are some leads |
199 |
areaMax=1. _d 0 |
areaMax=1. _d 0 |
200 |
|
|
201 |
C FREEZING TEMP. OF SEA WATER (deg C) |
C FREEZING TEMP. OF SEA WATER (deg C) |
202 |
TBC = SEAICE_freeze |
TBC = SEAICE_freeze |
203 |
|
|
352 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
353 |
DO J=1,sNy |
DO J=1,sNy |
354 |
DO I=1,sNx |
DO I=1,sNx |
355 |
IF ((HEFF(i,j,bi,bj).GT.0).OR.(HSNOW(i,j,bi,bj).GT.0)) |
IF ((HEFF(i,j,bi,bj).GT.0).OR.(HSNOW(i,j,bi,bj).GT.0)) |
356 |
& AREA(I,J,bi,bj)=MAX(AREA(I,J,bi,bj),areaMin) |
& AREA(I,J,bi,bj)=MAX(AREA(I,J,bi,bj),areaMin) |
357 |
ENDDO |
ENDDO |
358 |
ENDDO |
ENDDO |
400 |
|
|
401 |
c 5) treat sea ice age pathological cases |
c 5) treat sea ice age pathological cases |
402 |
c ... |
c ... |
403 |
|
|
404 |
#else |
#else |
405 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
406 |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
CADJ STORE hsnow(:,:,bi,bj) = comlev1_bibj, |
536 |
DO J=1,sNy |
DO J=1,sNy |
537 |
DO I=1,sNx |
DO I=1,sNx |
538 |
C average over categories |
C average over categories |
539 |
a_QbyATM_cover (I,J) = |
a_QbyATM_cover (I,J) = |
540 |
& a_QbyATM_cover(I,J) + a_QbyATMmult_cover(I,J)/MULTDIM |
& a_QbyATM_cover(I,J) + a_QbyATMmult_cover(I,J)/MULTDIM |
541 |
a_QSWbyATM_cover (I,J) = |
a_QSWbyATM_cover (I,J) = |
542 |
& a_QSWbyATM_cover(I,J) + a_QSWbyATMmult_cover(I,J)/MULTDIM |
& a_QSWbyATM_cover(I,J) + a_QSWbyATMmult_cover(I,J)/MULTDIM |
543 |
TICES(I,J,IT,bi,bj) = TICE(I,J,bi,bj) |
TICES(I,J,IT,bi,bj) = TICE(I,J,bi,bj) |
544 |
ENDDO |
ENDDO |
571 |
c switch heat fluxes from W/m2 to 'effective' ice meters |
c switch heat fluxes from W/m2 to 'effective' ice meters |
572 |
DO J=1,sNy |
DO J=1,sNy |
573 |
DO I=1,sNx |
DO I=1,sNx |
574 |
a_QbyATM_cover(I,J) = a_QbyATM_cover(I,J) |
a_QbyATM_cover(I,J) = a_QbyATM_cover(I,J) |
575 |
& * convertQ2HI * AREApreTH(I,J) |
& * convertQ2HI * AREApreTH(I,J) |
576 |
a_QSWbyATM_cover(I,J) = a_QSWbyATM_cover(I,J) |
a_QSWbyATM_cover(I,J) = a_QSWbyATM_cover(I,J) |
577 |
& * convertQ2HI * AREApreTH(I,J) |
& * convertQ2HI * AREApreTH(I,J) |
578 |
a_QbyATM_open(I,J) = a_QbyATM_open(I,J) |
a_QbyATM_open(I,J) = a_QbyATM_open(I,J) |
579 |
& * convertQ2HI * ( ONE - AREApreTH(I,J) ) |
& * convertQ2HI * ( ONE - AREApreTH(I,J) ) |
580 |
a_QSWbyATM_open(I,J) = a_QSWbyATM_open(I,J) |
a_QSWbyATM_open(I,J) = a_QSWbyATM_open(I,J) |
581 |
& * convertQ2HI * ( ONE - AREApreTH(I,J) ) |
& * convertQ2HI * ( ONE - AREApreTH(I,J) ) |
582 |
c and initialize r_QbyATM_cover/r_QbyATM_open |
c and initialize r_QbyATM_cover/r_QbyATM_open |
583 |
r_QbyATM_cover(I,J)=a_QbyATM_cover(I,J) |
r_QbyATM_cover(I,J)=a_QbyATM_cover(I,J) |
586 |
ENDDO |
ENDDO |
587 |
|
|
588 |
|
|
589 |
C determine available heat due to the ice pack tying the |
C determine available heat due to the ice pack tying the |
590 |
C underlying surface water temperature to freezing point |
C underlying surface water temperature to freezing point |
591 |
C ====================================================== |
C ====================================================== |
592 |
|
|
667 |
IF ( a_QbyATM_cover(I,J).LT. 0. _d 0 ) THEN |
IF ( a_QbyATM_cover(I,J).LT. 0. _d 0 ) THEN |
668 |
tmpscal1= |
tmpscal1= |
669 |
& MAX(r_QbyATM_cover(I,J)*ICE2SNOW, -HSNOW(I,J,bi,bj)) |
& MAX(r_QbyATM_cover(I,J)*ICE2SNOW, -HSNOW(I,J,bi,bj)) |
670 |
ELSE |
ELSE |
671 |
tmpscal1=0. _d 0 |
tmpscal1=0. _d 0 |
672 |
ENDIF |
ENDIF |
673 |
d_HSNWbyATMonSNW(I,J)= tmpscal1 |
d_HSNWbyATMonSNW(I,J)= tmpscal1 |
674 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + tmpscal1 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + tmpscal1 |
675 |
r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J) - tmpscal1/ICE2SNOW |
r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J) - tmpscal1/ICE2SNOW |
676 |
ENDDO |
ENDDO |
677 |
ENDDO |
ENDDO |
695 |
d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal2 |
d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal2 |
696 |
r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J)-tmpscal2 |
r_QbyATM_cover(I,J)=r_QbyATM_cover(I,J)-tmpscal2 |
697 |
c The following line is what I referred to as the 'vintage bug' |
c The following line is what I referred to as the 'vintage bug' |
698 |
c If I mistook a desirable feature for a bug, then we will un-comment |
c If I mistook a desirable feature for a bug, then we will un-comment |
699 |
c this line. Otherwise we may want to delete the comment at some point. |
c this line. Otherwise we may want to delete the comment at some point. |
700 |
c & *AREApreTH(I,J) |
c & *AREApreTH(I,J) |
701 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal2 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal2 |
703 |
ENDDO |
ENDDO |
704 |
|
|
705 |
|
|
706 |
C attribute precip to fresh water or snow stock, |
C attribute precip to fresh water or snow stock, |
707 |
C depending on atmospheric conditions. |
C depending on atmospheric conditions. |
708 |
C ================================================= |
C ================================================= |
709 |
#ifdef ALLOW_ATM_TEMP |
#ifdef ALLOW_ATM_TEMP |
717 |
d_HFRWbyRAIN(I,J)=0. _d 0 |
d_HFRWbyRAIN(I,J)=0. _d 0 |
718 |
d_HSNWbyRAIN(I,J)=convertPRECIP2HI*ICE2SNOW* |
d_HSNWbyRAIN(I,J)=convertPRECIP2HI*ICE2SNOW* |
719 |
& PRECIP(I,J,bi,bj)*AREApreTH(I,J) |
& PRECIP(I,J,bi,bj)*AREApreTH(I,J) |
720 |
ELSE |
ELSE |
721 |
c add precip to the fresh water bucket |
c add precip to the fresh water bucket |
722 |
d_HFRWbyRAIN(I,J)=-convertPRECIP2HI* |
d_HFRWbyRAIN(I,J)=-convertPRECIP2HI* |
723 |
& PRECIP(I,J,bi,bj)*AREApreTH(I,J) |
& PRECIP(I,J,bi,bj)*AREApreTH(I,J) |
724 |
d_HSNWbyRAIN(I,J)=0. _d 0 |
d_HSNWbyRAIN(I,J)=0. _d 0 |
725 |
ENDIF |
ENDIF |
726 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + d_HSNWbyRAIN(I,J) |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj) + d_HSNWbyRAIN(I,J) |
727 |
ENDDO |
ENDDO |
728 |
ENDDO |
ENDDO |
729 |
cgf note: this does not affect air-sea heat flux, |
cgf note: this does not affect air-sea heat flux, |
730 |
cgf since the implied air heat gain to turn |
cgf since the implied air heat gain to turn |
731 |
cgf rain to snow is not a surface process. |
cgf rain to snow is not a surface process. |
732 |
#endif /* ALLOW_ATM_TEMP */ |
#endif /* ALLOW_ATM_TEMP */ |
733 |
|
|
770 |
if ( (r_QbyATM_open(I,J).GT.0. _d 0).AND. |
if ( (r_QbyATM_open(I,J).GT.0. _d 0).AND. |
771 |
& (AREApreTH(I,J).GT.0. _d 0) ) then |
& (AREApreTH(I,J).GT.0. _d 0) ) then |
772 |
tmpscal1=r_QbyATM_open(I,J)+r_QbyOCN(i,j) |
tmpscal1=r_QbyATM_open(I,J)+r_QbyOCN(i,j) |
773 |
c at this point r_QbyOCN(i,j)<=0 and represents the heat |
c at this point r_QbyOCN(i,j)<=0 and represents the heat |
774 |
c that is still needed to get to the first layer to freezing point |
c that is still needed to get to the first layer to freezing point |
775 |
tmpscal2=SWFRACB*(a_QSWbyATM_cover(I,J) |
tmpscal2=SWFRACB*(a_QSWbyATM_cover(I,J) |
776 |
& +a_QSWbyATM_open(I,J)) |
& +a_QSWbyATM_open(I,J)) |
777 |
c SWFRACB*tmpscal2<=0 is the heat (out of qnet) that is not |
c SWFRACB*tmpscal2<=0 is the heat (out of qnet) that is not |
778 |
c going to the first layer, which favors its freezing |
c going to the first layer, which favors its freezing |
779 |
tmpscal3=MAX(0. _d 0, tmpscal1-tmpscal2) |
tmpscal3=MAX(0. _d 0, tmpscal1-tmpscal2) |
780 |
else |
else |
782 |
endif |
endif |
783 |
d_HEFFbyATMonOCN_open(I,J)=tmpscal3 |
d_HEFFbyATMonOCN_open(I,J)=tmpscal3 |
784 |
c The distinct d_HEFFbyATMonOCN_open array is only needed for d_AREA computation. |
c The distinct d_HEFFbyATMonOCN_open array is only needed for d_AREA computation. |
785 |
c For the rest it is treated as another contribution to d_HEFFbyATMonOCN. |
c For the rest it is treated as another contribution to d_HEFFbyATMonOCN. |
786 |
d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal3 |
d_HEFFbyATMonOCN(I,J)=d_HEFFbyATMonOCN(I,J)+tmpscal3 |
787 |
r_QbyATM_open(I,J)=r_QbyATM_open(I,J)-tmpscal3 |
r_QbyATM_open(I,J)=r_QbyATM_open(I,J)-tmpscal3 |
788 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal3 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj) + tmpscal3 |
807 |
d_HEFFbyFLOODING(I,J)=tmpscal1 |
d_HEFFbyFLOODING(I,J)=tmpscal1 |
808 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J) |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J) |
809 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)- |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)- |
810 |
& d_HEFFbyFLOODING(I,J)*ICE2SNOW |
& d_HEFFbyFLOODING(I,J)*ICE2SNOW |
811 |
ENDDO |
ENDDO |
812 |
ENDDO |
ENDDO |
813 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
860 |
#ifndef SEAICE_GROWTH_LEGACY |
#ifndef SEAICE_GROWTH_LEGACY |
861 |
c compute ice melt due to ATM (and OCN) heat stocks |
c compute ice melt due to ATM (and OCN) heat stocks |
862 |
c |
c |
863 |
# ifdef SEAICE_OCN_MELT_ACT_ON_AREA |
# ifdef SEAICE_OCN_MELT_ACT_ON_AREA |
864 |
c ice cover reduction by joint OCN+ATM melt |
c ice cover reduction by joint OCN+ATM melt |
865 |
tmpscal3 = MIN( 0. _d 0 , |
tmpscal3 = MIN( 0. _d 0 , |
866 |
& d_HEFFbyATMonOCN(I,J)+d_HEFFbyOCNonICE(I,J) ) |
& d_HEFFbyATMonOCN(I,J)+d_HEFFbyOCNonICE(I,J) ) |
867 |
# else |
# else |
868 |
c ice cover reduction by ATM melt only -- as in legacy code |
c ice cover reduction by ATM melt only -- as in legacy code |
869 |
tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN(I,J) ) |
tmpscal3 = MIN( 0. _d 0 , d_HEFFbyATMonOCN(I,J) ) |
870 |
# endif |
# endif |
871 |
C gain of new ice over open water |
C gain of new ice over open water |
872 |
c |
c |
873 |
# ifdef SEAICE_DO_OPEN_WATER_GROWTH |
# ifdef SEAICE_DO_OPEN_WATER_GROWTH |
914 |
c apply tendency |
c apply tendency |
915 |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
IF ( (HEFF(i,j,bi,bj).GT.0. _d 0).OR. |
916 |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
& (HSNOW(i,j,bi,bj).GT.0. _d 0) ) THEN |
917 |
AREA(I,J,bi,bj)=max(0. _d 0 , min( 1. _d 0, |
AREA(I,J,bi,bj)=max(0. _d 0 , min( 1. _d 0, |
918 |
& AREA(I,J,bi,bj)+d_AREAbyATM(I,J) ) ) |
& AREA(I,J,bi,bj)+d_AREAbyATM(I,J) ) ) |
919 |
ELSE |
ELSE |
920 |
AREA(I,J,bi,bj)=0. _d 0 |
AREA(I,J,bi,bj)=0. _d 0 |
1029 |
|
|
1030 |
#ifdef SEAICE_GROWTH_LEGACY |
#ifdef SEAICE_GROWTH_LEGACY |
1031 |
|
|
1032 |
C treat values of ice cover fraction oustide |
C treat values of ice cover fraction oustide |
1033 |
C the [0 1] range, and other such issues. |
C the [0 1] range, and other such issues. |
1034 |
C =========================================== |
C =========================================== |
1035 |
|
|
1107 |
d_HEFFbyFLOODING(I,J)=tmpscal1 |
d_HEFFbyFLOODING(I,J)=tmpscal1 |
1108 |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J) |
HEFF(I,J,bi,bj) = HEFF(I,J,bi,bj)+d_HEFFbyFLOODING(I,J) |
1109 |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)- |
HSNOW(I,J,bi,bj) = HSNOW(I,J,bi,bj)- |
1110 |
& d_HEFFbyFLOODING(I,J)*ICE2SNOW |
& d_HEFFbyFLOODING(I,J)*ICE2SNOW |
1111 |
ENDDO |
ENDDO |
1112 |
ENDDO |
ENDDO |
1113 |
#ifdef ALLOW_DIAGNOSTICS |
#ifdef ALLOW_DIAGNOSTICS |
1167 |
tmpscal1=IceAge(i,j,bi,bj)/AREApreTH(i,j) |
tmpscal1=IceAge(i,j,bi,bj)/AREApreTH(i,j) |
1168 |
ELSE |
ELSE |
1169 |
tmpscal1=0. _d 0 |
tmpscal1=0. _d 0 |
1170 |
ENDIF |
ENDIF |
1171 |
IF ( (HEFFpreTH(i,j).LT.HEFF(i,j,bi,bj)).AND. |
IF ( (HEFFpreTH(i,j).LT.HEFF(i,j,bi,bj)).AND. |
1172 |
& (AREA(i,j,bi,bj).GT.0.15) ) THEN |
& (AREA(i,j,bi,bj).GT.0.15) ) THEN |
1173 |
tmpscal2=tmpscal1*HEFFpreTH(i,j)/ |
tmpscal2=tmpscal1*HEFFpreTH(i,j)/ |
1192 |
|
|
1193 |
|
|
1194 |
|
|
1195 |
C compute net heat flux leaving/entering the ocean, |
C compute net heat flux leaving/entering the ocean, |
1196 |
C accounting for the part used in melt/freeze processes |
C accounting for the part used in melt/freeze processes |
1197 |
C ===================================================== |
C ===================================================== |
1198 |
|
|
1199 |
DO J=1,sNy |
DO J=1,sNy |
1200 |
DO I=1,sNx |
DO I=1,sNx |
1201 |
QNET(I,J,bi,bj) = r_QbyATM_cover(I,J) + r_QbyATM_open(I,J) |
QNET(I,J,bi,bj) = r_QbyATM_cover(I,J) + r_QbyATM_open(I,J) |
1202 |
& - ( d_HEFFbyOCNonICE(I,J) + |
& - ( d_HEFFbyOCNonICE(I,J) + |
1203 |
& d_HSNWbyOCNonSNW(I,J)/ICE2SNOW + |
& d_HSNWbyOCNonSNW(I,J)/ICE2SNOW + |
1204 |
& d_HEFFbyNEG(I,J) + |
& d_HEFFbyNEG(I,J) + |
1205 |
& d_HSNWbyNEG(I,J)/ICE2SNOW ) |
& d_HSNWbyNEG(I,J)/ICE2SNOW ) |
1206 |
& * maskC(I,J,kSurface,bi,bj) |
& * maskC(I,J,kSurface,bi,bj) |
1207 |
QSW(I,J,bi,bj) = a_QSWbyATM_cover(I,J) + a_QSWbyATM_open(I,J) |
QSW(I,J,bi,bj) = a_QSWbyATM_cover(I,J) + a_QSWbyATM_open(I,J) |
1238 |
QSW(I,J,bi,bj) = QSW(I,J,bi,bj)*convertHI2Q |
QSW(I,J,bi,bj) = QSW(I,J,bi,bj)*convertHI2Q |
1239 |
ENDDO |
ENDDO |
1240 |
ENDDO |
ENDDO |
1241 |
|
|
1242 |
#ifdef SEAICE_DEBUG |
#ifdef SEAICE_DEBUG |
1243 |
CALL PLOT_FIELD_XYRL( QSW,'Current QSW ', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( QSW,'Current QSW ', myIter, myThid ) |
1244 |
CALL PLOT_FIELD_XYRL( QNET,'Current QNET ', myIter, myThid ) |
CALL PLOT_FIELD_XYRL( QNET,'Current QNET ', myIter, myThid ) |
1246 |
#endif /* SEAICE_DEBUG */ |
#endif /* SEAICE_DEBUG */ |
1247 |
|
|
1248 |
|
|
1249 |
C compute net fresh water flux leaving/entering |
C compute net fresh water flux leaving/entering |
1250 |
C the ocean, accounting for fresh/salt water stocks. |
C the ocean, accounting for fresh/salt water stocks. |
1251 |
C ================================================== |
C ================================================== |
1252 |
|
|
1258 |
& +d_HSNWbyOCNonSNW(I,J)/ICE2SNOW |
& +d_HSNWbyOCNonSNW(I,J)/ICE2SNOW |
1259 |
& +d_HEFFbyOCNonICE(I,J) |
& +d_HEFFbyOCNonICE(I,J) |
1260 |
& +d_HEFFbyATMonOCN(I,J) |
& +d_HEFFbyATMonOCN(I,J) |
1261 |
& +d_HEFFbyNEG(I,J) |
& +d_HEFFbyNEG(I,J) |
1262 |
& +d_HSNWbyNEG(I,J)/ICE2SNOW |
& +d_HSNWbyNEG(I,J)/ICE2SNOW |
1263 |
EmPmR(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
EmPmR(I,J,bi,bj) = maskC(I,J,kSurface,bi,bj)*( |
1264 |
& ( EVAP(I,J,bi,bj)-PRECIP(I,J,bi,bj) ) |
& ( EVAP(I,J,bi,bj)-PRECIP(I,J,bi,bj) ) |