27#define MPI_STATUS_SIZE 1
40 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
41#include "implicit_f.inc"
55 INTEGER ITK(2,*), NKFRONT, NKFLOC, NKLOC, NDDLG, IPRINT
61 INTEGER I, NKFP(NSPMD-1), IRQTAG, REQ1(NSPMD-1),
62 . tstat1(mpi_status_size,nspmd-1), nkf_tot, len, ir,
jc,
63 . index, j, k, nn, nkfmax, nkf_new(nspmd), pp, nmin,
64 . pmin, ii, req2(2), tstat2(mpi_status_size,2),
66 . tstat3(mpi_status_size,3),req4(3),
67 . tstat4(mpi_status_size
68 . sbuf(2), rbuf(2,nspmd-1), nnzt, nddlp(nspmd-1),
69 . iadfin, iad, iad0, addcm(nddlg)
70 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ITKF, IKFRONT, PKFRONT,KFMAP
71 my_real,
DIMENSION(:),
ALLOCATABLE :: rtkf, rkfront
72 INTEGER MSGOFF,MSGOFF2,MSGOFF3,MSGOFF4,MSGOFF5,MSGOFF6
73 DATA msgoff/16000/,msgoff2/16062/
74 DATA msgoff3/16000/,msgoff4/16062/
75 DATA msgoff5/16003/,msgoff6/16064/
80 ALLOCATE(itkf(2,nkfront), rtkf(nkfront))
82 itkf(1,i)=itk(1,nkloc+i)
83 itkf(2,i)=itk(2,nkloc+i)
90 CALL mpi_irecv(rbuf(1,i), 2, mpi_integer, it_spmd(i+1),
91 . irqtag, spmd_comm_world, req1(i), ierr)
93 IF(nspmd > 1)
CALL mpi_waitall(nspmd-1, req1, tstat1, ierr)
101 nkf_tot=nkf_tot+nkfp(i)
103 ALLOCATE(ikfront(3,nkf_tot), rkfront(nkf_tot),
104 . pkfront(nspmd+1,nkf_tot))
115 IF(ir>nddlg) stop 1000
122 ikfront(1,iadfin) =
jc
123 ikfront(2,iadfin) = ir
124 ikfront(3,iadfin) = 0
125 IF(addcm(ir) == 0)
THEN
128 ikfront(3,iad0)=iadfin
130 rkfront(iadfin)=rtkf(i)
136 DEALLOCATE(itkf, rtkf)
139 ALLOCATE(itkf(2,nkfp(i)), rtkf(nkfp(i)))
142 CALL mpi_irecv(itkf, len, mpi_integer, it_spmd(i+1),
143 . irqtag, spmd_comm_world, req2(1), ierr)
146 CALL mpi_irecv(rtkf, len, real, it_spmd(i+1),
147 . irqtag, spmd_comm_world, req2(2), ierr)
155 IF(ir>nddlg) stop 2000
159 IF(ikfront(1,iad) ==
jc)
THEN
169 ikfront(1,nkf_tot) =
jc
170 ikfront(2,nkf_tot) = ir
171 ikfront(3,nkf_tot) = 0
172 IF(addcm(ir) == 0)
THEN
175 ikfront(3,iad0)=nkf_tot
177 rkfront(nkf_tot)=rtkf(j)
179 pkfront(2,nkf_tot)=i+1
181 rkfront(index)=rkfront(index)+rtkf(j)
185 pkfront(1+nn,index)=i+1
188 DEALLOCATE(itkf, rtkf)
196 IF (ispmd==0.AND.iprint==1)
THEN
198 WRITE(istdo,
'(A21,I10,A8,I10)')
199 .
' MUMPS DIM : NNZ =',nnzt,
' NNZFR =',nkf_tot
205 nkfmax=
max(nkfmax,nkfp(i))
208 ALLOCATE(kfmap(nspmd,nkfmax))
218 IF (pkfront(1,i)==1)
THEN
231 IF (nkf_new(pp)<nmin)
THEN
243 IF (ispmd==0.AND.iprint==1)
THEN
247 WRITE(istdo,
'(A6,I5,5X,A5,I10,A8,I10)')
248 .
' PROC=',i,
'NNZ =',nkloc+nkf_new(1),
249 .
' NNZFR =',nkf_new(1)
251 WRITE(istdo,
'(A6,I5,5X,A5,I10,A8,I10)')
252 .
' PROC=',i,
'NNZ =',nkip(i-1)+nkf_new(i),
253 .
' NNZFR =',nkf_new(i)
261 itk(1,nkloc+i)=ikfront(1,ii)
262 itk(2,nkloc+i)=ikfront(2,ii)
263 rtk(nkloc+i)=rkfront(ii)
268 CALL mpi_isend(nkf_new(i+1), 1, mpi_integer, it_spmd(i+1
269 . irqtag, spmd_comm_world, req3(1), ierr)
271 ALLOCATE(itkf(2,nkf_new(i+1)), rtkf(nkf_new(i+1)))
274 itkf(1,j)=ikfront(1,jj)
275 itkf(2,j)=ikfront(2,jj)
280 CALL mpi_isend(itkf, len, mpi_integer, it_spmd(i+1),
281 . irqtag, spmd_comm_world,
285 CALL mpi_isend(rtkf, len, real, it_spmd(i+1),
286 . irqtag, spmd_comm_world,
291 DEALLOCATE(itkf, rtkf)
294 DEALLOCATE(ikfront, rkfront, pkfront)
299 CALL mpi_isend(sbuf, 2, mpi_integer, it_spmd(1),
300 . irqtag, spmd_comm_world, req4(1), ierr)
304 CALL mpi_isend(itkf, len, mpi_integer, it_spmd(1),
305 . irqtag, spmd_comm_world, req4(2), ierr)
308 CALL mpi_isend(rtkf, len, real, it_spmd(1),
309 . irqtag, spmd_comm_world, req4(3), ierr)
312 DEALLOCATE(itkf, rtkf)
315 CALL mpi_irecv(nkfloc, 1, mpi_integer, it_spmd(1),
316 . irqtag, spmd_comm_world, req4, ierr)
319 ALLOCATE(itkf(2,nkfloc), rtkf(nkfloc))
322 CALL mpi_irecv(itkf, len, mpi_integer, it_spmd(1),
323 . irqtag, spmd_comm_world, req4(1), ierr)
326 CALL mpi_irecv(rtkf, len, real, it_spmd(1),
327 . irqtag, spmd_comm_world, req4(2), ierr)
331 itk(1,nkloc+i)=itkf(1,i)
332 itk(2,nkloc+i)=itkf(2,i)
335 DEALLOCATE(itkf, rtkf)
345!||--- calls -----------------------------------------------------
353 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
354#include "implicit_f.inc"
358#include "com01_c.inc"
367 INTEGER NZLOC, NZP(NSPMD-1), NNZ
372 INTEGER I, IRQTAG, MSGOFF, REQ(NSPMD-1), TSTAT(MPI_STATUS_SIZE,NSPMD-1), IERR
380 CALL mpi_irecv(nzp(i), 1, mpi_integer, it_spmd(i+1),
381 . irqtag, spmd_comm_world, req(i), ierr)
384 IF(nspmd > 1)
CALL mpi_waitall(nspmd-1, req, tstat, ierr)
390 CALL mpi_isend(nzloc, 1, mpi_integer, it_spmd(1),
391 . irqtag, spmd_comm_world, req, ierr)
411 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
412#include "implicit_f.inc"
416#include "com01_c.inc"
425 INTEGER ITK(2,*), NZLOC, IRN(*), JCN(*), NZP(*)
431 INTEGER NNZ, I, IRQTAG, MSGOFF,MSGOFF2,
433 . tstat(mpi_status_size,2), j
434 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: ITKP
436 . ,
DIMENSION(:),
ALLOCATABLE :: rtkp
451 ALLOCATE(itkp(2,nzp(i)), rtkp(nzp(i)))
454 CALL mpi_irecv(itkp, len, mpi_integer, it_spmd(i+1),
455 . irqtag, spmd_comm_world, req(1), ierr)
458 CALL mpi_irecv(rtkp, len, real, it_spmd(i+1),
459 . irqtag, spmd_comm_world, req(2), ierr)
469 DEALLOCATE(itkp, rtkp)
474 CALL mpi_isend(itk, len, mpi_integer, it_spmd(1),
475 . irqtag, spmd_comm_world, req(1), ierr)
478 CALL mpi_isend(rtk, len, real, it_spmd(1),
479 . irqtag, spmd_comm_world, req(2), ierr)
501 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
502#include "implicit_f.inc"
507#include "dmumps_struc.h"
509#include "com01_c.inc"
520 TYPE(dmumps_struc) MUMPS_PAR
532 mumps_par%COMM = spmd_comm_world
540 CALL dmumps(mumps_par)
561 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
562#include "implicit_f.inc"
567#include "dmumps_struc.h"
573 TYPE(dmumps_struc) MUMPS_PAR
584 IF (
ASSOCIATED(mumps_par%A))
DEALLOCATE(mumps_par%A
585 IF (
ASSOCIATED(mumps_par%IRN))
DEALLOCATE(mumps_par%IRN)
586 IF (
ASSOCIATED(mumps_par%JCN))
DEALLOCATE(mumps_par%JCN)
587 IF (
ASSOCIATED(mumps_par%A_LOC))
DEALLOCATE(mumps_par%A_LOC)
588 IF (
ASSOCIATED(mumps_par%IRN_LOC))
DEALLOCATE(mumps_par%IRN_LOC)
589 IF (
ASSOCIATED(mumps_par%JCN_LOC))
DEALLOCATE(mumps_par%JCN_LOC)
590 IF (
ASSOCIATED(mumps_par%RHS))
DEALLOCATE(mumps_par%RHS)
591 IF (
ASSOCIATED(mumps_par%A))
THEN
592 DEALLOCATE(mumps_par%A)
595 CALL dmumps(mumps_par)
614 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
615#include "implicit_f.inc"
619#include "com01_c.inc"
628 INTEGER CDDLP(*), NDDL, ISENS, NDDLG
634 INTEGER I, IRQTAG, MSGOFF, II, (NSPMD-1),
635 . TSTAT(MPI_STATUS_SIZE,-1), IERR,
638 my_real,
DIMENSION(:,:),
ALLOCATABLE :: vp
644 ALLOCATE(vp(nddlg,nspmd-1))
656 CALL mpi_irecv(vp(1,i), nddlg, real, it_spmd(i+1),
657 . irqtag, spmd_comm_world, req(i), ierr)
659 IF(nspmd > 1)
CALL mpi_waitall(nspmd-1, req, tstat, ierr)
662 rhs(j)=rhs(j)+vp(j,i)
668 ELSEIF (isens==2)
THEN
677 CALL mpi_isend(rhs, nddlg, real, it_spmd(i+1),
678 . irqtag, spmd_comm_world, req(i), ierr)
680 IF(nspmd > 1)
CALL mpi_waitall(nspmd-1, req, tstat, ierr)
693 CALL mpi_isend(vg, nddlg, real, it_spmd(1),
694 . irqtag, spmd_comm_world, req, ierr)
696 ELSEIF (isens==2)
THEN
699 . irqtag, spmd_comm_world, req, ierr)
727 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
728#include "implicit_f.inc"
733#include "dmumps_struc.h"
735#include "units_c.inc"
736#include "com01_c.inc"
738#include "impl1_c.inc"
744 TYPE(DMUMPS_STRUC) MUMPS_PAR
754 INTEGER AVAIL_MEM,ESTIM_MEM
755 INTEGER ORDERING_METHOD,METIS,PORD,AUTOMATIC
757 LOGICAL :: IS_OOC_AUTORIZED
759 is_ooc_autorized = .false.
760 IF(m_ocore == -1) is_ooc_autorized = .true.
772 CALL dmumps(mumps_par)
774 ordering_method = mumps_par%INFOG(7)
775 IF(mumps_par%INFOG(1) < 0)
THEN
777 WRITE(iout,*)
'Warning: MUMPS Error in Analysis. Retry'
781 IF(ordering_method /= pord)
THEN
782 ordering_method = pord
784 ordering_method = metis
787 mumps_par%ICNTL(7) = ordering_method
789 CALL dmumps(mumps_par)
793 IF( nspmd == 1) nspmd_per_node = 1
795 avail_mem = int(8.0d0 * lmemv /(10.0d0 * nspmd_per_node ))
796 IF(mumps_par%ICNTL(22) == 0 )
THEN
800 estim_mem = int(mumps_par%INFOG(16) * 1.2d0)
803 estim_mem = int(mumps_par%INFOG(26) * 1.2d0)
807 IF(is_ooc_autorized .AND. estim_mem > avail_mem)
THEN
808 mumps_par%ICNTL(22) = 1
809 mumps_par%ICNTL(23) = estim_mem
810 CALL tmpenvf(mumps_par%OOC_TMPDIR,tlen)
812 mumps_par%ICNTL(23) =
min(avail_mem,estim_mem)
818 CALL dmumps(mumps_par)
822 IF(mumps_par%INFOG(1) == -8)
THEN
825 WRITE(iout,*)
'Warning: MUMPS workspace too small. Retry'
827 mumps_par%ICNTL(14) = mumps_par%ICNTL(14) * 2
830 CALL dmumps(mumps_par)
833 ELSEIF(mumps_par%INFOG(1)==-9 .OR. mumps_par%INFOG(1)==-11
834 . .OR. mumps_par%INFOG(1)== -19 )
THEN
837 WRITE(iout,*)
'Warning: MUMPS workspace too small. Retry'
840 avail_mem = int(9.5d0 * lmemv /(10.0d0 * nspmd_per_node ))
841 estim_mem = avail_mem
842 mumps_par%ICNTL(23) = avail_mem
845 CALL dmumps(mumps_par)
848 ELSEIF(mumps_par%INFOG(1) == -13)
THEN
851 WRITE(iout,*)
'Warning: MUMPS workspace too large. Retry'
853 avail_mem = int(avail_mem * 8.0d0 / 10.0d0)
854 estim_mem = int(estim_mem * 8.0d0 / 10.0d0)
855 mumps_par%ICNTL(23) =
min(avail_mem,estim_mem)
858 CALL dmumps(mumps_par)
861 ELSEIF(mumps_par%INFOG(1)<0)
THEN
864 WRITE(iout,*)
'Warning: MUMPS error. Retry'
866 avail_mem = int(9.5d0 * lmemv /(10.0d0 * nspmd_per_node ))
867 estim_mem = avail_mem
868 mumps_par%ICNTL(23) = avail_mem
869 IF(ordering_method /= pord)
THEN
870 ordering_method = pord
872 ordering_method = metis
874 mumps_par%ICNTL(7) = ordering_method
875 mumps_par%ICNTL(13) = 1
877 CALL dmumps(mumps_par)
880 CALL dmumps(mumps_par)
886 IF (mumps_par%INFOG(1)<0)
THEN
895 ELSEIF (itask==2)
THEN
899 CALL dmumps(mumps_par)
917 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
918#include "implicit_f.inc"
923#include "dmumps_struc.h"
925#include "com01_c.inc"
927#include "impl1_c.inc"
947 CHARACTER (len=255) file_mat,file_rhs,file_icntl
950 IF(imumpsd == 2 .AND. ispmd == 0)
THEN
952 OPEN(unit=21,file=
"matrix",action=
"write",status=
"replace",
953 . form=
'unformatted')
955 OPEN(unit=22,file=
"rhs",action=
"write",status=
"replace",
956 . form=
'unformatted')
958 OPEN(unit=23,file=
"icntl",action=
"write",status=
"replace",
959 . form=
'unformatted')
961 WRITE(21) mumps_par%N,mumps_par%NZ
962 DO i = 1,mumps_par%NZ
963 WRITE(21) mumps_par%IRN(i),mumps_par%JCN(i),mumps_par%A(i)
965 WRITE(22) mumps_par%N
967 WRITE(22) mumps_par%RHS(i)
969 WRITE(23) mumps_par%ICNTL
975 WRITE(file_mat,
"(A4,I4.4)")
"mat_",ispmd
976 WRITE(file_rhs,
"(A4,I4.4)")
"rhs_",ispmd
977 WRITE(file_icntl,
"(A4,I4.4)")
"opt_",ispmd
979 OPEN(unit=21,file=file_mat,action=
"write",status=
"replace",
980 . form=
'unformatted')
982 OPEN(unit=22,file=file_rhs,action=
"write",status=
"replace",
983 . form=
'unformatted')
985 OPEN(unit=23,file=file_icntl,action=
"write",status=
"replace",
986 . form=
'unformatted')
989 WRITE(21) mumps_par%N,mumps_par%NZ,mumps_par%NZ_LOC
990 DO i = 1,mumps_par%NZ_LOC
991 WRITE(21) mumps_par%IRN_LOC(i),mumps_par%JCN_LOC(i),
994 IF( ispmd == 0 )
THEN
995 WRITE(22) mumps_par%N
997 WRITE(22) mumps_par%RHS(i)
1000 WRITE(23) mumps_par%ICNTL
1040 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1041#include "implicit_f.inc"
1045#include "com01_c.inc"
1046#include "task_c.inc"
1059 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1061 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1072 loc_proc = ispmd + 1
1077 CALL mpi_irecv(rbuf(i),siz,real,it_spmd(i),msgtyp,
1078 . spmd_comm_world,req_r(i-1),ierror)
1082 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1089 CALL mpi_send(s,siz,real,it_spmd(i),
1090 . msgtyp,spmd_comm_world,ierror)
1094 CALL mpi_send(s,siz,real,it_spmd(1),
1095 . msgtyp,spmd_comm_world,ierror)
1098 CALL mpi_recv(s,siz,real,it_spmd(1),msgtyp,
1099 . spmd_comm_world,status,ierror)
1115 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1116#include "implicit_f.inc"
1120#include "com01_c.inc"
1121#include "task_c.inc"
1136 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1138 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1140 . rbuf(nspmd*len),si
1147 loc_proc = ispmd + 1
1153 CALL mpi_irecv(rbuf(ideb),siz,real,it_spmd(i),msgtyp,
1154 . spmd_comm_world,req_r(i-1),ierror)
1159 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1162 s(i) = s(i) + rbuf(ideb+i)
1168 CALL mpi_send(s,siz,real,it_spmd(i),
1169 . msgtyp,spmd_comm_world,ierror)
1173 CALL mpi_send(s,siz,real,it_spmd(1),
1174 . msgtyp,spmd_comm_world,ierror)
1177 CALL mpi_recv(s,siz,real,it_spmd(1),msgtyp,
1178 . spmd_comm_world,status,ierror)
1198 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1199#include "implicit_f.inc"
1203#include "com01_c.inc"
1204#include "task_c.inc"
1217 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1219 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1222 DATA msgoff/16008/,msgoff2/16009/
1226 loc_proc = ispmd + 1
1231 CALL mpi_irecv(rbuf(i),siz,real,it_spmd(i),msgtyp,
1243 CALL mpi_send(s,siz,real,it_spmd(i),
1244 . msgtyp,spmd_comm_world,ierror)
1248 CALL mpi_send(s,siz,real,it_spmd(1),
1249 . msgtyp,spmd_comm_world,ierror)
1252 CALL mpi_recv(s,siz,real,it_spmd(1),msgtyp,
1253 . spmd_comm_world,status,ierror)
1268!||--- calls -----------------------------------------------------
1276 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1277#include "implicit_f.inc"
1281#include "com01_c.inc"
1282#include "task_c.inc"
1295 INTEGER , N, MSGOFF, MSGOFF2, MSGTYP, IERROR
1304 loc_proc = ispmd + 1
1309 CALL mpi_irecv(rbuf(i),siz,real,it_spmd(i),msgtyp,
1310 . spmd_comm_world,req_r(i-1),ierror)
1314 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1321 CALL mpi_send(s,siz,real,it_spmd(i),
1322 . msgtyp,spmd_comm_world,ierror)
1326 CALL mpi_send(s,siz,real,it_spmd(1),
1327 . msgtyp,spmd_comm_world,ierror)
1330 CALL mpi_recv(s,siz,real,it_spmd(1),msgtyp,
1331 . spmd_comm_world,status,ierror)
1365 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1366#include "implicit_f.inc"
1370#include "com01_c.inc"
1371#include "task_c.inc"
1384 INTEGER I,L,MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1386 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1389 DATA msgoff/16011/,msgoff2/16012/
1393 loc_proc = ispmd + 1
1398 CALL mpi_irecv(rbuf(i),siz,mpi_integer,it_spmd(i),msgtyp,
1399 . spmd_comm_world,req_r(i-1),ierror)
1403 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1410 CALL mpi_send(n,siz,mpi_integer,it_spmd(i),
1411 . msgtyp,spmd_comm_world,ierror)
1415 CALL mpi_send(n,siz,mpi_integer,it_spmd(1),
1416 . msgtyp,spmd_comm_world,ierror)
1419 CALL mpi_recv(n,siz,mpi_integer,it_spmd(1),msgtyp,
1420 . spmd_comm_world,status,ierror)
1439 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1440#include "implicit_f.inc"
1444#include "com01_c.inc"
1445#include "task_c.inc"
1458 INTEGER I,L,MSGOFF, , MSGTYP, IERROR, LOC_PROC,
1460 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1463 DATA msgoff/16013/,msgoff2/16014/
1467 loc_proc = ispmd + 1
1472 CALL mpi_irecv(rbuf(i),siz,mpi_integer,it_spmd(i),msgtyp,
1473 . spmd_comm_world,req_r(i-1),ierror)
1477 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1484 CALL mpi_send(n,siz,mpi_integer,it_spmd(i),
1485 . msgtyp,spmd_comm_world,ierror)
1489 CALL mpi_send(n,siz,mpi_integer,it_spmd(1),
1490 . msgtyp,spmd_comm_world,ierror)
1494 . spmd_comm_world,status,ierror)
1507!||--- uses -----------------------------------------------------
1512 1 NDDL0 ,NZZK0 ,NDDL ,NZZK ,NNMAX ,
1513 1 NDDL0P ,NZZK0P ,NDDLP ,NZZKP ,NNMAXP )
1521 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1522#include "implicit_f.inc"
1526#include "com01_c.inc"
1527#include "task_c.inc"
1528#include "impl1_c.inc"
1536 INTEGER NDDL,NDDL0,NZZK,NZZK0,NNMAX,
1537 . NDDLP(*),NDDL0P(*),NZZKP(*),NZZK0P(*),NNMAXP(*)
1542 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
1544 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
1552 loc_proc = ispmd + 1
1566 CALL mpi_irecv(rbuf(1,i),siz,mpi_integer,it_spmd(i),msgtyp,
1567 . spmd_comm_world,req_r(i-1),ierror)
1576 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
1583 rbuf(1,1) = rbuf(1,1) + rbuf(1,i)
1584 rbuf(2,1) = rbuf(2,1) + rbuf(2,i)
1585 rbuf(3,1) = rbuf(3,1) + rbuf(3,i)
1586 rbuf(4,1) = rbuf(4,1) + rbuf(4,i)
1587 rbuf(5,1) =
max(rbuf(5,1),rbuf(5,i))
1588 rbuf(6,1) = rbuf(6,1) + rbuf(6,i)
1589 rbuf(7,1) = rbuf(7,1) + rbuf(7,i)
1590 rbuf(8,1) = rbuf(8,1) + rbuf(8,i)
1591 rbuf(9,1) = rbuf(9,1) + rbuf(9,i)
1595 nzzk0 = rbuf(2,1)-rbuf(7,1)/2
1597 nzzk = rbuf(4,1)-rbuf(9,1)/2
1603 CALL mpi_send(ibuf ,2,mpi_integer,it_spmd(i),
1604 . msgtyp,spmd_comm_world,ierror)
1609 CALL mpi_send(rbuf,siz,mpi_integer,it_spmd(1),
1610 . msgtyp,spmd_comm_world,ierror)
1612 CALL mpi_recv(ibuf,2,mpi_integer,it_spmd(1),msgtyp,
1613 . spmd_comm_world,status,ierror)
1619 IF (l_lim==0) l_lim = nddl_g
1625!||
spmd_sumf_v ../engine/source/mpi/
implicit/imp_spmd.f
1657 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1658#include "implicit_f.inc"
1662#include "com01_c.inc"
1663#include "task_c.inc"
1672#if defined(MPI) && defined(MUMPS5)
1676 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
1678 . STATUS(MPI_STATUS_SIZE),
1679 . REQ_R(NSPMD),REQ_S()
1688 loc_proc = ispmd + 1
1696 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
1697 g spmd_comm_world,req_r(i),ierror)
1724 s sbuf(l),siz,real,it_spmd(i),msgtyp,
1725 g spmd_comm_world,req_s(i),ierror)
1735 CALL mpi_wait(req_r(i),status,ierror)
1739 v(nd) = v(nd) + rbuf(id)
1749 CALL mpi_wait(req_s(i),status,ierror)
1775 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1776#include "implicit_f.inc"
1780#include "com01_c.inc"
1781#include "task_c.inc"
1789 INTEGER LCOM, INDEX(LCOM)
1791 . VGAT(LCOM), VSCA(LCOM)
1796 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
1798 . STATUS(MPI_STATUS_SIZE),
1799 . REQ_R(NSPMD),REQ_S(NSPMD)
1806 loc_proc = ispmd + 1
1814 s vsca(l),siz ,real,it_spmd(i),msgtyp,
1815 g spmd_comm_world,req_r(i),ierror)
1826 s vgat(l),siz,real,it_spmd(i),msgtyp,
1827 g spmd_comm_world,req_s(i),ierror)
1834 CALL mpi_wait(req_r(i),status,ierror)
1835 CALL mpi_wait(req_s(i),status,ierror)
1844 vsca(l)=vsca(l)+vsca(i)
1871 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
1872#include "implicit_f.inc"
1876#include "com01_c.inc"
1877#include "task_c.inc"
1891 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
1892 . SIZ(NSPMD),,K,L,ND,ID,JD,
1893 . STATUS(MPI_STATUS_SIZE),IAD,JAD,IAD2,
1894 . REQ_R(NSPMD),REQ_S(NSPMD)
1903 loc_proc = ispmd + 1
1912 . rbuf(l),siz(i),real,it_spmd(i),msgtyp,
1913 . spmd_comm_world,req_r(i),ierror)
1938 iad2 =iad2 +
nd_fr(i)
1941 iad =iad +
nd_fr(i)+1
1951 s sbuf(l),siz(i),real,it_spmd(i),msgtyp,
1952 g spmd_comm_world,req_s(i),ierror)
1965 CALL mpi_wait(req_r(i),status,ierror)
1968 diag_k(nd)=diag_k(nd)+rbuf(l)
1973 l_k(jd)=l_k(jd)+rbuf(l)
1977 iad2 =iad2 +
nd_fr(i)
1980 iad =iad +
nd_fr(i)+1
1987 CALL mpi_wait(req_s(i),status,ierror)
2006 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2007#include "implicit_f.inc"
2011#include "com01_c.inc"
2012#include "task_c.inc"
2020 INTEGER IAD_R(*),IAD_S(*)
2025 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2026 . STATUS(MPI_STATUS_SIZE),
2027 . REQ_R(NSPMD),REQ_S(NSPMD)
2029 . RBUF(NSPMD), SBUF(NSPMD)
2035 loc_proc = ispmd + 1
2041 s rbuf(i),1 ,mpi_integer,it_spmd(i),msgtyp,
2042 g spmd_comm_world,req_r(i),ierror)
2051 sbuf(i) = iad_s(i+1)-iad_s(i)
2053 s sbuf(i),1,mpi_integer,it_spmd(i),msgtyp,
2054 g spmd_comm_world,req_s(i),ierror)
2063 CALL mpi_wait(req_r(i),status,ierror)
2064 iad_r(i+1) = iad_r(i)+rbuf(i)
2066 iad_r(i+1) = iad_r(i)
2074 CALL mpi_wait(req_s(i),status,ierror)
2082!||
spmd_inisl ../engine/source/mpi/
implicit/imp_spmd.f
2093 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2094#include "implicit_f.inc"
2099#include "dmumps_struc.h"
2101#include "com01_c.inc"
2102#include "task_c.inc"
2110 INTEGER ,INBSL(NBINTC,*)
2111#if defined(MPI) && defined(MUMPS5)
2115 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2116 . STATUS(MPI_STATUS_SIZE),
2117 . REQ_R(NSPMD),(NSPMD),SIZ,L,J,IAD
2119 . RBUF(NSPMD*NBINTC), SBUF(NSPMD*NBINTC)
2125 loc_proc = ispmd + 1
2133 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
2134 g spmd_comm_world,req_r(i),ierror)
2146 sbuf(l+j-1) = inbsl(j,i)
2149 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
2150 g spmd_comm_world,req_s(i),ierror)
2160 CALL mpi_wait(req_r(i),status,ierror)
2162 inbsl(j,i) = rbuf(l+j)
2172 CALL mpi_wait(req_s(i),status,ierror)
2197 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2198#include "implicit_f.inc"
2203#include "dmumps_struc.h"
2205#include "com01_c.inc"
2206#include "task_c.inc"
2214 INTEGER SSIZE ,RSIZE
2217#if defined(MPI) && defined(MUMPS5)
2221 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2222 . SIZ,J,L,SIZE,STATUS(MPI_STATUS_SIZE),
2223 . REQ_R(NSPMD),REQ_S(NSPMD)
2225 . RBUF(7*RSIZE), SBUF(7*SSIZE)
2230 loc_proc = ispmd + 1
2243 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
2244 g spmd_comm_world,req_r(i),ierror)
2277 s sbuf(l),siz,real,it_spmd(i),msgtyp,
2278 g spmd_comm_world,req_s(i),ierror)
2289 CALL mpi_wait(req_r(i),status,ierror)
2291 isl(j) = int(rbuf(l))
2292 kss(1,j) = rbuf(l+1)
2293 kss(2,j) = rbuf(l+2)
2294 kss(3,j) = rbuf(l+3)
2295 kss(4,j) = rbuf(l+4)
2296 kss(5,j) = rbuf(l+5)
2297 kss(6,j) = rbuf(l+6)
2307 CALL mpi_wait(req_s(i),status,ierror)
2321!||--- uses -----------------------------------------------------
2333 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2334#include "implicit_f.inc"
2338#include "com01_c.inc"
2339#include "task_c.inc"
2347 INTEGER SSIZE ,RSIZE
2350#if defined(MPI) && defined(MUMPS5)
2354 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2355 . SIZ,J,,SIZE,STATUS(MPI_STATUS_SIZE),
2356 . (NSPMD),REQ_S(NSPMD)
2358 . RBUF(3*RSIZE), SBUF(3*SSIZE)
2363 loc_proc = ispmd + 1
2374 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
2375 g spmd_comm_world,req_r(i),ierror)
2388 sbuf(l) =d_imp(1,nod)
2389 sbuf(l+1)=d_imp(2,nod)
2390 sbuf(l+2)=d_imp(3,nod)
2405 s sbuf(l),siz,real,it_spmd(i),msgtyp,
2406 g spmd_comm_world,req_s(i),ierror)
2417 CALL mpi_wait(req_r(i),status,ierror)
2420 dfi(2,j) = rbuf(l+1)
2421 dfi(3,j) = rbuf(l+2)
2431 CALL mpi_wait(req_s(i),status,ierror)
2457 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2458#include "implicit_f.inc"
2463#include "dmumps_struc.h"
2465#include "com01_c.inc"
2466#include "task_c.inc"
2474 INTEGER SSIZE ,RSIZE
2477#if defined(MPI) && defined()
2481 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2482 . SIZ,J,L,SIZE,STATUS(MPI_STATUS_SIZE),
2483 . REQ_R(NSPMD),REQ_S(NSPMD)
2485 . RBUF(3*), SBUF(3*SSIZE)
2490 loc_proc = ispmd + 1
2501 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
2502 g spmd_comm_world,req_r(i),ierror)
2531 s sbuf(l),siz,real,it_spmd(i),msgtyp,
2532 g spmd_comm_world,req_s(i),ierror)
2543 CALL mpi_wait(req_r(i),status,ierror)
2546 f_imp(1,nod) = f_imp(1,nod) + rbuf(l)
2547 f_imp(2,nod) = f_imp(2,nod) + rbuf(l+1)
2548 f_imp(3,nod) = f_imp(3,nod) + rbuf(l+2)
2558 CALL mpi_wait(req_s(i),status,ierror)
2580 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2581#include "implicit_f.inc"
2585#include "com01_c.inc"
2586#include "task_c.inc"
2594 INTEGER NROW(*),FR_NROW(*),IAD_ELEM(2,*),TSIZE
2595#if defined(MPI) && defined(MUMPS5)
2599 INTEGER MSGOFF,MSGTYP,NOD,LOC_PROC,IERROR,
2600 . STATUS(MPI_STATUS_SIZE),SIZ,
2601 . REQ_R(NSPMD),REQ_S(NSPMD),
2604 . rbuf(tsize), sbuf(tsize)
2609 loc_proc = ispmd + 1
2611 siz = iad_elem(1,i+1)-iad_elem(1,i)
2616 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
2617 g spmd_comm_world,req_r(i),ierror)
2624 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2632 siz = iad_elem(1,i+1)-iad_elem(1,i)
2637 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
2638 g spmd_comm_world,req_s(i),ierror)
2645 siz = iad_elem(1,i+1)-iad_elem(1,i)
2647 CALL mpi_wait(req_r(i),status,ierror)
2648 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2649 fr_nrow(j) = rbuf(j)
2657 IF((iad_elem(1,i+1)-iad_elem(1,i))>0)
THEN
2658 CALL mpi_wait(req_s(i),status,ierror)
2667!||
spmd_icol ../engine/source/mpi/
implicit/imp_spmd.f
2677 1 IAD_S ,IAD_R ,NNMAX ,ICOL ,NROW ,
2678 2 FR_NROW ,IAD_ELEM ,FR_ELEM ,SSIZE ,RSIZE )
2682 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2683#include "implicit_f.inc"
2687#include "com01_c.inc"
2688#include "task_c.inc"
2697 INTEGER IAD_R(*),IAD_S(*),FR_NROW(*),NROW(*),
2698 . IAD_ELEM(2,*),FR_ELEM(*),ICOL(NNMAX,*),
2700#if defined(MPI) && defined(MUMPS5)
2704 INTEGER MSGOFF,MSGTYP,NOD,LOC_PROC,,
2705 . STATUS(MPI_STATUS_SIZE),SIZ,
2706 . REQ_R(NSPMD),REQ_S(NSPMD),
2709 . RBUF(RSIZE), SBUF(SSIZE)
2714 loc_proc = ispmd + 1
2716 siz = iad_r(i+1)-iad_r(i)
2721 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
2722 g spmd_comm_world,req_r(i),ierror)
2729 siz = iad_s(i+1)-iad_s(i)
2732 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2734 sbuf(k+l) = icol(k,j)
2744 siz = iad_s(i+1)-iad_s(i)
2749 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
2750 g spmd_comm_world,req_s(i),ierror)
2757 siz = iad_r(i+1)-iad_r(i)
2759 CALL mpi_wait(req_r(i),status,ierror)
2761 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2776 IF(iad_s(i+1)-iad_s(i)>0)
THEN
2777 CALL mpi_wait(req_s(i),status,ierror)
2796 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2797#include "implicit_f.inc"
2801#include "com01_c.inc"
2802#include "task_c.inc"
2810 INTEGER NDOF(*),FR_ELEM(*),IAD_ELEM(*),TSIZE
2811# defined(MPI) && defined(MUMPS5)
2815 INTEGER MSGOFF,MSGTYP,NOD,LOC_PROC,IERROR,
2816 . STATUS(MPI_STATUS_SIZE),SIZ,
2817 . req_r(nspmd),req_s(nspmd),
2820 . rbuf(tsize), sbuf(tsize)
2825 loc_proc = ispmd + 1
2827 siz = iad_elem(i+1)-iad_elem(i)
2832 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
2833 g spmd_comm_world,req_r(i),ierror)
2840 DO j=iad_elem(i),iad_elem(i+1)-1
2849 siz = iad_elem(i+1)-iad_elem(i)
2854 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
2855 g spmd_comm_world,req_s(i),ierror)
2862 siz = iad_elem(i+1)-iad_elem(i)
2864 CALL mpi_wait(req_r(i),status,ierror)
2865 DO j=iad_elem(i),iad_elem(i+1)-1
2867 ndof(nod) =
max(ndof(nod),rbuf(j))
2875 IF((iad_elem(i+1)-iad_elem(i))>0)
THEN
2876 CALL mpi_wait(req_s(i),status,ierror)
2892!||--- calls -----------------------------------------------------
2900 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
2901#include "implicit_f.inc"
2905#include "com01_c.inc"
2906#include "task_c.inc"
2914 INTEGER FR_ELEM(*),IAD_ELEM(2,*),SIZE,LR
2921 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
2922 . siz,j,l,status(mpi_status_size
2923 . req_r(nspmd),req_s(nspmd)
2925 . rbuf(lr*size), sbuf(lr*size)
2930 loc_proc = ispmd + 1
2936 siz = (iad_elem(1,i+1)-iad_elem(1,i))*
SIZE
2940 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
2941 g spmd_comm_world,req_r(i),ierror)
2953#include "vectorize.inc"
2954 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2959 sbuf(l+3) = ar(1,nod)
2960 sbuf(l+4) = ar(2,nod)
2961 sbuf(l+5) = ar(3,nod)
2965#include "vectorize.inc"
2966 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
2969 sbuf(l+1) = a(2,nod)
2970 sbuf(l+2) = a(3,nod)
2982 siz = (iad_elem(1,i+1)-iad_elem(1,i))*
SIZE
2986 s sbuf(l),siz,real,it_spmd(i),msgtyp,
2987 g spmd_comm_world,req_s(i),ierror)
2997 IF(i/=loc_proc.AND.iad_elem(1,i+1)>iad_elem(1,i))
THEN
2998 CALL mpi_wait(req_r(i),status,ierror)
3000#include "vectorize.inc"
3001 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
3003 a(1,nod)=a(1,nod)+rbuf(l)
3004 a(2,nod)=a(2,nod)+rbuf(l+1)
3005 a(3,nod)=a(3,nod)+rbuf(l+2)
3006 ar(1,nod)=ar(1,nod)+rbuf(l+3)
3007 ar(2,nod)=ar(2,nod)+rbuf(l+4)
3008 ar(3,nod)=ar(3,nod)+rbuf(l+5)
3012#include "vectorize.inc"
3013 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
3015 a(1,nod)=a(1,nod)+rbuf(l)
3016 a(2,nod)=a(2,nod)+rbuf(l+1)
3017 a(3,nod)=a(3,nod)+rbuf(l+2)
3027 IF(iad_elem(1,i+1)-iad_elem(1,i)>0)
THEN
3028 CALL mpi_wait(req_s(i),status,ierror)
3047 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3048#include "implicit_f.inc"
3052#include "com01_c.inc"
3053#include "task_c.inc"
3061 INTEGER NDOF(*),FR_ELEM(*),IAD_ELEM(2,*),TSIZE
3066 INTEGER MSGOFF,MSGTYP,NOD,,IERROR,
3067 . STATUS(MPI_STATUS_SIZE),SIZ,
3068 . req_r(nspmd),req_s(nspmd),
3071 . rbuf(tsize), sbuf(tsize)
3076 loc_proc = ispmd + 1
3078 siz = iad_elem(1,i+1)-iad_elem(1,i)
3083 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
3084 g spmd_comm_world,req_r(i),ierror)
3091 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
3100 siz = iad_elem(1,i+1)-iad_elem(1,i)
3105 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
3106 g spmd_comm_world,req_s(i),ierror)
3113 siz = iad_elem(1,i+1)-iad_elem(1,i)
3115 CALL mpi_wait(req_r(i),status,ierror)
3116 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
3118 ndof(nod) =
max(ndof(nod),rbuf(j))
3126 IF((iad_elem(1,i+1)-iad_elem(1,i))>0)
THEN
3127 CALL mpi_wait(req_s(i),status,ierror)
3145 . INLOC, IKC , NDDLG, NDDLP)
3149 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3150#include "implicit_f.inc"
3154#include "com01_c.inc"
3155#include "com04_c.inc"
3156#include "task_c.inc"
3157#include "spmd_c.inc"
3165 INTEGER NDDL, NODGLOB(*), IDDL(*), NDOF(*), CDDLP(*),
3166 . INLOC(*), IKC(*), NDDLG, NDDLP(*)
3167#if (MPI) && defined(MUMPS5)
3171 INTEGER I, J, ITAG(6,NUMNODG), , N, ND, ID, TDDL(2,NDDL),
3172 . NDDLGL, NDDLC, LEN, IRQTAG, MSGOFF, REQ(2), IERR,
3173 . stat(mpi_status_size,2), nn, jj,msgoff2,msgoff3
3174 INTEGER,
DIMENSION(:),
ALLOCATABLE :: CDDLPC
3175 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: TDDLC
3176 DATA MSGOFF/16030/,MSGOFF2/16031/,MSGOFF3/16056/
3192 tddl(1,id)=nodglob(i)
3204 ALLOCATE(tddlc(2,nddlc), cddlpc(nddlc))
3207 tddlc(1,j)=tddl(1,j)
3208 tddlc(2,j)=tddl(2,j)
3213 CALL mpi_irecv(tddlc, len, mpi_integer, it_spmd(i),
3214 . irqtag, spmd_comm_world, req, ierr)
3236 CALL mpi_isend(cddlpc, nddlc, mpi_integer, it_spmd(i),
3237 . irqtag, spmd_comm_world, req, ierr)
3241 DEALLOCATE(tddlc, cddlpc)
3247 CALL mpi_send(nddlg,1,mpi_integer,it_spmd(i),
3248 . irqtag,spmd_comm_world,ierr)
3253 CALL mpi_isend(tddl, len, mpi_integer, it_spmd(1),
3254 . irqtag, spmd_comm_world, req(1), ierr)
3257 CALL mpi_irecv(cddlp, nddl, mpi_integer, it_spmd(1),
3258 . irqtag, spmd_comm_world, req(2), ierr)
3264 CALL mpi_recv(nddlg,1,mpi_integer,it_spmd(1),irqtag,
3265 . spmd_comm_world,stat,ierr )
3278 . NBLOC, NDDL, IS, ISUM)
3282 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3283#include "implicit_f.inc"
3287#include "com01_c.inc"
3288#include "task_c.inc"
3296 INTEGER IV(*), NV, NVG, NBLOC, NDDL, IS, ISUM
3302 INTEGER I, II, ITAG, NVP, IVP(NDDL), J, JJ, NN, IAD,
3303 . ISTAT(MPI_STATUS_SIZE), IERR
3305 . vv(nddl), vp(nddl)
3306 INTEGER MSGOFF,MSGOFF2,MSGOFF3,MSGOFF4
3307 DATA MSGOFF/16057/,MSGOFF2/16058/,MSGOFF3/16059/,MSGOFF4/16060/
3324 CALL mpi_recv(nvp, 1, mpi_integer, it_spmd(i+1),
3325 . itag, spmd_comm_world, istat, ierr)
3327 CALL mpi_recv(ivp, nvp, mpi_integer, it_spmd(i+1),
3328 . itag, spmd_comm_world, istat, ierr)
3330 CALL mpi_recv(vp, nvp, real, it_spmd(i+1),
3331 . itag, spmd_comm_world, istat, ierr)
3338 ELSEIF (isum==2)
THEN
3354 nn=
min(nbloc, nddl-iad+1)
3356 CALL mpi_send(vv(iad), nn, real, it_spmd(i+1),
3357 . itag, spmd_comm_world, ierr)
3361 CALL mpi_send(nv, 1, mpi_integer, it_spmd(1),
3362 . itag, spmd_comm_world, ierr)
3364 CALL mpi_send(iv, nv, mpi_integer, it_spmd(1),
3365 . itag, spmd_comm_world, ierr)
3367 CALL mpi_send(v, nv, real, it_spmd(1),
3368 . itag, spmd_comm_world, ierr)
3371 CALL mpi_recv(vg, nvg, real, it_spmd(1),
3372 . itag, spmd_comm_world, istat, ierr)
3384 nn=
min(nbloc,nddl-iad+1)
3386 CALL mpi_recv(vv(iad), nn, real, it_spmd(i+1),
3387 . itag, spmd_comm_world, istat, ierr)
3397 CALL mpi_recv(nvp, 1, mpi_integer, it_spmd(i+1),
3398 . itag, spmd_comm_world, istat, ierr)
3400 CALL mpi_recv(ivp, nvp, mpi_integer, it_spmd(i+1),
3401 . itag, spmd_comm_world, istat,
3407 CALL mpi_send(vp, nvp, real, it_spmd(i+1),
3408 . itag, spmd_comm_world, ierr)
3412 CALL mpi_send(vg, nvg, real, it_spmd(1),
3413 . itag, spmd_comm_world, ierr)
3415 CALL mpi_send(nv, 1, mpi_integer, it_spmd(1),
3416 . itag, spmd_comm_world, ierr)
3418 CALL mpi_send(iv, nv, mpi_integer, it_spmd(1),
3419 . itag, spmd_comm_world, ierr)
3422 CALL mpi_recv(v, nv, real, it_spmd(1),
3423 . itag, spmd_comm_world, istat, ierr)
3430!||====================================================================
3432!||--- called by ------------------------------------------------------
3437!||--- uses -----------------------------------------------------
3444 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3445#include "implicit_f.inc"
3449#include "com01_c.inc"
3450#include "task_c.inc"
3458 INTEGER SSIZE ,RSIZE
3459 INTEGER IAD_S(NSPMD+1),IAD_R(NSPMD+1),(SSIZE),ITR(RSIZE)
3460#if defined(MPI) && defined(MUMPS5)
3464 INTEGER MSGOFF,MSGTYP,,NOD,LOC_PROC,IERROR,
3465 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),
3466 . REQ_R(NSPMD),REQ_S(NSPMD)
3468 . rbuf(rsize), sbuf(ssize)
3473 loc_proc = ispmd + 1
3481 siz = iad_r(i+1)-iad_r(i)
3485 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
3486 g spmd_comm_world,req_r(i),ierror)
3497 DO j=iad_s(i),iad_s(i+1)-1
3509 siz = iad_s(i+1)-iad_s(i)
3513 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
3514 g spmd_comm_world,req_s(i),ierror)
3524 IF(i/=loc_proc.AND.iad_r(i+1)>iad_r(i))
THEN
3525 CALL mpi_wait(req_r(i),status,ierror)
3526 DO j=iad_r(i),iad_r(i+1)-1
3536 IF(iad_s(i+1)-iad_s(i)>0)
THEN
3537 CALL mpi_wait(req_s(i),status,ierror)
3554 SUBROUTINE spmd_exci(ITS,ITR,IAD_S,IAD_R,SIZE ,SSIZE ,RSIZE)
3558 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3559#include "implicit_f.inc"
3563#include "com01_c.inc"
3564#include "task_c.inc"
3572 INTEGER SSIZE ,RSIZE,SIZE
3573 INTEGER ITS(SIZE,SSIZE),ITR(SIZE,RSIZE),
3574 . IAD_S(NSPMD+1),IAD_R(NSPMD+1)
3575#if defined(MPI) && defined(MUMPS5)
3579 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
3580 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),K,
3581 . req_r(nspmd),req_s(nspmd)
3583 . rbuf(rsize*size), sbuf(ssize*size)
3588 loc_proc = ispmd + 1
3596 siz = (iad_r(i+1)-iad_r(i))*
SIZE
3600 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
3601 g spmd_comm_world,req_r(i),ierror)
3612 DO j=iad_s(i),iad_s(i+1)-1
3626 siz = (iad_s(i+1)-iad_s(i))*
SIZE
3630 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
3631 g spmd_comm_world,req_s(i),ierror)
3641 IF(i/=loc_proc.AND.iad_r(i+1)>iad_r(i))
THEN
3642 CALL mpi_wait(req_r(i),status,ierror)
3643 DO j=iad_r(i),iad_r(i+1)-1
3645 itr(k,j) = rbuf(l+k)
3655 IF(iad_s(i+1)-iad_s(i)>0)
THEN
3656 CALL mpi_wait(req_s(i),status,ierror)
3674 SUBROUTINE spmd_exck(KS11,KR11,IAD_S,IAD_R,SIZE ,SSIZE,RSIZE)
3678 USE spmd_comm_world_mod,
ONLY :
3679#include "implicit_f.inc"
3683#include "com01_c.inc"
3684#include "task_c.inc"
3692 INTEGER SSIZE ,RSIZE,IAD_S(*),IAD_R(*),SIZE
3694 . KS11(SIZE,*),KR11(SIZE,*)
3695#if defined(MPI) && defined(MUMPS5)
3699 INTEGER MSGOFF,MSGTYP,I,NOD,LOC_PROC,IERROR,
3700 . SIZ,J,STATUS(MPI_STATUS_SIZE),
3701 . req_r(nspmd),req_s(nspmd)
3703 . rbuf(size*rsize),sbuf(size*ssize)
3708 loc_proc = ispmd + 1
3713 siz = (iad_r(i+1)-iad_r(i))*
SIZE
3717 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
3718 g spmd_comm_world,req_r(i),ierror)
3729 DO j=iad_s(i),iad_s(i+1)-1
3731 sbuf(l+nod)=ks11(nod,j)
3743 siz = (iad_s(i+1)-iad_s(i))*
SIZE
3747 s sbuf(l),siz,real,it_spmd(i),msgtyp,
3748 g spmd_comm_world,req_s(i),ierror)
3758 IF(i/=loc_proc.AND.iad_r(i+1)>iad_r(i))
THEN
3759 CALL mpi_wait(req_r(i),status,ierror)
3760 DO j=iad_r(i),iad_r(i+1)-1
3762 kr11(nod,j)=rbuf(l+nod)
3772 IF(iad_s(i+1)-iad_s(i)>0)
THEN
3773 CALL mpi_wait(req_s(i),status,ierror)
3788!||====================================================================
3797 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3798#include "implicit_f.inc"
3802#include "com01_c.inc"
3803#include "task_c.inc"
3813#if defined(MPI) && defined(MUMPS5)
3817 INTEGER MSGOFF,MSGTYP,I,ID,LOC_PROC,IERROR,
3818 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),
3819 . REQ_R(NSPMD),REQ_S(NSPMD)
3826 loc_proc = ispmd + 1
3836 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
3837 g spmd_comm_world,req_r(i),ierror)
3866 g spmd_comm_world,req_s(i),ierror)
3877 CALL mpi_wait(req_r(i),status,ierror)
3889 CALL mpi_wait(req_s(i),status,ierror)
3915 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
3916#include "implicit_f.inc"
3920#include "com01_c.inc"
3921#include "task_c.inc"
3931#if defined(MPI) && defined(MUMPS5)
3935 INTEGER MSGOFF,MSGTYP,I,ID,LOC_PROC,IERROR,
3936 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),
3937 . REQ_R(NSPMD),REQ_S(NSPMD)
3944 loc_proc = ispmd + 1
3954 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
3955 g spmd_comm_world,req_r(i),ierror)
3982 s sbuf(l),siz,real,it_spmd(i),msgtyp,
3983 g spmd_comm_world,req_s(i),ierror)
3994 CALL mpi_wait(req_r(i),status,ierror)
3997 f_imp(id) = f_imp(id) + rbuf(l)
4007 CALL mpi_wait(req_s(i),status,ierror)
4019!||--- uses -----------------------------------------------------
4031 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4032#include "implicit_f.inc"
4036#include "com01_c.inc"
4037#include "task_c.inc"
4048#if defined() && defined(MUMPS5)
4052 INTEGER MSGOFF,MSGTYP,I,II,ID,LOC_PROC,IERROR,
4053 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),
4054 . req_r(nspmd),req_s(nspmd)
4061 loc_proc = ispmd + 1
4071 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
4072 g spmd_comm_world,req_r(i),ierror)
4101 s sbuf(l),siz,real,it_spmd(i),msgtyp,
4102 g spmd_comm_world,req_s(i),ierror)
4113 CALL mpi_wait(req_r(i),status,ierror)
4125 CALL mpi_wait(req_s(i),status,ierror)
4150 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4151#include "implicit_f.inc"
4155#include "com01_c.inc"
4156#include "task_c.inc"
4167#if defined() && defined(MUMPS5)
4171 INTEGER MSGOFF,,I,II,ID,LOC_PROC,IERROR,
4172 . SIZ,J,,STATUS(MPI_STATUS_SIZE),
4173 . req_r(nspmd),req_s(nspmd)
4180 loc_proc = ispmd + 1
4190 s rbuf(l),siz ,real,it_spmd(i),msgtyp,
4191 g spmd_comm_world,req_r(i),ierror)
4218 s sbuf(l),siz,real,it_spmd(i),msgtyp,
4219 g spmd_comm_world,req_s(i),ierror)
4230 CALL mpi_wait(req_r(i),status,ierror)
4234 f_imp(ii) = f_imp(ii) + rbuf(l)
4244 CALL mpi_wait(req_s(i),status,ierror)
4269 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4270#include "implicit_f.inc"
4274#include "com01_c.inc"
4275#include "task_c.inc"
4283 INTEGER IG(*), IL(*)
4284#if defined(MPI) && defined(MUMPS5)
4288 INTEGER MSGOFF,MSGTYP,I,ID,LOC_PROC,IERROR,
4289 . SIZ,J,L,STATUS(MPI_STATUS_SIZE),
4290 . REQ_R(NSPMD),(NSPMD),K
4291 INTEGER RBUF(NDDL_SI), SBUF(NDDL_SL)
4306 s rbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
4307 g spmd_comm_world,req_r(i),ierror)
4336 g spmd_comm_world,req_s(i),ierror)
4347 CALL mpi_wait(req_r(i),status,ierror)
4359 CALL mpi_wait(req_s(i),status,ierror)
4367!||
spmd_send_vi ../engine/source/mpi/
implicit/imp_spmd.f
4375 1 NV ,NSIZ ,VI ,NVMAX ,IOUT )
4379 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4380#include
"implicit_f.inc"
4384#include "com01_c.inc"
4385#include "task_c.inc"
4393 INTEGER NV ,NSIZ ,NVMAX ,IOUT
4395#if defined(MPI) && defined(MUMPS5)
4399 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
4400 . INDEX, SIZ, J , K , L ,IT ,IP ,NN ,
4401 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
4403 . nbuf(nspmd),rbuf(nsiz*nvmax,nspmd)
4404 CHARACTER*25 MSG_TYPE(2)
4410 . /
'** WARNING **',
4415 loc_proc = ispmd + 1
4420 CALL mpi_irecv(rbuf(1,i),siz,mpi_integer,it_spmd(i),msgtyp,
4421 . spmd_comm_world,req_r(i-1),ierror)
4425 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4434 CALL mpi_send(rbuf,siz,mpi_integer,it_spmd(1),
4435 . msgtyp,spmd_comm_world,ierror)
4442 CALL mpi_irecv(rbuf(1,i),siz,mpi_integer,it_spmd(i),msgtyp,
4443 . spmd_comm_world,req_r(i-1),ierror)
4451 WRITE(csp,
'(A,I2.2)')
'INTERFACE TYPE ',nn
4452 WRITE(iout,1100)msg_type(1),csp
4455 ELSEIF(nsiz==3)
THEN
4457 ip = 1000 + rbuf(l,i)
4462 WRITE(iout,1001)msg_type(it),nn
4464 WRITE(iout,1002)msg_type(it),nn
4466 WRITE(iout,1003)msg_type(it),nn
4468 WRITE(iout,1004)msg_type(it),nn
4470 WRITE(iout,1005)msg_type(it),nn
4472 WRITE(iout,1006)msg_type(it),nn
4474 WRITE(iout,1007)msg_type(it),nn
4476 WRITE(iout,1008)msg_type(it),nn
4478 WRITE(iout,1009)msg_type(it),nn
4480 WRITE(iout,1010)msg_type(it),nn
4482 WRITE(iout,1011)msg_type(it),nn
4484 WRITE(iout,1012)msg_type(it),nn
4486 WRITE(iout,1013)msg_type(it),nn
4488 WRITE(iout,1014)msg_type(it),nn
4490 WRITE(iout,1015)msg_type(it),nn
4496 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4503 WRITE(csp,
'(A,I2.2)')
'INTERFACE TYPE ',nn
4504 WRITE(iout,1100)msg_type(1),csp
4507 ELSEIF(nsiz==3)
THEN
4514 WRITE(iout,1001)msg_type(it),nn
4516 WRITE(iout,1002)msg_type(it),nn
4518 WRITE(iout,1003)msg_type(it),nn
4520 WRITE(iout,1004)msg_type(it),nn
4522 WRITE(iout,1005)msg_type(it),nn
4524 WRITE(iout,1006)msg_type(it),nn
4526 WRITE(iout,1007)msg_type(it),nn
4528 WRITE(iout,1008)msg_type(it),nn
4530 WRITE(iout,1009)msg_type(it),nn
4532 WRITE(iout,1010)msg_type(it),nn
4534 WRITE(iout,1011)msg_type(it),nn
4536 WRITE(iout,1012)msg_type(it),nn
4538 WRITE(iout,1013)msg_type(it),nn
4540 WRITE(iout,1014)msg_type(it),nn
4542 WRITE(iout,1015)msg_type(it),nn
4559 CALL mpi_send(rbuf,siz,mpi_integer,it_spmd(1),
4560 . msgtyp,spmd_comm_world,ierror)
4563 1001
FORMAT(a,
' NODE USED FOR DIFF. RBODY MAIN=',i8)
4564 1002
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4565 .
'RBODY MAIN AND INTERF. TYPE2 SECONDARY =',i8)
4566 1003
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4567 .
'INTERF. TYPE2 SECONDARY AND INTERF. TYPE2 SECONDARY=',i8)
4568 1004
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4569 .
' RBODY MAIN AND RBODY SECONDARY=',i8)
4570 1005
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4571 .
' INTERF. TYPE2 SECONDARY AND RBODY SECONDARY=',i8)
4572 1006
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4573 .
' RBODY SECONDARY AND RBODY SECONDARY=',i8)
4574 1007
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4575 .
' BOUNDARY CONDITIONS AND INTERF. TYPE2 SECONDARY=',i8)
4576 1008
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4577 .
' BOUNDARY CONDITIONS AND RBODY SECONDARY=',i8)
4578 1009
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4579 .
' IMPOSED DISP. AND INTERF. TYPE2 SECONDARY=',i8)
4580 1010
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4581 .
' IMPOSED DISP. AND RBODY SECONDARY=',i8)
4582 1011
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4583 .
' IMPOSED DISP. AND BOUNDARY CONDITIONS=',i8)
4584 1012
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4585 .
' RWALL CONTACT AND INTERF. TYPE2 SECONDARY=',i8)
4586 1013
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4587 .
' RWALL CONTACT AND RBODY SECONDARY=',i8)
4588 1014
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4589 .
' RWALL CONTACT AND BOUNDARY CONDITIONS=',i8)
4590 1015
FORMAT(a,
' INCOMPABILITY NODE BETWEEN ',/
4591 .
' RWALL CONTACT AND IMPOSED DISP.=',i8)
4592 1100
FORMAT(a,
' IMPLICIT IS INCOMPABLE WITH :',a/)
4605 1 NV ,NSIZ ,VR ,NVMAX ,IOUT )
4609 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4610#include "implicit_f.inc"
4614#include "com01_c.inc"
4615#include "task_c.inc"
4623 INTEGER NV ,NSIZ ,NVMAX ,IOUT
4626#if defined(MPI) && defined(MUMPS5)
4630 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
4631 . INDEX, SIZ, J , K , L ,IT ,IP ,NN ,
4632 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
4634 . nbuf(nspmd),nr(nspmd)
4636 . rbuf(nsiz*nvmax,nspmd)
4638 DATA DIR/
'X',
'Y',
'Z'/
4644 loc_proc = ispmd + 1
4649 CALL mpi_irecv(nbuf(i),siz,mpi_integer,it_spmd(i),msgtyp,
4650 . spmd_comm_world,req_r
4654 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4663 CALL mpi_send(nbuf,siz,mpi_integer,it_spmd(1),
4664 . msgtyp,spmd_comm_world,ierror)
4671 CALL mpi_irecv(rbuf(1,i),siz,real,it_spmd(i),msgtyp,
4672 . spmd_comm_world,req_r(i-1),ierror)
4682 WRITE(iout,1001)nn,dir(it),s
4684 WRITE(iout,1002)nn,dir(it-3),s
4689 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4695 it = int(rbuf(l+1,i))
4698 WRITE(iout,1001)nn,dir(it),s
4700 WRITE(iout,1002)nn,dir(it-3),s
4716 CALL mpi_send(rbuf,siz,real,it_spmd(1),
4720 1001
FORMAT(
' NODE NUM. =',i10,5x,
'TRA_DIR = ',1a,5x,
'VAL.= ',g14.7)
4721 1002
FORMAT(
' NODE NUM. =',i10,5x,
'ROT_DIR = ',1a,5x,
'VAL.= ',g14.7)
4732!||====================================================================
4737 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4738#include "implicit_f.inc"
4742#include "com01_c.inc"
4743#include "task_c.inc"
4751 INTEGER NDDL ,NDDLFR ,NDDLG
4755 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
4757 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
4760 DATA MSGOFF/16043/,MSGOFF2/16044/
4761#if defined(MPI) && defined(MUMPS5)
4765 loc_proc = ispmd + 1
4771 CALL mpi_irecv(rbuf(i),siz,mpi_integer,it_spmd(i),msgtyp,
4772 . spmd_comm_world,req_r(i-1),ierror)
4776 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4778 rbuf(1) = rbuf(1) + rbuf(i)
4781 nddlg = rbuf(1)-nddlfr
4784 CALL mpi_send(nddlg,siz,mpi_integer,it_spmd(i),
4785 . msgtyp,spmd_comm_world,ierror)
4790 CALL mpi_send(rbuf,siz,mpi_integer,it_spmd(1),
4791 . msgtyp,spmd_comm_world,ierror)
4793 CALL mpi_recv(nddlg,siz,mpi_integer,it_spmd(1),msgtyp,
4794 . spmd_comm_world,status,ierror)
4803!||--- called by ------------------------------------------------------
4807!|| spmd_comm_world_mod ../engine/source/mpi/spmd_comm_world.f90
4813 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4814#include "implicit_f.inc"
4818#include "com01_c.inc"
4819#include "task_c.inc"
4827 INTEGER NMAX,IAD_ELEM(*),TSIZE
4832 INTEGER MSGOFF,MSGTYP,NOD,LOC_PROC,IERROR,
4833 . STATUS(MPI_STATUS_SIZE),SIZ,
4834 . REQ_R(NSPMD),REQ_S(NSPMD),
4837 . RBUF(TSIZE), SBUF(TSIZE)
4842 loc_proc = ispmd + 1
4844 siz = iad_elem(i+1)-iad_elem(i)
4849 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
4850 g spmd_comm_world,req_r(i),ierror)
4857 DO j=iad_elem(i),iad_elem(i+1)-1
4865 siz = iad_elem(i+1)-iad_elem(i)
4870 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
4871 g spmd_comm_world,req_s(i),ierror)
4878 siz = iad_elem(i+1)-iad_elem(i)
4880 CALL mpi_wait(req_r(i),status,ierror)
4881 DO j=iad_elem(i),iad_elem(i+1)-1
4882 nmax =
max(nmax,rbuf(j))
4890 IF((iad_elem(i+1)-iad_elem(i))>0)
THEN
4891 CALL mpi_wait(req_s(i),status,ierror)
4903!||--- uses -----------------------------------------------------
4904!|| spmd_comm_world_mod ../engine/source/mpi/spmd_comm_world.f90
4910 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
4911#include "implicit_f.inc"
4915#include "com01_c.inc"
4916#include "task_c.inc"
4930 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
4931 . MSGTYP2, MSGTYP3, MSGOFF3, MSGOFF4, MSGOFF5, MSGOFF6,
4932 . INDEX, SIZ,SIZ2,SIZ3,
4933 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD),
4934 . (NSPMD), IBUF2(NSPMD)
4937 DATA msgoff/16046/,msgoff2/16047/
4938 DATA msgoff3/16048/,msgoff4/16049/
4939 DATA msgoff5/16050/,msgoff6/16051/
4943 loc_proc = ispmd + 1
4952 CALL mpi_irecv(rbuf(i),siz,real,it_spmd(i),msgtyp,
4953 . spmd_comm_world,req_r(i-1),ierror)
4954 CALL mpi_irecv(ibuf1(i),siz2,mpi_integer,it_spmd(i),msgtyp2,
4955 . spmd_comm_world,req_r(i-1),ierror)
4956 CALL mpi_irecv(ibuf2(i),siz3,mpi_integer
4957 . spmd_comm_world,req_r(i-1),ierror)
4961 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
4963 IF (abs(rbuf(i)) > abs(f))
THEN
4974 CALL mpi_send(f,siz,real,it_spmd(i),
4975 . msgtyp,spmd_comm_world,ierror)
4976 CALL mpi_send(itab,siz2,mpi_integer,it_spmd(i),
4977 . msgtyp2,spmd_comm_world,ierror)
4978 CALL mpi_send(k,siz3,mpi_integer,it_spmd(i),
4979 . msgtyp3,spmd_comm_world,ierror)
4985 CALL mpi_send(f,siz,real,it_spmd(1),
4986 . msgtyp,spmd_comm_world,ierror)
4987 CALL mpi_send(itab,siz2,mpi_integer,it_spmd(1),
4988 . msgtyp2,spmd_comm_world,ierror)
4989 CALL mpi_send(k,siz3,mpi_integer,it_spmd(1),
4990 . msgtyp3,spmd_comm_world,ierror)
4994 CALL mpi_recv(f,siz,real,it_spmd(1),msgtyp,
4995 . spmd_comm_world,status,ierror)
4996 CALL mpi_recv(itab,siz2,mpi_integer,it_spmd(1),msgtyp2,
4997 . spmd_comm_world,status,ierror)
4998 CALL mpi_recv(k,siz3,mpi_integer,it_spmd(1),msgtyp3,
4999 . spmd_comm_world,status,ierror)
5024 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
5025#include "implicit_f.inc"
5029#include "com01_c.inc"
5030#include "task_c.inc"
5040#if defined(MPI) && defined(MUMPS5)
5046 . STATUS(MPI_STATUS_SIZE),
5047 . REQ_R(NSPMD),REQ_S(NSPMD)
5056 loc_proc = ispmd + 1
5064 s rbuf(l),siz ,mpi_integer,it_spmd(i),msgtyp,
5065 g spmd_comm_world,req_r(i),ierror)
5091 s sbuf(l),siz,mpi_integer,it_spmd(i),msgtyp,
5092 g spmd_comm_world,req_s(i),ierror)
5102 CALL mpi_wait(req_r(i),status,ierror)
5105 iv(id) =
max(iv(id) ,rbuf(id) )
5115 CALL mpi_wait(req_s(i),status,ierror)
5134 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
5135#include "implicit_f.inc"
5139#include "com01_c.inc"
5140#include "task_c.inc"
5148 INTEGER SENDBUF(*),RECVBUF(*),COUNT
5149#if defined(MPI) && (MUMPS5)
5158 CALL MPI_ALLREDUCE(SENDBUF,RECVBUF,COUNT,
5159 . mpi_integer,mpi_max,
5160 . spmd_comm_world,ierror)
5182 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
5183#include "implicit_f.inc"
5187#include "task_c.inc"
5188#include "com01_c.inc"
5197#if defined(MPI) && defined(MUMPS5)
5201 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
5202 . INDEX, SIZ,IBUF(2),L,J,K,
5203 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
5205 . RBUF(32+10,NSPMD),SI,SBUF(31+10)
5211 loc_proc = ispmd + 1
5215 rbuf(3:8,1) =
ikce(1:6)
5220 rbuf(l,1) = x_ref(k,i)
5226 rbuf(l,1) = d_ref(k,i)
5232 rbuf(l,1) = rlskew(i)
5240 CALL mpi_irecv(rbuf(1,i),siz,real,it_spmd(i),msgtyp,
5241 . spmd_comm_world,req_r(i-1),ierror)
5245 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
5247 IF (rbuf(1,1) > rbuf(1
THEN
5248 rbuf(1,1) = rbuf(1,i)
5249 rbuf(2:8,1) = rbuf(2:8,i)
5254 rbuf(l,1) = rbuf(l,i)
5260 rbuf(l,1) = rbuf(l,i)
5265 rbuf(l,1) = rbuf(l,i)
5271 sbuf(1:l)=rbuf(2:l+1,1)
5274 CALL mpi_send(sbuf,l,real,it_spmd(i),
5275 . msgtyp,spmd_comm_world,ierror)
5281 CALL mpi_send(rbuf,siz,real,it_spmd(1),
5282 . msgtyp,spmd_comm_world,ierror)
5284 CALL mpi_recv(sbuf,l,real,it_spmd(1),msgtyp,
5285 . spmd_comm_world,status,ierror)
5286 rbuf(2:l+1,1) = sbuf(1:l)
5288 n_seg = int(rbuf(2,1))
5289 ikce(1:6) = int(rbuf(3:8,1))
5300 d_ref(k,i) = rbuf(l,1)
5305 rlskew(i) = rbuf(l,1)
5330 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
5331#include "implicit_f.inc"
5335#include "com01_c.inc"
5336#include "task_c.inc"
5341#if defined(MPI) && defined(MUMPS5)
5345 INTEGER I, N, MSGOFF, MSGOFF2, MSGTYP, IERROR, LOC_PROC,
5346 . INDEX, SIZ,IBUF(2),L,J,K,
5347 . STATUS(MPI_STATUS_SIZE), REQ_R(NSPMD)
5349 . RBUF(27+10,NSPMD),SI,SBUF(27+10)
5355 LOC_PROC = ispmd + 1
5360 rbuf(l,1) =
e_ref(1)
5363 rbuf(l,1) = x_ref(k,i)
5367 rbuf(l,1) = d_ref(k,i)
5371 rbuf(l,1) =
e_ref(2)
5374 rbuf(l,1) = x_ref(k,i)
5378 rbuf(l,1) = d_ref(k,i)
5382 rbuf(l,1) =
e_ref(3)
5385 rbuf(l,1) = x_ref(k,i)
5389 rbuf(l,1) = d_ref(k,i)
5396 rbuf(l,1) = rlskew(i)
5406 CALL mpi_irecv(rbuf(1,i),siz,real,it_spmd(i),msgtyp,
5407 . spmd_comm_world,req_r(i-1),ierror)
5411 CALL mpi_waitany(nspmd-1,req_r,index,status,ierror)
5414 IF (rbuf(l,1)==zero .AND. rbuf(l,i)>zero)
THEN
5415 rbuf(l,1) = rbuf(l,i)
5417 rbuf(l+1:l+6,1) = rbuf(l+1:l+6,i)
5420 IF (rbuf(l,1)==zero .AND. rbuf(l,i)>zero)
THEN
5421 rbuf(l,1) = rbuf(l,i)
5423 rbuf(l+1:l+6,1) = rbuf(l+1:l+6,i)
5426 IF (rbuf(l,1)==zero .AND. rbuf(l,i)>zero)
THEN
5427 rbuf(l,1) = rbuf(l,i)
5429 rbuf(l+1:l+6,1) = rbuf(l+1:l+6,i)
5432 IF (rbuf(l,1)==zero .AND. rbuf(l,i)>zero)
THEN
5433 rbuf(l,1) = rbuf(l,i)
5434 rbuf(l+1:l+9,1) = rbuf(l+1:l+9,i)
5437 IF (rbuf(k,1)==zero .AND. rbuf(k,i)>zero)
THEN
5438 rbuf(k,1) = rbuf(k,i)
5444 sbuf(1:l)=rbuf(1:l,1)
5447 CALL mpi_send(sbuf,l,real,it_spmd(i),
5448 . msgtyp,spmd_comm_world,ierror)
5454 CALL mpi_send(rbuf,siz,real,it_spmd(1),
5455 . msgtyp,spmd_comm_world,ierror)
5457 CALL mpi_recv(sbuf,l,real,it_spmd(1),msgtyp,
5458 . spmd_comm_world,status,ierror)
5459 rbuf(1:l,1) = sbuf(1:l)
5467 x_ref(k,i) = rbuf(l,1)
5471 d_ref(k,i) = rbuf(l,1)
5477 x_ref(k,i) = rbuf(l,1)
5481 d_ref(k,i) = rbuf(l,1)
5488 x_ref(k,i) = rbuf(l,1)
5492 d_ref(k,i) = rbuf(l,1)
5499 rlskew(i) = rbuf(l,1)
5503 ikce(i) = int(rbuf(l,1))
subroutine imp_buck(pm, geo, ipm, igeo, elbuf, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ixtg1, iparg, tf, npc, fr_wave, w16, bufmat, thke, bufgeo, nsensor, sensor_tab, rby, skew, wa, icodt, icodr, iskew, ibfv, vel, lpby, npby, itab, weight, ms, in, ipari, intbuf_tab, x, itask, cont, icut, xcut, fint, fext, fopt, anin, nstrf, rwbuf, nprw, tani, dd_iad, eani, ipart, nom_opt, igrsurf, bufsf, idata, rdata, kxx, ixx, kxsp, ixsp, nod2sp, spbuf, ixs10, ixs20, ixs16, vr, monvol, volmon, nodglob, iad_elem, fr_elem, fr_sec, fr_rby2, iad_rby2, fr_wall, v, a, graphe, partsav, xframe, dirul, fncont, ftcont, temp, sh4tree, sh3tree, err_thk_sh4, err_thk_sh3, iframe, lprw, elbuf_tab, fsav, fsavd, rwsav, ar, irbe3, lrbe3, frbe3, fr_i2m, iad_i2m, fr_rbe3m, iad_rbe3m, frwl6, ibcl, forc, irbe2, lrbe2, iad_rbe2, fr_rbe2, weight_md, cluster, fcluster, mcluster, xfem_tab, ale_connect, w, nv46, nercvois, nesdvois, lercvois, lesdvois, crkedge, stack, dimfb, fbsav6, stabsen, tabsensor, indx_crk, xedge4n, xedge3n, sph2sol, stifn, stifr, drape_sh4n, drape_sh3n, h3d_data, subset, igrnod, fcont_max, fncontp2, ftcontp2, nddl0, nnzk0, impbuf_tab, drapeg, matparam_tab, glob_therm, output)
subroutine dyna_ina(ibcl, forc, snpc, npc, tf, a, v, x, skews, ar, vr, sensor_tab, weight, wfexc, iads_f, fsky, igrv, agrv, ms, in, lgrav, itask, nrbyac, irbyac, npby, rby, fr_elem, iad_elem, nddl, nnzk, idiv, h3d_data, cptreac, fthreac, nodreac, nsensor, th_surf, dpl0cld, vel0cld, d, dr, numnod, nsurf, nfunct, nconld, ngrav, ninvel, stf, numskw, wfext, python)
subroutine dim_fr_k(elbuf, iparg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ixtg1, ixs10, ixs20, ixs16, ndof, nnmax, inloc, fr_elem, iad_elem, n_fr, igeo, fr_i2m, iad_i2m, elbuf_tab)
subroutine fr_matv_gpu(nsrem, nsl, lx, f, nindex)
subroutine imp_fri(num_imp, ns_imp, ne_imp, ipari, intbuf_tab, npby, lpby, itab, nrbyac, irbyac, nint2, iint2, iddl, ikc, ndof, inloc, nsrem, nsl, nbintc, intlist, x, ibfv, lj, skew, xframe, iskew, icodt, a, ud, lb, ifdis, nddl, urd, iddli, irbe3, lrbe3, frbe3, irbe2, lrbe2)
subroutine imp_solv(timers, python, icode, iskew, iskwn, ipart, ixtg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg1, itab, itabm1, npc, ibcl, ibfv, sensor_tab, nnlink, lnlink, iparg, igrv, ipari, intbuf_tab, nprw, iconx, npby, lpby, lrivet, nstrf, ljoint, icodt, icodr, isky, adsky, iads_f, ilink, llink, weight, itask, ibvel, lbvel, fbvel, x, d, v, vr, dr, thke, damp, ms, in, pm, skews, geo, eani, bufmat, bufgeo, bufsf, tf, forc, vel, fsav, agrv, fr_wave, parts0, elbuf, rby, rivet, fr_elem, iad_elem, wa, a, ar, stifn, stifr, partsav, fsky, fskyi, iframe, xframe, w16, iactiv, fskym, igeo, ipm, wfext, nodft, nodlt, nint7, num_imp, ns_imp, ne_imp, ind_imp, it, rwbuf, lprw, fr_wall, nbintc, intlist, fopt, rwsav, fsavd, graphe, fac_k, ipiv_k, nkcond, nsensor, monvol, igrsurf, fr_mv, volmon, dirul, nodglob, mumps_par, cddlp, isendto, irecvfrom, newfront, imsch, i2msch, isizxv, ilenxv, islen7, irlen7, islen11, irlen11, islen17, irlen17, irlen7t, islen7t, kinet, num_imp1, temp, dt2prev, waint, lgrav, sh4tree, sh3tree, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, irbe3, lrbe3, frbe3, fr_i2m, iad_i2m, fr_rbe3m, iad_rbe3m, frwl6, irbe2, lrbe2, intbuf_tab_c, ikine, diag_sms, icfield, lcfield, cfield, count_remslv, count_remslve, elbuf_tab, elbuf_imp, xdp, weight_md, stack, dimfb, fbsav6, stabsen, tabsensor, drape_sh4n, drape_sh3n, h3d_data, multi_fvm, igrbric, igrsh4n, igrsh3n, igrbeam, forneqs, maxdgap, nddl0, nnzk0, it_t, impbuf_tab, cptreac, fthreac, nodreac, drapeg, interfaces, th_surf, dpl0cld, vel0cld, snpc, stf, glob_therm, wfext_md)
subroutine imp_errmumps(ierr)
subroutine imp_checm0(itab, nddl, iddl, diag_m, ndof, ikc, inloc, nddl0, iwar, ierr)
subroutine spmd_ndof(ndof, fr_elem, iad_elem, tsize)
subroutine spmd_ifrf_gpu(f_imp, nindex)
subroutine spmd_ifri(ig, il)
subroutine spmd_max_ii(nmax, iad_elem, tsize)
subroutine spmd_mumps_rhs(v, cddlp, rhs, nddl, isens, nddlg)
subroutine spmd_exci(its, itr, iad_s, iad_r, size, ssize, rsize)
subroutine spmd_max_f(f, itab, k)
subroutine spmd_isr(iad_s, iad_r, its, itr, ssize, rsize)
subroutine spmd_mumps_flush(mumps_par)
subroutine spmd_mumps_ini(mumps_par, sym)
subroutine spmd_exck(ks11, kr11, iad_s, iad_r, size, ssize, rsize)
subroutine spmd_mumps_gath(itk, rtk, nzloc, a, irn, jcn, nzp)
subroutine spmd_sumf_k(diag_k, l_k)
subroutine spmd_mumps_deal(mumps_par)
subroutine spmd_mumps_count(nzloc, nzp, nnz)
subroutine spmd_sumf_v(v)
subroutine spmd_int_allreduce_max(sendbuf, recvbuf, count)
subroutine spmd_ifcd(d_imp, ssize, rsize)
subroutine spmd_ifrf(f_imp)
subroutine spmd_inf_g(nddl0, nzzk0, nddl, nzzk, nnmax, nddl0p, nzzk0p, nddlp, nzzkp, nnmaxp)
subroutine spmd_nddlig(nddl, nddlfr, nddlg)
subroutine spmd_mumps_front(itk, rtk, nkfront, nkfloc, nkloc, nddlg, iprint)
subroutine spmd_mumps_exec(mumps_par, itask)
subroutine spmd_i2d(ndof, fr_elem, iad_elem, tsize)
subroutine spmd_inis(iad_s, iad_r)
subroutine spmd_ifru_gpu(lx, nindex)
subroutine spmd_send_vr(nv, nsiz, vr, nvmax, iout)
subroutine spmd_inisl(nbintc, inbsl)
subroutine spmd_ifc1(ssize, rsize, kss)
subroutine spmd_e_ref(dmin)
subroutine spmd_vchgrid(v, iv, nv, vg, nvg, nbloc, nddl, is, isum)
subroutine spmd_sum_s2(s, len)
subroutine spmd_send_vi(nv, nsiz, vi, nvmax, iout)
subroutine spmd_ifcf(f_imp, ssize, rsize)
subroutine spmd_sumfc_v(vgat, vsca, index, lcom)
subroutine spmd_cddl(nddl, nodglob, iddl, ndof, cddlp, inloc, ikc, nddlg, nddlp)
subroutine spmd_sumf_a(a, ar, iad_elem, fr_elem, size, lr)
subroutine spmd_icol(iad_s, iad_r, nnmax, icol, nrow, fr_nrow, iad_elem, fr_elem, ssize, rsize)
subroutine spmd_max_iv(iv)
subroutine spmd_nrow(nrow, fr_nrow, iad_elem, tsize)
subroutine reorder_a(n, ic, id)
subroutine lag_mult_sdp(nh, nc, ncr, a, v, mas, iadll, lll, jll, xll, iadh, jcih, hh, z, p, r, q, ltsm, hl, diag_h, diag_l, work1, work2, work3, lambda, rbyl, npbyl, ar, vr, in, iadhf, jcihf, icftag, jcftag, ncf_s, ncf_e, indexlag)
subroutine lag_mult_solv(nh, nc, ncr, a, v, mas, iadll, lll, jll, xll, iadh, jcih, hh, z, p, r, q, ltsm, hl, diag_h, diag_l, work1, work2, work3, lambda, rbyl, npbyl, ar, vr, in, iadhf, jcihf, icftag, jcftag, ncf_s, ncf_e)
subroutine lin_solv(nddl, iddl, ndof, ikc, d, dr, tol, nnz, iadk, jdik, diag_k, lt_k, nddli, iadi, jdii, diag_i, lt_i, itok, iadm, jdim, diag_m, lt_m, f, f_u, inloc, fr_elem, iad_elem, w_ddl, itask, icprec, istop, a, ar, ve, ms, xe, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, it, graphe, itab, fac_k, ipiv_k, nk, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, mumps_par, cddlp, ind_imp, xi_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine lin_solvh1(tol, max_l, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, diag_m, lt_m, x, f, itask, icprec, iprint, f_u, isolv, iprec, l_lim, itol, inega, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, maxb, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, ind_imp, diag_i, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine lin_solvih2(tol, n_pat, maxb1, nddl, nnz, iadk, jdik, diag_k, lt_k, nddli, itok, iadi, jdii, lt_i, iadm, jdim, diag_m, lt_m, x, f, max_l, d_tol, itask, icprec, iprint, f_u, isolv, iprec, l_lim, itol, inega, w_ddl, a, ar, ve, ms, xe, d, dr, ndof, ipari, intbuf_tab, num_imp, ns_imp, ne_imp, nsrem, nsl, p_mach, maxb, istop, nmonv, imonv, monvol, igrsurf, fr_mv, volmon, ibfv, skew, xframe, ind_imp, diag_i, xi_c, f0, nddli_g, intp_c, irbe3, lrbe3, irbe2, lrbe2)
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_waitall(cnt, array_of_requests, status, ierr)
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
subroutine mpi_waitany(cnt, array_of_requests, index, status, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
integer, dimension(:), allocatable ifr2k
integer, dimension(:), allocatable iadfr
integer, dimension(:), allocatable jfr2k
integer, dimension(:), allocatable nd_fr
integer, dimension(:), allocatable iddl_sl
integer, dimension(:), allocatable fr_srem
integer, dimension(:), allocatable iad_sl
integer, dimension(:), allocatable iad_srem
integer, dimension(:), allocatable isl
integer, dimension(6) ikce
integer, dimension(4) e_ref
subroutine prec_solvgh(iprec, itask, nddl, iadm, jdim, diag_m, lt_m, v, z, f_ddl, l_ddl)
subroutine prec_solv(iprec, iadk, jdik, diag_k, lt_k, itask, graphe, itab, insolv, it, fac_k, ipiv_k, nk, idsc, isolv, iprint, nddl, nnz, iadm, jdim, diag_m, lt_m, v, z)
subroutine mmv_lh(nddl, iadm, jdim, diag_m, lt_m, v, z, f_ddl, l_ddl, itask)
subroutine produt_v(nddl, x, y, r)
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)
subroutine sms_diag_rbe2(irbe2, lrbe2, nodxi_sms, jad_sms, jdi_sms, lt_sms, nmrbe2, ms, diag_sms, prec_sms3, iad_rbe2, fr_rbe2m, weight, skew)
void tmpenvf(char *tmpdir, int *tmplen)
subroutine rer02(rby, lpby, npby, skew, iskew, itab, weight, ms, in, ibfv, vel, icodt, icodr, nrbyac, irbyac, nint2, iint2, ipari, intbuf_tab, ndof, d, dr, x, xframe, lj, ixr, ixc, ixtg, sh4tree, sh3tree, irbe3, lrbe3, frbe3, iadk, jdik, diag_k, lt_k, iddl, ikc, inloc, num_imp, ns_imp, ne_imp, index2, nddl, w_ddl, a, ar, r02, irbe2, lrbe2, x_c)
subroutine upd_glob_k(icodt, icodr, iskew, ibfv, npc, tf, vel, xframe, rby, x, skew, lpby, npby, itab, weight, ms, in, nrbyac, irbyac, nsc, isij, nmc, imij, nss, iss, nint2, iint2, nsc2, isij2, nss2, iss2, ipari, intbuf_tab, nddl, nnz, iadk, jdik, diag_k, lt_k, ndof, iddl, ikc, ud, b, nkud, ikud, bkud, nmc2, imij2, nt_rw, rd, lj, irbe3, lrbe3, frbe3, iss3, irbe2, lrbe2, isb2, nsrb2)