32 INTEGER :: I,J,K,IJK,IP,IM,JP,JM,KP,KM,IJKE,IJKN,IJKT,IJKW,IJKS,IJKB
33 DOUBLE PRECISION :: DU_DX,DU_DY,DU_DZ,DV_DX,DV_DY,DV_DZ,DW_DX,DW_DY,DW_DZ
34 DOUBLE PRECISION :: OMEGA_X,OMEGA_Y,OMEGA_Z
35 DOUBLE PRECISION :: LAMBDA_1,LAMBDA_2,LAMBDA_3
36 DOUBLE PRECISION,
DIMENSION(3,3) :: OMEGA,SS,AA
37 DOUBLE PRECISION,
DIMENSION(4) :: POLY
87 IF ((fluid_at(ijke)).AND.(fluid_at(ijkw)))
THEN 89 du_dx = (
u_g(ijke) -
u_g(ijkw)) / (
x_u(ijke) -
x_u(ijkw))
91 ELSE IF ((fluid_at(ijke)).AND.(.NOT.fluid_at(ijkw)))
THEN 95 ELSE IF ((fluid_at(ijkw)).AND.(.NOT.fluid_at(ijke)))
THEN 105 IF ((fluid_at(ijkn)).AND.(fluid_at(ijks)))
THEN 107 du_dy = (
u_g(ijkn) -
u_g(ijks)) / (
y_u(ijkn) -
y_u(ijks))
109 ELSE IF ((fluid_at(ijkn)).AND.(.NOT.fluid_at(ijks)))
THEN 113 ELSE IF ((fluid_at(ijks)).AND.(.NOT.fluid_at(ijkn)))
THEN 124 IF ((fluid_at(ijkt)).AND.(fluid_at(ijkb)))
THEN 126 du_dz = (
u_g(ijkt) -
u_g(ijkb)) / (
z_u(ijkt) -
z_u(ijkb))
128 ELSE IF ((fluid_at(ijkt)).AND.(.NOT.fluid_at(ijkb)))
THEN 132 ELSE IF ((fluid_at(ijkb)).AND.(.NOT.fluid_at(ijkt)))
THEN 143 IF ((fluid_at(ijke)).AND.(fluid_at(ijkw)))
THEN 145 dv_dx = (
v_g(ijke) -
v_g(ijkw)) / (
x_v(ijke) -
x_v(ijkw))
147 ELSE IF ((fluid_at(ijke)).AND.(.NOT.fluid_at(ijkw)))
THEN 151 ELSE IF ((fluid_at(ijkw)).AND.(.NOT.fluid_at(ijke)))
THEN 161 IF ((fluid_at(ijkn)).AND.(fluid_at(ijks)))
THEN 163 dv_dy = (
v_g(ijkn) -
v_g(ijks)) / (
y_v(ijkn) -
y_v(ijks))
165 ELSE IF ((fluid_at(ijkn)).AND.(.NOT.fluid_at(ijks)))
THEN 169 ELSE IF ((fluid_at(ijks)).AND.(.NOT.fluid_at(ijkn)))
THEN 180 IF ((fluid_at(ijkt)).AND.(fluid_at(ijkb)))
THEN 182 dv_dz = (
v_g(ijkt) -
v_g(ijkb)) / (
z_v(ijkt) -
z_v(ijkb))
184 ELSE IF ((fluid_at(ijkt)).AND.(.NOT.fluid_at(ijkb)))
THEN 188 ELSE IF ((fluid_at(ijkb)).AND.(.NOT.fluid_at(ijkt)))
THEN 200 IF ((fluid_at(ijke)).AND.(fluid_at(ijkw)))
THEN 202 dw_dx = (
w_g(ijke) -
w_g(ijkw)) / (
x_w(ijke) -
x_w(ijkw))
204 ELSE IF ((fluid_at(ijke)).AND.(.NOT.fluid_at(ijkw)))
THEN 208 ELSE IF ((fluid_at(ijkw)).AND.(.NOT.fluid_at(ijke)))
THEN 218 IF ((fluid_at(ijkn)).AND.(fluid_at(ijks)))
THEN 220 dw_dy = (
w_g(ijkn) -
w_g(ijks)) / (
y_w(ijkn) -
y_w(ijks))
222 ELSE IF ((fluid_at(ijkn)).AND.(.NOT.fluid_at(ijks)))
THEN 226 ELSE IF ((fluid_at(ijks)).AND.(.NOT.fluid_at(ijkn)))
THEN 236 IF ((fluid_at(ijkt)).AND.(fluid_at(ijkb)))
THEN 238 dw_dz = (
w_g(ijkt) -
w_g(ijkb)) / (
z_w(ijkt) -
z_w(ijkb))
240 ELSE IF ((fluid_at(ijkt)).AND.(.NOT.fluid_at(ijkb)))
THEN 244 ELSE IF ((fluid_at(ijkb)).AND.(.NOT.fluid_at(ijkt)))
THEN 255 omega_x = dw_dy - dv_dz
256 omega_y = du_dz - dw_dx
257 omega_z = dv_dx - du_dy
260 vorticity(ijk) = dsqrt(omega_x**2 + omega_y**2 + omega_z**2)
271 omega(1,2) =
half * (du_dy + dv_dx)
272 omega(1,3) =
half * (du_dz + dw_dx)
274 omega(2,1) = omega(1,2)
276 omega(2,3) =
half * (dv_dz + dw_dy)
278 omega(3,1) = omega(1,3)
279 omega(3,2) = omega(2,3)
284 ss(1,2) =
half * (du_dy - dv_dx)
285 ss(1,3) =
half * (du_dz - dw_dx)
289 ss(2,3) =
half * (dv_dz - dw_dy)
296 aa = matmul(omega,omega) + matmul(ss,ss)
303 poly(2) = aa(1,1) + aa(2,2) + aa(3,3)
304 poly(3) = aa(2,1)*aa(1,2) + aa(3,1)*aa(1,3) + aa(3,2)*aa(2,3) &
305 -( aa(1,1)*aa(2,2) + aa(1,1)*aa(3,3) + aa(2,2)*aa(3,3) )
306 poly(4) = aa(1,1)*aa(2,2)*aa(3,3) + aa(1,2)*aa(2,3)*aa(3,1) + aa(2,1)*aa(3,2)*aa(1,3) &
307 -( aa(3,1)*aa(2,2)*aa(1,3) + aa(1,2)*aa(2,1)*aa(3,3) + aa(2,3)*aa(3,2)*aa(1,1) )
316 CALL bairstow(poly,lambda_1,lambda_2,lambda_3)
348 INTEGER :: N,NMAX,ITERMAX,J,ITER
352 DOUBLE PRECISION,
DIMENSION(NMAX):: A,B,C
353 DOUBLE PRECISION:: R,S,DELTA,DELTAR,DELTAS,DENOM
354 DOUBLE PRECISION:: EPS
355 DOUBLE PRECISION:: X1,X2,X3
356 DOUBLE PRECISION:: BUFFER1
358 LOGICAL :: TEST1, TEST2, TEST3
382 b(2) = a(2) + r * b(1)
384 c(2) = b(2) + r * c(1)
385 b(3) = a(3) + r * b(2) + s * b(1)
386 c(3) = b(3) + r * c(2) + s * c(1)
387 b(4) = a(4) + r * b(3) + s * b(2)
393 denom = c(n-1) * c(n-1) - c(n)*c(n-2)
395 deltar = (-b(n)*c(n-1) + b(n+1)*c(n-2) ) / denom
396 deltas = (-c(n-1)*b(n+1) + b(n)*c(n) ) / denom
407 test1 = (abs( b(n) ) > eps)
408 test2 = (abs( b(n+1)) > eps)
409 test3 = (iter <= itermax)
411 IF(test1.AND.test2.AND.test3)
GOTO 20
428 delta = r*r + 4.0d0 * s
430 IF (delta.LT.0.0d0)
THEN 439 x1 = ( r + dsqrt(delta)) / ( 2.0d0 )
440 x2 = ( r - dsqrt(delta)) / ( 2.0d0 )
456 IF(dabs(a(1))<1.0d-9)
THEN
double precision, dimension(:), allocatable y_v
double precision, dimension(:), allocatable z_u
integer, dimension(:), allocatable i_of
double precision, parameter one
double precision, dimension(:), allocatable x_u
double precision, parameter undefined
double precision, dimension(:), allocatable y_w
double precision, dimension(:), allocatable z_v
integer, dimension(:), allocatable k_of
double precision, dimension(:), allocatable x_w
integer, dimension(:), allocatable j_of
double precision, dimension(:), allocatable v_g
subroutine bairstow(A, X1, X2, X3)
double precision, dimension(:), allocatable w_g
double precision, dimension(:), allocatable x_v
double precision, parameter half
double precision, dimension(:), allocatable vorticity
logical, dimension(:), allocatable interior_cell_at
subroutine calc_vorticity
double precision, dimension(:), allocatable u_g
double precision, dimension(:), allocatable lambda2
double precision, dimension(:), allocatable z_w
double precision, dimension(:), allocatable y_u
double precision, parameter zero