87 INTEGER ::
j, j1,
k , k1
89 INTEGER :: totnumndcomm3
95 glb%MeshCoor(1,
j) = glb%coor(1,
j) + glb%DispBar(j1 - 2)
96 glb%MeshCoor(2,
j) = glb%coor(2,
j) + glb%DispBar(j1 - 1)
97 glb%MeshCoor(3,
j) = glb%coor(3,
j) + glb%DispBar(j1 )
104 glb%TotalMassSolidp = 0.d0
105 IF(glb%iElType.EQ.4)
THEN
106 IF( .NOT.(glb%NdBasedEl) )
THEN
107 CALL
v3d4_mass(glb%MeshCoor,glb%ElConnVol,glb%MatIdVol,glb%rho,glb%xmass, &
108 glb%NumNP,glb%NumElVol,glb%NumMatVol,1,glb%NumElPartBndry,glb%TotalMassSolidp)
109 ELSE IF(glb%NdBasedEl)
THEN
110 CALL
v3d4n_mass(glb%MeshCoor,glb%ElConnVol,glb%MatIdVol,glb%rho,glb%xmass, &
111 glb%NumNP,glb%NumElVol,glb%NumMatVol,1,glb%NumElVol,glb%TotalMassSolidp, &
112 glb%NumElNeigh,glb%ElConnNd,glb%AlphaR,glb%VolUndfmd)
115 CALL
v3d10_mass(glb%MeshCoor,glb%ElConnVol,glb%MatIdVol,glb%rho,glb%xmass, &
116 glb%NumNP,glb%NumElVol,glb%NumMatVol,1,glb%NumElPartBndry,glb%TotalMassSolidp)
121 totnumndcomm3 = glb%TotNumNdComm/3
122 ALLOCATE(buf(1:glb%TotNumNdComm3))
124 DO j1 = 1, glb%TotNumNeighProcs
125 k = glb%NeighProcList(j1)
126 DO j = 1, glb%NumNdComm(j1)
127 buf(k1) = glb%xmass( glb%NdCommList(j1)%NdId(
j) )
134 DO j1 = 1, glb%TotNumNeighProcs
135 k = glb%NeighProcList(j1)+1
136 CALL mpi_irecv(glb%RecvDataFrm(
k)%rcvbuf(1),glb%NumNdComm(j1), &
137 mpi_double_precision,
k-1,10,glb%MPI_COMM_ROCFRAC,glb%ReqRcv(j1),ierr)
143 DO j1 = 1, glb%TotNumNeighProcs
144 k = glb%NeighProcList(j1)
145 CALL mpi_isend(buf(k1),glb%NumNdComm(j1), &
146 mpi_double_precision,
k,10,glb%MPI_COMM_ROCFRAC,glb%ReqSnd(j1),ierr)
147 k1 = k1 + glb%NumNdComm(j1)
152 IF(glb%iElType.EQ.4)
THEN
153 IF(glb%iSolnType.NE.10)
THEN
154 CALL
v3d4_mass(glb%MeshCoor,glb%ElConnVol,glb%MatIdVol,glb%rho,glb%xmass, &
155 glb%NumNP,glb%NumElVol,glb%NumMatVol,glb%NumElPartBndry+1,glb%NumElVol,glb%TotalMassSolidp)
158 CALL
v3d10_mass(glb%MeshCoor,glb%ElConnVol,glb%MatIdVol,glb%rho,glb%xmass, &
159 glb%NumNP,glb%NumElVol,glb%NumMatVol,glb%NumElPartBndry+1,glb%NumElVol,glb%TotalMassSolidp)
165 IF(glb%TotNumNeighProcs.GT.0)
THEN
166 CALL mpi_waitall(glb%TotNumNeighProcs,glb%ReqRcv,glb%StatRcv,ierr)
167 CALL mpi_waitall(glb%TotNumNeighProcs,glb%ReqSnd,glb%StatSnd,ierr)
174 DO j1 = 1, glb%TotNumNeighProcs
175 k = glb%NeighProcList(j1)+1
176 DO j = 1, glb%NumNdComm(j1)
177 k1 = glb%NdCommList(j1)%NdId(
j)
178 glb%xmass(k1) = glb%xmass(k1) + glb%RecvDataFrm(
k)%rcvbuf(
j)
182 glb%xmass(:) = 1.d0/glb%xmass(:)
subroutine v3d4_mass(coor, lmcstet, matcstet, rho, xm, numnp, numcstet, numat_vol, nstart, nend)
subroutine v3d10_mass(coor, lmcstet, matcstet, rho, xm, numnp, numcstet, numat_vol, nstart, nend, TotalMass)
subroutine aleupdatemassmatrix(glb)
subroutine v3d4n_mass(coor, lmcstet, matcstet, rho, xm, numnp, numcstet, numat_vol, nstart, nend, TotalMass, NumElNeigh, ElConn, Alpha, Vhat)