File: N:\mfix\model\cartesian_grid\quadric_mod.f

1           MODULE quadric
2     
3     !     Maximum of the number of quadrics that can be read
4           INTEGER, PARAMETER          :: DIM_QUADRIC = 500
5     !     Nnumber of quadrics
6           INTEGER                     :: N_QUADRIC
7     !     Current Quadric
8           INTEGER :: QUADRIC_ID
9     !     form of quadric : 'normal' or one of the pre-defined quadrics
10           CHARACTER (LEN=12), DIMENSION(DIM_QUADRIC) :: quadric_form
11     !     Scale factor for quadrics
12           DOUBLE PRECISION :: quadric_scale
13     !     Characteristic values of the quadrics
14           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: Lambda_x,Lambda_y,Lambda_z
15     !     d - coefficient of the quadrics
16           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: dquadric
17     !     Translation components of the quadrics
18           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: t_x,t_y,t_z
19     !     Rotation angles (Deg) of the quadrics
20           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: theta_x,theta_y,theta_z
21     !     Radius for either Spere or Cylinder (pre-defined quadrics)
22           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: Radius
23     !     Radii for Torus
24           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: Torus_R1, Torus_R2
25     !     Radii for U-coil
26           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: UCOIL_R1, UCOIL_R2
27           !     Y-location of bends for U-coil
28           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: UCOIL_Y1, UCOIL_Y2
29     !     Radii for Bend
30           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: BEND_R1, BEND_R2
31     !     Angles for Bend
32           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: BEND_THETA1, BEND_THETA2
33     !     Y-locations of cylinder-cone-cylinder
34           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: C2C_Y1, C2C_Y2
35     !     Radii of cylinder-cone-cylinder
36           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: C2C_R1, C2C_R2
37     !     Half-angle for cone (pre-defined quadrics)
38           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: Half_angle
39     !     Reactor 1 lower, upper cylinder radii
40           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: REACTOR1_R1,REACTOR1_R2
41     !     Reactor 1 lower, upper conical transition between cylinders
42           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: REACTOR1_Y1,REACTOR1_Y2
43     !     Reactor 1 lower, upper rounding locations
44           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: REACTOR1_YR1,REACTOR1_YR2
45     !     Reactor 1 lower, upper rounding radii
46           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: REACTOR1_RR1,REACTOR1_RR2
47     !     Reactor 1 lower, upper rounding angles
48           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: REACTOR1_THETA1,REACTOR1_THETA2
49     !     Normal vector components for plane (pre-defined quadrics)
50           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: n_x,n_y,n_z
51     !     A-matrices of the quadrics
52           DOUBLE PRECISION, DIMENSION(3,3,DIM_QUADRIC) :: A_QUADRIC
53     !     Translation-matrices of the quadrics
54           DOUBLE PRECISION, DIMENSION(1,3,DIM_QUADRIC) :: T_QUADRIC
55     !     Clipping range  of the quadrics
56           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: clip_xmin,clip_xmax,clip_ymin,clip_ymax,clip_zmin,clip_zmax
57     !     Piecewise range  of the quadrics
58           DOUBLE PRECISION, DIMENSION(DIM_QUADRIC) :: piece_xmin,piece_xmax,piece_ymin,piece_ymax,piece_zmin,piece_zmax
59     !     Clip flag
60           LOGICAL, DIMENSION(DIM_QUADRIC) :: FLUID_IN_CLIPPED_REGION
61     !     Boundary condition ID
62           INTEGER :: BC_ID_Q(DIM_QUADRIC)
63     !     Maximum number of groups
64           INTEGER, PARAMETER :: DIM_GROUP = 50
65     !     Number of groups
66           INTEGER :: N_GROUP
67     !     Number of quadric in each group
68           INTEGER,DIMENSION(DIM_GROUP) :: GROUP_SIZE
69     !     Quadric ID list in each group
70           INTEGER,DIMENSION(DIM_GROUP,DIM_QUADRIC) :: GROUP_Q
71     !     Quadric relation in each group
72           CHARACTER(LEN=9),DIMENSION(DIM_GROUP) :: GROUP_RELATION
73     !     Relation between groups
74           CHARACTER(LEN=9),DIMENSION(DIM_GROUP) :: RELATION_WITH_PREVIOUS
75     !     Tolerance for intersection between quadrics and planes
76           DOUBLE PRECISION :: TOL_F
77     !     Maximum number of iterations while finding intersection between geometry and grid
78           INTEGER :: ITERMAX_INT
79     
80         CONTAINS
81     
82     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC
83     !                                                                      C
84     !  Function name: CROSS_PRODUCT                                        C
85     !  Purpose: Performs the cross product between two vectors             C
86     !           C = A x B                                                  C
87     !                                                                      C
88     !  Author: Jeff Dietiker                              Date: 21-Feb-08  C
89     !  Reviewer:                                          Date:            C
90     !                                                                      C
91     !  Revision Number #                                  Date: ##-###-##  C
92     !  Author: #                                                           C
93     !  Purpose: #                                                          C
94     !                                                                      C
95     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C
96     
97           FUNCTION CROSS_PRODUCT(A,B)
98     
99             IMPLICIT NONE
100             DOUBLE PRECISION, DIMENSION(3) :: CROSS_PRODUCT
101             DOUBLE PRECISION, INTENT(IN), DIMENSION(3) :: A,B
102     
103             CROSS_PRODUCT(1) = A(2) * B(3) - A(3) * B(2)
104             CROSS_PRODUCT(2) = A(3) * B(1) - A(1) * B(3)
105             CROSS_PRODUCT(3) = A(1) * B(2) - A(2) * B(1)
106     
107           END FUNCTION CROSS_PRODUCT
108     
109         END MODULE quadric
110