/[MITgcm]/MITgcm_contrib/dgoldberg/streamice/streamice_visc_beta_hybrid.F
ViewVC logotype

Annotation of /MITgcm_contrib/dgoldberg/streamice/streamice_visc_beta_hybrid.F

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


Revision 1.5 - (hide annotations) (download)
Mon Dec 10 02:34:45 2012 UTC (12 years, 7 months ago) by dgoldberg
Branch: MAIN
Changes since 1.4: +2 -2 lines
various updates, mostly adding ifdefs to include statements

1 dgoldberg 1.5 C $Header: /u/gcmpack/MITgcm_contrib/dgoldberg/streamice/streamice_visc_beta_hybrid.F,v 1.4 2012/09/27 20:29:01 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 heimbach 1.2 #ifdef ALLOW_AUTODIFF_TAMC
27     # include "tamc.h"
28     #endif
29 dgoldberg 1.1
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 dgoldberg 1.4 INTEGER i, j, bi, bj, k, l, m
40 heimbach 1.2 INTEGER ikey_1
41 dgoldberg 1.1 _RL ux, uy, vx, vy, exx, eyy, exy, unorm, second_inv
42 dgoldberg 1.4 _RL ub, vb, fb, mean_u_shear, mean_v_shear, umid, vmid
43 dgoldberg 1.1 _RL omega_temp (Nr+1), u_shear(Nr+1), v_shear(Nr+1)
44    
45     _RL STREAMICE_BSTRESS_EXPONENT
46     ! _RL total_vol_out
47     external STREAMICE_BSTRESS_EXPONENT
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 heimbach 1.2
103 dgoldberg 1.1 DO m=Nr,1,-1
104    
105 heimbach 1.2 #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 dgoldberg 1.1 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 dgoldberg 1.3 & 0.25 * streamice_vert_shear_uz(m)**2 +
137     & 0.25 * streamice_vert_shear_vz(m)**2)
138 dgoldberg 1.1
139     visc_streamice_full(i,j,m,bi,bj) =
140     & .5 * A_glen(i,j,bi,bj)**(-1./n_glen) *
141     & second_inv**((1-n_glen)/n_glen)
142    
143     visc_streamice (i,j,bi,bj) = visc_streamice (i,j,bi,bj) +
144     & H_streamice(i,j,bi,bj) * streamice_delsigma (m) *
145     & visc_streamice_full(i,j,m,bi,bj)
146    
147     omega_temp (m) = omega_temp(m+1) +
148     & streamice_sigma_coord(m) * streamice_delsigma(m) /
149     & visc_streamice_full(i,j,m,bi,bj)
150    
151     u_shear (m) = u_shear (m+1) +
152     & streamice_vert_shear_uz (m) * streamice_delsigma (m) *
153     & H_streamice(i,j,bi,bj)
154    
155     v_shear (m) = v_shear (m+1) +
156     & streamice_vert_shear_vz (m) * streamice_delsigma (m) *
157     & H_streamice(i,j,bi,bj)
158    
159     ENDDO
160    
161     mean_u_shear = 0.0
162     mean_v_shear = 0.0
163    
164     DO m=Nr,1,-1
165    
166     streamice_omega(i,j,bi,bj) = streamice_omega(i,j,bi,bj) +
167     & streamice_delsigma(m)*(omega_temp(m)+omega_temp(m+1))*.5
168     & * H_streamice(i,j,bi,bj)**2
169    
170     mean_u_shear = mean_u_shear +
171     & streamice_delsigma(m)*(u_shear(m)+u_shear(m+1))*.5
172    
173     mean_v_shear = mean_v_shear +
174     & streamice_delsigma(m)*(v_shear(m)+v_shear(m+1))*.5
175    
176     ENDDO
177    
178     streamice_u_surf(i,j,bi,bj) =
179     & u_shear(1) + umid - mean_u_shear
180    
181     streamice_v_surf(i,j,bi,bj) =
182     & v_shear(1) + vmid - mean_v_shear
183    
184     ub = umid - streamice_taubx(i,j,bi,bj) *
185     & streamice_omega(i,j,bi,bj) / H_streamice(i,j,bi,bj)
186    
187     vb = vmid - streamice_tauby(i,j,bi,bj) *
188     & streamice_omega(i,j,bi,bj) / H_streamice(i,j,bi,bj)
189    
190 dgoldberg 1.5 unorm = sqrt(ub**2+vb**2+eps_u_min**2)
191 dgoldberg 1.1
192     fb = C_basal_friction(i,j,bi,bj)**2 *
193     & STREAMICE_BSTRESS_EXPONENT (unorm,n_basal_friction) *
194     & streamice_basal_geom(i,j,bi,bj)
195    
196     tau_beta_eff_streamice(i,j,bi,bj) =
197     & fb /
198     & (1+fb*streamice_omega(i,j,bi,bj)/H_streamice(i,j,bi,bj))
199    
200     ENDIF
201     ENDDO
202     ENDDO
203     ENDDO
204     ENDDO
205    
206    
207     #endif
208     #endif
209     RETURN
210     END

  ViewVC Help
Powered by ViewVC 1.1.22