File indexing completed on 2021-06-27 05:11:52 UTC
view on githubraw file Latest commit 4e4ad91a on 2021-06-26 16:30:07 UTC
0c32bd3cb0 Mart*0001 #include "SEAICE_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE SEAICE_PREPARE_RIDGING(
0007 #ifdef SEAICE_ITD
353a8877c7 Mart*0008 O hActual,
0c32bd3cb0 Mart*0009 O hrMin, hrMax, hrExp, ridgeRatio, ridgingModeNorm, partFunc,
0010 #endif /* SEAICE_ITD */
0011 I iMin, iMax, jMin, jMax, bi, bj, myTime, myIter, myThid )
0012
0013
0014
0015
4e4ad91a39 Jean*0016
0c32bd3cb0 Mart*0017
0018
4e4ad91a39 Jean*0019
0c32bd3cb0 Mart*0020
4e4ad91a39 Jean*0021
0c32bd3cb0 Mart*0022
0023
0024
0025
0026
0027 IMPLICIT NONE
0028
0029 #include "SIZE.h"
0030 #include "EEPARAMS.h"
0031 #include "PARAMS.h"
0032 #include "GRID.h"
0033 #include "SEAICE_SIZE.h"
0034 #include "SEAICE_PARAMS.h"
0035 #include "SEAICE.h"
0036
0037
0038
0039
0040
0041
0042
0043
0044 _RL myTime
0045 INTEGER bi,bj
0046 INTEGER myIter
0047 INTEGER myThid
0048 INTEGER iMin, iMax, jMin, jMax
0049 #ifdef SEAICE_ITD
0050
0051
0052
0053
0054
0055
353a8877c7 Mart*0056
0c32bd3cb0 Mart*0057 _RL ridgingModeNorm (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0058 _RL partFunc (1-OLx:sNx+OLx,1-OLy:sNy+OLy,0:nITD)
0059 _RL hrMin (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0060 _RL hrMax (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0061 _RL hrExp (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0062 _RL ridgeRatio (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
4e4ad91a39 Jean*0063 _RL hActual (1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:nITD)
0c32bd3cb0 Mart*0064
0065
0066
0067
0068
0069
0070 INTEGER i, j
0071 INTEGER k
0072
0073
0074 _RL gSum (1-OLx:sNx+OLx,1-OLy:sNy+OLy,-1:nITD)
0075 _RL recip_gStar, recip_aStar, tmp
353a8877c7 Mart*0076
0077 _RL area_reg_sq, hice_reg_sq
0c32bd3cb0 Mart*0078
0079
0080
0081
353a8877c7 Mart*0082
0083 area_reg_sq = SEAICE_area_reg * SEAICE_area_reg
0084 hice_reg_sq = SEAICE_hice_reg * SEAICE_hice_reg
0c32bd3cb0 Mart*0085 DO k=1,nITD
0086 DO j=jMin,jMax
0087 DO i=iMin,iMax
0088 hActual(i,j,k) = 0. _d 0
353a8877c7 Mart*0089
0090
0091
0092 IF ( HEFFITD(i,j,k,bi,bj) .GT. 0. _d 0 ) THEN
4e4ad91a39 Jean*0093
353a8877c7 Mart*0094
0095 tmp = HEFFITD(i,j,k,bi,bj)
e4863bf4ee Mart*0096 & /SQRT( AREAITD(i,j,k,bi,bj)**2 + area_reg_sq )
353a8877c7 Mart*0097 hActual(i,j,k) = SQRT(tmp * tmp + hice_reg_sq)
0c32bd3cb0 Mart*0098 ENDIF
0099 ENDDO
0100 ENDDO
0101 ENDDO
4e4ad91a39 Jean*0102
0c32bd3cb0 Mart*0103
0104
0105
0106 DO j=jMin,jMax
0107 DO i=iMin,iMax
0108 gSum(i,j,-1) = 0. _d 0
0109 gSum(i,j,0) = 0. _d 0
4e4ad91a39 Jean*0110 IF ( opnWtrFrac(i,j,bi,bj) .GT. SEAICE_area_floor )
8d0c6ad10c Mart*0111 & gSum(i,j,0) = opnWtrFrac(i,j,bi,bj)
0c32bd3cb0 Mart*0112 ENDDO
0113 ENDDO
0114 DO k = 1, nITD
0115 DO j=jMin,jMax
0116 DO i=iMin,iMax
0117 gSum(i,j,k) = gSum(i,j,k-1)
0118 IF ( AREAITD(i,j,k,bi,bj) .GT. SEAICE_area_floor )
0119 & gSum(i,j,k) = gSum(i,j,k) + AREAITD(i,j,k,bi,bj)
0120 ENDDO
0121 ENDDO
0122 ENDDO
0123
0124 DO k = 0, nITD
0125 DO j=jMin,jMax
0126 DO i=iMin,iMax
4e4ad91a39 Jean*0127 IF ( gSum(i,j,nITD).NE.0. _d 0 )
0c32bd3cb0 Mart*0128 & gSum(i,j,k) = gSum(i,j,k) / gSum(i,j,nITD)
0129 ENDDO
0130 ENDDO
0131 ENDDO
0132
0133
0134
0135
0136
0137
0138 IF ( SEAICEpartFunc .EQ. 0 ) THEN
0139
0140
0141
0142 recip_gStar = 1. _d 0 / SEAICEgStar
0143 DO k = 0, nITD
0144 DO j=jMin,jMax
0145 DO i=iMin,iMax
0146 partFunc(i,j,k) = 0. _d 0
0147 IF ( gSum(i,j,k) .LT. SEAICEgStar ) THEN
4e4ad91a39 Jean*0148 partFunc(i,j,k) =
0c32bd3cb0 Mart*0149 & (gSum(i,j,k)-gSum(i,j,k-1)) * recip_gStar
0150 & *( 2. _d 0 - (gSum(i,j,k-1)+gSum(i,j,k))*recip_gStar)
4e4ad91a39 Jean*0151 ELSEIF ( gSum(i,j,k-1) .LT. SEAICEgStar
0c32bd3cb0 Mart*0152 & .AND. gSum(i,j,k) .GE. SEAICEgStar ) THEN
4e4ad91a39 Jean*0153 partFunc(i,j,k) =
0c32bd3cb0 Mart*0154 & (SEAICEgStar-gSum(i,j,k-1)) * recip_gStar
0155 & *( 2. _d 0 - (gSum(i,j,k-1)+SEAICEgStar)*recip_gStar)
0156 ENDIF
0157 ENDDO
0158 ENDDO
0159 ENDDO
0160 ELSEIF ( SEAICEpartFunc .EQ. 1 ) THEN
0161
4e4ad91a39 Jean*0162
0163
0c32bd3cb0 Mart*0164
0165 recip_astar = 1. _d 0 / SEAICEaStar
0166 tmp = 1. _d 0 / ( 1. _d 0 - EXP( -recip_astar ) )
0167
0168 k = -1
0169 DO j=jMin,jMax
0170 DO i=iMin,iMax
0171 gSum(i,j,k) = EXP(-gSum(i,j,k)*recip_astar) * tmp
0172 ENDDO
0173 ENDDO
0174 DO k = 0, nITD
0175 DO j=jMin,jMax
0176 DO i=iMin,iMax
0177 gSum(i,j,k) = EXP(-gSum(i,j,k)*recip_astar) * tmp
0178 partFunc(i,j,k) = gSum(i,j,k-1) - gSum(i,j,k)
0179 ENDDO
0180 ENDDO
0181 ENDDO
0182 ELSE
0183 STOP 'Ooops: SEAICEpartFunc > 1 not implemented'
0184 ENDIF
0185
0186
0187
0188
0189
0190
0191 DO k = 1, nITD
0192 DO j=jMin,jMax
0193 DO i=iMin,iMax
0194 hrMin(i,j,k) = 0. _d 0
0195 hrMax(i,j,k) = 0. _d 0
0196 hrExp(i,j,k) = 0. _d 0
0197
0198 ridgeRatio(i,j,k) = 1. _d 0
0199 ENDDO
0200 ENDDO
0201 ENDDO
0202 IF ( SEAICEredistFunc .EQ. 0 ) THEN
0203
0204
0205 DO k = 1, nITD
0206 DO j=jMin,jMax
0207 DO i=iMin,iMax
0208 IF ( hActual(i,j,k) .GT. 0. _d 0 ) THEN
0209
0210 hrMin(i,j,k) = 2. _d 0 * hActual(i,j,k)
0211 hrMax(i,j,k) = 2. _d 0 * SQRT(hActual(i,j,k)*SEAICEhStar)
0212
4e4ad91a39 Jean*0213
0c32bd3cb0 Mart*0214 hrMin(i,j,k) = MIN(hrMin(i,j,k),hActual(i,j,k)+SEAICEmaxRaft)
0215 hrMax(i,j,k) = MAX(hrMax(i,j,k),hrMin(i,j,k)+SEAICE_hice_reg)
0216
0217 ridgeRatio(i,j,k) =
0218 & 0.5 _d 0 * (hrMax(i,j,k)+hrMin(i,j,k))/hActual(i,j,k)
0219 ENDIF
0220 ENDDO
0221 ENDDO
0222 ENDDO
0223 ELSEIF ( SEAICEredistFunc .EQ. 1 ) THEN
0224
0225
0226 DO k = 1, nITD
0227 DO j=jMin,jMax
0228 DO i=iMin,iMax
0229 IF ( hActual(i,j,k) .GT. 0. _d 0 ) THEN
353a8877c7 Mart*0230
0231
0232 tmp = hActual(i,j,k)
0233 hrMin(i,j,k) = MIN(2.D0 * tmp, tmp+SEAICEmaxRaft)
0234 hrExp(i,j,k) = SEAICEmuRidging*SQRT(tmp)
0c32bd3cb0 Mart*0235
353a8877c7 Mart*0236 ridgeRatio(i,j,k)=(hrMin(i,j,k)+hrExp(i,j,k))/tmp
0c32bd3cb0 Mart*0237 ENDIF
0238 ENDDO
0239 ENDDO
0240 ENDDO
0241 ELSE
4e4ad91a39 Jean*0242 STOP 'Ooops: SEAICEredistFunc > 1 not implemented'
0c32bd3cb0 Mart*0243 ENDIF
0244
4e4ad91a39 Jean*0245
0246
0c32bd3cb0 Mart*0247
0248
0249
0250
0251 DO j=jMin,jMax
0252 DO i=iMin,iMax
0253 ridgingModeNorm(i,j) = partFunc(i,j,0)
0254 ENDDO
0255 ENDDO
0256 DO k = 1, nITD
0257 DO j=jMin,jMax
0258 DO i=iMin,iMax
8d0c6ad10c Mart*0259 partFunc(i,j,k) = partFunc(i,j,k) * heffM(i,j,bi,bj)
0c32bd3cb0 Mart*0260 ridgingModeNorm(i,j) = ridgingModeNorm(i,j)
0261 & + partFunc(i,j,k)*( 1. _d 0 - 1. _d 0/ridgeRatio(i,j,k) )
0262 ENDDO
0263 ENDDO
0264 ENDDO
8d0c6ad10c Mart*0265
0266 DO j=jMin,jMax
0267 DO i=iMin,iMax
0268 IF ( ridgingModeNorm(i,j) .LE. 0. _d 0 )
0269 & ridgingModeNorm(i,j) = 1. _d 0
0270 ENDDO
0271 ENDDO
0c32bd3cb0 Mart*0272
0273 #endif /* SEAICE_ITD */
0274
0275 RETURN
0276 END