File indexing completed on 2023-08-04 05:10:42 UTC
view on githubraw file Latest commit 45315406 on 2023-08-03 16:50:12 UTC
0c32bd3cb0 Mart*0001 #include "SEAICE_OPTIONS.h"
772b2ed80e Gael*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
0c32bd3cb0 Mart*0005
0006
0007
0008
0009 SUBROUTINE SEAICE_CALC_ICE_STRENGTH(
0010 I bi, bj, myTime, myIter, myThid )
0011
0012
0013
0014
0015
73c2e960d7 Jean*0016
0c32bd3cb0 Mart*0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 IMPLICIT NONE
0027
0028 #include "SIZE.h"
0029 #include "EEPARAMS.h"
0030 #include "PARAMS.h"
0031 #include "GRID.h"
0032 #include "SEAICE_SIZE.h"
0033 #include "SEAICE_PARAMS.h"
0034 #include "SEAICE.h"
0035
0036
0037
0038
0039
0040
0041
0042 INTEGER bi,bj
73c2e960d7 Jean*0043 _RL myTime
0c32bd3cb0 Mart*0044 INTEGER myIter
0045 INTEGER myThid
73c2e960d7 Jean*0046
353a8877c7 Mart*0047
45315406aa Mart*0048 #if ( defined SEAICE_CGRID || defined SEAICE_BGRID_DYNAMICS )
353a8877c7 Mart*0049
0050
0051
0052
0053
73c2e960d7 Jean*0054 INTEGER i, j
353a8877c7 Mart*0055 INTEGER iMin, iMax, jMin, jMax
0056 _RL tmpscal1, tmpscal2
0c32bd3cb0 Mart*0057 #ifdef SEAICE_ITD
0058
0059
0060
0061
0062
0063
0064
0065
73c2e960d7 Jean*0066 INTEGER k
0c32bd3cb0 Mart*0067 _RL ridgingModeNorm (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0068 _RL partFunc (1-OLx:sNx+OLx,1-OLy:sNy+OLy,0:nITD)
0069 _RL hrMin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0070 _RL hrMax (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0071 _RL hrExp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0072 _RL ridgeRatio (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
73c2e960d7 Jean*0073 _RL hActual (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0c32bd3cb0 Mart*0074 #endif /* SEAICE_ITD */
5c768f1941 Mart*0075 #ifdef SEAICE_CGRID
0076
e4120ef5ff Jean*0077
5c768f1941 Mart*0078 #endif /* SEAICE_CGRID */
0c32bd3cb0 Mart*0079
0080
0081
73c2e960d7 Jean*0082 iMin=1-OLx
0083 iMax=sNx+OLx
0084 jMin=1-OLy
0085 jMax=sNy+OLy
0c32bd3cb0 Mart*0086
0087 #ifdef SEAICE_ITD
f3136e1434 Mart*0088
0089
0090
0091 DO j=jMin,jMax
0092 DO i=iMin,iMax
0093 opnWtrFrac(i,j,bi,bj) = 1. _d 0 - AREA(i,j,bi,bj)
0094 ENDDO
0095 ENDDO
0096
0c32bd3cb0 Mart*0097 IF ( useHibler79IceStrength ) THEN
0098 #else
0099 IF ( .TRUE. ) THEN
0100 #endif /* SEAICE_ITD */
0101 DO j=jMin,jMax
0102 DO i=iMin,iMax
0103
0104 IF ( (HEFF(i,j,bi,bj).LE.SEAICEpresH0).AND.
0105 & (SEAICEpresPow0.NE.1) ) THEN
0106 tmpscal1=MAX(HEFF(i,j,bi,bj)/SEAICEpresH0,ZERO)
0107 tmpscal2=SEAICEpresH0*(tmpscal1**SEAICEpresPow0)
0108 ELSEIF ( (HEFF(i,j,bi,bj).GT.SEAICEpresH0).AND.
0109 & (SEAICEpresPow1.NE.1) ) THEN
0110 tmpscal1=MAX(HEFF(i,j,bi,bj)/SEAICEpresH0,ZERO)
0111 tmpscal2=SEAICEpresH0*(tmpscal1**SEAICEpresPow1)
0112 ELSE
73c2e960d7 Jean*0113 tmpscal2=HEFF(i,j,bi,bj)
0c32bd3cb0 Mart*0114 ENDIF
8e32c48b8f Mart*0115 PRESS0 (I,J,bi,bj) = SEAICE_strength*tmpscal2
ba6cfc5714 Mart*0116 & *EXP(-SEAICE_cStar*(SEAICE_area_max-AREA(i,j,bi,bj)))
8e32c48b8f Mart*0117 SEAICE_zMax(I,J,bi,bj) = SEAICE_zetaMaxFac*PRESS0(I,J,bi,bj)
0118 SEAICE_zMin(I,J,bi,bj) = SEAICE_zetaMin
0119 PRESS0 (I,J,bi,bj) = PRESS0(I,J,bi,bj)*HEFFM(I,J,bi,bj)
0c32bd3cb0 Mart*0120 ENDDO
73c2e960d7 Jean*0121 ENDDO
0c32bd3cb0 Mart*0122 #ifdef SEAICE_ITD
0123 ELSE
0124
0125 DO j=jMin,jMax
0126 DO i=iMin,iMax
0127 PRESS0(i,j,bi,bj) = 0. _d 0
0128 ENDDO
0129 ENDDO
0130 CALL SEAICE_PREPARE_RIDGING(
353a8877c7 Mart*0131 O hActual,
0c32bd3cb0 Mart*0132 O hrMin, hrMax, hrExp, ridgeRatio, ridgingModeNorm, partFunc,
0133 I iMin, iMax, jMin, jMax, bi, bj, myTime, myIter, myThid )
0134 IF ( SEAICEredistFunc .EQ. 0 ) THEN
cd7aede93e Mart*0135 tmpscal1 = 1. _d 0 / 3. _d 0
0c32bd3cb0 Mart*0136 DO k = 1, nITD
0137 DO j=jMin,jMax
0138 DO i=iMin,iMax
cd7aede93e Mart*0139
0140
0141
73c2e960d7 Jean*0142 IF ( partFunc(i,j,k) .GT. 0. _d 0 )
0c32bd3cb0 Mart*0143 & PRESS0(i,j,bi,bj) = PRESS0(i,j,bi,bj)
73c2e960d7 Jean*0144 & + partFunc(i,j,k) * ( - hActual(i,j,k)**2
e4120ef5ff Jean*0145 & + ( hrMax(i,j,k)**2 + hrMin(i,j,k)**2
cd7aede93e Mart*0146 & + hrMax(i,j,k)*hrMin(i,j,k) )*tmpscal1
0c32bd3cb0 Mart*0147 & / ridgeRatio(i,j,k) )
0148 ENDDO
0149 ENDDO
0150 ENDDO
0151 ELSEIF ( SEAICEredistFunc .EQ. 1 ) THEN
0152 DO k = 1, nITD
0153 DO j=jMin,jMax
0154 DO i=iMin,iMax
0155 PRESS0(i,j,bi,bj) = PRESS0(i,j,bi,bj)
73c2e960d7 Jean*0156 & + partFunc(i,j,k) * ( - hActual(i,j,k)**2 +
0c32bd3cb0 Mart*0157 & ( hrMin(i,j,k)*hrMin(i,j,k)
0158 & + 2. _d 0 * hrMin(i,j,k)*hrExp(i,j,k)
0159 & + 2. _d 0 * hrExp(i,j,k)*hrExp(i,j,k)
0160 & )/ridgeRatio(i,j,k) )
0161 ENDDO
0162 ENDDO
0163 ENDDO
0164 ENDIF
73c2e960d7 Jean*0165
1d045ed8ea Mart*0166 tmpscal1 = SEAICE_cf*0.5*gravity*(rhoConst-SEAICE_rhoIce)
0167 & * SEAICE_rhoIce/rhoConst
0c32bd3cb0 Mart*0168 DO j=jMin,jMax
0169 DO i=iMin,iMax
8e32c48b8f Mart*0170 PRESS0(i,j,bi,bj) = PRESS0(i,j,bi,bj)/ridgingModeNorm(i,j)
0c32bd3cb0 Mart*0171 & *tmpscal1
8e32c48b8f Mart*0172 SEAICE_zMax(I,J,bi,bj) = SEAICE_zetaMaxFac*PRESS0(I,J,bi,bj)
0173 SEAICE_zMin(I,J,bi,bj) = SEAICE_zetaMin
0174 PRESS0 (I,J,bi,bj) = PRESS0(I,J,bi,bj)*HEFFM(I,J,bi,bj)
0c32bd3cb0 Mart*0175 ENDDO
0176 ENDDO
0177 #endif /* SEAICE_ITD */
0178 ENDIF
0179
2f5e8addfd Mart*0180
0181
e4120ef5ff Jean*0182
2f5e8addfd Mart*0183
0184
0185
e4120ef5ff Jean*0186
2f5e8addfd Mart*0187
0188
0189
0190
0191
0192
0193
0194
0195
45315406aa Mart*0196 #endif /* SEAICE_CGRID or SEAICE_BGRID_DYNAMICS */
5c768f1941 Mart*0197
0c32bd3cb0 Mart*0198 RETURN
0199 END