1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC 2 ! C 3 ! Module name: tolerance C 4 ! Purpose: Specify all tolerance parameters C 5 ! C 6 ! Author: M. Syamlal Date: 24-JUL-92 C 7 ! C 8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C 9 10 MODULE toleranc 11 12 use param1, only: one 13 14 ! Minimum value of solids volume fraction tracked 15 DOUBLE PRECISION, PARAMETER :: ZERO_EP_s = 1.0D-8 16 17 ! Small value for species mass fraction for disregarding residual 18 ! calculation 19 DOUBLE PRECISION, PARAMETER :: ZERO_X_gs = 1.0D-7 20 21 ! Dilute flow threshold. When the volume fraction of a certain phase 22 ! in a cell is smaller than this value the momentum equation for that 23 ! phase is not solved in the cell. 24 DOUBLE PRECISION, PARAMETER :: DIL_EP_s = 1.0D-4 25 26 ! Tolerance used for comparing two numbers for equality in function 27 ! compare(a, b) 28 DOUBLE PRECISION, PARAMETER :: TOL_COM = 1.0D-4 29 30 ! Upper bound for temperatures 31 DOUBLE PRECISION, PARAMETER :: TMAX = 4000.D0 32 33 ! Lower bound for temperatures 34 DOUBLE PRECISION, PARAMETER :: TMIN = 250.D0 35 36 ! Reciprocal of a maximum molecular weight 37 DOUBLE PRECISION, PARAMETER :: oMW_MAX = (ONE/500.D0) 38 39 ! Maximum value of velocities set to avoid divergence problems. 40 DOUBLE PRECISION :: MAX_INLET_VEL 41 42 ! User definable factor used to scale MAX_INLET_VEL. Default value is 1. 43 DOUBLE PRECISION :: MAX_INLET_VEL_FAC 44 45 ! Maximum allowed velocity of gas or solids in case no inlet velocities 46 ! (or zero velocities) are defined at inlet (see function 47 ! check_vel_bound) 48 DOUBLE PRECISION, PARAMETER :: MAX_ALLOWED_VEL = 500.0D+2 49 50 ! The following quantities can be specified through the input data 51 ! file, with namelist inputs of the same name. 52 ! ------------------------------------------------------------------->> 53 ! Tolerance in residuals allowed for convergence 54 DOUBLE PRECISION :: TOL_RESID 55 56 ! Tolerance in energy eq residuals allowed for convergence 57 DOUBLE PRECISION :: TOL_RESID_T 58 59 ! Tolerance in species eq residuals allowed for convergence 60 DOUBLE PRECISION :: TOL_RESID_X 61 62 ! Tolerance in scalr eq residuals allowed for convergence 63 DOUBLE PRECISION :: TOL_RESID_Scalar 64 65 ! Tolerance in K & Epsilon eq residuals allowed for convergence 66 DOUBLE PRECISION :: TOL_RESID_K_Epsilon 67 68 ! Tolerance in Granular Temperature eq residuals allowed for convergence 69 DOUBLE PRECISION :: TOL_RESID_Th 70 71 ! Minimum residual for declaring divergence 72 DOUBLE PRECISION :: TOL_DIVERGE 73 74 ! Factor for normalizing the residual of gas cont. eq. 75 DOUBLE PRECISION :: NORM_g 76 77 ! Factor for normalizing the residual of solids cont. eq. 78 DOUBLE PRECISION :: NORM_s 79 ! -------------------------------------------------------------------<< 80 81 ! Detect negative Rho_g in physical_prop to reduce DT in iterate 82 LOGICAL :: Neg_RHO_G = .FALSE. 83 84 CONTAINS 85 86 87 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv! 88 ! ! 89 ! Purpose: Test if two small values are nearly equal ! 90 ! ! 91 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^! 92 93 LOGICAL FUNCTION COMPARE (V1, V2) 94 95 use param1, only: small_number, one 96 IMPLICIT NONE 97 98 ! Dummy arguments 99 ! -------------------------------------------------------------------// 100 ! Values to be compared 101 DOUBLE PRECISION, INTENT(IN) :: V1, V2 102 103 IF (ABS(V1) <= SMALL_NUMBER) THEN 104 IF (ABS(V2) <= SMALL_NUMBER) THEN 105 COMPARE = .TRUE. 106 ELSE 107 COMPARE = .FALSE. 108 ENDIF 109 ELSE 110 IF (ABS(V2/V1 - ONE) <= TOL_COM) THEN 111 COMPARE = .TRUE. 112 ELSE 113 COMPARE = .FALSE. 114 ENDIF 115 ENDIF 116 RETURN 117 END FUNCTION COMPARE 118 119 120 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv! 121 ! ! 122 ! Purpose: Test if given variable is smaller than specified tolerance ! 123 ! ! 124 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^! 125 126 LOGICAL FUNCTION IS_SMALL (V, TOL) 127 128 use compar, only: ijkstart3, ijkend3 129 use functions, only: fluid_at 130 use param, only: dimension_3 131 IMPLICIT NONE 132 133 ! Dummy arguments 134 !--------------------------------------------------------------------// 135 ! Tolerance value for small 136 DOUBLE PRECISION, INTENT(IN) :: TOL 137 ! Field variable array 138 DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMENSION_3) :: V 139 140 ! Local variables 141 !--------------------------------------------------------------------// 142 INTEGER :: IJK 143 144 IS_SMALL = .FALSE. 145 DO IJK = ijkstart3, ijkend3 146 IF (FLUID_AT(IJK)) THEN 147 IF (ABS(V(IJK)) > TOL) RETURN 148 ENDIF 149 END DO 150 IS_SMALL = .TRUE. 151 152 RETURN 153 END FUNCTION IS_SMALL 154 155 END MODULE toleranc 156