54 s11ev, s22ev, s33ev, s12ev, s23ev, s13ev, &
55 numelneigh,elconn,
alpha, ahat,&
56 xmu,xkappa,nummatvol, &
57 nprocs,totnumndcomm,totnumneighprocs,neighproclist,numndcomm,neigh_lst,&
58 mpi_status_size,mpi_comm_rocfrac,mpi_double_precision, &
59 reqrcv,reqsnd,statrcv, statsnd)
67 INTEGER :: totnumneighprocs, nprocs,totnumndcomm
68 INTEGER,
DIMENSION(1:TotNumNeighProcs) :: neighproclist
69 INTEGER,
DIMENSION(1:TotNumNeighProcs) ::numndcomm
71 TYPE(rcv_buf),
pointer,
DIMENSION(:) :: recvdatafrm
72 TYPE(send_buf),
DIMENSION(1:TotNumNeighProcs) :: neigh_lst
75 INTEGER :: numnp, numel
76 REAL*8,
DIMENSION(1:numnp) :: ahat
77 REAL*8,
DIMENSION(1:3*numnp) :: disp, rnet
78 REAL*8,
DIMENSION(1:3,1:numnp) :: coor
79 integer,
DIMENSION(1:numnp) ::numelneigh
80 INTEGER,
DIMENSION(1:numnp,1:40) :: elconn
81 INTEGER,
DIMENSION(1:4,1:numel) :: nodes
82 real*8,
dimension(1:4,1:numel) ::
alpha
83 real*8,
dimension(1:NumMatVol) :: xmu, xkappa
84 REAL*8,
DIMENSION(1:numel) :: s11ev, s22ev, s33ev, s12ev, s23ev, s13ev
89 REAL*8 :: x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4
90 REAL*8 :: x1d,x2d,x3d,x4d,y1d,y2d,y3d,y4d,z1d,z2d,z3d,z4d
91 INTEGER :: k1n1,k1n2,k1n3,k1n4,k2n1,k2n2,k2n3,k2n4
92 INTEGER :: k3n1,k3n2,k3n3,k3n4
98 REAL*8 :: u1,u2,u3,u4,v1,v2,v3,v4,w1,w2,w3,w4
100 REAL*8 :: dudx,dvdy,dwdz,dudy,dvdx,dvdz,dwdy,dudz,dwdx
103 REAL*8 :: x14, x24, x34, y14, y24, y34, z14, z24, z34
106 REAL*8 :: z12, z13,x12,x13,y12,y13
107 REAL*8 :: c11, c12, c13, c21, c22, c23, c31, c32, c33
108 REAL*8 :: sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8, sh9, sh10, sh11, sh12
109 REAL*8 :: sh13, sh14, sh15
113 REAL*8 :: b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12
115 REAL*8 :: e11,e22,e33,e12,e23,e13
116 REAL*8 :: b13, b14, b15
117 REAL*8 :: sums11n,sums22n,sums33n,sums12n,sums23n,sums13n
118 REAL*8 :: sume11n,sume22n,sume33n,sume12n,sume23n,sume13n
119 REAL*8,
DIMENSION(1:numnp) :: s11n, s22n, s33n,s12n, s23n, s13n
121 REAL*8 :: e11n, e22n, e33n, e12n, e23n, e13n
122 INTEGER :: k3i,k2i,k1i
124 INTEGER :: n1, n2, n3, n4
125 REAL*8 :: volel, volel0,vx6inv,vol
126 REAL*8 :: s11e, s22e, s33e, s12e, s23e, s13e
129 REAL*8 :: coeff1, coeff2
131 REAL*8 :: f11, f12, f13, f21, f22, f23, f31, f32, f33
132 REAL*8,
DIMENSION(1:numnp) :: f11v, f12v, f13v, f21v, f22v, f23v, f31v, f32v, f33v, voldefv
133 REAL*8 :: vx6def, vx6invdef, voldef
139 REAL*8,
pointer,
dimension(:) :: buf
141 integer :: mpi_status_size,mpi_comm_rocfrac,mpi_double_precision
144 INTEGER,
DIMENSION(1:TotNumNeighProcs) :: reqrcv, reqsnd
145 INTEGER,
DIMENSION(1:MPI_STATUS_SIZE,1:TotNumNeighProcs) :: statrcv, statsnd
169 DO j = 1, numelneigh(
i)
246 c11 = y24*z34 - z24*y34
247 c21 = -( x24*z34 - z24*x34 )
248 c31 = x24*y34 - y24*x34
250 vx6 = -( x14*c11 + y14*c21 + z14*c31 )
259 b1 = (y34*z24 - y24*z34) * vx6inv
260 b2 = (z34*x24 - z24*x34) * vx6inv
261 b3 = (x34*y24 - x24*y34) * vx6inv
262 b4 = (y13*z14 - y14*z13) * vx6inv
263 b5 = (z13*x14 - z14*x13) * vx6inv
264 b6 = (x13*y14 - x14*y13) * vx6inv
265 b7 = (y14*z12 - y12*z14) * vx6inv
266 b8 = (z14*x12 - z12*x14) * vx6inv
267 b9 = (x14*y12 - x12*y14) * vx6inv
268 b10 = (y12*z13 - y13*z12) * vx6inv
269 b11 = (z12*x13 - z13*x12) * vx6inv
270 b12 = (x12*y13 - x13*y12) * vx6inv
274 f11 = f11 +
alpha(ix,ielnum)*volel0*(1.d0 + ( b1*u1 + b4*u2 + b7*u3 + b10*u4 ))
275 f22 = f22 +
alpha(ix,ielnum)*volel0*(1.d0 + ( b2*v1 + b5*v2 + b8*v3 + b11*v4 ))
276 f33 = f33 +
alpha(ix,ielnum)*volel0*(1.d0 + ( b3*w1 + b6*w2 + b9*w3 + b12*w4 ))
277 f12 = f12 +
alpha(ix,ielnum)*volel0*(b2*u1 + b5*u2 + b8*u3 + b11*u4)
278 f21 = f21 +
alpha(ix,ielnum)*volel0*(b1*v1 + b4*v2 + b7*v3 + b10*v4)
279 f23 = f23 +
alpha(ix,ielnum)*volel0*(b3*v1 + b6*v2 + b9*v3 + b12*v4)
280 f32 = f32 +
alpha(ix,ielnum)*volel0*(b2*w1 + b5*w2 + b8*w3 + b11*w4)
281 f13 = f13 +
alpha(ix,ielnum)*volel0*(b3*u1 + b6*u2 + b9*u3 + b12*u4)
282 f31 = f31 +
alpha(ix,ielnum)*volel0*(b1*w1 + b4*w2 + b7*w3 + b10*w4)
302 ALLOCATE(recvdatafrm(0:nprocs-1))
306 ALLOCATE(buf(1:totnumndcomm/3*10))
308 DO j1 = 1, totnumneighprocs
309 k = neighproclist(j1)
310 ALLOCATE(recvdatafrm(
k)%rcvbuf(1:numndcomm(j1)*10))
311 DO j = 1, numndcomm(j1)
312 k2 = neigh_lst(j1)%NdId(
j)
322 buf(k1+9) = voldefv(k2)
329 DO j1 = 1, totnumneighprocs
330 k = neighproclist(j1)
331 CALL mpi_irecv(recvdatafrm(
k)%rcvbuf(1),numndcomm(j1)*10, &
332 mpi_double_precision,
k, 10, mpi_comm_rocfrac,reqrcv(j1),ierr)
338 DO j1 = 1, totnumneighprocs
339 k = neighproclist(j1)
341 CALL mpi_isend(buf(k2),numndcomm(j1)*10,&
342 mpi_double_precision,
k,10,mpi_comm_rocfrac,reqsnd(j1),ierr)
343 k2 = k2 + numndcomm(j1)*10
348 IF(totnumneighprocs.GT.0)
THEN
349 CALL mpi_waitall(totnumneighprocs,reqrcv,statrcv,ierr)
350 CALL mpi_waitall(totnumneighprocs,reqsnd,statsnd,ierr)
357 DO j1 = 1, totnumneighprocs
358 k = neighproclist(j1)
360 DO j = 1, numndcomm(j1)
361 k2 = neigh_lst(j1)%NdId(
j)
362 f11v(k2) = f11v(k2) + recvdatafrm(
k)%rcvbuf(k1)
363 f12v(k2) = f12v(k2) + recvdatafrm(
k)%rcvbuf(k1+1)
364 f13v(k2) = f13v(k2) + recvdatafrm(
k)%rcvbuf(k1+2)
365 f21v(k2) = f21v(k2) + recvdatafrm(
k)%rcvbuf(k1+3)
366 f22v(k2) = f22v(k2) + recvdatafrm(
k)%rcvbuf(k1+4)
367 f23v(k2) = f23v(k2) + recvdatafrm(
k)%rcvbuf(k1+5)
368 f31v(k2) = f31v(k2) + recvdatafrm(
k)%rcvbuf(k1+6)
369 f32v(k2) = f32v(k2) + recvdatafrm(
k)%rcvbuf(k1+7)
370 f33v(k2) = f33v(k2) + recvdatafrm(
k)%rcvbuf(k1+8)
371 voldefv(k2) = voldefv(k2) + recvdatafrm(
k)%rcvbuf(k1+9)
376 DEALLOCATE(recvdatafrm)
394 s11n(
i),s22n(
i),s33n(
i),s12n(
i),s13n(
i),s23n(
i),
i,xmu(1),xkappa(1))
476 c11 = y24*z34 - z24*y34
477 c21 = -( x24*z34 - z24*x34 )
478 c31 = x24*y34 - y24*x34
480 vx6def = -( x14*c11 + y14*c21 + z14*c31 )
482 vx6invdef = 1.d0 / vx6def
487 IF(vx6def.LE.0.d0)
THEN
502 s11e = s11e +
alpha(
k,ielnum)*s11n(nodes(
k,ielnum))
503 s22e = s22e +
alpha(
k,ielnum)*s22n(nodes(
k,ielnum))
504 s33e = s33e +
alpha(
k,ielnum)*s33n(nodes(
k,ielnum))
505 s12e = s12e +
alpha(
k,ielnum)*s12n(nodes(
k,ielnum))
506 s23e = s23e +
alpha(
k,ielnum)*s23n(nodes(
k,ielnum))
507 s13e = s13e +
alpha(
k,ielnum)*s13n(nodes(
k,ielnum))
517 sh1 = (y34*z24 - y24*z34) * vx6invdef
518 sh2 = (z34*x24 - z24*x34) * vx6invdef
519 sh3 = (x34*y24 - x24*y34) * vx6invdef
520 sh4 = (y13*z14 - y14*z13) * vx6invdef
521 sh5 = (z13*x14 - z14*x13) * vx6invdef
522 sh6 = (x13*y14 - x14*y13) * vx6invdef
523 sh7 = (y14*z12 - y12*z14) * vx6invdef
524 sh8 = (z14*x12 - z12*x14) * vx6invdef
525 sh9 = (x14*y12 - x12*y14) * vx6invdef
526 sh10 = (y12*z13 - y13*z12) * vx6invdef
527 sh11 = (z12*x13 - z13*x12) * vx6invdef
528 sh12 = (x12*y13 - x13*y12) * vx6invdef
534 rnet(k1n1) = rnet(k1n1) - voldef* &
535 ( s11e*sh1 + s12e*sh2 + s13e*sh3 )
536 rnet(k2n1) = rnet(k2n1) - voldef* &
537 ( s12e*sh1 + s22e*sh2 + s23e*sh3 )
538 rnet(k3n1) = rnet(k3n1) - voldef* &
539 ( s13e*sh1 + s23e*sh2 + s33e*sh3 )
541 rnet(k1n2) = rnet(k1n2) - voldef* &
542 ( s11e*sh4 + s12e*sh5 + s13e*sh6 )
543 rnet(k2n2) = rnet(k2n2) - voldef* &
544 ( s12e*sh4 + s22e*sh5 + s23e*sh6 )
545 rnet(k3n2) = rnet(k3n2) - voldef* &
546 ( s13e*sh4 + s23e*sh5 + s33e*sh6 )
548 rnet(k1n3) = rnet(k1n3) - voldef* &
549 ( s11e*sh7 + s12e*sh8 + s13e*sh9 )
550 rnet(k2n3) = rnet(k2n3) - voldef* &
551 ( s12e*sh7 + s22e*sh8 + s23e*sh9 )
552 rnet(k3n3) = rnet(k3n3) - voldef* &
553 ( s13e*sh7 + s23e*sh8 + s33e*sh9 )
555 rnet(k1n4) = rnet(k1n4) - voldef* &
556 ( s11e*sh10 + s12e*sh11 + s13e*sh12 )
557 rnet(k2n4) = rnet(k2n4) - voldef* &
558 ( s12e*sh10 + s22e*sh11 + s23e*sh12 )
559 rnet(k3n4) = rnet(k3n4) - voldef* &
560 ( s13e*sh10 + s23e*sh11 + s33e*sh12 )
565 100
FORMAT(
' Negative Jacobian for element: ',i10)
subroutine arruda_boyce_cauchy(F11, F12, F13, F21, F22, F23, F31, F32, F33, Cchy11, Cchy22, Cchy33, Cchy12, Cchy13, Cchy23, ielem, mu, kappa)
subroutine v3d4n_nl_arruda_boyce(numnp, numel, coor, disp, nodes, Rnet, S11ev, S22ev, S33ev, S12ev, S23ev, S13ev, NumElNeigh, ElConn, alpha, Ahat, xmu, xkappa, NumMatVol, nprocs, TotNumNdComm, TotNumNeighProcs, NeighProcList, NumNdComm, neigh_lst, MPI_STATUS_SIZE, MPI_COMM_ROCFRAC, MPI_DOUBLE_PRECISION, ReqRcv, ReqSnd, StatRcv, StatSnd)
unsigned char alpha() const