File: RELATIVE:/../../../mfix.git/model/des/read_res0_des.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: DES_READ_RESTART                                        !
4     !  Purpose : Reads either single restart file or multiple restart      !
5     !  fles (based on bdist_io) flag.                                      !
6     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
7           SUBROUTINE READ_RES0_DES
8     
9           use cdist
10           use compar
11           use des_allocate
12           use des_bc
13           use des_rxns
14           use des_thermo
15           use desmpi
16           use discretelement
17           use error_manager
18           use machine
19           use mfix_pic, only: MPPIC, DES_STAT_WT
20           use mpi_utility
21           use param1
22           use read_res1_des
23           use run
24     
25           implicit none
26     
27           INTEGER :: LC1, LC2
28           INTEGER :: lDIMN, lNEXT_REC
29     
30           DOUBLE PRECISION :: VERSION
31     
32           lDIMN = merge(2,3,NO_K)
33     
34           CALL INIT_READ_RES_DES(trim(RUN_NAME), VERSION, lNEXT_REC)
35     
36           CALL READ_RES_DES(lNEXT_REC, VTP_FINDEX)
37           CALL READ_RES_DES(lNEXT_REC, TECPLOT_FINDEX)
38           CALL READ_RES_DES(lNEXT_REC, DTSOLID)
39     
40     ! Position data is read and used to setup pARRAY reads.
41           CALL READ_PAR_POS(lNEXT_REC)
42     
43           CALL READ_RES_pARRAY(lNEXT_REC, iGLOBAL_ID)
44     
45           CALL READ_RES_pARRAY(lNEXT_REC, particle_state)
46     
47           DO LC1 = 1, lDIMN
48              CALL READ_RES_pARRAY(lNEXT_REC, DES_VEL_NEW(LC1,:))
49           ENDDO
50     
51           DO LC1 = 1, merge(1,3,NO_K)
52              CALL READ_RES_pARRAY(lNEXT_REC, OMEGA_NEW(LC1,:))
53           ENDDO
54     
55           CALL READ_RES_pARRAY(lNEXT_REC, DES_RADIUS)
56           CALL READ_RES_pARRAY(lNEXT_REC, RO_SOL)
57     
58           IF(MPPIC) CALL READ_RES_pARRAY(lNEXT_REC, DES_STAT_WT)
59           IF(ENERGY_EQ) CALL READ_RES_pARRAY(lNEXT_REC, DES_T_s_NEW)
60     
61           IF(ANY_SPECIES_EQ) THEN
62              DO LC1=1, DIMENSION_N_S
63                 CALL READ_RES_pARRAY(lNEXT_REC, DES_X_s(:,LC1))
64              ENDDO
65           ENDIF
66     
67           IF(VERSION >= 1.1) THEN
68              CALL READ_RES_DES(lNEXT_REC, DES_USR_VAR_SIZE)
69              DO LC1=1, DES_USR_VAR_SIZE
70                 CALL READ_RES_pARRAY(lNEXT_REC, DES_USR_VAR(LC1,:))
71              ENDDO
72           ENDIF
73     
74     ! RES2 does not need the collision of BC information.
75           IF(RUN_TYPE == 'RESTART_2') RETURN
76     
77     ! Collision/neighbor data is read and used to setup cARRAY reads.
78           CALL READ_PAR_COL(lNEXT_REC)
79     
80           DO LC1=1, lDIMN
81              CALL READ_RES_cARRAY(lNEXT_REC, PFT_NEIGHBOR(LC1,:))
82           ENDDO
83     
84     ! Save the number of BCMI's read from input file, then read the
85     ! value from the restart file.
86           CALL READ_RES_DES(lNEXT_REC, DEM_BCMI)
87     
88     ! Allocation of MIs is done here to ignore changes to the mfix.dat
89     ! file during RES1.
90           IF(DEM_BCMI > 0) CALL ALLOCATE_DEM_MI
91     
92     ! Only save the number of mass inflows for RESTART_1. This allows
93     ! for mass inflows to be added/removed with RESTART_2.
94     ! Todo: Prune entering/exiting flagged particles for RESTART_2.
95           DO LC1=1, DEM_BCMI
96              CALL READ_RES_DES(lNEXT_REC, DEM_MI_TIME(LC1))
97              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%VACANCY)
98              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%OCCUPANTS)
99              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%WINDOW)
100              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%OFFSET)
101              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%L)
102     
103              LC2 = DEM_MI(LC1)%OCCUPANTS
104     
105              allocate(DEM_MI(LC1)%W(LC2))
106              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%W(:))
107              allocate(DEM_MI(LC1)%H(LC2))
108              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%H(:))
109              allocate(DEM_MI(LC1)%P(LC2))
110              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%P(:))
111              allocate(DEM_MI(LC1)%Q(LC2))
112              CALL READ_RES_DES(lNEXT_REC, DEM_MI(LC1)%Q(:))
113           ENDDO
114     
115           CALL FINL_READ_RES_DES
116     
117     
118           WRITE(ERR_MSG,"('DES restart file read at Time = ',g12.5)") TIME
119           CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
120     
121           RETURN
122           END SUBROUTINE READ_RES0_DES
123