File indexing completed on 2022-01-13 06:12:01 UTC
view on githubraw file Latest commit 0fbff46b on 2022-01-12 18:01:48 UTC
5ca83cd8f7 Dani*0001 #include "STREAMICE_OPTIONS.h"
0002
0003
0004
0005
0006 SUBROUTINE STREAMICE_VISC_BETA ( myThid )
0007
0008
0fbff46b46 dngo*0009
5ca83cd8f7 Dani*0010
0011
0012
0013
0014 IMPLICIT NONE
0015
0016
0017 #include "SIZE.h"
0018 #include "GRID.h"
0019 #include "EEPARAMS.h"
0020 #include "PARAMS.h"
0021 #include "STREAMICE.h"
0022 #include "STREAMICE_CG.h"
0023
0024
0025 INTEGER myThid
0026
0027
0028
0029 #ifdef ALLOW_STREAMICE
0030
0031
0032 INTEGER i, j, bi, bj, k, l
0033 _RL ux, uy, vx, vy, exx, eyy, exy, second_inv, unorm
0fbff46b46 dngo*0034 _RL umid, vmid, C_fric_val, Bglen_val
5ca83cd8f7 Dani*0035
0036 DO bj=myByLo(myThid),myByHi(myThid)
0037 DO bi=myBxLo(myThid),myBxHi(myThid)
0038 DO j=1,sNy
0039 DO i=1,sNx
0040 IF (STREAMICE_hmask(i,j,bi,bj).eq.1) THEN
0fbff46b46 dngo*0041
5ca83cd8f7 Dani*0042 umid = 0
0043 vmid = 0
0044
0045 DO k=0,1
0046 DO l=0,1
0fbff46b46 dngo*0047 umid = umid + 0.25 *
0048 & dxG(i,j+l,bi,bj)*dyG(i+k,j,bi,bj) *
5ca83cd8f7 Dani*0049 & recip_rA(i,j,bi,bj) *
0fbff46b46 dngo*0050 & U_streamice(i+k,j+l,bi,bj)
0051 vmid = vmid + 0.25 *
0052 & dxG(i,j+l,bi,bj)*dyG(i+k,j,bi,bj) *
5ca83cd8f7 Dani*0053 & recip_rA(i,j,bi,bj) *
0054 & V_streamice(i+k,j+l,bi,bj)
0055 ENDDO
0056 ENDDO
0fbff46b46 dngo*0057
0058 ux = (U_streamice(i+1,j+1,bi,bj) +
5ca83cd8f7 Dani*0059 & U_streamice(i+1,j,bi,bj) -
0060 & U_streamice(i,j+1,bi,bj) -
0061 & U_streamice(i,j,bi,bj)) /
0062 & (2. * dxF(i,j,bi,bj))
0fbff46b46 dngo*0063 vx = (V_streamice(i+1,j+1,bi,bj) +
5ca83cd8f7 Dani*0064 & V_streamice(i+1,j,bi,bj) -
0065 & V_streamice(i,j+1,bi,bj) -
0066 & V_streamice(i,j,bi,bj)) /
0067 & (2. * dxF(i,j,bi,bj))
0fbff46b46 dngo*0068 uy = (U_streamice(i+1,j+1,bi,bj) -
5ca83cd8f7 Dani*0069 & U_streamice(i+1,j,bi,bj) +
0070 & U_streamice(i,j+1,bi,bj) -
0071 & U_streamice(i,j,bi,bj)) /
0072 & (2. * dyF(i,j,bi,bj))
0fbff46b46 dngo*0073 vy = (V_streamice(i+1,j+1,bi,bj) -
5ca83cd8f7 Dani*0074 & V_streamice(i+1,j,bi,bj) +
0075 & V_streamice(i,j+1,bi,bj) -
0076 & V_streamice(i,j,bi,bj)) /
0077 & (2. * dyF(i,j,bi,bj))
0078
0079 exx = ux + k1AtC_str(i,j,bi,bj)*vmid
0080 eyy = vy + k2AtC_str(i,j,bi,bj)*umid
0fbff46b46 dngo*0081 exy = .5*(uy+vx) +
5ca83cd8f7 Dani*0082 & k1AtC_str(i,j,bi,bj)*umid + k2AtC_str(i,j,bi,bj)*vmid
0083
0084
0085
0fbff46b46 dngo*0086 second_inv =
5ca83cd8f7 Dani*0087 & sqrt(exx**2+eyy**2+exx*eyy+exy**2+eps_glen_min**2)
0088
bdd8102d3e Dani*0089 #ifdef STREAMICE_3D_GLEN_CONST
0fbff46b46 dngo*0090 IF (.not.STREAMICE_use_log_ctrl) THEN
0091 Bglen_val = B_glen(i,j,1,bi,bj)**2
0092 ELSE
0093 Bglen_val = exp(B_glen(i,j,1,bi,bj))
0094 ENDIF
bdd8102d3e Dani*0095 #else
0fbff46b46 dngo*0096 IF (.not.STREAMICE_use_log_ctrl) THEN
0097 Bglen_val = B_glen(i,j,bi,bj)**2
0098 ELSE
0099 Bglen_val = exp(B_glen(i,j,bi,bj))
0100 ENDIF
bdd8102d3e Dani*0101 #endif
0fbff46b46 dngo*0102
0103 visc_streamice(i,j,bi,bj) =
0104 & .5 * Bglen_val *
5ca83cd8f7 Dani*0105 & second_inv**((1-n_glen)/n_glen) * H_streamice(i,j,bi,bj)
0106
0fbff46b46 dngo*0107 if (.not.STREAMICE_use_log_ctrl) THEN
0108 C_fric_val = C_basal_friction(i,j,bi,bj)**2
0109 else
0110 C_fric_val = exp(C_basal_friction(i,j,bi,bj))
0111 endif
0112
5ca83cd8f7 Dani*0113 unorm = sqrt(umid**2+vmid**2+eps_u_min**2)
0fbff46b46 dngo*0114 tau_beta_eff_streamice(i,j,bi,bj) =
0115 & C_fric_val *
5ca83cd8f7 Dani*0116 & unorm ** (n_basal_friction-1.0) *
0117 & float_frac_streamice (i,j,bi,bj)
0fbff46b46 dngo*0118
5ca83cd8f7 Dani*0119 ENDIF
0120 ENDDO
0121 ENDDO
0122 ENDDO
0123 ENDDO
0124
0125 #endif
0126 RETURN
0127 END