45 |
C == Local variables == |
C == Local variables == |
46 |
INTEGER I,J |
INTEGER I,J |
47 |
_RL Zip,Zij,Zpj,Dim,Dij,Dmj,uD2,vD2,uD4,vD4 |
_RL Zip,Zij,Zpj,Dim,Dij,Dmj,uD2,vD2,uD4,vD4 |
48 |
_RL Alin,AlinMin,AlinMax,Alth,grdVrt,vg2,vg4,vg4Min,vg4Max |
_RL Alin,AlinMin,AlinMax,Alth,grdVrt,grdDiv |
49 |
|
_RL vg2,vg2Min,vg2Max,vg4,vg4Min,vg4Max |
50 |
LOGICAL useVariableViscosity |
LOGICAL useVariableViscosity |
51 |
|
|
52 |
useVariableViscosity= |
useVariableViscosity= |
53 |
& (viscAhGrid*deltaTmom.NE.0.) |
& (viscAhGrid*deltaTmom.NE.0.) |
54 |
& .OR.(viscA4Grid*deltaTmom.NE.0.) |
& .OR.(viscA4Grid*deltaTmom.NE.0.) |
55 |
& .OR.(viscC2leith.NE.0.) |
& .OR.(viscC2leith.NE.0.) |
56 |
|
& .OR.(viscC2leithD.NE.0.) |
57 |
& .OR.(viscC4leith.NE.0.) |
& .OR.(viscC4leith.NE.0.) |
58 |
|
& .OR.(viscC4leithD.NE.0.) |
59 |
|
|
60 |
IF (deltaTmom.NE.0.) THEN |
IF (deltaTmom.NE.0.) THEN |
61 |
vg2=viscAhGrid/deltaTmom |
vg2=viscAhGrid/deltaTmom |
62 |
|
vg2Min=viscAhGridMin/deltaTmom |
63 |
|
vg2Max=viscAhGridMax/deltaTmom |
64 |
vg4=viscA4Grid/deltaTmom |
vg4=viscA4Grid/deltaTmom |
65 |
vg4Min=viscA4GridMin/deltaTmom |
vg4Min=viscA4GridMin/deltaTmom |
66 |
vg4Max=viscA4GridMax/deltaTmom |
vg4Max=viscA4GridMax/deltaTmom |
67 |
ELSE |
ELSE |
68 |
vg2=0. |
vg2=0. |
69 |
|
vg2Min=0. |
70 |
|
vg2Max=0. |
71 |
vg4=0. |
vg4=0. |
72 |
vg4Min=0. |
vg4Min=0. |
73 |
vg4Max=0. |
vg4Max=0. |
77 |
IF (useVariableViscosity) THEN |
IF (useVariableViscosity) THEN |
78 |
DO j=2-Oly,sNy+Oly-1 |
DO j=2-Oly,sNy+Oly-1 |
79 |
DO i=2-Olx,sNx+Olx-1 |
DO i=2-Olx,sNx+Olx-1 |
80 |
C This is the vector magnitude of the vorticity gradient |
IF (useFullLeith) THEN |
81 |
c grdVrt=sqrt(0.25*( |
C This is the vector magnitude of the vorticity gradient squared |
82 |
c & ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2 |
grdVrt=0.25*( |
83 |
c & +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2 |
& ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2 |
84 |
c & +((vort3(i+1,j+1)-vort3(i,j+1))*recip_DXG(i,j+1,bi,bj))**2 |
& +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2 |
85 |
c & +((vort3(i+1,j+1)-vort3(i+1,j))*recip_DYG(i+1,j,bi,bj))**2 )) |
& +((vort3(i+1,j+1)-vort3(i,j+1))*recip_DXG(i,j+1,bi,bj))**2 |
86 |
C but this approximation will work on cube (and differs by as much as 4X) |
& +((vort3(i+1,j+1)-vort3(i+1,j))*recip_DYG(i+1,j,bi,bj))**2) |
87 |
grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj)) |
|
88 |
grdVrt=max(grdVrt, |
C This is the vector magnitude of grad (div.v) squared |
89 |
& abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))) |
C Using it in Leith serves to damp instabilities in w. |
90 |
grdVrt=max(grdVrt, |
grdDiv=0.25*( |
91 |
& abs((vort3(i+1,j+1)-vort3(i,j+1))*recip_DXG(i,j+1,bi,bj))) |
& ((hDiv(i+1,j)-hDiv(i,j))*recip_DXG(i,j,bi,bj))**2 |
92 |
grdVrt=max(grdVrt, |
& +((hDiv(i,j+1)-hDiv(i,j))*recip_DYG(i,j,bi,bj))**2 |
93 |
& abs((vort3(i+1,j+1)-vort3(i+1,j))*recip_DYG(i+1,j,bi,bj))) |
& +((hDiv(i-1,j)-hDiv(i,j))*recip_DXG(i-1,j,bi,bj))**2 |
94 |
Alth=viscC2leith*grdVrt*(rA(i,j,bi,bj)**1.5) |
& +((hDiv(i,j-1)-hDiv(i,j))*recip_DYG(i,j-1,bi,bj))**2) |
95 |
|
ELSE |
96 |
|
C but this approximation will work on cube |
97 |
|
c (and differs by as much as 4X) |
98 |
|
grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj)) |
99 |
|
grdVrt=max(grdVrt, |
100 |
|
& abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))) |
101 |
|
grdVrt=max(grdVrt, |
102 |
|
& abs((vort3(i+1,j+1)-vort3(i,j+1))*recip_DXG(i,j+1,bi,bj))) |
103 |
|
grdVrt=max(grdVrt, |
104 |
|
& abs((vort3(i+1,j+1)-vort3(i+1,j))*recip_DYG(i+1,j,bi,bj))) |
105 |
|
grdVrt=grdVrt**2 |
106 |
|
grdDiv=0. |
107 |
|
ENDIF |
108 |
|
|
109 |
|
C Harmonic Modified Leith on Div.u points |
110 |
|
Alth=sqrt(viscC2leith**2*grdVrt+viscC2leithD**2*grdDiv) |
111 |
|
& *(rA(i,j,bi,bj)**1.5) |
112 |
Alin=viscAhD+vg2*rA ( i , j ,bi,bj) |
Alin=viscAhD+vg2*rA ( i , j ,bi,bj) |
113 |
viscAh_D(i,j)=min(viscAhMax,Alin+Alth) |
viscAh_D(i,j)=min(viscAhMax,Alin+Alth) |
114 |
Alth=viscC4leith*grdVrt*0.125*(rA(i,j,bi,bj)**2.5) |
IF (vg2Max.GT.0.) THEN |
115 |
|
AlinMax=vg2Max*(rA ( i , j ,bi,bj)) |
116 |
|
viscAh_D(i,j)=min(AlinMax,viscAh_D(i,j)) |
117 |
|
ENDIF |
118 |
|
AlinMin=vg2Min*(rA ( i , j ,bi,bj)) |
119 |
|
viscAh_D(i,j)=max(AlinMin,viscAh_D(i,j)) |
120 |
|
|
121 |
|
C BiHarmonic Modified Leith on Div.u points |
122 |
|
Alth=sqrt(viscC4leith**2*grdVrt+viscC4leithD**2*grdDiv) |
123 |
|
& *0.125*(rAz(i,j,bi,bj)**2.5) |
124 |
Alin=viscA4D+vg4*(rA ( i , j ,bi,bj)**2) |
Alin=viscA4D+vg4*(rA ( i , j ,bi,bj)**2) |
125 |
viscA4_D(i,j)=min(viscA4Max,Alin+Alth) |
viscA4_D(i,j)=min(viscA4Max,Alin+Alth) |
126 |
IF (vg4Max.GT.0.) THEN |
IF (vg4Max.GT.0.) THEN |
130 |
AlinMin=vg4Min*(rA ( i , j ,bi,bj)**2) |
AlinMin=vg4Min*(rA ( i , j ,bi,bj)**2) |
131 |
viscA4_D(i,j)=max(AlinMin,viscA4_D(i,j)) |
viscA4_D(i,j)=max(AlinMin,viscA4_D(i,j)) |
132 |
|
|
133 |
C This is the vector magnitude of the vorticity gradient |
C This is the vector magnitude of the vorticity gradient squared |
134 |
c grdVrt=sqrt(0.25*( |
IF (useFullLeith) THEN |
135 |
c & ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2 |
grdVrt=0.25*( |
136 |
c & +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2 |
& ((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj))**2 |
137 |
c & +((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj))**2 |
& +((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))**2 |
138 |
c & +((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj))**2 )) |
& +((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj))**2 |
139 |
|
& +((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj))**2) |
140 |
|
|
141 |
|
C This is the vector magnitude of grad(div.v) squared |
142 |
|
grdDiv=0.25*( |
143 |
|
& ((hDiv(i+1,j)-hDiv(i,j))*recip_DXG(i,j,bi,bj))**2 |
144 |
|
& +((hDiv(i,j+1)-hDiv(i,j))*recip_DYG(i,j,bi,bj))**2 |
145 |
|
& +((hDiv(i+1,j+1)-hDiv(i,j+1))*recip_DXG(i,j+1,bi,bj))**2 |
146 |
|
& +((hDiv(i+1,j+1)-hDiv(i+1,j))*recip_DYG(i+1,j,bi,bj))**2) |
147 |
|
ELSE |
148 |
C but this approximation will work on cube (and differs by as much as 4X) |
C but this approximation will work on cube (and differs by as much as 4X) |
149 |
grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj)) |
grdVrt=abs((vort3(i+1,j)-vort3(i,j))*recip_DXG(i,j,bi,bj)) |
150 |
grdVrt=max(grdVrt, |
grdVrt=max(grdVrt, |
151 |
& abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))) |
& abs((vort3(i,j+1)-vort3(i,j))*recip_DYG(i,j,bi,bj))) |
152 |
grdVrt=max(grdVrt, |
grdVrt=max(grdVrt, |
153 |
& abs((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj))) |
& abs((vort3(i-1,j)-vort3(i,j))*recip_DXG(i-1,j,bi,bj))) |
154 |
grdVrt=max(grdVrt, |
grdVrt=max(grdVrt, |
155 |
& abs((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj))) |
& abs((vort3(i,j-1)-vort3(i,j))*recip_DYG(i,j-1,bi,bj))) |
156 |
Alth=viscC2leith*grdVrt*(rAz(i,j,bi,bj)**1.5) |
grdVrt=grdVrt**2 |
157 |
|
grdDiv=0. |
158 |
|
ENDIF |
159 |
|
|
160 |
|
C Harmonic Modified Leith on Zeta points |
161 |
|
Alth=sqrt(viscC2leith**2*grdVrt+viscC2leithD**2*grdDiv) |
162 |
|
& *(rA(i,j,bi,bj)**1.5) |
163 |
Alin=viscAhZ+vg2*rAz( i , j ,bi,bj) |
Alin=viscAhZ+vg2*rAz( i , j ,bi,bj) |
164 |
viscAh_Z(i,j)=min(viscAhMax,Alin+Alth) |
viscAh_Z(i,j)=min(viscAhMax,Alin+Alth) |
165 |
|
IF (vg2Max.GT.0.) THEN |
166 |
|
AlinMax=vg2Max*(rAz( i , j ,bi,bj)) |
167 |
|
viscAh_Z(i,j)=min(AlinMax,viscAh_Z(i,j)) |
168 |
|
ENDIF |
169 |
|
AlinMin=vg2Min*(rA ( i , j ,bi,bj)) |
170 |
|
viscAh_Z(i,j)=max(AlinMin,viscAh_Z(i,j)) |
171 |
|
|
172 |
Alth=viscC4leith*grdVrt*0.125*(rAz(i,j,bi,bj)**2.5) |
C BiHarmonic Modified Leith on Zeta Points |
173 |
|
Alth=sqrt(viscC4leith**2*grdVrt+viscC4leithD**2*grdDiv) |
174 |
|
& *0.125*(rAz(i,j,bi,bj)**2.5) |
175 |
|
grdVrt=sqrt(grdVrt) |
176 |
Alin=viscA4Z+vg4*(rAz( i , j ,bi,bj)**2) |
Alin=viscA4Z+vg4*(rAz( i , j ,bi,bj)**2) |
177 |
viscA4_Z(i,j)=min(viscA4Max,Alin+Alth) |
viscA4_Z(i,j)=min(viscA4Max,Alin+Alth) |
178 |
IF (vg4Max.GT.0.) THEN |
IF (vg4Max.GT.0.) THEN |