File: RELATIVE:/../../../mfix.git/model/cartesian_grid/quadric_mod.f

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