File: /nfs/home/0/users/jenkins/mfix.git/model/des/set_filter_des.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: SET_FILTER_DES                                          !
4     !  Author: J.Musser                                   Date: 25-Nov-14  !
5     !                                                                      !
6     !  Purpose:                                                            !
7     !                                                                      !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE SET_FILTER_DES
10     
11     ! Runtime Flag: Utilize cutcell geometry.
12           use cutcell, only: CARTESIAN_GRID
13     ! Runtime Flag: Invoke gas/solids coupled simulation.
14           use discretelement, only: DES_CONTINUUM_COUPLED
15     
16           use geometry, only: DX, IMIN1, IMAX1
17           use geometry, only: DY, JMIN1, JMAX1
18           use geometry, only: DZ, KMIN1, KMAX1, DO_K
19     
20           use particle_filter, only: DES_INTERP_SCHEME_ENUM
21           use particle_filter, only: DES_INTERP_NONE
22           use particle_filter, only: DES_INTERP_GARG
23           use particle_filter, only: DES_INTERP_DPVM
24           use particle_filter, only: DES_INTERP_GAUSS
25           use particle_filter, only: DES_INTERP_SCHEME
26     
27           use particle_filter, only: DES_INTERP_WIDTH
28           use particle_filter, only: FILTER_WIDTH_INTERP
29           use particle_filter, only: DES_INTERP_MEAN_FIELDS
30           use particle_filter, only: DES_INTERP_ON
31     
32           use particle_filter, only: OoFILTER_VOL
33           use particle_filter, only: FILTER_WIDTH_INTERPx3
34     
35           use desgrid, only: DG_DXinv, DG_DYinv, DG_DZinv
36     
37           use param1, only: ONE, UNDEFINED, UNDEFINED_C
38     
39           use sendrecvnode, only: DES_SETNODEINDICES
40           use mpi_utility, only: GLOBAL_ALL_MIN
41     
42           use error_manager
43     
44           IMPLICIT NONE
45     
46           DOUBLE PRECISION :: DXYZ_MIN, DG_DXYZ_MIN
47     
48     
49     !......................................................................!
50     
51     ! Initialize the error manager.
52           CALL INIT_ERR_MSG("SET_FILTER_DES")
53     
54     ! Get the minimum fluid cell dimension
55           DXYZ_MIN = min(minval(DX(IMIN1:IMAX1)),minval(DY(JMIN1:JMAX1)))
56           IF(DO_K) DXYZ_MIN = min(DXYZ_MIN,minval(DZ(KMIN1:KMAX1)))
57     
58     ! Get the minimum DES grid cell dimension
59           DG_DXYZ_MIN = min(ONE/DG_DXinv, ONE/DG_DYinv)
60           IF(DO_K) DG_DXYZ_MIN = min(DG_DXYZ_MIN, ONE/DG_DZinv)
61           CALL GLOBAL_ALL_MIN(DG_DXYZ_MIN)
62     
63     ! Verify that the interpolation scheme doesn't exceed the grid.
64           IF(DES_INTERP_WIDTH /= UNDEFINED) THEN
65     
66              IF(0.5d0*DES_INTERP_WIDTH > DXYZ_MIN .OR.                     &
67                 0.5d0*DES_INTERP_WIDTH > DG_DXYZ_MIN) THEN
68     
69                 WRITE(ERR_MSG,2130) DXYZ_MIN, DG_DXYZ_MIN, DES_INTERP_WIDTH
70                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
71     
72      2130 FORMAT('Error 2130: The specified DES_INTERP_WIDTH is too ',     &
73              'large. The',/'interpolation half-width should not exceed ',  &
74              'either the minimum fluid',/'cell dimension [DES_INTERP_',    &
75              'WIDTH/2.0 <= min(DX,DY,DZ)] nor should it',/'exceed the ',   &
76              'minimum DES grid cell.',2/3x,'Minimum fluid cell dimension:',&
77              5x,g12.4,/3x,'Minimum DES grid cell dimension:',2x,g12.4/3x,  &
78              'DES_INTERP_WIDTH:',17x,g12.4,2/,'By default, the DES grid ', &
79              'dimensions are calculated as three times the',/'maximum ',   &
80              'particle diameter. This can be altered by specifying',/'DES',&
81              'GRIDSEARCH_IMAX, DESGRIDSEARCH_JMAX, and DESGRIDSEARH_KMAX ',&
82              'in the',/'mfix.dat file.')
83     
84     ! Shrink the filter just a little if it matches exactly to ensure that
85     ! interpolation remains within the 27 cell bounds.
86              ELSEIF(0.5d0*DES_INTERP_WIDTH == DXYZ_MIN .OR.                &
87                 0.5d0*DES_INTERP_WIDTH == DG_DXYZ_MIN) THEN
88     
89                 FILTER_WIDTH_INTERP = 0.499d0*DXYZ_MIN
90              ELSE
91                 FILTER_WIDTH_INTERP = 0.500d0*DES_INTERP_WIDTH
92              ENDIF
93     
94     
95           ENDIF
96     
97     
98     ! Calculate reused quanties
99           SELECT CASE(DES_INTERP_SCHEME_ENUM)
100     
101           CASE(DES_INTERP_GARG)
102     ! Compute the volume of nodes needed in drag_fgs_des0.f
103              CALL COMPUTE_VOLUME_OF_NODES
104     ! Setup MPI exchange arrys for nodes
105              CALL DES_SETNODEINDICES
106     
107           CASE(DES_INTERP_DPVM, DES_INTERP_GAUSS)
108              OoFILTER_VOL = 0.25d0/(FILTER_WIDTH_INTERP**3)
109              FILTER_WIDTH_INTERPx3 = FILTER_WIDTH_INTERP*3
110           END SELECT
111     
112           CALL FINL_ERR_MSG
113     
114           RETURN
115           END SUBROUTINE SET_FILTER_DES
116