1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv! 2 ! ! 3 ! Subroutine: SET_GEOMETRY_DES ! 4 ! Author: R.Garg Date: 19-Mar-14 ! 5 ! ! 6 ! Purpose: Allocate des arrays that are based on Eulerian grid. ! 7 ! ! 8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^! 9 SUBROUTINE SET_GEOMETRY_DES 10 11 12 ! Global Variables: 13 !---------------------------------------------------------------------// 14 ! Arrays for DEM simulations delineating cell edges. 15 use discretelement, only: XE, YN, ZT, DIMN 16 ! Domain bounds (max/min). 17 use discretelement, only: EX2, TY2, NZ2, WX1, BY1, SZ1 18 ! Fluid grid cell dimensions and mesh size 19 USE geometry, only: DX, IMIN3, IMIN2, IMAX2 20 USE geometry, only: DY, JMIN3, JMIN2, JMAX2 21 USE geometry, only: DZ, KMIN3, KMIN2, KMAX2 22 ! Number of particles in the I/J/K direction 23 use param, only: DIMENSION_I, DIMENSION_J, DIMENSION_K 24 25 ! Global Parameters: 26 !---------------------------------------------------------------------// 27 use param1, only: ZERO 28 29 ! Module proceedures. 30 !---------------------------------------------------------------------// 31 use mpi_utility 32 use error_manager 33 34 IMPLICIT NONE 35 36 ! Local Variables: 37 !---------------------------------------------------------------------// 38 ! Generic loop indices 39 INTEGER :: I, J, K 40 ! Error Flag 41 INTEGER :: IER 42 !......................................................................! 43 44 ! Initialize the error manager. 45 CALL INIT_ERR_MSG("SET_GEOMETRY_DES") 46 47 Allocate( XE (0:DIMENSION_I), STAT=IER ) 48 Allocate( YN (0:DIMENSION_J), STAT=IER ) 49 Allocate( ZT (0:DIMENSION_K), STAT=IER ) 50 51 ! Collect the error flags from all ranks. If all allocaitons were 52 ! successfull, do nothing. Otherwise, flag the error and abort. 53 CALL GLOBAL_ALL_SUM(IER) 54 55 56 ! Set boundary edges. 57 ! In some instances wx1,ex2, etc have been used and in others 58 ! xlength,zero, etc are used. the code should be modified for 59 ! consistency throughout 60 EX2 = XLENGTH; WX1 = ZERO ! East/West 61 TY2 = YLENGTH; BY1 = ZERO ! North/South 62 NZ2 = ZLENGTH; SZ1 = ZERO ! Top/Bottom 63 64 ! Initialize arrays. 65 XE(:) = ZERO 66 YN(:) = ZERO 67 ZT(:) = ZERO 68 69 ! Each loop starts at 2 and goes to max+2 (i.e., imin1=2, imax2=imax+2) 70 ! However, the indices range to include ghost cells (0-imax2) to avoid 71 ! multiple if statements in particles_in_cell 72 XE(IMIN2-1) = ZERO-DX(IMIN2) 73 DO I = IMIN2, IMAX2 74 XE(I) = XE(I-1) + DX(I) 75 ENDDO 76 77 YN(JMIN2-1) = ZERO-DY(JMIN2) 78 DO J = JMIN2, JMAX2 79 YN(J) = YN(J-1) + DY(J) 80 ENDDO 81 82 IF(DIMN.EQ.3) THEN 83 ZT(KMIN2-1) = ZERO-DZ(KMIN2) 84 DO K = KMIN2, KMAX2 85 ZT(K) = ZT(K-1) + DZ(K) 86 ENDDO 87 ENDIF 88 89 CALL FINL_ERR_MSG 90 91 RETURN 92 END SUBROUTINE SET_GEOMETRY_DES 93