File: N:\mfix\model\check_data\check_numerics.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: CHECK_NUMERICS                                          !
4     !  Purpose: Check the numerics control namelist section                !
5     !                                                                      !
6     !  Author: P. Nicoletti                               Date: 27-NOV-91  !
7     !                                                                      !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE CHECK_NUMERICS
10     
11     
12     ! Global Variables:
13     !---------------------------------------------------------------------//
14     ! Flag: Use the Fourth-order scheme
15           use run, only: FPFOI
16     ! Flag: Use the Chi-scheme
17           use run, only: CHI_SCHEME
18     ! Flag: Set optimal LEQ solver parameters for parallel runs.
19           use leqsol, only: OPT_PARALLEL
20     ! Discretization scheme for various equations
21           USE run, only: DISCRETIZE, SHEAR
22     ! Solve system transpose
23           use leqsol, only: DO_TRANSPOSE
24     ! Minimize dot products in BiCGSTAB
25           use leqsol, only: MINIMIZE_DOTPRODUCTS
26     ! Report solver stats.
27           use leqsol, only: SOLVER_STATISTICS
28     ! Controls reduction of global sums for residuals.
29           use run, only: DEBUG_RESID
30     ! Linear equation, preconditioner sweep method.
31           use leqsol, only: LEQ_SWEEP
32     ! Linear equation solution method.
33           use leqsol, only: LEQ_METHOD
34     ! Calculate dot-products more efficiently for serial runs.
35           use parallel, only: IS_SERIAL
36     
37           use param, only: dim_eqs
38     
39     ! Global Parameters:
40     !---------------------------------------------------------------------//
41     ! NONE
42     
43     ! Global Module procedures:
44     !---------------------------------------------------------------------//
45           use error_manager
46     
47     
48           IMPLICIT NONE
49     
50     
51     ! Local Variables:
52     !---------------------------------------------------------------------//
53     ! Loop counter
54           INTEGER :: L
55     
56     
57     !......................................................................!
58     
59     
60     ! Initialize the error manager.
61           CALL INIT_ERR_MSG("CHECK_NUMERICS")
62     
63           DO L = 1,DIM_EQS
64              IF(DISCRETIZE(L) > 9 .OR. DISCRETIZE(L) < 0) THEN
65                 WRITE(ERR_MSG,2002) trim(ivar('DISCRETIZE',L)),&
66                    trim(ival(DISCRETIZE(L)))
67                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
68              ENDIF
69           ENDDO
70      2002 FORMAT('Error 2002: Invalid option ', A,' = ', A, '.',/  &
71              'Please correct the mfix.dat file.')
72     
73     
74     ! Check fourth-order scheme requirements.
75           IF (FPFOI) THEN
76              DO L = 1,DIM_EQS
77                 IF(DISCRETIZE(L) <= 1) THEN
78                    WRITE(ERR_MSG,2000)
79                    CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
80                 ENDIF
81              ENDDO
82      2000 FORMAT('Error 2000: Fourth-order scheme (FPFOI) requires ',     &
83              'DISCRETIZE >= 2',/'for all equations. Please correct the ',  &
84              'mfix.dat file.')
85           ENDIF
86     
87     
88     ! Check chi scheme requirements.
89           IF(CHI_SCHEME)THEN
90              IF(DISCRETIZE(7) .NE. 3 .AND. DISCRETIZE(7).NE.6) THEN
91                 WRITE(ERR_MSG,2001)
92                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
93      2001 FORMAT('Error 2001: CHI_SCHEME for species equations is only ',  &
94              'implemented',/'for SMART and MUSCL discretization schemes ', &
95              '[DISCRTIZE(7)].',/'Please correct the mfix.dat file.')
96              ENDIF
97              IF (SHEAR) THEN
98                 WRITE(ERR_MSG,2003)
99                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
100      2003 FORMAT('Error 2003: CHI_SCHEME is currently not implemented ',   &
101              'with SHEAR ',/'option. See calc_chi in module chischeme for '&
102              'details.',/'Please correct the mfix.dat file.')
103              ENDIF
104           ENDIF
105     
106     
107     ! Set the optimizations for DMP runs.
108           IF (OPT_PARALLEL) THEN
109              IS_SERIAL = .FALSE.
110              DO_TRANSPOSE = .FALSE.
111              MINIMIZE_DOTPRODUCTS = .TRUE.
112              SOLVER_STATISTICS = .TRUE.
113              DEBUG_RESID = .FALSE.
114              LEQ_SWEEP(1:2) = 'ASAS'
115              LEQ_METHOD(1:2) = 2
116              LEQ_METHOD(3:9) = 1
117           ENDIF
118     
119     ! Finalize the error msg.
120           CALL FINL_ERR_MSG
121     
122           RETURN
123     
124           END SUBROUTINE CHECK_NUMERICS
125