/[MITgcm]/MITgcm/pkg/streamice/streamice_visc_beta_hybrid.F
ViewVC logotype

Contents of /MITgcm/pkg/streamice/streamice_visc_beta_hybrid.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download)
Thu Apr 24 16:37:51 2014 UTC (10 years ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64w, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65
Changes since 1.3: +5 -1 lines
populate basal velocity arrays for diagnostics

1 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_visc_beta_hybrid.F,v 1.3 2014/04/24 12:01:50 dgoldberg Exp $
2 C $Name: $
3
4 #include "STREAMICE_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7
8 CBOP
9 SUBROUTINE STREAMICE_VISC_BETA_HYBRID ( myThid )
10
11 C /============================================================\
12 C | SUBROUTINE |
13 C | o |
14 C |============================================================|
15 C | |
16 C \============================================================/
17 IMPLICIT NONE
18
19 C === Global variables ===
20 #include "SIZE.h"
21 #include "GRID.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "STREAMICE.h"
25 #include "STREAMICE_CG.h"
26 #ifdef ALLOW_AUTODIFF_TAMC
27 # include "tamc.h"
28 #endif
29
30 C !INPUT/OUTPUT ARGUMENTS
31 INTEGER myThid
32 ! _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
33 ! _RL taudx (1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
34
35 #ifdef ALLOW_STREAMICE
36 #ifdef STREAMICE_HYBRID_STRESS
37
38 C LOCAL VARIABLES
39 INTEGER i, j, bi, bj, k, l, m
40 INTEGER ikey_1
41 _RL ux, uy, vx, vy, exx, eyy, exy, unorm, second_inv
42 _RL ub, vb, fb, mean_u_shear, mean_v_shear, umid, vmid
43 _RL omega_temp (Nr+1), u_shear(Nr+1), v_shear(Nr+1)
44
45 _RL STREAMICE_BSTRESS_EXP
46 ! _RL total_vol_out
47 external STREAMICE_BSTRESS_EXP
48
49 DO bj=myByLo(myThid),myByHi(myThid)
50 DO bi=myBxLo(myThid),myBxHi(myThid)
51 DO j=1,sNy
52 DO i=1,sNx
53 IF (STREAMICE_hmask(i,j,bi,bj).eq.1) THEN
54
55 umid = 0
56 vmid = 0
57
58 DO k=0,1
59 DO l=0,1
60 umid = umid + 0.25 *
61 & dxG(i,j+l,bi,bj)*dyG(i+k,j,bi,bj) *
62 & recip_rA(i,j,bi,bj) *
63 & U_streamice(i+k,j+l,bi,bj)
64 vmid = vmid + 0.25 *
65 & dxG(i,j+l,bi,bj)*dyG(i+k,j,bi,bj) *
66 & recip_rA(i,j,bi,bj) *
67 & V_streamice(i+k,j+l,bi,bj)
68 ENDDO
69 ENDDO
70
71 ux = (U_streamice(i+1,j+1,bi,bj) +
72 & U_streamice(i+1,j,bi,bj) -
73 & U_streamice(i,j+1,bi,bj) -
74 & U_streamice(i,j,bi,bj)) /
75 & (2. * dxF(i,j,bi,bj))
76 vx = (V_streamice(i+1,j+1,bi,bj) +
77 & V_streamice(i+1,j,bi,bj) -
78 & V_streamice(i,j+1,bi,bj) -
79 & V_streamice(i,j,bi,bj)) /
80 & (2. * dxF(i,j,bi,bj))
81 uy = (U_streamice(i+1,j+1,bi,bj) -
82 & U_streamice(i+1,j,bi,bj) +
83 & U_streamice(i,j+1,bi,bj) -
84 & U_streamice(i,j,bi,bj)) /
85 & (2. * dyF(i,j,bi,bj))
86 vy = (V_streamice(i+1,j+1,bi,bj) -
87 & V_streamice(i+1,j,bi,bj) +
88 & V_streamice(i,j+1,bi,bj) -
89 & V_streamice(i,j,bi,bj)) /
90 & (2. * dyF(i,j,bi,bj))
91
92 exx = ux + k1AtC_str(i,j,bi,bj)*vmid
93 eyy = vy + k2AtC_str(i,j,bi,bj)*umid
94 exy = .5*(uy+vx) +
95 & k1AtC_str(i,j,bi,bj)*umid + k2AtC_str(i,j,bi,bj)*vmid
96
97 visc_streamice (i,j,bi,bj) = 0.0
98 streamice_omega(i,j,bi,bj) = 0.0
99 omega_temp (Nr+1) = 0.0
100 u_shear(Nr+1) = 0.0
101 v_shear(Nr+1) = 0.0
102
103 DO m=Nr,1,-1
104
105 #ifdef ALLOW_AUTODIFF_TAMC
106 act1 = bi - myBxLo(myThid)
107 max1 = myBxHi(myThid) - myBxLo(myThid) + 1
108 act2 = bj - myByLo(myThid)
109 max2 = myByHi(myThid) - myByLo(myThid) + 1
110 act3 = myThid - 1
111 max3 = nTx*nTy
112 act4 = ikey_dynamics - 1
113
114 ikey_1 = m
115 & + Nr*(i-1)
116 & + Nr*sNx*(j-1)
117 & + Nr*sNx*sNy*act1
118 & + Nr*sNx*sNy*max1*act2
119 & + Nr*sNx*sNy*max1*max2*act3
120 & + Nr*sNx*sNy*max1*max2*max3*act4
121
122 CADJ STORE visc_streamice_full(i,j,m,bi,bj)
123 CADJ & = comlev1_stream_hybrid, key=ikey_1
124 #endif
125
126 streamice_vert_shear_uz (m) = streamice_taubx(i,j,bi,bj) /
127 & visc_streamice_full(i,j,m,bi,bj)
128 & * streamice_sigma_coord(m)
129
130 streamice_vert_shear_vz (m) = streamice_tauby(i,j,bi,bj) /
131 & visc_streamice_full(i,j,m,bi,bj)
132 & * streamice_sigma_coord(m)
133
134 second_inv =
135 & sqrt(exx**2+eyy**2+exx*eyy+exy**2+eps_glen_min**2+
136 & 0.25 * streamice_vert_shear_uz(m)**2 +
137 & 0.25 * streamice_vert_shear_vz(m)**2)
138
139 #ifdef STREAMICE_3D_GLEN_CONST
140 visc_streamice_full(i,j,m,bi,bj) =
141 & .5 * B_glen(i,j,m,bi,bj)**2 *
142 & second_inv**((1-n_glen)/n_glen)
143 #else
144 visc_streamice_full(i,j,m,bi,bj) =
145 & .5 * B_glen(i,j,bi,bj)**2 *
146 & second_inv**((1-n_glen)/n_glen)
147 #endif
148
149 visc_streamice (i,j,bi,bj) = visc_streamice (i,j,bi,bj) +
150 & H_streamice(i,j,bi,bj) * streamice_delsigma (m) *
151 & visc_streamice_full(i,j,m,bi,bj)
152
153 omega_temp (m) = omega_temp(m+1) +
154 & streamice_sigma_coord(m) * streamice_delsigma(m) /
155 & visc_streamice_full(i,j,m,bi,bj)
156
157 u_shear (m) = u_shear (m+1) +
158 & streamice_vert_shear_uz (m) * streamice_delsigma (m) *
159 & H_streamice(i,j,bi,bj)
160
161 v_shear (m) = v_shear (m+1) +
162 & streamice_vert_shear_vz (m) * streamice_delsigma (m) *
163 & H_streamice(i,j,bi,bj)
164
165 ENDDO
166
167 mean_u_shear = 0.0
168 mean_v_shear = 0.0
169
170 DO m=Nr,1,-1
171
172 streamice_omega(i,j,bi,bj) = streamice_omega(i,j,bi,bj) +
173 & streamice_delsigma(m)*(omega_temp(m)+omega_temp(m+1))*.5
174 & * H_streamice(i,j,bi,bj)**2
175
176 mean_u_shear = mean_u_shear +
177 & streamice_delsigma(m)*(u_shear(m)+u_shear(m+1))*.5
178
179 mean_v_shear = mean_v_shear +
180 & streamice_delsigma(m)*(v_shear(m)+v_shear(m+1))*.5
181
182 ENDDO
183
184 streamice_u_surf(i,j,bi,bj) =
185 & u_shear(1) + umid - mean_u_shear
186
187 streamice_v_surf(i,j,bi,bj) =
188 & v_shear(1) + vmid - mean_v_shear
189
190 ub = umid - streamice_taubx(i,j,bi,bj) *
191 & streamice_omega(i,j,bi,bj) / H_streamice(i,j,bi,bj)
192
193 streamice_u_bed (i,j,bi,bj) = ub
194
195 vb = vmid - streamice_tauby(i,j,bi,bj) *
196 & streamice_omega(i,j,bi,bj) / H_streamice(i,j,bi,bj)
197
198 streamice_v_bed (i,j,bi,bj) = vb
199
200 unorm = sqrt(ub**2+vb**2+eps_u_min**2)
201
202 fb = C_basal_friction(i,j,bi,bj)**2 *
203 & STREAMICE_BSTRESS_EXP (unorm,n_basal_friction) *
204 & streamice_basal_geom(i,j,bi,bj) *
205 & float_frac_streamice(i,j,bi,bj)
206
207 tau_beta_eff_streamice(i,j,bi,bj) =
208 & fb /
209 & (1+fb*streamice_omega(i,j,bi,bj)/H_streamice(i,j,bi,bj))
210
211 ENDIF
212 ENDDO
213 ENDDO
214 ENDDO
215 ENDDO
216
217
218 #endif
219 #endif
220 RETURN
221 END

  ViewVC Help
Powered by ViewVC 1.1.22