16 & ND, FILS, FRERE_STEPS, STEP, PIMASTER,
17 & KEEP28, KEEP50, KEEP253,
21 INTEGER INODE, N, KEEP50, LIW, KEEP199, KEEP28, KEEP253
22 INTEGER PROCNODE_STEPS(KEEP28), ND(KEEP28),
23 & FILS(N), FRERE_STEPS(KEEP28),
28 DOUBLE PRECISION FLOP1
29 INTEGER NUMORG, IN, NASS, IFSON, NUMSTK, NFRONT, NPIV, NCB,
31 LOGICAL MUMPS_IN_OR_ROOT_SSARBR
32 INTEGER MUMPS_TYPENODE
33 EXTERNAL mumps_in_or_root_ssarbr, mumps_typenode
34 include
'mumps_headers.h'
36 IF (mumps_in_or_root_ssarbr(procnode_steps(step(inode)),
40 10 numorg = numorg + 1
42 IF (in .GT. 0)
GOTO 10
47 IF (ison .EQ. 0)
GOTO 30
48 20 numstk = numstk + 1
49 nass = nass + iw(pimaster(step(ison)) + 1 +xsize)
50 ison = frere_steps(step(ison))
51 IF (ison .GT. 0)
GOTO 20
52 30 nfront = nd(step(inode)) + nass + keep253
55 level = mumps_typenode(procnode_steps
61 DOUBLE PRECISION,
intent(inout) :: OPELIW
62 INTEGER,
intent(in) :: KEEP50, NFRONT, NPIV,
64 DOUBLE PRECISION :: COST, COST_PER_PROC
65 INTEGER,
PARAMETER :: LEVEL3 = 3
68 cost_per_proc = dble(int( cost,8) / int(nprow * npcol,8))
69 opeliw = opeliw + cost_per_proc
75 INTEGER,
intent(in) :: NFRONT,NPIV,KEEP50,LEVEL, NASS
76 DOUBLE PRECISION,
intent(out) :: COST
78 IF (level.EQ.1 .OR. level.EQ.3)
THEN
79 cost = dble(2) * dble(nfront) * dble(npiv) *
80 & dble(nfront - npiv - 1) +
81 & dble(npiv) * dble(npiv + 1) * dble(2 * npiv + 1)
83 cost = cost + dble(2 * nfront - npiv - 1)
84 & * dble(npiv) /dble(2)
85 ELSEIF (level.EQ.2)
THEN
86 cost = dble(2*nass)*dble(nfront) -
87 & dble(nass+nfront)*dble(npiv+1)
88 cost = dble(npiv)*cost +
89 & dble(2 * nass - npiv - 1) * dble(npiv) / dble(2) +
90 & dble(npiv) * dble(npiv + 1) *
91 & dble(2 * npiv + 1) /dble(3)
94 IF (level.EQ.1 .OR. (level.EQ.3 .AND. keep50.EQ.1))
THEN
96 & dble( nfront ) * dble( nfront
98 & dble( nfront)*dble(npiv) + dble(npiv+1)
99 & )) +( dble(npiv)*dble(npiv+1)
100 & *dble(2*npiv+1))/ dble(6)
101 ELSE IF (level.EQ.3.AND.keep50.EQ.
THEN
102 cost = dble(2) * dble(nfront) * dble(npiv) *
103 & dble(nfront - npiv - 1) +
104 & dble(npiv) * dble(npiv + 1) *
105 & dble(2 * npiv + 1) / dble(3)
106 cost = cost + dble(2 * nfront - npiv - 1)
107 & * dble(npiv) / dble(2)
109 cost = dble(npiv) * (
110 & dble( nass ) * dble( nass ) + dble( nass )
111 & - ( dble( nass) * dble(npiv) + dble( npiv + 1 ) ) )
112 & + ( dble(npiv)*dble(npiv+1)*dble(2*npiv+1) )
subroutine mumps_estim_flops(inode, n, procnode_steps, keep199, nd, fils, frere_steps, step, pimaster, keep28, keep50, keep253, flop1, iw, liw, xsize)