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

Annotation 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 - (hide 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 dgoldberg 1.4 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_visc_beta_hybrid.F,v 1.3 2014/04/24 12:01:50 dgoldberg Exp $
2 dgoldberg 1.1 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 heimbach 1.2 _RL STREAMICE_BSTRESS_EXP
46 dgoldberg 1.1 ! _RL total_vol_out
47 heimbach 1.2 external STREAMICE_BSTRESS_EXP
48 dgoldberg 1.1
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 dgoldberg 1.3 #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 dgoldberg 1.1 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 dgoldberg 1.3 #endif
148 dgoldberg 1.1
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 dgoldberg 1.4
193     streamice_u_bed (i,j,bi,bj) = ub
194 dgoldberg 1.1
195     vb = vmid - streamice_tauby(i,j,bi,bj) *
196     & streamice_omega(i,j,bi,bj) / H_streamice(i,j,bi,bj)
197    
198 dgoldberg 1.4 streamice_v_bed (i,j,bi,bj) = vb
199    
200 dgoldberg 1.1 unorm = sqrt(ub**2+vb**2+eps_u_min**2)
201    
202     fb = C_basal_friction(i,j,bi,bj)**2 *
203 heimbach 1.2 & STREAMICE_BSTRESS_EXP (unorm,n_basal_friction) *
204 dgoldberg 1.1 & 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