File indexing completed on 2022-01-06 06:13:27 UTC
view on githubraw file Latest commit 9f5240b5 on 2022-01-05 15:24:45 UTC
fcd60511e1 Jean*0001 #include "THSICE_OPTIONS.h"
0002
87ea84cac6 Jean*0003
7269783f6f Jean*0004
87ea84cac6 Jean*0005
0006 SUBROUTINE THSICE_ALBEDO(
7269783f6f Jean*0007 I bi, bj, siLo, siHi, sjLo, sjHi,
0008 I iMin,iMax, jMin,jMax,
0009 I iceMask, hIce, hSnow, tSrf, ageSnw,
ce354ad541 Jean*0010 O sAlb, sAlbNIR,
7269783f6f Jean*0011 I myTime, myIter, myThid )
87ea84cac6 Jean*0012
fcd60511e1 Jean*0013
0014
0015
7269783f6f Jean*0016
fcd60511e1 Jean*0017
87ea84cac6 Jean*0018
0019
0020
fcd60511e1 Jean*0021 IMPLICIT NONE
0022
0023
dbce8fc2d4 Jean*0024 #include "EEPARAMS.h"
fcd60511e1 Jean*0025 #include "THSICE_PARAMS.h"
0026
87ea84cac6 Jean*0027
fcd60511e1 Jean*0028
7269783f6f Jean*0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
ce354ad541 Jean*0042
7269783f6f Jean*0043
0044
0045
0046
0047 INTEGER siLo, siHi, sjLo, sjHi
0048 INTEGER bi,bj
0049 INTEGER iMin, iMax
0050 INTEGER jMin, jMax
0051 _RL iceMask(siLo:siHi,sjLo:sjHi)
0052 _RL hIce (siLo:siHi,sjLo:sjHi)
0053 _RL hSnow (siLo:siHi,sjLo:sjHi)
0054 _RL tSrf (siLo:siHi,sjLo:sjHi)
0055 _RL ageSnw (siLo:siHi,sjLo:sjHi)
0056 _RL sAlb (siLo:siHi,sjLo:sjHi)
ce354ad541 Jean*0057 _RL sAlbNIR(siLo:siHi,sjLo:sjHi)
7269783f6f Jean*0058 _RL myTime
0059 INTEGER myIter
0060 INTEGER myThid
0061
0062
0063 #ifdef ALLOW_THSICE
0064
0065
fcd60511e1 Jean*0066 _RL hi
0067 _RL hs
0068 _RL Tsf
0069 _RL age
0070 _RL albedo
0071
7269783f6f Jean*0072
fcd60511e1 Jean*0073
0074
0075
7269783f6f Jean*0076
9f5240b52a Jean*0077
87ea84cac6 Jean*0078
247dc4774e Mart*0079 _RL albsno
0080 _RL albice
fcd60511e1 Jean*0081 _RL albNewSnow
ce354ad541 Jean*0082 _RL albNIR_ocean, albNIR_thick, albNIR_dsnow
0083 _RL albNIR_ice, albNIR_fHice, recFac_albNIR
7269783f6f Jean*0084 INTEGER i,j
247dc4774e Mart*0085 INTEGER ii,jj,icount
9f5240b52a Jean*0086 #ifndef ALLOW_AUTODIFF
7269783f6f Jean*0087 CHARACTER*(MAX_LEN_MBUF) msgBuf
9f5240b52a Jean*0088 #endif
7269783f6f Jean*0089
0090
fcd60511e1 Jean*0091
ce354ad541 Jean*0092 IF ( thSIce_calc_albNIR ) THEN
0093
0094 albNIR_ocean = 0.06 _d 0
0095 albNIR_thick = 0.33 _d 0
0096 albNIR_dsnow = 0.68 _d 0
0097 albNIR_fHice = 4. _d 0
0098 recFac_albNIR = 1. _d 0 / ATAN(albNIR_fHice*0.5 _d 0)
0099 ENDIF
0100
247dc4774e Mart*0101 icount = 0
7269783f6f Jean*0102 DO j = jMin, jMax
0103 DO i = iMin, iMax
0104 IF ( iceMask(i,j).GT.0. _d 0 ) THEN
247dc4774e Mart*0105 hi = hIce(i,j)
0106 hs = hSnow(i,j)
0107 Tsf = tSrf(i,j)
0108 age = ageSnw(i,j)
9f5240b52a Jean*0109
7269783f6f Jean*0110
fcd60511e1 Jean*0111
247dc4774e Mart*0112 albice = albIceMax + (albIceMin-albIceMax)*EXP(-hi/hAlbIce)
fcd60511e1 Jean*0113
0114
0115
0116
0117
0118
0119
0120
0121
7269783f6f Jean*0122
fcd60511e1 Jean*0123
0124
0125
0126
c854f591d1 Jean*0127
fcd60511e1 Jean*0128
247dc4774e Mart*0129 IF ( tempSnowAlb.LT.0. _d 0 ) THEN
0130 albNewSnow = albColdSnow
0131 & + (albWarmSnow - albColdSnow)
0132 & *MAX( 0. _d 0, MIN(1. _d 0 - Tsf/tempSnowAlb, 1. _d 0) )
0133 ELSE
0134 albNewSnow = albColdSnow
0135 ENDIF
fcd60511e1 Jean*0136
247dc4774e Mart*0137 albsno = albOldSnow
0138 & +(albNewSnow-albOldSnow)*EXP(-0.2 _d 0*age/86400. _d 0)
fcd60511e1 Jean*0139
247dc4774e Mart*0140 albedo = albsno + (albice-albsno)*EXP(-hs/hAlbSnow)
fcd60511e1 Jean*0141
247dc4774e Mart*0142 IF ( thSIce_calc_albNIR ) THEN
ce354ad541 Jean*0143
247dc4774e Mart*0144 albNIR_ice = albNIR_ocean + (albNIR_thick - albNIR_ocean)*
0145 & MIN( recFac_albNIR*ATAN(albNIR_fHice*hi), 1. _d 0 )
0146 & + 0.075 _d 0 * MIN( -Tsf - 1. _d 0, 0. _d 0 )
0147
0148 sAlbNIR(i,j) = albNIR_ice * ( 1. _d 0 - hs/(hs + 0.02 _d 0) )
9f5240b52a Jean*0149 & + ( albNIR_dsnow
247dc4774e Mart*0150 & + 0.15 _d 0 *MIN( -Tsf - 1. _d 0, 0. _d 0) )
0151 & * hs/(hs + 0.02 _d 0)
0152 ELSE
0153 sAlbNIR(i,j) = albedo
0154 ENDIF
7269783f6f Jean*0155
247dc4774e Mart*0156 IF (albedo.GT.1. _d 0 .OR. albedo.LT. .2 _d 0) THEN
0157
0158
0159 ii=i
0160 jj=j
0161 icount=icount+1
0162 ENDIF
0163 sAlb(i,j) = albedo
7269783f6f Jean*0164 ELSE
247dc4774e Mart*0165 sAlb(i,j) = 0. _d 0
0166 sAlbNIR(i,j) = 0. _d 0
7269783f6f Jean*0167 ENDIF
0168 ENDDO
0169 ENDDO
c1c3d0f9d7 Patr*0170
0171 #ifndef ALLOW_AUTODIFF
247dc4774e Mart*0172
0173 IF (icount .gt. 0) THEN
0174
0175 WRITE(msgBuf,'(A,I10,4I6)')
0176 & 'THSICE_ALBEDO: Problem, e.g., at:', myIter,ii,jj,bi,bj
0177 CALL PRINT_ERROR( msgBuf , myThid)
0178 WRITE(msgBuf,'(A,1P3E17.9)')
9f5240b52a Jean*0179 & 'THSICE_ALBEDO: albedo=', sAlb(ii,jj),ageSnw(ii,jj),
247dc4774e Mart*0180 & hsnow(ii,jj)
0181 CALL PRINT_ERROR( msgBuf , myThid)
0182 STOP 'THSICE_ALBEDO: albedo out of range'
0183 ENDIF
c1c3d0f9d7 Patr*0184 #endif
fcd60511e1 Jean*0185
0186 #endif /* ALLOW_THSICE */
0187
0188
0189
0190 RETURN
0191 END