OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sfac_type3_symmetrize.F File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine smumps_symmetrize (buf, block_size, myrow, mycol, nprow, npcol, a, local_m, local_n, n, myid, comm)
subroutine smumps_send_block (buf, a, lda, m, n, comm, dest)
subroutine smumps_recv_block (buf, a, lda, m, n, comm, source)
subroutine smumps_trans_diag (a, n, lda)
subroutine smumps_transpo (a1, a2, m, n, ld)

Function/Subroutine Documentation

◆ smumps_recv_block()

subroutine smumps_recv_block ( real, dimension(*) buf,
real, dimension( lda, *) a,
integer lda,
integer m,
integer n,
integer comm,
integer source )

Definition at line 122 of file sfac_type3_symmetrize.F.

123 IMPLICIT NONE
124 INTEGER LDA, M, N, COMM, SOURCE
125 REAL BUF(*), A( LDA, *)
126 INTEGER I, IBUF, IERR
127 include 'mpif.h'
128 include 'mumps_tags.h'
129 INTEGER :: STATUS(MPI_STATUS_SIZE)
130 CALL mpi_recv( buf(1), m * n, mpi_real, source,
131 & symmetrize, comm, status, ierr )
132 ibuf = 1
133 DO i = 1, m
134 CALL scopy( n, buf(ibuf), 1, a(i,1), lda )
135 ibuf = ibuf + n
136 END DO
137 RETURN
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
Definition scopy.f:82
subroutine mpi_recv(buf, cnt, datatype, source, tag, comm, status, ierr)
Definition mpi.f:461

◆ smumps_send_block()

subroutine smumps_send_block ( real, dimension(*) buf,
real, dimension(lda,*) a,
integer lda,
integer m,
integer n,
integer comm,
integer dest )

Definition at line 103 of file sfac_type3_symmetrize.F.

104 IMPLICIT NONE
105 INTEGER M, N, LDA, DEST, COMM
106 REAL BUF(*), A(LDA,*)
107 INTEGER I, IBUF, IERR
108 INTEGER J
109 include 'mpif.h'
110 include 'mumps_tags.h'
111 ibuf = 1
112 DO j = 1, n
113 buf( ibuf: ibuf + m - 1 ) = a( 1 : m, j )
114 DO i = 1, m
115 END DO
116 ibuf = ibuf + m
117 END DO
118 CALL mpi_send( buf, m * n, mpi_real,
119 & dest, symmetrize, comm, ierr )
120 RETURN
subroutine mpi_send(buf, cnt, datatype, dest, tag, comm, ierr)
Definition mpi.f:480

◆ smumps_symmetrize()

subroutine smumps_symmetrize ( real, dimension( block_size * block_size ) buf,
integer block_size,
integer myrow,
integer mycol,
integer nprow,
integer npcol,
real, dimension( local_m, local_n ) a,
integer local_m,
integer local_n,
integer n,
integer myid,
integer comm )

Definition at line 14 of file sfac_type3_symmetrize.F.

17 IMPLICIT NONE
18 INTEGER BLOCK_SIZE, NPROW, NPCOL, LOCAL_M, LOCAL_N, N, COMM
19 INTEGER MYROW, MYCOL, MYID
20 REAL BUF( BLOCK_SIZE * BLOCK_SIZE )
21 REAL A( LOCAL_M, LOCAL_N )
22 INTEGER NBLOCK, IBLOCK, JBLOCK, IBLOCK_SIZE, JBLOCK_SIZE
23 INTEGER ROW_SOURCE, ROW_DEST, COL_SOURCE, COL_DEST
24 INTEGER IGLOB, JGLOB
25 INTEGER IROW_LOC_SOURCE, JCOL_LOC_SOURCE
26 INTEGER IROW_LOC_DEST, JCOL_LOC_DEST
27 INTEGER PROC_SOURCE, PROC_DEST
28 nblock = ( n - 1 ) / block_size + 1
29 DO iblock = 1, nblock
30 IF ( iblock .NE. nblock
31 & ) THEN
32 iblock_size = block_size
33 ELSE
34 iblock_size = n - ( nblock - 1 ) * block_size
35 END IF
36 row_source = mod( iblock - 1, nprow )
37 col_dest = mod( iblock - 1, npcol )
38 iglob = ( iblock - 1 ) * block_size + 1
39 irow_loc_source = block_size *
40 & ( ( iglob - 1 ) / (block_size*nprow) )
41 & + mod( iglob - 1, block_size ) + 1
42 jcol_loc_dest = block_size *
43 & ( ( iglob - 1 ) / (block_size*npcol) )
44 & + mod( iglob - 1, block_size ) + 1
45 DO jblock = 1, iblock
46 IF ( jblock .NE. nblock
47 & ) THEN
48 jblock_size = block_size
49 ELSE
50 jblock_size = n - ( nblock - 1 ) * block_size
51 END IF
52 col_source = mod( jblock - 1, npcol )
53 row_dest = mod( jblock - 1, nprow )
54 proc_source = row_source * npcol + col_source
55 proc_dest = row_dest * npcol + col_dest
56 IF ( proc_source .eq. proc_dest ) THEN
57 IF ( myid .eq. proc_dest ) THEN
58 jglob = ( jblock - 1 ) * block_size + 1
59 jcol_loc_source = block_size *
60 & ( ( jglob - 1 ) / (block_size*npcol) )
61 & + mod( jglob - 1, block_size ) + 1
62 irow_loc_dest = block_size *
63 & ( ( jglob - 1 ) / (block_size*nprow) )
64 & + mod( jglob - 1, block_size ) + 1
65 IF ( iblock .eq. jblock ) THEN
66 IF ( iblock_size .ne. jblock_size ) THEN
67 WRITE(*,*) myid,': Error in calling transdiag:unsym'
68 CALL mumps_abort()
69 END IF
70 CALL smumps_trans_diag( a( irow_loc_source,
71 & jcol_loc_source),
72 & iblock_size, local_m )
73 ELSE
74 CALL smumps_transpo(
75 & a( irow_loc_source, jcol_loc_source ),
76 & a( irow_loc_dest, jcol_loc_dest ),
77 & iblock_size, jblock_size, local_m )
78 END IF
79 END IF
80 ELSE IF ( myrow .eq. row_source
81 & .AND. mycol .eq. col_source ) THEN
82 jglob = ( jblock - 1 ) * block_size + 1
83 jcol_loc_source = block_size *
84 & ( ( jglob - 1 ) / (block_size*npcol) )
85 & + mod( jglob - 1, block_size ) + 1
86 CALL smumps_send_block( buf,
87 & a( irow_loc_source, jcol_loc_source ), local_m,
88 & iblock_size, jblock_size, comm, proc_dest )
89 ELSE IF ( myrow .eq. row_dest
90 & .AND. mycol .eq. col_dest ) THEN
91 jglob = ( jblock - 1 ) * block_size + 1
92 irow_loc_dest = block_size *
93 & ( ( jglob - 1 ) / (block_size*nprow) )
94 & + mod( jglob - 1, block_size ) + 1
95 CALL smumps_recv_block( buf,
96 & a( irow_loc_dest, jcol_loc_dest ), local_m,
97 & jblock_size, iblock_size, comm, proc_source )
98 END IF
99 END DO
100 END DO
101 RETURN
#define mumps_abort
Definition VE_Metis.h:25
subroutine smumps_send_block(buf, a, lda, m, n, comm, dest)
subroutine smumps_transpo(a1, a2, m, n, ld)
subroutine smumps_trans_diag(a, n, lda)
subroutine smumps_recv_block(buf, a, lda, m, n, comm, source)

◆ smumps_trans_diag()

subroutine smumps_trans_diag ( real, dimension( lda, * ) a,
integer n,
integer lda )

Definition at line 139 of file sfac_type3_symmetrize.F.

140 IMPLICIT NONE
141 INTEGER N,LDA
142 REAL A( LDA, * )
143 INTEGER I, J
144 DO i = 2, n
145 DO j = 1, i - 1
146 a( j, i ) = a( i, j )
147 END DO
148 END DO
149 RETURN

◆ smumps_transpo()

subroutine smumps_transpo ( real, dimension( ld,* ) a1,
real, dimension( ld, * ) a2,
integer m,
integer n,
integer ld )

Definition at line 151 of file sfac_type3_symmetrize.F.

152 IMPLICIT NONE
153 INTEGER M,N,LD
154 REAL A1( LD,* ), A2( LD, * )
155 INTEGER I, J
156 DO j = 1, n
157 DO i = 1, m
158 a2( j, i ) = a1( i, j )
159 END DO
160 END DO
161 RETURN