19 end interface unpack_dbuf
38 use discretelement
, only: ighost_updated
48 use discretelement
, only: dg_pijk, dg_pijkprv
50 use discretelement
, only: iglobal_id
52 use discretelement
, only: des_pos_new, des_pos_old
54 use discretelement
, only: des_vel_new, des_vel_old
56 use discretelement
, only: omega_new, omega_old
60 use discretelement
, only: des_radius, pvol
62 use discretelement
, only: pijk
64 use discretelement
, only: do_old
66 use discretelement
, only: pip
68 use discretelement
, only: ighost_cnt
70 use discretelement
, only: des_usr_var, des_usr_var_size
78 use discretelement
, only: dimn
79 use discretelement
, only: max_pip
82 use functions, only: is_normal, set_normal
83 use functions, only: is_exiting, set_exiting, set_exiting_ghost
91 INTEGER,
INTENT(IN) :: PFACE
95 integer :: lcurpar,lparid,lprvijk,lparijk,lparcnt,ltot_ind
96 integer :: lbuf,llocpar,lnewcnt,lpicloc
97 logical,
dimension(:),
allocatable :: lfound
98 integer,
dimension(:),
allocatable :: lnewspot,lnewpic
106 lparcnt = drecvbuf(1+mod(pface,2))%facebuf(1)
108 allocate (lfound(lparcnt),lnewspot(lparcnt),lnewpic(
dg_ijksize2))
113 do lcurpar = 1,lparcnt
114 lbuf = (lcurpar-1)*ighostpacketsize+
ibufoffset 117 call unpack_dbuf(lbuf,lparid,pface)
119 call unpack_dbuf(lbuf,lparijk,pface)
121 call unpack_dbuf(lbuf,lprvijk,pface)
127 lfound(lcurpar) =
locate_par(lparid,lprvijk,llocpar)
128 if (lparijk .ne. lprvijk .and. .not.lfound(lcurpar))
then 129 lfound(lcurpar) =
locate_par(lparid,lparijk,llocpar)
132 if(lfound(lcurpar))
then 134 dg_pijk(llocpar) = lparijk
135 dg_pijkprv(llocpar) = lprvijk
138 call unpack_dbuf(lbuf,des_radius(llocpar),pface)
140 call unpack_dbuf(lbuf,pijk(llocpar,5),pface)
142 call unpack_dbuf(lbuf,des_pos_new(llocpar,1:dimn),pface)
144 call unpack_dbuf(lbuf,des_vel_new(llocpar,1:dimn),pface)
146 call unpack_dbuf(lbuf,omega_new(llocpar,1:3),pface)
148 call unpack_dbuf(lbuf,tmp,pface)
149 if (tmp)
call set_exiting_ghost(llocpar)
152 call unpack_dbuf(lbuf,
des_t_s(llocpar),pface)
154 IF(des_usr_var_size > 0) &
155 call unpack_dbuf(lbuf,des_usr_var(:,llocpar),pface)
158 pvol(llocpar) = (4.0d0/3.0d0)*
pi*des_radius(llocpar)**3
160 ighost_updated(llocpar) = .true.
165 des_pos_old(llocpar,:)= des_pos_new(llocpar,:)
166 des_vel_old(llocpar,:)= des_vel_new(llocpar,:)
167 omega_old(llocpar,:)= omega_new(llocpar,:)
171 lnewpic(lparijk) = lnewpic(lparijk) + 1
178 ighost_cnt = ighost_cnt + lnewcnt
180 max_pip = max(pip,max_pip)
181 do lcurpar = 1,lparcnt
182 if(lfound(lcurpar)) cycle
183 lbuf = (lcurpar-1)*ighostpacketsize+
ibufoffset 186 call unpack_dbuf(lbuf,lparid,pface)
188 call unpack_dbuf(lbuf,lparijk,pface)
190 call unpack_dbuf(lbuf,lprvijk,pface)
192 do while(.not.is_nonexistent(ispot))
196 call set_ghost(ispot)
197 iglobal_id(ispot) = lparid
198 dg_pijk(ispot) = lparijk
199 dg_pijkprv(ispot) = lprvijk
201 call unpack_dbuf(lbuf,des_radius(ispot),pface)
203 call unpack_dbuf(lbuf,pijk(ispot,5),pface)
205 call unpack_dbuf(lbuf,des_pos_new(ispot,1:dimn),pface)
207 call unpack_dbuf(lbuf,des_vel_new(ispot,1:dimn),pface)
209 call unpack_dbuf(lbuf,omega_new(ispot,1:dimn),pface)
211 call unpack_dbuf(lbuf,tmp,pface)
212 if (tmp)
call set_exiting_ghost(ispot)
215 call unpack_dbuf(lbuf,
des_t_s(ispot),pface)
217 IF(des_usr_var_size > 0)&
218 call unpack_dbuf(lbuf,des_usr_var(:,ispot),pface)
220 ighost_updated(ispot) = .true.
221 lnewspot(lcurpar) = ispot
223 pvol(ispot) = (4.0d0/3.0d0)*
pi*des_radius(ispot)**3
226 des_pos_old(ispot,1:dimn) = des_pos_new(ispot,1:dimn)
227 des_vel_old(ispot,1:dimn) = des_vel_new(ispot,1:dimn)
228 omega_old(ispot,1:3) = omega_new(ispot,1:3)
234 deallocate (lfound,lnewspot,lnewpic)
263 use discretelement
, only: dg_pijk, dg_pijkprv
269 use discretelement
, only: iglobal_id
271 use discretelement
, only: des_pos_new, des_pos_old
273 use discretelement
, only: des_vel_new, des_vel_old
275 use discretelement
, only: omega_new, omega_old
277 use discretelement
, only: particle_orientation,orientation
279 use discretelement
, only: des_radius, pvol, ro_sol, pmass
281 use discretelement
, only: des_acc_old, rot_acc_old
287 use discretelement
, only: fc, tow
289 use discretelement
, only: omoi
291 use discretelement
, only: pijk
293 use discretelement
, only: do_old
295 use discretelement
, only: pip
297 use discretelement
, only: ighost_cnt
299 use discretelement
, only: des_explicitly_coupled
301 use discretelement
, only: drag_fc
305 use discretelement
, only: des_usr_var, des_usr_var_size
307 use discretelement
, only: pft_neighbor
309 use discretelement
, only: dimn
317 use discretelement
, only: max_pip
318 use functions, only: is_normal, is_nonexistent
319 use functions, only: set_entering, set_exiting, set_normal
326 INTEGER,
INTENT(IN) :: PFACE
330 integer :: lcurpar,lparcnt,llocpar,lparid,lparijk,lprvijk
331 integer :: lneigh,lcontactindx,lcontactid,lcontact,&
334 integer :: lbuf,lcount
335 logical :: lneighfound
336 integer :: cc,kk,num_neighborlists_sent,nn
342 lparcnt = drecvbuf(1+mod(pface,2))%facebuf(1)
346 max_pip = max(pip+lparcnt,max_pip)
348 do lcurpar =1,lparcnt
351 lbuf = (lcurpar-1)*iparticlepacketsize + ibufoffset
353 call unpack_dbuf(lbuf,lparid,pface)
355 call unpack_dbuf(lbuf,lparijk,pface)
357 call unpack_dbuf(lbuf,lprvijk,pface)
363 DO WHILE(.NOT.is_nonexistent(ispot))
367 iglobal_id(llocpar) = lparid
376 IF (.NOT. lfound)
THEN 383 ighost_cnt = ighost_cnt - 1
386 1000
FORMAT(2/1x,72(
'*'),/1x,
'From: DESMPI_UNPACK_PARCROSS: ',/ &
387 ' Error 1000: Unable to match particles crossing processor ', &
388 'boundaries.',/3x,
'Source Proc: ',i9,
' ---> Destination ', &
389 'Proc: ', i9,/3x,
'Global Particle ID: ',i12,/1x,72(
'*'))
392 call set_normal(llocpar)
393 dg_pijk(llocpar) = lparijk
394 dg_pijkprv(llocpar) = lprvijk
396 call unpack_dbuf(lbuf,des_radius(llocpar),pface)
398 call unpack_dbuf(lbuf,pijk(llocpar,:),pface)
400 call unpack_dbuf(lbuf,tmp,pface)
401 if (tmp)
CALL set_entering(llocpar)
403 call unpack_dbuf(lbuf,tmp,pface)
404 if (tmp)
CALL set_exiting(llocpar)
406 call unpack_dbuf(lbuf,ro_sol(llocpar),pface)
408 call unpack_dbuf(lbuf,pvol(llocpar),pface)
410 call unpack_dbuf(lbuf,pmass(llocpar),pface)
412 call unpack_dbuf(lbuf,omoi(llocpar),pface)
414 call unpack_dbuf(lbuf,des_pos_new(llocpar,:),pface)
416 call unpack_dbuf(lbuf,des_vel_new(llocpar,:),pface)
418 call unpack_dbuf(lbuf,omega_new(llocpar,:),pface)
420 call unpack_dbuf(lbuf,fc(llocpar,:),pface)
422 call unpack_dbuf(lbuf,tow(llocpar,:),pface)
425 call unpack_dbuf(lbuf,des_t_s(llocpar),pface)
427 call unpack_dbuf(lbuf,
des_x_s(llocpar,:),pface)
430 IF(des_usr_var_size > 0) &
431 call unpack_dbuf(lbuf,des_usr_var(:,llocpar),pface)
433 IF(particle_orientation) &
434 call unpack_dbuf(lbuf,orientation(:,llocpar),pface)
439 call unpack_dbuf(lbuf,des_pos_old(llocpar,:),pface)
441 call unpack_dbuf(lbuf,des_vel_old(llocpar,:),pface)
443 call unpack_dbuf(lbuf,omega_old(llocpar,:),pface)
445 call unpack_dbuf(lbuf,des_acc_old(llocpar,:),pface)
447 call unpack_dbuf(lbuf,rot_acc_old(llocpar,:),pface)
450 IF(des_explicitly_coupled)
THEN 452 call unpack_dbuf(lbuf,drag_fc(llocpar,:),pface)
454 IF(energy_eq)
call unpack_dbuf(lbuf,
conv_qs(llocpar),pface)
460 IF(mppic)
call unpack_dbuf(lbuf,
des_stat_wt(llocpar),pface)
465 lbuf = lparcnt*iparticlepacketsize + ibufoffset
466 call unpack_dbuf(lbuf,num_neighborlists_sent,pface)
468 do nn = 1, num_neighborlists_sent
470 call unpack_dbuf(lbuf,lparid,pface)
472 call unpack_dbuf(lbuf,lparijk,pface)
475 if (.not.
locate_par(lparid,lparijk,llocpar))
then 477 print *,
"at buffer location",lbuf,
" pface = ",pface
478 print *,
"COULD NOT FIND PARTICLE ",lparid,
" IN IJK ",lparijk
483 call unpack_dbuf(lbuf,lneighid,pface)
485 call unpack_dbuf(lbuf,lneighijk,pface)
488 if (.not.
locate_par(lneighid,lneighijk,lneigh))
then 492 print *,
" fail on ",
mype 493 print *,
"at buffer location",lbuf,
" pface = ",pface
494 print *,
"COULD NOT FIND NEIGHBOR ",lneighid,
" IN IJK ",lneighijk
504 call unpack_dbuf(lbuf,pft_neighbor(:,cc),pface)
517 LOGICAL FUNCTION locate_par(pGLOBALID, pIJK, pLOCALNO)
519 use discretelement
, only: iglobal_id
528 INTEGER,
INTENT(IN) :: pGlobalID
530 INTEGER,
INTENT(IN) :: pIJK
532 INTEGER,
INTENT(OUT) :: pLocalNO
536 INTEGER :: lpicloc, lcurpar
547 DO lpicloc = 1,
dg_pic(pijk)%isize
548 lcurpar =
dg_pic(pijk)%p(lpicloc)
549 IF(iglobal_id(lcurpar) == pglobalid)
THEN 570 use discretelement
, only: iglobal_id
582 INTEGER,
INTENT(IN) :: pGlobalId
584 INTEGER,
INTENT(IN) :: pIJK
586 INTEGER,
INTENT(OUT) :: pLocalNo
591 INTEGER :: lijk, li, lj, lk, lic, ljc, lkc, lkoffset
592 INTEGER :: lpicloc,lcurpar
596 lic = dg_iof_lo(pijk)
597 ljc = dg_jof_lo(pijk)
598 lkc = dg_kof_lo(pijk)
599 lkoffset = merge(0, 1,
no_k)
600 DO lk = lkc-lkoffset,lkc+lkoffset
604 IF (lijk .lt. dg_ijkstart2 .or. lijk .gt. dg_ijkend2) cycle
605 DO lpicloc = 1,
dg_pic(lijk)%isize
606 lcurpar =
dg_pic(lijk)%p(lpicloc)
607 IF (iglobal_id(lcurpar) .eq. pglobalid)
THEN 625 integer,
intent(inout) :: lbuf
626 integer,
intent(in) :: pface
627 double precision,
intent(inout) :: idata
629 idata =
drecvbuf(1+mod(pface,2))%facebuf(lbuf)
640 integer,
intent(inout) :: lbuf
641 integer,
intent(in) :: pface
642 double precision,
intent(inout) :: idata(:)
648 idata =
drecvbuf(1+mod(pface,2))%facebuf(lbuf:lbuf+lsize-1)
659 integer,
intent(inout) :: lbuf
660 integer,
intent(in) :: pface
661 integer,
intent(inout) :: idata
663 idata =
drecvbuf(1+mod(pface,2))%facebuf(lbuf)
674 integer,
intent(inout) :: lbuf
675 integer,
intent(in) :: pface
676 integer,
intent(inout) :: idata(:)
682 idata =
drecvbuf(1+mod(pface,2))%facebuf(lbuf:lbuf+lsize-1)
693 integer,
intent(inout) :: lbuf
694 integer,
intent(in) :: pface
695 logical,
intent(inout) :: idata
697 idata = merge(.true.,.false.,0.5<
drecvbuf(1+mod(pface,2))%facebuf(lbuf
subroutine unpack_i0(lbuf, idata, pface)
integer function dg_iof_lo(fijk)
subroutine des_mpi_stop(myid)
double precision, dimension(:), allocatable des_t_s
subroutine, public desmpi_unpack_parcross(pface)
integer iparticlepacketsize
type(iap2), dimension(:), allocatable dg_pic
subroutine, public desmpi_unpack_ghostpar(pface)
subroutine unpack_i1(lbuf, idata, pface)
type(array), dimension(:), allocatable drecvbuf
integer function dg_kof_lo(fijk)
logical function exten_locate_par(pGlobalID, pIJK, pLocalNO)
double precision, dimension(:,:), allocatable des_x_s
subroutine unpack_db0(lbuf, idata, pface)
integer function dg_jof_lo(fijk)
double precision, dimension(:), allocatable conv_qs
integer, parameter ibufoffset
logical function locate_par(pGLOBALID, pIJK, pLOCALNO)
integer, dimension(:), allocatable ineighproc
integer function dg_funijk(fi, fj, fk)
subroutine, public particle_grow(new_max_pip)
double precision, dimension(:), allocatable rxns_qs
subroutine unpack_db1(lbuf, idata, pface)
double precision, parameter pi
subroutine unpack_l0(lbuf, idata, pface)
double precision, dimension(:), allocatable des_stat_wt
double precision function, public add_pair(ii, jj)