113 INTEGER,
DIMENSION(:),
POINTER :: rcvbuf
119 INTEGER :: BS95debug = 0
120 REAL(kind=wp) :: delt
121 REAL(kind=wp) :: thetaimp, alphaimp, deltaimp
122 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: fext
123 CHARACTER*180 :: word180
127 INTEGER :: i, j, m, p, counter
129 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: tempmg, mg
130 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: aval_m, aval_k
131 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: rp_m, cval_m, rp_k, cval_k
133 INTEGER :: nstart_km, nrows_km
134 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: aval_meff
135 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: cval_meff, rp_meff
136 INTEGER :: nnz_meff, nstart_meff, nrows_meff
137 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: pbar
138 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: newpbar
139 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: fint
140 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:,:,:) :: S
141 REAL(kind=wp),
DIMENSION(1:3,1:8) :: ri = RESHAPE( &
142 (/-0.577350269189626,-0.577350269189626,-0.577350269189626, &
143 0.577350269189626,-0.577350269189626,-0.577350269189626, &
144 0.577350269189626, 0.577350269189626,-0.577350269189626, &
145 -0.577350269189626, 0.577350269189626,-0.577350269189626, &
146 -0.577350269189626,-0.577350269189626, 0.577350269189626, &
147 0.577350269189626,-0.577350269189626, 0.577350269189626, &
148 0.577350269189626, 0.577350269189626, 0.577350269189626, &
149 -0.577350269189626, 0.577350269189626, 0.577350269189626/),(/3,8/) )
150 REAL(KIND=wp),
ALLOCATABLE,
DIMENSION(:) :: v
151 REAL(KIND=wp),
ALLOCATABLE,
DIMENSION(:) :: a
153 REAL(kind=wp) :: maxdisp, gmaxdisp
154 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: ftemp
155 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: bufsnd
156 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: AmountToReceive, AmountToSend
157 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: finttemp, disptemp
158 INTEGER :: maxdispnode
159 REAL(kind=wp) :: tempKval
160 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: aval_ktemp
161 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: cval_ktemp, rp_ktemp
163 REAL(kind=wp) :: contol
164 REAL(kind=wp),
DIMENSION(5,9,9) :: dmat
165 REAL(kind=wp),
DIMENSION(2) :: props
166 REAL(kind=wp),
DIMENSION(8) :: xi, eta, zeta
167 REAL(kind=wp),
DIMENSION(8) :: xiE, etaE, zetaE
168 REAL(kind=wp) :: one = 1.0, three = 3.0
169 REAL(KIND=wp),
DIMENSION(1:8,1:9,1:12) :: mixed_map
170 REAL(KIND=wp),
DIMENSION(1:8,1:9,1:9) :: enhanced_map
172 REAL(kind=wp) :: tempval
173 INTEGER :: idof, jdof, inode, jnode
174 REAL(kind=wp) :: per1
175 INTEGER :: newnrows_meff
177 INTEGER :: newnstart_meff
178 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: newa
179 TYPE(int_buf),
ALLOCATABLE,
DIMENSION(:) :: Ki, Kj
180 REAL(kind=wp),
ALLOCATABLE,
DIMENSION(:) :: aval_m_temp
181 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: rp_m_temp, cval_m_temp
182 REAL(kind=8) :: elapsedtime
187 CALL mpi_comm_rank(mpi_comm_world, myid, ierr)
188 CALL mpi_comm_size(mpi_comm_world, nprocs, ierr)
189 WRITE(myid_chr,
'(i4.4)') myid
192 elapsedtime = -1.0*mpi_wtime()
199 OPEN(20,file=
'timestep.in' ,
form=
'formatted')
200 READ(20,
'(a180)') word180
201 READ(20,*) nstep,delt,ifreq,contol
203 READ(20,
'(a180)') word180
205 READ(20,*) thetaimp,alphaimp,deltaimp
211 OPEN(io_input,file=
'fractography3d.inp',
status=
'old',iostat=ios)
214 IF(myid.EQ.0)
print*,
'**WARNING: Unable to find Deck File -- fractography3d.inp'
215 IF(myid.EQ.0)
print*,
' - Assuming Patran Neutral File Input Format'
220 ALLOCATE(local2global(1:numnp))
221 ALLOCATE(global2local(1:numnp))
222 ALLOCATE(nodeproc(1:numnp))
232 IF(myid.EQ.0)
print*,
'READING INPUT DECK'
242 IF(myid==0)
print*,
'INITIALIZING COMMUNICATIONS'
261 xi = (/ one/
sqrt(three), -one/
sqrt(three), -one/
sqrt(three), &
263 -one/
sqrt(three), one/
sqrt(three) /)
265 eta = (/ one/
sqrt(three), one/
sqrt(three), -one/
sqrt(three), &
267 -one/
sqrt(three), -one/
sqrt(three) /)
269 zeta = (/ one/
sqrt(three), one/
sqrt(three), one/
sqrt(three), &
271 -one/
sqrt(three), -one/
sqrt(three) /)
284 mixed_map(:,:,:) = 0.0
285 enhanced_map(:,:,:) = 0.0
287 mixed_map(igpt,1,1) = eta(igpt)
288 mixed_map(igpt,1,2) = zeta(igpt)
289 mixed_map(igpt,1,3) = eta(igpt) * zeta(igpt)
290 mixed_map(igpt,2,10) = zeta(igpt)
291 mixed_map(igpt,3,12) = eta(igpt)
292 mixed_map(igpt,4,10) = zeta(igpt)
293 mixed_map(igpt,5,4) = xi(igpt)
294 mixed_map(igpt,5,5) = zeta(igpt)
295 mixed_map(igpt,5,6) = xi(igpt) * zeta(igpt)
296 mixed_map(igpt,6,11) = xi(igpt)
297 mixed_map(igpt,7,12) = eta(igpt)
298 mixed_map(igpt,8,11) = xi(igpt)
299 mixed_map(igpt,9,7) = xi(igpt)
300 mixed_map(igpt,9,8) = eta(igpt)
301 mixed_map(igpt,9,9) = xi(igpt) * eta(igpt)
302 enhanced_map(igpt,1,1) = xi(igpt)
303 enhanced_map(igpt,1,2) = xi(igpt) * eta(igpt)
304 enhanced_map(igpt,1,3) = xi(igpt) * zeta(igpt)
305 enhanced_map(igpt,5,4) = eta(igpt)
306 enhanced_map(igpt,5,5) = eta(igpt) * zeta(igpt)
307 enhanced_map(igpt,5,6) = eta(igpt) * xi(igpt)
308 enhanced_map(igpt,9,7) = zeta(igpt)
309 enhanced_map(igpt,9,8) = zeta(igpt) * eta(igpt)
310 enhanced_map(igpt,9,9) = zeta(igpt) * xi(igpt)
312 ALLOCATE(aenh(1:9,1:numelv))
313 ALLOCATE(stress(1:ngpts,1:9,1:numelv))
321 IF (local2global(i) == m)
THEN
322 IF (nodeproc(i) == myid)
THEN
323 nstart_km =
min(nstart_km,local2global(i))
328 nstart_km = 3 * (nstart_km - 1) + 1
337 IF(myid==0)
print*,
'CONSTRUCTING THE MASS MATRIX'
342 ALLOCATE(cval_m(1:nnz_m))
343 ALLOCATE(aval_m(1:nnz_m))
344 ALLOCATE(rp_m(1:3*gnumnp+1))
349 DEALLOCATE(cval_temp)
350 DEALLOCATE(aval_temp)
354 CALL mpi_barrier(mpi_comm_world,ierr)
355 ALLOCATE(req_rcv(1:nprocs))
356 ALLOCATE(req_snd(1:nprocs))
357 ALLOCATE(stat_snd(1:mpi_status_size,1:nprocs))
358 ALLOCATE(stat_rcv(1:mpi_status_size,1:nprocs))
362 DO j = 1, mpi_status_size
367 ALLOCATE(amounttoreceive(1:numcommprocsfrom1))
368 DO i = 1, numcommprocsfrom1
369 CALL mpi_irecv(amounttoreceive(i),1, &
370 mpi_integer,commprocsfrom1(i),10,mpi_comm_world, &
373 ALLOCATE(amounttosend(1:numcommprocs1))
374 DO i = 1, numcommprocs1
376 DO j = 1, numcommnodes1(i)
380 inode = local2global(commnodes1(i,j))
381 jnode = int((m-0.5)/3)+1
383 jdof = m - 3*jnode + 3
385 inode*3-3+idof,jnode*3-3+jdof,tempkval)
386 IF (tempkval /= 0.0)
THEN
387 counter = counter + 1
394 amounttosend(i) = counter
397 CALL mpi_send(amounttosend(i),1,mpi_integer, &
398 commprocs1(i),10,mpi_comm_world,ierr)
402 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
406 CALL mpi_barrier(mpi_comm_world,ierr)
407 ALLOCATE(frmproc(1:numcommprocsfrom1))
408 DO i = 1, numcommprocsfrom1
409 ALLOCATE(frmproc(i)%rcvbuf(1:3*amounttoreceive(i)))
410 CALL mpi_irecv(frmproc(i)%rcvbuf(1),3*amounttoreceive(i), &
411 mpi_double_precision,commprocsfrom1(i),10,mpi_comm_world, &
414 DO i = 1, numcommprocs1
415 ALLOCATE(bufsnd(1:3*amounttosend(i)))
418 DO j = 1, numcommnodes1(i)
422 inode = local2global(commnodes1(i,j))
423 jnode = int((m-0.5)/3)+1
425 jdof = m - 3*jnode + 3
427 inode*3-3+idof,jnode*3-3+jdof,tempkval)
428 IF (tempkval /= 0.0)
THEN
429 counter = counter + 1
430 bufsnd(3*counter-2) = local2global(commnodes1(i,j))*3-3+p
431 bufsnd(3*counter-1) = m
432 bufsnd(3*counter) = tempkval
440 CALL mpi_send(bufsnd,3*amounttosend(i),mpi_double_precision, &
441 commprocs1(i),10,mpi_comm_world,ierr)
446 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
455 DO i = 1, numcommprocsfrom1
457 DO j = 1, amounttoreceive(i)
459 int(frmproc(i)%rcvbuf(3*j-2)),int(frmproc(i)%rcvbuf(3*j-1)),frmproc(i)%rcvbuf(3*j))
460 IF (nnz_temp /= nnz_m)
THEN
461 DEALLOCATE(cval_m,aval_m)
462 ALLOCATE(cval_m(nnz_temp),aval_m(nnz_temp))
468 DEALLOCATE(rp_temp,cval_temp,aval_temp)
472 DEALLOCATE(amounttoreceive)
473 DEALLOCATE(amounttosend)
477 CALL
comp_row_resize(3*gnumnp,3*gnumnp,nnz_m,1,rp_m,cval_m,aval_m,nstart_km,nrows_km)
478 DEALLOCATE(rp_m,cval_m,aval_m)
479 ALLOCATE(rp_m(1:nrows_km+1))
480 ALLOCATE(cval_m(1:nnz_temp))
481 ALLOCATE(aval_m(1:nnz_temp))
486 DEALLOCATE(rp_temp,cval_temp,aval_temp)
489 ALLOCATE(tempmg(1:numnp))
490 ALLOCATE(mg(1:3*lnumnp))
491 ALLOCATE(cval_m_temp(1:3*lnumnp))
492 ALLOCATE(aval_m_temp(1:3*lnumnp))
493 ALLOCATE(rp_m_temp(1:3*lnumnp+1))
494 tempmg(1:numnp) = 0.0
495 CALL
implicit_v3d8_mass(numelv,numnp,nummat,coor,elconnvol,mattype,ri,rho,tempmg,1,numelv)
497 tempmg(i) = 1.0 / tempmg(i)
501 CALL mpi_barrier(mpi_comm_world,ierr)
506 ALLOCATE(req_rcv(1:nprocs))
507 ALLOCATE(req_snd(1:nprocs))
508 ALLOCATE(stat_snd(1:mpi_status_size,1:nprocs))
509 ALLOCATE(stat_rcv(1:mpi_status_size,1:nprocs))
513 DO j = 1, mpi_status_size
518 ALLOCATE(frmproc(1:numcommprocsfrom1))
519 DO i = 1, numcommprocsfrom1
520 ALLOCATE(frmproc(i)%rcvbuf(1:2*numcommnodesfrom1(i)))
521 CALL mpi_irecv(frmproc(i)%rcvbuf(1),2*numcommnodesfrom1(i), &
522 mpi_double_precision,commprocsfrom1(i),10,mpi_comm_world, &
525 DO i = 1, numcommprocs1
526 ALLOCATE(bufsnd(2*numcommnodes1(i)))
527 DO j = 1, numcommnodes1(i)
528 bufsnd(2*j-1) = local2global(commnodes1(i,j))
529 bufsnd(2*j) = tempmg(commnodes1(i,j))
533 CALL mpi_send(bufsnd,2*numcommnodes1(i),mpi_double_precision, &
534 commprocs1(i),10,mpi_comm_world,ierr)
539 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
547 DO i = 1, numcommprocsfrom1
548 DO j = 1, numcommnodesfrom1(i)
549 tempmg(global2local(int(frmproc(i)%rcvbuf(2*j-1)))) = &
550 tempmg(global2local(int(frmproc(i)%rcvbuf(2*j-1)))) + frmproc(i)%rcvbuf(2*j)
561 IF (local2global(i) == m)
THEN
562 IF (nodeproc(i) == myid)
THEN
564 counter = counter + 1
565 mg(counter) = tempmg(i)
573 cval_m_temp(i) = i-1 + (nstart_km - 1)
574 aval_m_temp(i) = mg(i)
576 rp_m_temp(3*lnumnp+1) = 3*lnumnp
581 CALL
comp_row_add(3*lnumnp,3*gnumnp,nrows_km,nrows_km,nnz_m,3*lnumnp,1, &
582 rp_m,cval_m,0.5*aval_m,1,rp_m_temp,cval_m_temp,0.5*aval_m_temp)
583 DEALLOCATE(rp_m,cval_m,aval_m)
584 DEALLOCATE(rp_m_temp,cval_m_temp,aval_m_temp)
585 ALLOCATE(rp_m(nrows_km+1),cval_m(nnz_temp),aval_m(nnz_temp))
590 DEALLOCATE(rp_temp,cval_temp,aval_temp)
606 IF(myid==0)
print*,
'CONSTRUCTING THE STIFFNESS MATRIX'
608 mattype, nummat, enhanced_map, mixed_map)
609 ALLOCATE(rp_k(1:3*gnumnp+1))
610 ALLOCATE(cval_k(1:nnz_temp))
611 ALLOCATE(aval_k(1:nnz_temp))
616 DEALLOCATE(rp_temp,cval_temp,aval_temp)
620 CALL mpi_barrier(mpi_comm_world,ierr)
621 ALLOCATE(req_rcv(1:nprocs))
622 ALLOCATE(req_snd(1:nprocs))
623 ALLOCATE(stat_snd(1:mpi_status_size,1:nprocs))
624 ALLOCATE(stat_rcv(1:mpi_status_size,1:nprocs))
628 DO j = 1, mpi_status_size
633 ALLOCATE(amounttoreceive(1:numcommprocsfrom1))
634 DO i = 1, numcommprocsfrom1
635 CALL mpi_irecv(amounttoreceive(i),1, &
636 mpi_integer,commprocsfrom1(i),10,mpi_comm_world, &
639 ALLOCATE(amounttosend(1:numcommprocs1))
640 DO i = 1, numcommprocs1
642 DO j = 1, numcommnodes1(i)
646 inode = local2global(commnodes1(i,j))
647 jnode = int((m-0.5)/3)+1
649 jdof = m - 3*jnode + 3
651 inode*3-3+idof,jnode*3-3+jdof,tempkval)
652 IF (tempkval /= 0.0)
THEN
653 counter = counter + 1
661 amounttosend(i) = counter
664 CALL mpi_send(amounttosend(i),1,mpi_integer, &
665 commprocs1(i),10,mpi_comm_world,ierr)
669 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
674 CALL mpi_barrier(mpi_comm_world,ierr)
675 ALLOCATE(ki(1:numcommprocsfrom1))
676 DO i = 1, numcommprocsfrom1
677 ALLOCATE(ki(i)%rcvbuf(1:amounttoreceive(i)))
678 CALL mpi_irecv(ki(i)%rcvbuf(1),amounttoreceive(i), &
679 mpi_integer,commprocsfrom1(i),10,mpi_comm_world, &
682 DO i = 1, numcommprocs1
683 ALLOCATE(bufsnd(1:amounttosend(i)))
685 DO j = 1, numcommnodes1(i)
689 inode = local2global(commnodes1(i,j))
690 jnode = int((m-0.5)/3)+1
692 jdof = m - 3*jnode + 3
694 inode*3-3+idof,jnode*3-3+jdof,tempkval)
695 IF (tempkval /= 0.0)
THEN
696 counter = counter + 1
697 bufsnd(counter) = local2global(commnodes1(i,j))*3-3+p
704 CALL mpi_send(int(bufsnd(:)),amounttosend(i),mpi_integer, &
705 commprocs1(i),10,mpi_comm_world,ierr)
708 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
712 CALL mpi_barrier(mpi_comm_world,ierr)
713 ALLOCATE(kj(1:numcommprocsfrom1))
714 DO i = 1, numcommprocsfrom1
715 ALLOCATE(kj(i)%rcvbuf(1:amounttoreceive(i)))
716 CALL mpi_irecv(kj(i)%rcvbuf(1),amounttoreceive(i), &
717 mpi_integer,commprocsfrom1(i),10,mpi_comm_world, &
720 DO i = 1, numcommprocs1
721 ALLOCATE(bufsnd(1:amounttosend(i)))
723 DO j = 1, numcommnodes1(i)
727 inode = local2global(commnodes1(i,j))
728 jnode = int((m-0.5)/3)+1
730 jdof = m - 3*jnode + 3
732 inode*3-3+idof,jnode*3-3+jdof,tempkval)
733 IF (tempkval /= 0.0)
THEN
734 counter = counter + 1
742 CALL mpi_send(int(bufsnd(:)),amounttosend(i),mpi_integer, &
743 commprocs1(i),10,mpi_comm_world,ierr)
746 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
750 CALL mpi_barrier(mpi_comm_world,ierr)
751 ALLOCATE(frmproc(1:numcommprocsfrom1))
752 DO i = 1, numcommprocsfrom1
753 ALLOCATE(frmproc(i)%rcvbuf(1:amounttoreceive(i)))
754 CALL mpi_irecv(frmproc(i)%rcvbuf(1),amounttoreceive(i), &
755 mpi_double_precision,commprocsfrom1(i),10,mpi_comm_world, &
758 DO i = 1, numcommprocs1
759 ALLOCATE(bufsnd(1:amounttosend(i)))
761 DO j = 1, numcommnodes1(i)
765 inode = local2global(commnodes1(i,j))
766 jnode = int((m-0.5)/3)+1
768 jdof = m - 3*jnode + 3
770 inode*3-3+idof,jnode*3-3+jdof,tempkval)
771 IF (tempkval /= 0.0)
THEN
772 counter = counter + 1
773 bufsnd(counter) = tempkval
780 CALL mpi_send(bufsnd,amounttosend(i),mpi_double_precision, &
781 commprocs1(i),10,mpi_comm_world,ierr)
784 CALL mpi_waitall(nprocs,req_rcv,stat_rcv,ierr)
794 CALL
comp_row_resize(3*gnumnp,3*gnumnp,nnz_k,1,rp_k,cval_k,aval_k,nstart_km,nrows_km)
795 DEALLOCATE(rp_k,cval_k,aval_k)
796 ALLOCATE(rp_k(1:nrows_km+1))
797 ALLOCATE(cval_k(1:nnz_temp))
798 ALLOCATE(aval_k(1:nnz_temp))
803 DEALLOCATE(rp_temp,cval_temp,aval_temp)
807 DO i = 1, numcommprocsfrom1
809 DO j = 1, amounttoreceive(i)
810 CALL
comp_row_addval(3*gnumnp,nrows_km,nnz_k,nstart_km,rp_k,cval_k,aval_k, &
811 ki(i)%rcvbuf(j),kj(i)%rcvbuf(j),frmproc(i)%rcvbuf(j))
812 IF (nnz_temp /= nnz_k)
THEN
813 DEALLOCATE(cval_k,aval_k)
814 ALLOCATE(cval_k(nnz_temp),aval_k(nnz_temp))
820 DEALLOCATE(rp_temp,cval_temp,aval_temp)
832 IF(myid==0)
print*,
'INITIALIZING DISPLACEMENT AND VELOCITY'
833 ALLOCATE(disp(1:3*lnumnp),v(1:3*lnumnp),a(1:3*lnumnp))
834 disp(1:3*lnumnp) = 0.0
836 IF (
ALLOCATED(node_flag))
THEN
838 ALLOCATE(node_flag(1:numnp,1:3))
839 ALLOCATE(boundary_value(1:numnp,1:3))
840 node_flag(1:numnp,1:3) = 0
846 IF ( global%BCFlag(j+1,i) == 0 )
THEN
847 node_flag(global%BCFlag(1,i),j) = 8
848 boundary_value(global%BCFlag(1,i),j) = global%BCvalue(j,i)
853 IF ( global%BCFlag(j+1,i) == 1 )
THEN
854 node_flag(global%BCFlag(1,i),j) = 7
855 boundary_value(global%BCFlag(1,i),j) = global%BCvalue(j,i)
867 IF(
ALLOCATED(
c))
DEALLOCATE(
c)
868 IF(
ALLOCATED(ci))
DEALLOCATE(ci)
869 ALLOCATE(
c(1:9,1:nummat),ci(1:9,1:nummat))
870 c(1:9,1:nummat) = 0.0
871 ci(1:9,1:nummat) = 0.0
883 IF(myid==0)
print*,
'CALCULATING INITIAL ACCELERATION'
885 ALLOCATE(fint(1:3*lnumnp))
886 CALL
get_fint(3*gnumnp,nrows_km,nnz_k,nstart_km,rp_k,cval_k,aval_k,disp,fint)
889 ALLOCATE(fext(1:3*lnumnp))
890 fext(1:3*lnumnp) = 0.0
894 IF (local2global(i) == m)
THEN
896 IF (nodeproc(i) == myid)
THEN
897 counter = counter + 1
898 IF(node_flag(i,j) == 7)
THEN
899 fext(counter) = boundary_value(i,j)
907 ALLOCATE(ftemp(1:3*lnumnp))
908 ftemp(1:3*lnumnp) = 0.0
913 ftemp(i) = fext(i) - fint(i)
922 IF (local2global(i) == m)
THEN
923 IF (nodeproc(i)==myid)
THEN
925 counter = counter + 1
926 IF(node_flag(i,j) == 8)
THEN
927 DO n = rp_m(counter)+1,rp_m(counter+1)
928 IF (cval_m(n)+1 /= counter+nstart_km-1)
THEN
943 IF (local2global(i) == m)
THEN
944 IF (nodeproc(i)==myid)
THEN
946 counter = counter + 1
947 IF(node_flag(i,j) == 8)
THEN
962 CALL bs95setup(3*gnumnp,nnz_m,nstart_km-1,nrows_km,rp_m,cval_m,aval_m,1,bs95debug)
963 CALL bs95solve(3*lnumnp,ftemp,a,contol,bs95debug)
964 CALL bs95free(bs95debug)
978 IF(myid==0)
print*,
'FORMING EFFECTIVE MASS MATRIX'
979 CALL
comp_row_add(3*lnumnp,3*gnumnp,nrows_km,nrows_km,nnz_k,nnz_m,1, &
980 rp_k,cval_k,alphaimp*delt*delt*aval_k,1,rp_m,cval_m,aval_m)
981 ALLOCATE(rp_meff(nrows_km+1),cval_meff(nnz_temp),aval_meff(nnz_temp))
983 nstart_meff = nstart_km
984 nrows_meff = nrows_km
986 cval_meff = cval_temp
987 aval_meff = aval_temp
988 DEALLOCATE(rp_temp,cval_temp,aval_temp)
991 CALL
removebcs_meff(3*gnumnp,nrows_meff,nnz_meff,nstart_meff,rp_meff,cval_meff,aval_meff, &
992 newnrows_meff,newnstart_meff,newndim)
993 DEALLOCATE(rp_meff,cval_meff,aval_meff)
994 nrows_meff = newnrows_meff
995 nstart_meff = newnstart_meff
996 ALLOCATE(rp_meff(nrows_meff+1),cval_meff(nnz_temp),aval_meff(nnz_temp))
999 cval_meff = cval_temp
1000 aval_meff = aval_temp
1001 DEALLOCATE(rp_temp,cval_temp,aval_temp)
1025 CALL bs95setup(newndim,nnz_meff,nstart_meff-1,nrows_meff,rp_meff,cval_meff,aval_meff,1,bs95debug)
1031 ALLOCATE(pbar(1:3*lnumnp))
1032 ALLOCATE(fint(1:3*lnumnp))
1033 ALLOCATE(s(1:6,1:ngpts,1:numelv))
1034 ALLOCATE(newpbar(1:nrows_meff))
1035 ALLOCATE(newa(1:nrows_meff))
1042 OPEN(30,file=
'output_'//myid_chr//
'.dat',
form=
'formatted')
1062 print*,
'BEGINNING TIMESTEPPING'
1064 print*,
' step time maxdisp'
1065 print*,
'------------------------------------'
1085 disp(i) = disp(i) + delt * v(i) + 0.5*delt*delt * (1.0 - 2.0*alphaimp) * a(i)
1086 v(i) = v(i) + delt * (1.0 - deltaimp) * a(i)
1099 CALL
get_fint(3*gnumnp,nrows_km,nnz_k,nstart_km,rp_k,cval_k,aval_k,disp,fint)
1110 pbar(i) = fext(i) - fint(i)
1126 CALL bs95solve(nrows_meff,newpbar,newa,contol,bs95debug)
1144 disp(i) = disp(i) + alphaimp*delt*delt*a(i)
1145 v(i) = v(i) + deltaimp*delt*a(i)
1162 IF (nodeproc(j) == myid)
THEN
1164 IF ( maxdisp <
sqrt(disp(3*(i-1)+1)**2.0 + disp(3*(i-1)+2)**2.0 + disp(3*(i-1)+3)**2.0) ) maxdispnode = j
1165 maxdisp =
max(maxdisp,
sqrt(disp(3*(i-1)+1)**2.0 + disp(3*(i-1)+2)**2.0 + disp(3*(i-1)+3)**2.0))
1173 IF(mod(n,ifreq).EQ.0)
THEN
1174 CALL mpi_reduce(maxdisp, gmaxdisp, 1, mpi_double_precision, mpi_max, 0, mpi_comm_world, ierr)
1175 IF(myid==0)
WRITE(*,3000) n, t, gmaxdisp
1177 WRITE(30,1001) local2global((i-1)/3+1),mod(i-1,3)+1,disp(i),v(i),a(i),t
1201 elapsedtime = elapsedtime + mpi_wtime()
1202 if(myid==0)
print*,
'Elapsed time of program: ',elapsedtime,
' seconds'
1205 CALL bs95free(bs95debug)
1206 CALL bs95finalize(bs95debug)
1219 DEALLOCATE(cval_meff)
1220 DEALLOCATE(aval_meff)
1231 DEALLOCATE(local2global)
1232 DEALLOCATE(global2local)
1233 DEALLOCATE(nodeproc)
1234 IF (nprocs > 1)
THEN
1235 DEALLOCATE(commprocs1)
1236 DEALLOCATE(numcommnodes1)
1237 DEALLOCATE(commnodes1)
1238 DEALLOCATE(commprocsfrom1)
1239 DEALLOCATE(numcommnodesfrom1)
1240 DEALLOCATE(commprocs2)
1241 DEALLOCATE(numcommnodes2)
1242 DEALLOCATE(commnodes2)
1243 DEALLOCATE(commprocsfrom2)
1244 DEALLOCATE(numcommnodesfrom2)
1248 1001
FORMAT(i5,
' ',i1,
' ',4(f15.6,
' '))
1249 2000
FORMAT(100(f6.2,
' '))
1250 3000
FORMAT(
' ',i5,
' ',f12.3,
' ',f10.6)
subroutine initcomm1(global)
subroutine removebcs_newa(nstart, ndim, a, newndim, newa)
subroutine vol_elem_mat(e, xnu, ci, cj, numat_vol, Integration)
subroutine initcomm2(global)
Vector_n max(const Array_n_const &v1, const Array_n_const &v2)
subroutine comp_row_add(ndim, gndim, nrows1, nrows2, nnz1, nnz2, nstart1, rp1, cval1, aval1, nstart2, rp2, cval2, aval2)
int status() const
Obtain the status of the attribute.
subroutine removebcs_meff(ndim, nrows, nnz, nstart, rp1, cval, aval, newnrows, newnstart, newndim, global)
subroutine feminp(glb, myid)
subroutine comp_row_getval(ndim, nrows, nnz, nstart, rp, cval, aval, ipos, jpos, val)
subroutine implicit_bc_enforce(NumNp, LocNumNp, disp, v, a, node_flag, boundary_value, t, myid)
subroutine comp_row_resize(ndim, nrows, nnz, nstart, rp, cval, aval, newnstart, newnrows)
subroutine implicit_v3d8_mass(NumEl, NumNP, NumMat, coor, nodes, MatType, ri, rho, xm, iElStart, iElEnd)
subroutine get_fint(ndim, nrows, nnz, nstart, rp_k, cval_k, aval_k, dispin, fint)
**********************************************************************Rocstar Simulation Suite Illinois Rocstar LLC All rights reserved ****Illinois Rocstar LLC IL **www illinoisrocstar com **sales illinoisrocstar com WITHOUT WARRANTY OF ANY **EXPRESS OR INCLUDING BUT NOT LIMITED TO THE WARRANTIES **OF FITNESS FOR A PARTICULAR PURPOSE AND **NONINFRINGEMENT IN NO EVENT SHALL THE CONTRIBUTORS OR **COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES OR OTHER WHETHER IN AN ACTION OF TORT OR **Arising OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE **USE OR OTHER DEALINGS WITH THE SOFTWARE **********************************************************************INTERFACE SUBROUTINE form
subroutine removebcs_pbar(nstart, ndim, pbar, newndim, newpbar)
Vector_n min(const Array_n_const &v1, const Array_n_const &v2)
subroutine implicit_v3d8_mass_consistent(NumEl, NumNP, NumMat, coor, nodes, MatType, ri, rho, ElConnVol)
subroutine get_mat_stiffness(e, dnu, dmat)
subroutine implicit_v3d8_me_k(coor, ElConnVol, ci, numnp, nstart, nend, NumEL, MatType, NumMatType, enhanced_map, mixed_map, NumMatVol)
subroutine comp_row_addval(ndim, nrows, nnz, nstart, rp, cval, aval, ipos, jpos, val)