![]() |
Stellarator-Tools
|
Solver for block tri-diagonal matrices. [Kalyan S. Perumalla, ORNL, 2009-2011]. More...
Data Types | |
| type | blacsparameters |
| BLACS/PBLAS information. More... | |
| type | blacsprocessgrid |
| BLACS/PBLAS process grid information. More... | |
| type | levelelement |
| Data associated with each row at each level. More... | |
| type | mastertoslavemapping |
| Master-to-slave mapping. More... | |
| type | pblaslevelparameters |
| Level-specific PBLAS information. More... | |
| type | pblasstats |
| type | pblastemparray |
| type | solutionelement |
| Solution of selected rows of interest to this rank. More... | |
| type | timecount |
| Statistics (timing, etc.) More... | |
Functions/Subroutines | |
| subroutine | bclockinit () |
| A convenience function to be able to change clock routine(s) easily. | |
| subroutine | bsystemclock (ts) |
| A convenience function to be able to change clock routine easily. | |
| subroutine | fl (u) |
| A convenience function to be able to change or turn off easily. | |
| subroutine | chargememory (bytes) |
| Convenience routine to track allocated memory sizes. | |
| subroutine | chargetime (tot, t2, t1, cnt) |
| Convenience routine to accumulate timing values. | |
| subroutine | timecountinit (tc) |
| Initialize stats. | |
| subroutine | timecountprint (tc, msg) |
| Print stats. | |
| subroutine | plbinitstats () |
| Init statistics. | |
| subroutine | plbprintstats () |
| Print statistics so far. | |
| subroutine | plbinitialize |
| Initialize before foward or backward starts. | |
| subroutine | plbfinalize |
| Finalize after foward or backward are done. | |
| subroutine | plbforwardinitialize |
| Initialize before any forward level starts. | |
| subroutine | plbforwardfinalize |
| Finalize after all forward levels are done. | |
| subroutine | plbbackwardinitialize |
| Initialize before any backward level starts. | |
| subroutine | plbbackwardfinalize |
| Finalize after all backward levels are done. | |
| subroutine | plbforwardinitializelevel (lvl, ammaster) |
| Initialize before the forward solve at a given level starts. | |
| subroutine | plbforwardfinalizelevel (lvl, ammaster) |
| Finalize after the forward solve at a given level ends. | |
| subroutine | plbbackwardinitializelevel (lvl, ammaster) |
| Initialize before the backward solve at a given level starts. | |
| subroutine | plbbackwardfinalizelevel (lvl, ammaster) |
| Finalize after the backward solve at a given level ends. | |
| subroutine | determinemasterslaveranks () |
| Determine the ranks of master and slaves at this level. | |
| subroutine | masterbcastnextop (nextop) |
| Inform the next operation to be done (calling rank is in master mode) | |
| subroutine | slavegetnextop (nextop) |
| Determine the next operation to be done (calling rank is in slave mode) | |
| subroutine | slaveservice () |
| Slave's operation loop. | |
| subroutine | extractsubmatrix (bszr, bszc, pnr, pnc, pi, pj, a, nrows, ncols, suba, subnrows, subncols) |
| Extracts from A the submatrix corresponding to process-grid element (pi,pj) | |
| subroutine | mastersendmatrix (a, nrows, ncols, ssuba, ssubnrows, ssubncols) |
| Send the matrix by master (caller) to all slaves The submatrix belonging to the caller (master is also one of the slaves) is returned in the ssub* arguments (i.e., sent to self) | |
| subroutine | slavereceivematrix (nrows, ncols, suba, subnrows, subncols) |
| Receive the fragment of matrix sent by master to slave (caller) | |
| subroutine | masterbcastvalue (val) |
| Send the given value by master (caller) to all slaves. | |
| subroutine | slavereceivevalue (val) |
| Receive a value sent by master to slave (caller) | |
| subroutine | injectsubmatrix (bszr, bszc, pnr, pnc, pi, pj, a, nrows, ncols, suba, subnrows, subncols) |
| Incorporates into A the submatrix corresp. to process-grid element (pi,pj) | |
| subroutine | injectsubvector (bszr, pnr, pi, v, nrows, subv, subnrows) |
| Incorporates into V the subvector corresp. to process-grid element (pi,0) | |
| subroutine | masterrecvmatrix (a, nrows, ncols, ssuba, ssubnrows, ssubncols) |
| Receive the submatrices by master (caller) from all slaves The submatrix belonging to the caller (master is also one of the slaves) is given in the ssub* arguments (i.e., received from self) | |
| subroutine | slavesendmatrix (nrows, ncols, suba, subnrows, subncols) |
| Send the fragment of matrix by slave (caller) to master. | |
| subroutine | masterrecvvector (v, nrows, ssubv, ssubnrows) |
| Receive the subvector by master (caller) from all slaves in column 1 of pgrid The subvector belonging to the caller (master is also one of the slaves) is given in the ssub* arguments (i.e., received from self) | |
| subroutine | slavesendvector (nrows, subv, subnrows) |
| Send the fragment of vector by slave (caller) to master Only slaves who belong to zero'th column of pgrid send to master Other slave simply do no-op for this routine. | |
| subroutine | plbdgemm (alpha, a, b, beta, c) |
| Encapsulates BLAS' DGEMM functionality. | |
| subroutine | slavedgemm () |
| DGEMM support from slave. | |
| subroutine | plbdgemv (alpha, a, x, beta, y) |
| Encapsulates BLAS' DGEMV functionality. | |
| subroutine | plbdgetrf (a, piv, info) |
| Encapsulates BLAS/LAPACK's DGETRF functionality. | |
| subroutine | slavedgetrf () |
| DGETRF support from slave. | |
| subroutine | plbdgetrs (nrhs, a, piv, b, info) |
| Encapsulates BLAS/LAPACK's DGETRS functionality. | |
| subroutine | slavedgetrs () |
| DGETRS support from slave. | |
| subroutine | initialize (do_mpiinit, inn, inm) |
| To be invoked, before solve, by user. | |
| subroutine | setmatrixrow (globrow, l, d, u) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowl (globrow, l) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowd (globrow, d) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowu (globrow, u) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowcoll (globrow, lj, j) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowcold (globrow, dj, j) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrowcolu (globrow, uj, j) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | setmatrixrhs (globrow, b) |
| To be invoked, before solve, after initialize, by user, to set up the matrix. | |
| subroutine | getmatrixrowcoll (globrow, lj, j) |
| Can be invoked after initialize, by user, to get a copy of the matrix. | |
| subroutine | getmatrixrowcold (globrow, dj, j) |
| Can be invoked after initialize, by user, to get a copy of the matrix. | |
| subroutine | getmatrixrowcolu (globrow, uj, j) |
| Can be invoked after initialize, by user, to get a copy of the matrix. | |
| subroutine | getmatrixrhs (globrow, b) |
| Can be invoked after initialize, by user, to get a copy of the RHS. | |
| subroutine | getsolutionvector (globrow, x) |
| To be invoked, after solve, by user to get the solution vector of a local row. | |
| subroutine | setidentitytestcase |
| To be invoked, before solve, after initialize, by user, to generate a test. | |
| subroutine | setidentityrhs |
| To be invoked, before solve, after SetIdentityCase, by user, to generate a test. | |
| subroutine | setrandomtestcase |
| To be invoked, before solve, after initialize, by user, to generate a test. | |
| subroutine | setrandomrhs (randseedoff) |
| To be invoked, before solve, after SetRandomTestCase, by user, to generate a an RHS. | |
| subroutine | finalize (do_mpifinalize) |
| To be invoked, after solve, by user. | |
| logical function | iseven (num) |
| Is given integer even? | |
| logical function | isodd (num) |
| Is given integer odd? | |
| integer function | lr2gr (locrow, level) |
| Determines the global row number of a given local row number at a given level. | |
| integer function | gr2lr (globrow, level) |
| Determines the local row number of "globrow" global row number when globrow participates at a given level; returns zero if this globrow does not operate at the given level. | |
| integer function | gr2rank (globrow) |
| Determines the rank of the task holding the given global row (at level 1) | |
| integer function | lr2rank (locrow, level) |
| Determines the rank of the task holding the given local row (at a given level) | |
| subroutine | computeforwardoddrowhats (locrow, level, startlocrow, endlocrow, bonly) |
| Compute the matrix multiplications in the forward solve at some/any level The row should be odd at the level, The locrow should obey startlocrow <= locrow <= endlocrow. | |
| subroutine | forwardsolve |
| BCYCLIC forward phase; to be called after Initialize. | |
| subroutine | forwardupdateb |
| BCYCLIC forward phase to deal with a new b; to be called after a SetRHS that may have been invoked after a ForwardSolve, before BackwardSolve. | |
| subroutine | backwardsolve |
| BCYCLIC backward phase; to be called after ForwardSolve. | |
| subroutine | verifysolution |
| Verify the RMS error of solution after backward solve. | |
| subroutine | checksymmetry (asymindx) |
| subroutine | storediagonal (blkrow, colnum, buf) |
| subroutine | writeblocks (flag) |
| subroutine | displayblocks (flag) |
| subroutine | parmatvec (invec, outvec, outveclength) |
| subroutine | setblockrowcol (globrow, colnum, buf, opt) |
| subroutine | getcolsum (cs) |
| subroutine | initscalefactors |
| subroutine | getscalefactors (js, scalevector) |
| subroutine | finalizescalefactors |
| subroutine | parallelscaling (lmp, colsum) |
| subroutine | findminmax_tri (lmp) |
| subroutine | resetdiagonal (lmp, breset) |
Variables | |
| integer, parameter | rprec = SELECTED_REAL_KIND(15, 300) |
| integer, parameter | iprec = SELECTED_INT_KIND(8) |
| integer, parameter | cprec = KIND((1.0_rprec, 1.0_rprec)) |
| integer, parameter | dp = rprec |
| type(levelelement), dimension(:,:), allocatable | lelement |
| Data for each row at each level on this rank The first dimension is the level number [1..L], L=#levels of forward solve The 2nd dimension is the row number [1..K+g], K=#rows at level 1 on this rank The +g is for incoming results from neighbors, 0<=g<=2. | |
| type(levelelement), dimension(:), allocatable | orig |
| Initial problem specification saved for verification at end of solution The dimension is the row number [1..K], K=#rows at level 1 on this rank. | |
| type(solutionelement), dimension(:), allocatable | selement |
| The solution The dimension is the global (level 1) row number [1..N]. | |
| integer | p |
| Num of "master" tasks, adjusted such that P=Min(nranks,N) | |
| integer | n |
| Num of row blocks in input block tri-diag matrix. | |
| integer | m |
| Size of each square sub-matrix block. | |
| integer | startglobrow |
| Starting row number of this processor at first level. | |
| integer | endglobrow |
| Ending row number (inclusive) at first level. | |
| integer | nlevels |
| Total number of levels in recursion. | |
| logical | matdirtied |
| Has a new matrix been set after ForwardSolve? | |
| logical | rhsdirtied |
| Has a new RHS been set after ForwardSolve? | |
| character *100 | kenvvar |
| character *100 | kenvval |
| logical | kpdbg |
| Should debugging output be written? : SKS on Nov 9, 2011. | |
| integer | ofu |
| Output file unit. | |
| integer | pfu |
| Problem file unit. | |
| integer | mpi_err |
| logical | writeproblemfile |
| Should save the random test case to a file? | |
| logical | writesolution |
| Should dump solution in output? | |
| logical | usebarriers |
| Should barriers be invoked between levels? | |
| real | membytes |
| A running count of memory allocated so far. | |
| real | dpsz |
| Byte size of a double precision variable. | |
| real | intsz |
| Byte size of an integer variable. | |
| real | ptrsz |
| Byte size of a pointer variable. | |
| real(dp) | one |
| 1.0 | |
| real(dp) | zero |
| 0.0 | |
| logical(dp) | l_colscale =.FALSE. |
| set true if column scaling is applied | |
| logical | use_mpiwtime |
| Use MPI's timer function? | |
| double precision | loctimer1 |
| double precision | loctimer2 |
| Stopwatch snapshots to use locally. | |
| double precision | mattimer1 |
| double precision | mattimer2 |
| Stopwatch snapshots for matrix ops. | |
| double precision | globtimer1 |
| double precision | globtimer2 |
| Stopwatch snapshots to use globally. | |
| double precision | timerfreq |
| Timer frequency in Hz (count rate) | |
| double precision | tottime |
| Total elapsed time. | |
| integer | totcount |
| Total count. | |
| double precision | totcommtime |
| Total communication time. | |
| integer | totcommcount |
| Total communication operation count. | |
| double precision | totinvtime |
| Total time to invert matrices. | |
| integer | totinvcount |
| Total count of matrix inversions. | |
| double precision | totmatmultime |
| Total time for matrix-matrix multiplications. | |
| integer | totmatmulcount |
| Total count of matrix-matrix multiplications. | |
| double precision | totmatsoltime |
| Total time for matrix-solve multiplications. | |
| integer | totmatsolcount |
| Total count of matrix solutions. | |
| real(dp), public | maxeigen_tri |
| maximum eigenvalue from Gerschgorin theorem | |
| real(dp), public | dmin_tri |
| minimum non-zero diagonal element, used to scale Levenberg parameter (SPH 08-31-16) | |
| real(dp), dimension(:), allocatable | origdiagelement |
| Unmodified diagonal element : SKS. | |
| real(dp), dimension(:), allocatable | topscalefac |
| real(dp), dimension(:), allocatable | botscalefac |
| logical | doblasonly |
| BLACS/PBLAS options. | |
| logical | doblacscomm |
| type(blacsparameters) | blacs |
| type(pblaslevelparameters) | pblas |
| integer, parameter | op_none = 0 |
| Master-to-slave commands. | |
| integer, parameter | op_done = 1 |
| integer, parameter | op_dgemm = 2 |
| integer, parameter | op_dgemv = 3 |
| integer, parameter | op_dgetrf = 4 |
| integer, parameter | op_dgetrs = 5 |
| type(pblasstats) | pstats |
Solver for block tri-diagonal matrices. [Kalyan S. Perumalla, ORNL, 2009-2011].
| subroutine blocktridiagonalsolver::bsystemclock | ( | double precision, intent(inout) | ts | ) |
A convenience function to be able to change clock routine easily.
| [in,out] | ts | Time snapshot |
| subroutine blocktridiagonalsolver::chargememory | ( | real, intent(in) | bytes | ) |
Convenience routine to track allocated memory sizes.
| [in] | bytes | Number of bytes allocated |
| subroutine blocktridiagonalsolver::chargetime | ( | double precision, intent(inout) | tot, |
| double precision, intent(in) | t2, | ||
| double precision, intent(in) | t1, | ||
| integer, intent(inout) | cnt | ||
| ) |
Convenience routine to accumulate timing values.
| [in,out] | tot | Total time |
| [in] | t2 | Timer value at end of segment being timed |
| [in] | t1 | Timer value at start of timed segment |
| [in,out] | cnt | Counter of number of samples |
| subroutine blocktridiagonalsolver::computeforwardoddrowhats | ( | integer, intent(in) | locrow, |
| integer, intent(in) | level, | ||
| integer, intent(in) | startlocrow, | ||
| integer, intent(in) | endlocrow, | ||
| logical, intent(in) | bonly | ||
| ) |
Compute the matrix multiplications in the forward solve at some/any level The row should be odd at the level, The locrow should obey startlocrow <= locrow <= endlocrow.
| [in] | locrow | Row number at a given level |
| [in] | level | Local row number is at this level |
| [in] | startlocrow | Top-most local row number at given level |
| [in] | endlocrow | Bot-most local row number at given level |
| [in] | bonly | Show compute/update only the b, and not L,D,U? |
| subroutine blocktridiagonalsolver::finalize | ( | logical, intent(in) | do_mpifinalize | ) |
To be invoked, after solve, by user.
| [in] | do_mpifinalize | Invoke MPI_Finalize? |
| subroutine blocktridiagonalsolver::fl | ( | integer, intent(in) | u | ) |
A convenience function to be able to change or turn off easily.
| [in] | u | Unit number to flush |
| subroutine blocktridiagonalsolver::getmatrixrhs | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(out) | b | ||
| ) |
Can be invoked after initialize, by user, to get a copy of the RHS.
| [in] | globrow | Original/global block-row num in [1..N] |
| [out] | b | RHS column corr. to globrow |
| subroutine blocktridiagonalsolver::getmatrixrowcold | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(out) | dj, | ||
| integer, intent(in) | j | ||
| ) |
Can be invoked after initialize, by user, to get a copy of the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [out] | dj | j'th colum of D at globrow |
| [in] | j | column number of L at globrow that is being set |
| subroutine blocktridiagonalsolver::getmatrixrowcoll | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(out) | lj, | ||
| integer, intent(in) | j | ||
| ) |
Can be invoked after initialize, by user, to get a copy of the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [out] | lj | j'th colum of L at globrow; 1st L is always 0 |
| [in] | j | column number of L at globrow that is being set |
| subroutine blocktridiagonalsolver::getmatrixrowcolu | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(out) | uj, | ||
| integer, intent(in) | j | ||
| ) |
Can be invoked after initialize, by user, to get a copy of the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [out] | uj | j'th colum of L at globrow; Nth U is always 0 |
| [in] | j | column number of U at globrow that is being set |
| subroutine blocktridiagonalsolver::getsolutionvector | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(out) | x | ||
| ) |
To be invoked, after solve, by user to get the solution vector of a local row.
| [in] | globrow | Original/global block-row num in [1..N] |
| [out] | x | Solution column corr. to globrow |
| integer function blocktridiagonalsolver::gr2lr | ( | integer, intent(in) | globrow, |
| integer, intent(in) | level | ||
| ) |
Determines the local row number of "globrow" global row number when globrow participates at a given level; returns zero if this globrow does not operate at the given level.
| [in] | globrow | Row number in original input (level 1) |
| [in] | level | Level at which globrow's position is needed |
| integer function blocktridiagonalsolver::gr2rank | ( | integer, intent(in) | globrow | ) |
Determines the rank of the task holding the given global row (at level 1)
| [in] | globrow | Row number in original input (level 1) |
| subroutine blocktridiagonalsolver::initialize | ( | logical, intent(in) | do_mpiinit, |
| integer, intent(in) | inn, | ||
| integer, intent(in) | inm | ||
| ) |
To be invoked, before solve, by user.
| [in] | do_mpiinit | Invoke MPI_Init? |
| [in] | inn | Num of row blocks in input block tri-diag matrix |
| [in] | inm | Size of each square sub-matrix block |
| logical function blocktridiagonalsolver::iseven | ( | integer, intent(in) | num | ) |
Is given integer even?
| [in] | num | A number |
| logical function blocktridiagonalsolver::isodd | ( | integer, intent(in) | num | ) |
Is given integer odd?
| [in] | num | A number |
| integer function blocktridiagonalsolver::lr2gr | ( | integer, intent(in) | locrow, |
| integer, intent(in) | level | ||
| ) |
Determines the global row number of a given local row number at a given level.
| [in] | locrow | local row number of global row, at given level |
| [in] | level | Level at which locrow's position is given |
| integer function blocktridiagonalsolver::lr2rank | ( | integer, intent(in) | locrow, |
| integer, intent(in) | level | ||
| ) |
Determines the rank of the task holding the given local row (at a given level)
| [in] | locrow | Row number at a given level |
| [in] | level | Local row number is at this level |
| subroutine blocktridiagonalsolver::plbdgemm | ( | real(dp), intent(in) | alpha, |
| real(dp), dimension(:,:), intent(in) | a, | ||
| real(dp), dimension(:,:), intent(in) | b, | ||
| real(dp), intent(in) | beta, | ||
| real(dp), dimension(:,:), intent(inout) | c | ||
| ) |
Encapsulates BLAS' DGEMM functionality.
| [in] | b | Each matrix of size MxM |
| [in,out] | c | Matrix of size MxM |
| subroutine blocktridiagonalsolver::plbdgemv | ( | real(dp), intent(in) | alpha, |
| real(dp), dimension(:,:), intent(in) | a, | ||
| real(dp), dimension(:), intent(in) | x, | ||
| real(dp), intent(in) | beta, | ||
| real(dp), dimension(:), intent(inout) | y | ||
| ) |
Encapsulates BLAS' DGEMV functionality.
| [in] | a | Matrix of size MxM |
| [in] | x | Vector of size Mx1 |
| [in,out] | y | Vector of size Mx1 |
| subroutine blocktridiagonalsolver::plbdgetrf | ( | real(dp), dimension(:,:), intent(inout) | a, |
| integer, dimension(:), intent(out) | piv, | ||
| integer, intent(inout) | info | ||
| ) |
Encapsulates BLAS/LAPACK's DGETRF functionality.
| [in,out] | a | Matrix of size MxM |
| [out] | piv | Mx1 |
| subroutine blocktridiagonalsolver::plbdgetrs | ( | integer, intent(in) | nrhs, |
| real(dp), dimension(:,:), intent(in) | a, | ||
| integer, dimension(:), intent(in) | piv, | ||
| real(dp), dimension(:,:), intent(inout) | b, | ||
| integer | info | ||
| ) |
Encapsulates BLAS/LAPACK's DGETRS functionality.
| [in] | a | Matrix of size MxM |
| [in] | piv | Mx1 |
| [in,out] | b | Matrix of size Mxnrhs |
| subroutine blocktridiagonalsolver::setmatrixrhs | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(in) | b | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | b | RHS column corr. to globrow |
| subroutine blocktridiagonalsolver::setmatrixrow | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:,:), intent(in) | l, | ||
| real(dp), dimension(:,:), intent(in) | d, | ||
| real(dp), dimension(:,:), intent(in) | u | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | u | Vals in 1st L(or Nth U) == 0.0 |
| subroutine blocktridiagonalsolver::setmatrixrowcold | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(in) | dj, | ||
| integer, intent(in) | j | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | dj | j'th colum of D at globrow |
| [in] | j | column number of L at globrow that is being set |
| subroutine blocktridiagonalsolver::setmatrixrowcoll | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(in) | lj, | ||
| integer, intent(in) | j | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | lj | j'th colum of L at globrow; 1st L is always 0 |
| [in] | j | column number of L at globrow that is being set |
| subroutine blocktridiagonalsolver::setmatrixrowcolu | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:), intent(in) | uj, | ||
| integer, intent(in) | j | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | uj | j'th colum of L at globrow; Nth U is always 0 |
| [in] | j | column number of U at globrow that is being set |
| subroutine blocktridiagonalsolver::setmatrixrowd | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:,:), intent(in) | d | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| subroutine blocktridiagonalsolver::setmatrixrowl | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:,:), intent(in) | l | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | l | Vals in 1st L == 0.0 |
| subroutine blocktridiagonalsolver::setmatrixrowu | ( | integer, intent(in) | globrow, |
| real(dp), dimension(:,:), intent(in) | u | ||
| ) |
To be invoked, before solve, after initialize, by user, to set up the matrix.
| [in] | globrow | Original/global block-row num in [1..N] |
| [in] | u | Vals in Nth U == 0.0 |
| subroutine blocktridiagonalsolver::slavereceivematrix | ( | integer, intent(in) | nrows, |
| integer, intent(in) | ncols, | ||
| real(dp), dimension(:), intent(out) | suba, | ||
| integer, intent(in) | subnrows, | ||
| integer, intent(in) | subncols | ||
| ) |
Receive the fragment of matrix sent by master to slave (caller)
| [in] | ncols | of global matrix |
| subroutine blocktridiagonalsolver::slavesendmatrix | ( | integer, intent(in) | nrows, |
| integer, intent(in) | ncols, | ||
| real(dp), dimension(:), intent(in) | suba, | ||
| integer, intent(in) | subnrows, | ||
| integer, intent(in) | subncols | ||
| ) |
Send the fragment of matrix by slave (caller) to master.
| [in] | ncols | of global matrix |
| subroutine blocktridiagonalsolver::slavesendvector | ( | integer, intent(in) | nrows, |
| integer, dimension(:), intent(in) | subv, | ||
| integer, intent(in) | subnrows | ||
| ) |
Send the fragment of vector by slave (caller) to master Only slaves who belong to zero'th column of pgrid send to master Other slave simply do no-op for this routine.
| [in] | nrows | of global matrix |