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