MFIX  2016-1
mass_inflow_dem.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Subroutine: DES_MASS_INLET !
4 ! Author: J.Musser Date: 13-Jul-09 !
5 ! !
6 ! Purpose: This routine fills in the necessary information for new !
7 ! particles entereing the system. !
8 ! !
9 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
10  SUBROUTINE mass_inflow_dem
11 
12 ! Modules
13 !---------------------------------------------------------------------//
14  use bc
15  use des_allocate
16  use des_bc
17  use derived_types, only: dg_pic
18  use discretelement
19  use functions
20  use mpi_utility, only: bcast
21  implicit none
22 
23 ! Local variables
24 !---------------------------------------------------------------------//
25  INTEGER :: IP, LS, M, NP, IJK, LC
26  INTEGER :: BCV, BCV_I
27  LOGICAL :: CHECK_FOR_ERRORS, OWNS
28 ! I/J/K index of fluid cell containing the new particle.
29  INTEGER :: IJKP(3)
30  DOUBLE PRECISION :: DIST, POS(3)
31 ! Random numbers -shared by all ranks-
32  DOUBLE PRECISION :: RAND(3)
33 !......................................................................!
34 
35  check_for_errors = .false.
36 
37  DO bcv_i = 1, dem_bcmi
38  bcv = dem_bcmi_map(bcv_i)
39 
40  DO lc=dem_bcmi_ijkstart(bcv_i), dem_bcmi_ijkend(bcv_i)
41  ijk = dem_bcmi_ijk(lc)
42 
43  DO ls= 1,dg_pic(ijk)%ISIZE
44  np = dg_pic(ijk)%P(ls)
45  IF(is_exiting(np) .or. is_exiting_ghost(np)) cycle
46  SELECT CASE (bc_plane(bcv))
47  CASE('N'); dist = des_pos_new(np,2) - yn(bc_j_s(bcv))
48  CASE('S'); dist = yn(bc_j_s(bcv)-1) - des_pos_new(np,2)
49  CASE('E'); dist = des_pos_new(np,1) - xe(bc_i_w(bcv))
50  CASE('W'); dist = xe(bc_i_w(bcv)-1) - des_pos_new(np,1)
51  CASE('T'); dist = des_pos_new(np,3) - zt(bc_k_b(bcv))
52  CASE('B'); dist = zt(bc_k_b(bcv)-1) - des_pos_new(np,3)
53  END SELECT
54 ! The particle is still inside the domain
55  IF(dist > des_radius(np)) THEN
56  IF(is_entering(np)) CALL set_normal(np)
57  IF(is_entering_ghost(np)) CALL set_ghost(np)
58  ENDIF
59  ENDDO
60  ENDDO
61 
62 ! All ranks generate random numbers but PE_IO BCASTS its values so that
63 ! the calculated position (with random wiggles) is the same on all ranks.
64  CALL random_number(rand)
65  CALL bcast(rand)
66 
67 ! Check if any particles need seeded this time step.
68  IF(dem_mi_time(bcv_i) > s_time) cycle
69 
70  ls = 1
71 
72 ! Loop over the particles being injected
73  ploop: DO ip = 1, pi_count(bcv_i)
74 
75 ! Increment the global max particle ID (all ranks).
76  imax_global_id = imax_global_id + 1
77 
78 ! Determine the location and phase of the incoming particle.
79  CALL seed_new_particle(bcv, bcv_i, rand, m, pos, ijkp, owns)
80 
81 ! Only the rank receiving the new particle needs to continue
82  IF(.NOT.owns) cycle ploop
83 
84 ! Increment the number of particle on the processor by one. If the max
85 ! number of particles is exceeded, set the error flag and cycle.
86  pip = pip + 1
87  CALL particle_grow(pip)
88  max_pip = max(pip,max_pip)
89 
90 ! Find the first free space in the particle existance array.
91  np_lp: DO np = ls, max_pip
92  IF(is_nonexistent(np)) THEN
93  ls = np
94  EXIT np_lp
95  ENDIF
96  ENDDO np_lp
97 
98 ! Set the particle's global ID.
99  iglobal_id(ls) = imax_global_id
100 
101 ! Set the properties of the new particle.
102  CALL set_new_particle_props(bcv, m, ls, pos, ijkp)
103 
104  ENDDO ploop
105 
106 ! Update the time for seeding the next particle.
107  dem_mi_time(bcv_i) = s_time + pi_factor(bcv_i)*dtsolid
108 ! Set the flag for error checking.
109  check_for_errors = .true.
110  ENDDO
111 
112  IF(check_for_errors) THEN
113  ENDIF
114 
115  RETURN
116  END SUBROUTINE mass_inflow_dem
117 
118 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
119 ! !
120 ! Subroutine: SEED_NEW_PARTICLE !
121 ! Author: J.Musser Date: 14-Aug-09 !
122 ! !
123 ! Purpose: This routine uses the classification information to place !
124 ! a new particle in the proper location. !
125 ! !
126 ! Comments: !
127 ! !
128 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
129  SUBROUTINE seed_new_particle(lBCV, lBCV_I, lRAND, lM, lPOS, &
130  lijkp, lowns)
132 ! Modules
133 !---------------------------------------------------------------------//
134  USE bc
135  USE compar
136  USE des_bc
137  USE desgrid
138  USE discretelement
139  USE funits
140  USE geometry
141  USE param1
142  USE physprop
143  IMPLICIT NONE
144 
145 ! Dummy arguments
146 !---------------------------------------------------------------------//
147 ! The associated bc no.
148  INTEGER, INTENT(IN) :: lBCV, lBCV_I
149 ! Random numbers
150  DOUBLE PRECISION, INTENT(IN) :: lRAND(3)
151 ! Phase of incoming particle.
152  INTEGER, INTENT(OUT) :: lM
153 ! Position of incoming particle.
154  DOUBLE PRECISION, INTENT(OUT) :: lPOS(3)
155 ! I/J/K index of fluid cell containing the new particle.
156  INTEGER, INTENT(OUT) :: lIJKP(3)
157 ! Logical indicating that the current rank is the owner
158  LOGICAL, INTENT(OUT) :: lOWNS
159 
160 ! Local variables
161 !---------------------------------------------------------------------//
162 ! the associated bc no.
163 ! INTEGER :: BCV
164 ! Random position
165  DOUBLE PRECISION RAND1, RAND2
166 ! Array index of vacant position
167  INTEGER :: VACANCY
168 ! Number of array position.
169  INTEGER :: OCCUPANTS
170  INTEGER :: RAND_I
171  INTEGER :: lI, lJ, lK
172  DOUBLE PRECISION :: WINDOW
173 !......................................................................!
174 
175 ! IF(PARTICLE_PLCMNT(lBCV_I) == 'ORDR')THEN
176  vacancy = dem_mi(lbcv_i)%VACANCY
177  occupants = dem_mi(lbcv_i)%OCCUPANTS
178  dem_mi(lbcv_i)%VACANCY = mod(vacancy,occupants) + 1
179 ! ELSE
180 ! call bcast(lpar_rad)
181 ! call bcast(lpar_pos)
182 ! call bcast(m)
183 ! ENDIF
184 
185 
186 ! Assign the phase of the incoming particle.
187  IF(dem_mi(lbcv_i)%POLYDISPERSE) THEN
188  rand_i = ceiling(dble(numfrac_limit)*lrand(1))
189  lm = dem_bc_poly_layout(lbcv_i, rand_i)
190  ELSE
191  lm = dem_bc_poly_layout(lbcv_i,1)
192  ENDIF
193 
194  window = dem_mi(lbcv_i)%WINDOW
195  rand1 = half*d_p0(lm) + (window - d_p0(lm))*lrand(1)
196  rand2 = half*d_p0(lm) + (window - d_p0(lm))*lrand(2)
197 
198 
199 ! Set the physical location and I/J/K location of the particle.
200  SELECT CASE(bc_plane(lbcv))
201  CASE('N','S')
202 
203  lpos(1) = dem_mi(lbcv_i)%P(vacancy) + rand1
204  lpos(3) = dem_mi(lbcv_i)%Q(vacancy) + rand2
205  lpos(2) = dem_mi(lbcv_i)%OFFSET
206 
207  lijkp(1) = dem_mi(lbcv_i)%W(vacancy)
208  lijkp(3) = dem_mi(lbcv_i)%H(vacancy)
209  lijkp(2) = dem_mi(lbcv_i)%L
210 
211  CASE('E','W')
212 
213  lpos(2) = dem_mi(lbcv_i)%P(vacancy) + rand1
214  lpos(3) = dem_mi(lbcv_i)%Q(vacancy) + rand2
215  lpos(1) = dem_mi(lbcv_i)%OFFSET
216 
217  lijkp(2) = dem_mi(lbcv_i)%W(vacancy)
218  lijkp(3) = dem_mi(lbcv_i)%H(vacancy)
219  lijkp(1) = dem_mi(lbcv_i)%L
220 
221  CASE('T','B')
222 
223  lpos(1) = dem_mi(lbcv_i)%P(vacancy) + rand1
224  lpos(2) = dem_mi(lbcv_i)%Q(vacancy) + rand2
225  lpos(3) = dem_mi(lbcv_i)%OFFSET
226 
227  lijkp(1) = dem_mi(lbcv_i)%W(vacancy)
228  lijkp(2) = dem_mi(lbcv_i)%H(vacancy)
229  lijkp(3) = dem_mi(lbcv_i)%L
230 
231  END SELECT
232 
233 ! Easier and cleaner to clear out the third component at the end.
234  IF(no_k) lpos(3) = zero
235 
236  li = iofpos(lpos(1))
237  lj = jofpos(lpos(2))
238  lk = kofpos(lpos(3))
239 
240  lowns = ((dg_istart <= li) .AND. (li <= dg_iend) .AND. &
241  (dg_jstart <= lj) .AND. (lj <= dg_jend))
242 
243  IF(do_k) lowns = lowns .AND. (dg_kstart<=lk) .AND. (lk<=dg_kend)
244 
245  RETURN
246  END SUBROUTINE seed_new_particle
247 
248 
249 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
250 ! !
251 ! Subroutine: SET_NEW_PARTICLE_PROPS !
252 ! Author: J.Musser Date: 14-Aug-09 !
253 ! !
254 ! Purpose: Set the properties of the new particle. !
255 ! !
256 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
257  SUBROUTINE set_new_particle_props(lBCV, lM, lNP, lPOS, lIJKP)
259 ! Modules
260 !---------------------------------------------------------------------//
261  USE bc
262  USE compar
263  use constant, only: pi
264  USE des_bc
265  use desgrid
266  use des_rxns
267  USE des_thermo
268  USE discretelement
269  use functions
270  USE funits
271  USE geometry
272  use indices
273  USE param1
274  USE physprop, only: d_p0, ro_s0, c_ps0
275  USE physprop, only: nmax
276  use run, only: energy_eq
277  use run, only: any_species_eq
278  IMPLICIT NONE
279 
280 ! Dummy arguments
281 !---------------------------------------------------------------------//
282 ! The associated bc no.
283  INTEGER, INTENT(IN) :: lBCV
284 ! Phase of incoming particle.
285  INTEGER, INTENT(IN) :: lM
286 ! Index of new particle
287  INTEGER, INTENT(IN) :: lNP
288 ! Position of incoming particle.
289  DOUBLE PRECISION, INTENT(IN) :: lPOS(3)
290 ! I/J/K index of fluid cell containing the new particle.
291  INTEGER, INTENT(IN) :: lIJKP(3)
292 
293 ! Local variables
294 !---------------------------------------------------------------------//
295 ! I/J/K index of DES grid cell
296  INTEGER :: lI, lJ, lK
297 !......................................................................!
298 
299 
300 ! The particle exists and is entering, not exiting nor a ghost particle
301  IF (is_ghost(lnp)) THEN
302  CALL set_entering_ghost(lnp)
303  ELSE
304  CALL set_entering(lnp)
305  ENDIF
306 
307 ! Set the initial position values based on mass inlet class
308  des_pos_new(lnp,:) = lpos(:)
309  ppos(lnp,:) = lpos(:)
310  des_vel_new(lnp,1) = bc_u_s(lbcv,lm)
311  des_vel_new(lnp,2) = bc_v_s(lbcv,lm)
312  des_vel_new(lnp,3) = bc_w_s(lbcv,lm)
313 
314 ! Set the initial velocity values
315  IF (do_old) THEN
316  des_pos_old(lnp,:) = lpos(:)
317  des_vel_old(lnp,:) = des_vel_new(lnp,:)
318  omega_old(lnp,:) = 0
319  ENDIF
320 
321 ! Set the initial angular velocity values
322  omega_new(lnp,:) = 0
323 
324 ! Set the initial angular position values
325  IF(particle_orientation) orientation(1:3,lnp) = init_orientation
326 
327 ! Set the particle radius value
328  des_radius(lnp) = half * d_p0(lm)
329 
330 ! Set the particle density value
331  ro_sol(lnp) = ro_s0(lm)
332 
333 ! Store the I/J/K indices of the particle.
334  pijk(lnp,1:3) = lijkp(:)
335  pijk(lnp,4) = funijk(lijkp(1), lijkp(2), lijkp(3))
336 
337 ! Set the particle mass phase
338  pijk(lnp,5) = lm
339 
340 ! Calculate the DES grid cell indices.
341  li = min(dg_iend2,max(dg_istart2,iofpos(des_pos_new(lnp,1))))
342  lj = min(dg_jend2,max(dg_jstart2,jofpos(des_pos_new(lnp,2))))
343  IF(no_k) THEN
344  lk = 1
345  ELSE
346  lk = min(dg_kend2,max(dg_kstart2,kofpos(des_pos_new(lnp,3))))
347  ENDIF
348 ! Store the triple
349  dg_pijk(lnp) = dg_funijk(li,lj,lk)
350 
351 ! Calculate the new particle's Volume, Mass, OMOI
352  pvol(lnp) = (4.0d0/3.0d0) * pi * des_radius(lnp)**3
353  pmass(lnp) = pvol(lnp) * ro_sol(lnp)
354  omoi(lnp) = 5.d0 / (2.d0 * pmass(lnp) * des_radius(lnp)**2)
355 
356 ! Clear the drag force
357  IF(des_explicitly_coupled) drag_fc(lnp,:) = zero
358 
359 ! If solving the energy equations, set the temperature
360  IF(any_species_eq .OR. energy_eq ) des_t_s(lnp) = bc_t_s(lbcv,lm)
361 
362 ! Set species mass fractions
363  IF((energy_eq .AND. c_ps0(lm)/=undefined) .OR. any_species_eq)&
364  des_x_s(lnp,1:nmax(lm)) = bc_x_s(lbcv,lm,1:nmax(lm))
365 
366 ! Calculate time dependent physical properties
367  CALL des_physical_prop(lnp, .false.)
368 
369 
370  RETURN
371  END SUBROUTINE set_new_particle_props
372 
373 
374 
375 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
376 ! !
377 ! Subroutine: DES_NEW_PARTICLE_TEST !
378 ! !
379 ! Purpose: This routine checks if a new particle placed using the !
380 ! random inlet was placed in contact with an existing particle. If !
381 ! so a flag is set indicating contact, and the new particle is !
382 ! repositioned within the inlet domain. !
383 ! !
384 ! Author: J.Musser Date: 14-Aug-09 !
385 ! !
386 ! Purpose: This routine has to be modified for parallel version !
387 ! the parameter now accepts the lpar_rad and lpar_pos and !
388 ! tests if it touches any particles !
389 ! Comments: !
390 ! !
391 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
392  SUBROUTINE des_new_particle_test(BCV_I,ppar_rad,ppar_pos,TOUCHING)
394 ! Modules
395 !---------------------------------------------------------------------//
396  USE compar
397  USE constant
398  USE des_bc
399  USE derived_types, only: pic
400  USE discretelement
401  USE functions
402  USE funits
403  USE geometry
404  USE indices
405  USE param1
406  USE physprop
407  IMPLICIT NONE
408 
409 ! Dummy arguments
410 !---------------------------------------------------------------------//
411 ! index of boundary condition
412  INTEGER, INTENT(IN) :: BCV_I
413  DOUBLE PRECISION, INTENT(IN) :: ppar_pos(dimn)
414  DOUBLE PRECISION, INTENT(IN) :: ppar_rad
415  LOGICAL, INTENT(INOUT) :: TOUCHING
416 
417 ! Local variables
418 !---------------------------------------------------------------------//
419 ! particle number id of a potential overlapping/contacting particle
420  INTEGER NP2
421 ! total number of particles in current ijk cell and loop counter
422  INTEGER NPG, LL
423 ! i, j, k indices along boundary used for loop counters
424  INTEGER I, J, K, IJK
425 ! for parallel processing
426  integer listart,liend,ljstart,ljend,lkstart,lkend
427 
428  DOUBLE PRECISION DISTVEC(dimn), DIST, R_LM
429 !......................................................................!
430 
431  touching = .false.
432 
433 ! For parallel processing the arrays has to be limited
434 ! select case (des_mi_class(bcv_i))
435 ! case ('XW','XE', 'YZw','YZe')
436 ! listart = gs_array(bcv_i,1)
437 ! liend = gs_array(bcv_i,2)
438 ! ljstart = max(gs_array(bcv_i,3),jstart)
439 ! ljend = min(gs_array(bcv_i,4),jend)
440 ! lkstart = max(gs_array(bcv_i,5),jstart)
441 ! lkend = min(gs_array(bcv_i,6),jend)
442 ! case ('YN','YS', 'XZn','XZs')
443 ! listart = max(gs_array(bcv_i,1),istart)
444 ! liend = min(gs_array(bcv_i,2),iend)
445 ! ljstart = gs_array(bcv_i,3)
446 ! ljend = gs_array(bcv_i,4)
447 ! lkstart = max(gs_array(bcv_i,5),jstart)
448 ! lkend = min(gs_array(bcv_i,6),jend)
449 ! case ('ZT','ZB', 'XYt','XYb')
450 ! listart = max(gs_array(bcv_i,1),istart)
451 ! liend = min(gs_array(bcv_i,2),iend)
452 ! ljstart = max(gs_array(bcv_i,3),jstart)
453 ! ljend = min(gs_array(bcv_i,4),jend)
454 ! lkstart = gs_array(bcv_i,5)
455 ! lkend = gs_array(bcv_i,6)
456 ! end select
457 
458  DO k = lkstart,lkend
459  DO j = ljstart,ljend
460  DO i = listart,liend
461 ! DO K = GS_ARRAY(BCV_I,5), GS_ARRAY(BCV_I,6)
462 ! DO J = GS_ARRAY(BCV_I,3), GS_ARRAY(BCV_I,4)
463 ! DO I = GS_ARRAY(BCV_I,1), GS_ARRAY(BCV_I,2)
464  ijk = funijk(i,j,k)
465  IF(ASSOCIATED(pic(ijk)%P)) THEN
466  npg = SIZE(pic(ijk)%P)
467  DO ll = 1, npg
468  np2 = pic(ijk)%P(ll)
469  distvec(:) = ppar_pos(:) - des_pos_new(np2,:)
470  dist = dot_product(distvec,distvec)
471  r_lm = ppar_rad + des_radius(np2)
472  IF(dist .LE. r_lm*r_lm) touching = .true.
473  ENDDO
474  ENDIF
475  ENDDO
476  ENDDO
477  ENDDO
478 
479  RETURN
480  END SUBROUTINE des_new_particle_test
integer, dimension(dimension_bc) bc_k_b
Definition: bc_mod.f:70
integer dg_kend
Definition: desgrid_mod.f:53
double precision, dimension(dim_m) c_ps0
Definition: physprop_mod.f:83
integer, dimension(:), allocatable dem_bcmi_ijk
Definition: des_bc_mod.f:101
subroutine seed_new_particle(lBCV, lBCV_I, lRAND, lM, lPOS, lIJKP, lOWNS)
integer dg_iend
Definition: desgrid_mod.f:45
double precision, dimension(dim_m) d_p0
Definition: physprop_mod.f:25
integer dg_jend
Definition: desgrid_mod.f:49
integer dg_istart
Definition: desgrid_mod.f:45
double precision, dimension(:), allocatable des_t_s
subroutine des_physical_prop
integer, dimension(dimension_bc) bc_i_w
Definition: bc_mod.f:54
double precision, dimension(dimension_bc, dim_m) bc_w_s
Definition: bc_mod.f:129
double precision, dimension(dimension_bc, dim_m, dim_n_s) bc_x_s
Definition: bc_mod.f:254
integer dg_kstart2
Definition: desgrid_mod.f:53
subroutine set_new_particle_props(lBCV, lM, lNP, lPOS, lIJKP)
subroutine des_new_particle_test(BCV_I, ppar_rad, ppar_pos, TOUCHING)
double precision, parameter undefined
Definition: param1_mod.f:18
type(iap2), dimension(:), allocatable dg_pic
double precision, dimension(:), allocatable dem_mi_time
Definition: des_bc_mod.f:36
character, dimension(dimension_bc) bc_plane
Definition: bc_mod.f:217
integer dg_jstart
Definition: desgrid_mod.f:49
integer dg_kend2
Definition: desgrid_mod.f:53
integer function iofpos(fpos)
Definition: desgrid_mod.f:348
double precision, dimension(dimension_bc, dim_m) bc_t_s
Definition: bc_mod.f:101
integer, dimension(dimension_bc) bc_j_s
Definition: bc_mod.f:62
integer dg_jstart2
Definition: desgrid_mod.f:49
integer dem_bcmi
Definition: des_bc_mod.f:18
double precision, dimension(:,:), allocatable des_x_s
Definition: des_rxns_mod.f:21
integer, parameter numfrac_limit
Definition: des_bc_mod.f:58
logical any_species_eq
Definition: run_mod.f:118
double precision, parameter half
Definition: param1_mod.f:28
Definition: run_mod.f:13
integer function kofpos(fpos)
Definition: desgrid_mod.f:372
integer dg_iend2
Definition: desgrid_mod.f:45
logical no_k
Definition: geometry_mod.f:28
double precision, dimension(dimension_bc, dim_m) bc_v_s
Definition: bc_mod.f:121
integer, dimension(:), allocatable dem_bcmi_ijkstart
Definition: des_bc_mod.f:98
integer, dimension(0:dim_m) nmax
Definition: physprop_mod.f:119
integer, dimension(:), allocatable pi_factor
Definition: des_bc_mod.f:48
integer, dimension(:), allocatable dem_bcmi_ijkend
Definition: des_bc_mod.f:99
logical do_k
Definition: geometry_mod.f:30
logical energy_eq
Definition: run_mod.f:100
integer dg_istart2
Definition: desgrid_mod.f:45
double precision, dimension(dimension_bc, dim_m) bc_u_s
Definition: bc_mod.f:113
integer, dimension(:), allocatable pi_count
Definition: des_bc_mod.f:53
subroutine mass_inflow_dem
integer function dg_funijk(fi, fj, fk)
Definition: desgrid_mod.f:141
type(dem_mi_), dimension(:), allocatable, target dem_mi
Definition: des_bc_mod.f:90
integer function jofpos(fpos)
Definition: desgrid_mod.f:360
double precision, dimension(dim_m) ro_s0
Definition: physprop_mod.f:28
subroutine, public particle_grow(new_max_pip)
integer dg_jend2
Definition: desgrid_mod.f:49
integer dg_kstart
Definition: desgrid_mod.f:53
type(iap1), dimension(:), allocatable pic
integer, dimension(dimension_bc) dem_bcmi_map
Definition: des_bc_mod.f:24
double precision, parameter pi
Definition: constant_mod.f:158
integer, dimension(:,:), allocatable dem_bc_poly_layout
Definition: des_bc_mod.f:32
double precision, parameter zero
Definition: param1_mod.f:27
Definition: bc_mod.f:23