31 DOUBLE PRECISION,
DIMENSION(3,3) :: Rx,Ry,Rz,C_QUADRIC,R_QUADRIC
47 r_quadric = matmul(rz,matmul(ry,rx))
92 DOUBLE PRECISION :: x1,x2,x3,xt,yt,zt,R1,R2,xtr,ytr,ztr
93 DOUBLE PRECISION :: THETA,THETA1,THETA2,THETA3m,THETA3
94 DOUBLE PRECISION :: THETA1CYL1,THETA2TOR,THETA3CYL2,THETA_MIN
95 DOUBLE PRECISION :: Y1,Y2,R
96 DOUBLE PRECISION :: c,ss,ytest1,ytest2
98 DOUBLE PRECISION :: fxmin,fxmax,fymin,fymax,fzmin,fzmax
99 DOUBLE PRECISION,
DIMENSION(1,3) :: X_VECTOR,XMT
100 DOUBLE PRECISION,
DIMENSION(3,1) :: TXMT
101 DOUBLE PRECISION,
DIMENSION(1,1) :: TEMP_1x1
103 LOGICAL :: CLIP_X,CLIP_Y,CLIP_Z,CLIP_FLAG
104 LOGICAL :: PIECE_X,PIECE_Y,PIECE_Z,PIECE_FLAG
106 DOUBLE PRECISION :: YR1,YR2,RR1,RR2
107 DOUBLE PRECISION :: YRR1,YRR2,RC1,RC2,YC1,YC2
113 piece_y = (piece_ymin(q_id) <= x2).AND.( x2 <= piece_ymax(q_id))
114 piece_z = (piece_zmin(q_id) <= x3).AND.( x3 <= piece_zmax(q_id))
116 piece_flag = (piece_x.AND.piece_y.AND.piece_z)
118 IF(.NOT.piece_flag)
THEN 124 clip_y = (clip_ymin(q_id) <= x2).AND.( x2 <= clip_ymax(q_id))
125 clip_z = (clip_zmin(q_id) <= x3).AND.( x3 <= clip_zmax(q_id))
127 clip_flag = (clip_x.AND.clip_y.AND.clip_z)
143 f = -(4*(xt**2+zt**2)*r1**2-(xt**2+yt**2+zt**2+r1**2-r2**2)**2)
159 f = 4*(xtr**2+ztr**2)*r1**2-(xtr**2+ytr**2+ztr**2+r1**2-r2**2)**2
192 ELSEIF(x2<=ytest1)
THEN 198 f = 4*(xtr**2+ytr**2)*r1**2-(xtr**2+ytr**2+ztr**2+r1**2-r2**2)**2
235 IF(ytest1<=ytr.AND.ytr<=ytest2)
THEN 236 f = 4*(xtr**2)*r1**2-(xtr**2+ztr**2+r1**2-r2**2)**2
237 ELSEIF(ytr<=ytest1)
THEN 239 theta = atan2(ytr-ytest1,xtr)
240 IF(-0.75*
pi<=theta.AND.theta<=-0.25*
pi)
THEN 241 f = - ( ((ytr-(
ucoil_y1(q_id) + r2))/r2)**2 + (ztr/r2)**2 -1.0 )
243 f = 4*(xtr**2)*r1**2-(xtr**2+ztr**2+r1**2-r2**2)**2
245 ELSEIF(ytr>=ytest2)
THEN 247 theta = atan2(ytr-ytest2,xtr)
248 IF(0.25*
pi<=theta.AND.theta<0.75*
pi)
THEN 249 f = - ( ((ytr-(
ucoil_y2(q_id) - r2))/r2)**2 + (ztr/r2)**2 -1.0 )
251 f = 4*(xtr**2)*r1**2-(xtr**2+ztr**2+r1**2-r2**2)**2
289 theta2 = bend_theta2(q_id)*(
pi/180.0d0)
293 IF(theta<
zero) theta = theta + 2.0d0*
pi 296 IF(theta2>theta1)
THEN 297 theta3m =
half*(theta1+theta2)
299 theta3 = theta3m +
pi 301 theta3 = theta3m -
pi 304 theta3 = theta2 +
half * (theta1-theta2)
310 IF(theta1>theta3)
THEN 313 theta1cyl1 = theta1 + 2.0*
pi 316 IF(theta2>theta1)
THEN 319 theta2tor = theta2 + 2.0*
pi 322 IF(theta3>theta2)
THEN 325 theta3cyl2 = theta3 + 2.0*
pi 328 theta_min = dmin1(theta1,theta2,theta3,theta1cyl1,theta2tor,theta3cyl2)
330 IF(theta<theta_min) theta = theta + 2.0*
pi 333 IF(theta3<=theta.AND.theta<=theta1cyl1)
THEN 337 xt = x1-(
t_x(q_id)+r1*c)
338 yt = x2-(
t_y(q_id)+r1*ss)
345 f = (xtr/r2)**2 + (ztr/r2)**2 -1.0
347 ELSEIF(theta1<=theta.AND.theta<=theta2tor)
THEN 357 f = -4*(xtr**2+ytr**2)*r1**2+(xtr**2+ytr**2+ztr**2+r1**2-r2**2)**2
359 ELSEIF(theta2<=theta.AND.theta<=theta3cyl2)
THEN 363 xt = x1-(
t_x(q_id)+r1*c)
364 yt = x2-(
t_y(q_id)+r1*ss)
371 f = (xtr/r2)**2 + (ztr/r2)**2 -1.0
374 WRITE(*,*)
' Error in processing elbow.',
'THETA = ',theta/
pi*180.0
406 r = r1 + (r2-r1)/(y2-y1)*(ytr-y1)
412 f = (xtr/r)**2 + (ztr/r)**2 - 1.0
432 r2 = reactor1_r2(q_id)
436 y2 = reactor1_y2(q_id)
443 yr2 = reactor1_yr2(q_id)
444 rr2 = reactor1_rr2(q_id)
445 theta2 = reactor1_theta2(q_id)
448 yrr1 = yr1 - rr1 * dsin(theta1)
449 rc1 = r1-rr1*(
one-dcos(theta1))
450 yc1 = yrr1 - rc1/dtan(theta1)
451 yrr2 = yr2 + rr2 * dsin(theta2)
452 rc2 = r2-rr2*(
one-dcos(theta2))
453 yc2 = yrr2 + rc2/dtan(theta2)
459 ELSEIF(yrr2<=ytr.AND.ytr<=yc2)
THEN 461 r = rc2/(yrr2-yc2)*(ytr-yc2)
463 ELSEIF(yr2<=ytr.AND.ytr<=yrr2)
THEN 465 r = r2 - rr2 + dsqrt(rr2**2 - (yr2-ytr)**2)
467 ELSEIF(y2<=ytr.AND.ytr<=yr2)
THEN 471 ELSEIF(y1<=ytr.AND.ytr<=y2)
THEN 473 r = r1 + (r2-r1)/(y2-y1)*(ytr-y1)
475 ELSEIF(yr1<=ytr.AND.ytr<=y1)
THEN 479 ELSEIF(yrr1<=ytr.AND.ytr<=yr1)
THEN 481 r = r1 - rr1 + dsqrt(rr1**2 - (yr1-ytr)**2)
483 ELSEIF(yc1<=ytr.AND.ytr<=yrr1)
THEN 485 r = rc1/(yrr1-yc1)*(ytr-yc1)
495 f = (xtr/r)**2 + (ztr/r)**2 - 1.0
510 txmt = transpose(xmt)
512 temp_1x1 = matmul(xmt,matmul(
a_quadric(:,:,q_id),txmt))
542 fymin = -(clip_ymin(q_id)-x2)
547 fymax = -(x2-clip_ymax(q_id))
552 fzmin = -(clip_zmin(q_id)-x3)
557 fzmax = -(x3-clip_zmax(q_id))
574 fymin = clip_ymin(q_id)-x2
579 fymax = x2-clip_ymax(q_id)
584 fzmin = clip_zmin(q_id)-x3
589 fzmax = x3-clip_zmax(q_id)
628 DOUBLE PRECISION x1,x2,x3
629 INTEGER :: I,Q_ID,GROUP,GS,P
630 LOGICAL :: PIECE_X,PIECE_Y,PIECE_Z,PIECE_FLAG
631 CHARACTER(LEN=9) :: GR
638 IF( gr /=
'PIECEWISE')
RETURN 645 piece_y = (piece_ymin(i) <= x2).AND.( x2 <= piece_ymax(i))
646 piece_z = (piece_zmin(i) <= x3).AND.( x3 <= piece_zmax(i))
648 piece_flag = (piece_x.AND.piece_y.AND.piece_z)
650 IF (piece_flag) q_id = i
655 WRITE(*,*)
' No Quadric defined at current location x,y,z=', x1,x2,x3
656 WRITE(*,*)
' Please Check piecewise limits of quadric(s)' 657 WRITE(*,*)
' Mfix will exit now.' 686 DOUBLE PRECISION:: scalar1,scalar2,scalar3
687 DOUBLE PRECISION,
DIMENSION(1,3) :: M1x3
718 DOUBLE PRECISION:: lambda1,lambda2,lambda3
719 DOUBLE PRECISION,
DIMENSION(3,3) :: C_QUADRIC
723 c_quadric = transpose(reshape((/ &
753 DOUBLE PRECISION:: Theta
754 DOUBLE PRECISION,
DIMENSION(3,3) :: R
756 theta = theta * (
pi/180.0d0)
760 r = transpose(reshape((/ &
762 zero , dcos(theta) , dsin(theta) ,&
763 zero , -dsin(theta) , dcos(theta) /),&
791 DOUBLE PRECISION:: Theta
792 DOUBLE PRECISION,
DIMENSION(3,3) :: R
794 theta = theta * (
pi/180.0d0)
798 r = transpose(reshape((/ &
799 dcos(theta) ,
zero , dsin(theta) ,&
801 -dsin(theta) ,
zero , dcos(theta) /),&
830 DOUBLE PRECISION:: Theta
831 DOUBLE PRECISION,
DIMENSION(3,3) :: R
833 theta = theta * (
pi/180.0d0)
837 r = transpose(reshape((/ &
838 dcos(theta) , dsin(theta) ,
zero ,&
839 -dsin(theta) , dcos(theta) ,
zero ,&
double precision, dimension(1, 3, dim_quadric) t_quadric
double precision, dimension(dim_quadric) reactor1_y1
integer, dimension(dim_group) group_size
double precision, parameter one
double precision, dimension(dim_quadric) theta_y
double precision, dimension(dim_quadric) c2c_r2
double precision, dimension(dim_quadric) c2c_r1
double precision, dimension(dim_quadric) lambda_x
double precision, dimension(dim_quadric) torus_r2
subroutine get_f_quadric(x1, x2, x3, Q_ID, f, CLIP_FLAG)
double precision, dimension(dim_quadric) clip_xmax
double precision, dimension(dim_quadric) t_x
double precision, parameter undefined
double precision, dimension(dim_quadric) ucoil_y1
double precision, dimension(dim_quadric) ucoil_r2
double precision, dimension(dim_quadric) reactor1_r1
double precision, dimension(dim_quadric) c2c_y2
double precision, dimension(dim_quadric) torus_r1
subroutine mfix_exit(myID, normal_termination)
double precision, dimension(dim_quadric) theta_x
double precision, dimension(dim_quadric) ucoil_r1
double precision, dimension(dim_quadric) bend_r2
double precision, dimension(dim_quadric) bend_r1
double precision, dimension(dim_quadric) reactor1_theta1
double precision, dimension(dim_quadric) dquadric
double precision, parameter half
double precision, dimension(dim_quadric) ucoil_y2
double precision, dimension(dim_quadric) lambda_y
subroutine define_quadrics
logical, dimension(dim_quadric) fluid_in_clipped_region
subroutine build_1x3_matrix(scalar1, scalar2, scalar3, M1x3)
subroutine build_x_rotation_matrix(Theta, R)
character(len=12), dimension(dim_quadric) quadric_form
subroutine build_z_rotation_matrix(Theta, R)
character(len=9), dimension(dim_group) group_relation
subroutine build_y_rotation_matrix(Theta, R)
double precision, dimension(dim_quadric) clip_xmin
subroutine build_c_quadric_matrix(lambda1, lambda2, lambda3, C_QUADRIC)
double precision, dimension(dim_quadric) reactor1_yr1
double precision, dimension(dim_quadric) t_y
double precision, dimension(dim_quadric) piece_xmin
double precision, dimension(dim_quadric) reactor1_rr1
double precision, parameter pi
double precision, dimension(dim_quadric) bend_theta1
double precision, dimension(dim_quadric) t_z
double precision, dimension(3, 3, dim_quadric) a_quadric
double precision, dimension(dim_quadric) c2c_y1
integer, dimension(dim_group, dim_quadric) group_q
double precision, parameter zero
subroutine reasssign_quadric(x1, x2, x3, GROUP, Q_ID)
double precision, dimension(dim_quadric) piece_xmax