base/Makefile
 base/comm/psb_cgather.f90
 base/comm/psb_chalo.f90
 base/comm/psb_covrl.f90
 base/comm/psb_dgather.f90
 base/comm/psb_dhalo.f90
 base/comm/psb_dovrl.f90
 base/comm/psb_sgather.f90
 base/comm/psb_shalo.f90
 base/comm/psb_sovrl.f90
 base/comm/psb_zgather.f90
 base/comm/psb_zhalo.f90
 base/comm/psb_zovrl.f90
 base/internals/psi_cswapdata.F90
 base/internals/psi_cswaptran.F90
 base/internals/psi_dswapdata.F90
 base/internals/psi_dswaptran.F90
 base/internals/psi_idx_ins_cnv.f90
 base/internals/psi_ovrl_restr.f90
 base/internals/psi_ovrl_save.f90
 base/internals/psi_ovrl_upd.f90
 base/internals/psi_sswapdata.F90
 base/internals/psi_sswaptran.F90
 base/internals/psi_zswapdata.F90
 base/internals/psi_zswaptran.F90
 base/modules/Makefile
 base/modules/psb_base_mat_mod.f90
 base/modules/psb_base_mod.f90
 base/modules/psb_c_base_mat_mod.f90
 base/modules/psb_c_base_vect_mod.f90
 base/modules/psb_c_comm_mod.f90
 base/modules/psb_c_csc_mat_mod.f90
 base/modules/psb_c_csr_mat_mod.f90
 base/modules/psb_c_linmap_mod.f90
 base/modules/psb_c_mat_mod.f90
 base/modules/psb_c_psblas_mod.f90
 base/modules/psb_c_tools_mod.f90
 base/modules/psb_c_vect_mod.f90
 base/modules/psb_check_mod.f90
 base/modules/psb_comm_mod.f90
 base/modules/psb_const_mod.F90
 base/modules/psb_d_base_mat_mod.f90
 base/modules/psb_d_base_vect_mod.f90
 base/modules/psb_d_comm_mod.f90
 base/modules/psb_d_csc_mat_mod.f90
 base/modules/psb_d_csr_mat_mod.f90
 base/modules/psb_d_linmap_mod.f90
 base/modules/psb_d_mat_mod.f90
 base/modules/psb_d_psblas_mod.f90
 base/modules/psb_d_tools_mod.f90
 base/modules/psb_d_vect_mod.f90
 base/modules/psb_error_impl.F90
 base/modules/psb_error_mod.F90
 base/modules/psb_i_comm_mod.f90
 base/modules/psb_ip_reord_mod.f90
 base/modules/psb_linmap_mod.f90
 base/modules/psb_linmap_type_mod.f90
 base/modules/psb_s_base_mat_mod.f90
 base/modules/psb_s_base_vect_mod.f90
 base/modules/psb_s_comm_mod.f90
 base/modules/psb_s_csc_mat_mod.f90
 base/modules/psb_s_csr_mat_mod.f90
 base/modules/psb_s_linmap_mod.f90
 base/modules/psb_s_mat_mod.f90
 base/modules/psb_s_psblas_mod.f90
 base/modules/psb_s_tools_mod.f90
 base/modules/psb_s_vect_mod.f90
 base/modules/psb_serial_mod.f90
 base/modules/psb_vect_mod.f90
 base/modules/psb_z_base_mat_mod.f90
 base/modules/psb_z_base_vect_mod.f90
 base/modules/psb_z_comm_mod.f90
 base/modules/psb_z_csc_mat_mod.f90
 base/modules/psb_z_csr_mat_mod.f90
 base/modules/psb_z_linmap_mod.f90
 base/modules/psb_z_mat_mod.f90
 base/modules/psb_z_psblas_mod.f90
 base/modules/psb_z_tools_mod.f90
 base/modules/psb_z_vect_mod.f90
 base/modules/psi_c_mod.f90
 base/modules/psi_d_mod.f90
 base/modules/psi_i_mod.f90
 base/modules/psi_mod.f90
 base/modules/psi_penv_mod.F90
 base/modules/psi_s_mod.f90
 base/modules/psi_z_mod.f90
 base/psblas/psb_camax.f90
 base/psblas/psb_casum.f90
 base/psblas/psb_caxpby.f90
 base/psblas/psb_cdot.f90
 base/psblas/psb_cnrm2.f90
 base/psblas/psb_cspmm.f90
 base/psblas/psb_cspsm.f90
 base/psblas/psb_damax.f90
 base/psblas/psb_dasum.f90
 base/psblas/psb_daxpby.f90
 base/psblas/psb_ddot.f90
 base/psblas/psb_dnrm2.f90
 base/psblas/psb_dnrmi.f90
 base/psblas/psb_dspmm.f90
 base/psblas/psb_dspnrm1.f90
 base/psblas/psb_dspsm.f90
 base/psblas/psb_samax.f90
 base/psblas/psb_sasum.f90
 base/psblas/psb_saxpby.f90
 base/psblas/psb_sdot.f90
 base/psblas/psb_snrm2.f90
 base/psblas/psb_sspmm.f90
 base/psblas/psb_sspsm.f90
 base/psblas/psb_zamax.f90
 base/psblas/psb_zasum.f90
 base/psblas/psb_zaxpby.f90
 base/psblas/psb_zdot.f90
 base/psblas/psb_znrm2.f90
 base/psblas/psb_zspmm.f90
 base/psblas/psb_zspsm.f90
 base/serial/Makefile
 base/serial/impl/psb_c_base_mat_impl.f90
 base/serial/impl/psb_c_coo_impl.f90
 base/serial/impl/psb_c_csc_impl.f90
 base/serial/impl/psb_c_csr_impl.f90
 base/serial/impl/psb_c_mat_impl.F90
 base/serial/impl/psb_d_base_mat_impl.f90
 base/serial/impl/psb_d_coo_impl.f90
 base/serial/impl/psb_d_csc_impl.f90
 base/serial/impl/psb_d_csr_impl.f90
 base/serial/impl/psb_d_mat_impl.F90
 base/serial/impl/psb_s_base_mat_impl.f90
 base/serial/impl/psb_s_coo_impl.f90
 base/serial/impl/psb_s_csc_impl.f90
 base/serial/impl/psb_s_csr_impl.f90
 base/serial/impl/psb_s_mat_impl.F90
 base/serial/impl/psb_z_base_mat_impl.f90
 base/serial/impl/psb_z_coo_impl.f90
 base/serial/impl/psb_z_csc_impl.f90
 base/serial/impl/psb_z_csr_impl.f90
 base/serial/impl/psb_z_mat_impl.F90
 base/serial/psb_cgelp.f90
 base/serial/psb_dgelp.f90
 base/serial/psb_sgelp.f90
 base/serial/psb_spdot_srtd.f90
 base/serial/psb_zgelp.f90
 base/tools/Makefile
 base/tools/psb_c_map.f90
 base/tools/psb_callc.f90
 base/tools/psb_casb.f90
 base/tools/psb_cdins.f90
 base/tools/psb_cfree.f90
 base/tools/psb_cins.f90
 base/tools/psb_d_map.f90
 base/tools/psb_dallc.f90
 base/tools/psb_dasb.f90
 base/tools/psb_dcdbldext.F90
 base/tools/psb_dfree.f90
 base/tools/psb_dins.f90
 base/tools/psb_dspalloc.f90
 base/tools/psb_dspasb.f90
 base/tools/psb_dspfree.f90
 base/tools/psb_dsphalo.F90
 base/tools/psb_dspins.f90
 base/tools/psb_dsprn.f90
 base/tools/psb_linmap.f90
 base/tools/psb_map.f90
 base/tools/psb_s_map.f90
 base/tools/psb_sallc.f90
 base/tools/psb_sasb.f90
 base/tools/psb_sfree.f90
 base/tools/psb_sins.f90
 base/tools/psb_z_map.f90
 base/tools/psb_zallc.f90
 base/tools/psb_zasb.f90
 base/tools/psb_zfree.f90
 base/tools/psb_zins.f90
 config/pac.m4
 configure.ac
 configure
 docs/html/footnode.html
 docs/html/img1.png
 docs/html/img10.png
 docs/html/img100.png
 docs/html/img101.png
 docs/html/img102.png
 docs/html/img103.png
 docs/html/img104.png
 docs/html/img105.png
 docs/html/img106.png
 docs/html/img107.png
 docs/html/img108.png
 docs/html/img109.png
 docs/html/img11.png
 docs/html/img110.png
 docs/html/img111.png
 docs/html/img112.png
 docs/html/img113.png
 docs/html/img114.png
 docs/html/img115.png
 docs/html/img116.png
 docs/html/img117.png
 docs/html/img118.png
 docs/html/img119.png
 docs/html/img12.png
 docs/html/img120.png
 docs/html/img121.png
 docs/html/img122.png
 docs/html/img123.png
 docs/html/img124.png
 docs/html/img125.png
 docs/html/img126.png
 docs/html/img127.png
 docs/html/img128.png
 docs/html/img129.png
 docs/html/img13.png
 docs/html/img130.png
 docs/html/img131.png
 docs/html/img132.png
 docs/html/img133.png
 docs/html/img134.png
 docs/html/img135.png
 docs/html/img136.png
 docs/html/img137.png
 docs/html/img138.png
 docs/html/img14.png
 docs/html/img140.png
 docs/html/img141.png
 docs/html/img142.png
 docs/html/img143.png
 docs/html/img144.png
 docs/html/img145.png
 docs/html/img146.png
 docs/html/img147.png
 docs/html/img148.png
 docs/html/img149.png
 docs/html/img15.png
 docs/html/img16.png
 docs/html/img17.png
 docs/html/img18.png
 docs/html/img2.png
 docs/html/img20.png
 docs/html/img22.png
 docs/html/img23.png
 docs/html/img24.png
 docs/html/img26.png
 docs/html/img27.png
 docs/html/img28.png
 docs/html/img29.png
 docs/html/img3.png
 docs/html/img30.png
 docs/html/img31.png
 docs/html/img32.png
 docs/html/img33.png
 docs/html/img34.png
 docs/html/img35.png
 docs/html/img36.png
 docs/html/img37.png
 docs/html/img38.png
 docs/html/img39.png
 docs/html/img4.png
 docs/html/img40.png
 docs/html/img41.png
 docs/html/img42.png
 docs/html/img43.png
 docs/html/img44.png
 docs/html/img45.png
 docs/html/img46.png
 docs/html/img47.png
 docs/html/img48.png
 docs/html/img49.png
 docs/html/img5.png
 docs/html/img50.png
 docs/html/img51.png
 docs/html/img52.png
 docs/html/img53.png
 docs/html/img54.png
 docs/html/img55.png
 docs/html/img56.png
 docs/html/img57.png
 docs/html/img58.png
 docs/html/img59.png
 docs/html/img6.png
 docs/html/img60.png
 docs/html/img61.png
 docs/html/img62.png
 docs/html/img63.png
 docs/html/img64.png
 docs/html/img65.png
 docs/html/img66.png
 docs/html/img67.png
 docs/html/img68.png
 docs/html/img69.png
 docs/html/img7.png
 docs/html/img70.png
 docs/html/img71.png
 docs/html/img72.png
 docs/html/img73.png
 docs/html/img74.png
 docs/html/img75.png
 docs/html/img76.png
 docs/html/img77.png
 docs/html/img78.png
 docs/html/img79.png
 docs/html/img8.png
 docs/html/img80.png
 docs/html/img81.png
 docs/html/img82.png
 docs/html/img83.png
 docs/html/img84.png
 docs/html/img85.png
 docs/html/img86.png
 docs/html/img87.png
 docs/html/img88.png
 docs/html/img89.png
 docs/html/img9.png
 docs/html/img90.png
 docs/html/img91.png
 docs/html/img92.png
 docs/html/img93.png
 docs/html/img94.png
 docs/html/img95.png
 docs/html/img96.png
 docs/html/img97.png
 docs/html/img98.png
 docs/html/img99.png
 docs/html/index.html
 docs/html/node1.html
 docs/html/node10.html
 docs/html/node100.html
 docs/html/node101.html
 docs/html/node102.html
 docs/html/node103.html
 docs/html/node104.html
 docs/html/node105.html
 docs/html/node106.html
 docs/html/node107.html
 docs/html/node108.html
 docs/html/node109.html
 docs/html/node11.html
 docs/html/node12.html
 docs/html/node13.html
 docs/html/node14.html
 docs/html/node15.html
 docs/html/node16.html
 docs/html/node17.html
 docs/html/node18.html
 docs/html/node19.html
 docs/html/node2.html
 docs/html/node20.html
 docs/html/node21.html
 docs/html/node22.html
 docs/html/node23.html
 docs/html/node24.html
 docs/html/node25.html
 docs/html/node26.html
 docs/html/node27.html
 docs/html/node28.html
 docs/html/node29.html
 docs/html/node3.html
 docs/html/node30.html
 docs/html/node31.html
 docs/html/node32.html
 docs/html/node33.html
 docs/html/node34.html
 docs/html/node35.html
 docs/html/node36.html
 docs/html/node37.html
 docs/html/node38.html
 docs/html/node39.html
 docs/html/node4.html
 docs/html/node40.html
 docs/html/node41.html
 docs/html/node42.html
 docs/html/node43.html
 docs/html/node44.html
 docs/html/node45.html
 docs/html/node46.html
 docs/html/node47.html
 docs/html/node48.html
 docs/html/node49.html
 docs/html/node5.html
 docs/html/node50.html
 docs/html/node51.html
 docs/html/node52.html
 docs/html/node53.html
 docs/html/node54.html
 docs/html/node55.html
 docs/html/node56.html
 docs/html/node57.html
 docs/html/node58.html
 docs/html/node59.html
 docs/html/node6.html
 docs/html/node60.html
 docs/html/node61.html
 docs/html/node62.html
 docs/html/node63.html
 docs/html/node64.html
 docs/html/node65.html
 docs/html/node66.html
 docs/html/node67.html
 docs/html/node68.html
 docs/html/node69.html
 docs/html/node7.html
 docs/html/node70.html
 docs/html/node71.html
 docs/html/node72.html
 docs/html/node73.html
 docs/html/node74.html
 docs/html/node75.html
 docs/html/node76.html
 docs/html/node77.html
 docs/html/node78.html
 docs/html/node79.html
 docs/html/node8.html
 docs/html/node80.html
 docs/html/node81.html
 docs/html/node82.html
 docs/html/node83.html
 docs/html/node84.html
 docs/html/node85.html
 docs/html/node86.html
 docs/html/node87.html
 docs/html/node88.html
 docs/html/node89.html
 docs/html/node9.html
 docs/html/node90.html
 docs/html/node91.html
 docs/html/node92.html
 docs/html/node93.html
 docs/html/node94.html
 docs/html/node95.html
 docs/html/node96.html
 docs/html/node97.html
 docs/html/node98.html
 docs/html/node99.html
 docs/html/userhtml.html
 docs/psblas-3.0.pdf
 docs/src/datastruct.tex
 krylov/Makefile
 krylov/psb_base_inner_krylov_mod.f90
 krylov/psb_c_inner_krylov_mod.f90
 krylov/psb_cbicg.f90
 krylov/psb_ccg.f90
 krylov/psb_ccgs.f90
 krylov/psb_ccgstab.f90
 krylov/psb_ccgstabl.f90
 krylov/psb_ckrylov.f90
 krylov/psb_crgmres.f90
 krylov/psb_d_inner_krylov_mod.f90
 krylov/psb_dbicg.f90
 krylov/psb_dcg.F90
 krylov/psb_dcgs.f90
 krylov/psb_dcgstab.F90
 krylov/psb_dcgstabl.f90
 krylov/psb_dkrylov.f90
 krylov/psb_drgmres.f90
 krylov/psb_krylov_mod.f90
 krylov/psb_s_inner_krylov_mod.f90
 krylov/psb_sbicg.f90
 krylov/psb_scg.F90
 krylov/psb_scgs.f90
 krylov/psb_scgstab.F90
 krylov/psb_scgstabl.f90
 krylov/psb_skrylov.f90
 krylov/psb_srgmres.f90
 krylov/psb_z_inner_krylov_mod.f90
 krylov/psb_zbicg.f90
 krylov/psb_zcg.F90
 krylov/psb_zcgs.f90
 krylov/psb_zcgstab.f90
 krylov/psb_zcgstabl.f90
 krylov/psb_zkrylov.f90
 krylov/psb_zrgmres.f90
 opt/Makefile
 opt/psb_c_rsb_mat_mod.F90
 opt/psb_d_rsb_mat_mod.F90
 opt/psb_s_rsb_mat_mod.F90
 opt/psb_z_rsb_mat_mod.F90
 opt/rsb_c_mod.f90
 opt/rsb_d_mod.f90
 opt/rsb_s_mod.f90
 opt/rsb_z_mod.f90
 prec/Makefile
 prec/psb_c_base_prec_mod.f90
 prec/psb_c_bjacprec.f90
 prec/psb_c_diagprec.f90
 prec/psb_c_nullprec.f90
 prec/psb_c_prec_type.f90
 prec/psb_cprecbld.f90
 prec/psb_d_base_prec_mod.f90
 prec/psb_d_bjacprec.f90
 prec/psb_d_diagprec.f90
 prec/psb_d_nullprec.f90
 prec/psb_d_prec_type.f90
 prec/psb_dprecbld.f90
 prec/psb_s_base_prec_mod.f90
 prec/psb_s_bjacprec.f90
 prec/psb_s_diagprec.f90
 prec/psb_s_nullprec.f90
 prec/psb_s_prec_type.f90
 prec/psb_sprecbld.f90
 prec/psb_z_base_prec_mod.f90
 prec/psb_z_bjacprec.f90
 prec/psb_z_diagprec.f90
 prec/psb_z_nullprec.f90
 prec/psb_z_prec_type.f90
 prec/psb_zprecbld.f90
 test/fileread/cf_sample.f90
 test/fileread/df_sample.f90
 test/fileread/runs/dfs.inp
 test/fileread/runs/sfs.inp
 test/fileread/sf_sample.f90
 test/fileread/zf_sample.f90
 test/kernel/d_file_spmv.f90
 test/kernel/s_file_spmv.f90
 test/newfmt/ppde.F90
 test/newfmt/spde.f90
 test/pargen/ppde.f90
 test/pargen/runs/ppde.inp
 test/pargen/spde.f90
 test/serial/Makefile
 test/serial/d_matgen.F90
 test/serial/psb_d_czz_mat_mod.f90
 util/Makefile
 util/psb_c_hbio_impl.f90
 util/psb_c_mat_dist_impl.f90
 util/psb_c_mmio_impl.f90
 util/psb_c_renum_impl.F90
 util/psb_d_hbio_impl.f90
 util/psb_d_mat_dist_impl.f90
 util/psb_d_mmio_impl.f90
 util/psb_d_renum_impl.F90
 util/psb_hbio_impl.f90
 util/psb_mat_dist_mod.f90
 util/psb_mmio_impl.f90
 util/psb_renum_impl.F90
 util/psb_renum_mod.f90
 util/psb_s_hbio_impl.f90
 util/psb_s_mat_dist_impl.f90
 util/psb_s_mmio_impl.f90
 util/psb_s_renum_impl.F90
 util/psb_z_hbio_impl.f90
 util/psb_z_mat_dist_impl.f90
 util/psb_z_mmio_impl.f90
 util/psb_z_renum_impl.F90

Merged vect-state branch. 
Now need to:
1. Update MLD
2. Fix documentation
3. Take out older Krylov interfaces.
This commit is contained in:
Salvatore Filippone
2011-10-24 11:30:02 +00:00
parent 81ceebf074
commit afa7aafb52
538 changed files with 61478 additions and 28996 deletions
+179 -42
View File
@@ -47,23 +47,7 @@ reader:
\item[{\bf matrix\_data}] includes general information about matrix and
process grid, such as the communication context, the size of the
global matrix, the size of the portion of matrix stored on the current
process, and so on. %% More precisely:
%% \begin{description}
%% \item[matrix\_data[psb\_dec\_type\_\hbox{]}] Identifies the decomposition type
%% (global); the actual values are internally defined, so they should
%% never be accessed directly.
%% \item[matrix\_data[psb\_ctxt\_\hbox{]}] Communication context
%% associated with the processes comprised in the virtual parallel
%% machine (global).
%% \item[matrix\_data[psb\_m\_\hbox{]}] Total number of equations (global).
%% \item[matrix\_data[psb\_n\_\hbox{]}] Total number of variables (global).
%% \item[matrix\_data[psb\_n\_row\_\hbox{]}] Number of grid variables owned by the
%% current process (local); equivalent to the number of local rows in the
%% sparse coefficient matrix.
%% \item[matrix\_data[psb\_n\_col\_\hbox{]}] Total number of grid variables read by the
%% current process (local); equivalent to the number of local columns in
%% the sparse coefficient matrix. They include the halo.
%% \end{description}
process, and so on.
Specified as: an allocatable integer array of dimension \verb|psb_mdata_size_|.
\item[{\bf halo\_index}] A list of the halo and boundary elements for
the current process to be exchanged with other processes; for each
@@ -344,6 +328,161 @@ values:
permutation data (see tools routine description).
\end{description}
\subsection{Dense Vector Data Structure}
\label{sec:spmat}
The \hypertarget{vdata}{{\tt psb\_vect\_type}} data structure
contains all information about local portion of the sparse matrix and
its storage mode. Most of these fields are set by the tools
routines when inserting a new sparse matrix; the user needs only
choose, if he/she so whishes, a specific matrix storage mode. \\
\begin{description}
\item[{\bf aspk}] Contains values of the local distributed sparse
matrix.\\
Specified as: an allocatable array of rank one of type corresponding
to matrix entries type.
\item[{\bf ia1}] Holds integer information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an allocatable integer array of rank one.
\item[{\bf ia2}] Holds integer information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an allocatable integer array of rank one.
\item[{\bf infoa}] On entry can hold auxiliary information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an integer array of length \verb|psb_ifasize_|.
\item[{\bf fida}] Defines the format of the distributed sparse matrix.\\
Specified as: a string of length 5
\item[{\bf descra}] Describe the characteristic of the distributed sparse matrix.\\
Specified as: array of character of length 9.
\item[{\bf pl}] Specifies the local row permutation of distributed sparse
matrix. If pl(1) is equal to 0, then there isn't row permutation.\\
Specified as: an allocatable integer array of dimension equal to number of local row (matrix\_data[psb\_n\_row\_\hbox{]})
\item[{\bf pr}] Specifies the local column permutation of distributed sparse
matrix. If PR(1) is equal to 0, then there isn't columnm permutation.\\
Specified as: an allocatable integer array of dimension equal to number of
local row (matrix\_data[psb\_n\_col\_\hbox{]})
\item[{\bf m}] Number of rows; if row indices are stored explicitly,
as in Coordinate Storage, should be greater than or equal to the
maximum row index actually present in the sparse matrix.
Specified as: integer variable.
\item[{\bf k}] Number of columns; if column indices are stored explicitly,
as in Coordinate Storage or Compressed Sparse Rows, should be greater
than or equal to the maximum column index actually present in the sparse matrix.
Specified as: integer variable.
\end{description}
The Fortran~95 interface for distributed sparse matrices containing
double precision real entries is defined as shown in
figure~\ref{fig:spmattype}. The definitions for single precision and
complex data are identical except for the \verb|real| declaration and
for the kind type parameter.
\begin{figure}[h!]
\begin{Sbox}
\begin{minipage}[tl]{0.85\textwidth}
\begin{verbatim}
type psb_sspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
real(psb_spk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_sspmat_type
type psb_dspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
real(psb_dpk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_dspmat_type
type psb_cspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
complex(psb_spk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_cspmat_type
type psb_zspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
complex(psb_dpk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_zspmat_type
\end{verbatim}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
\begin{center}
\fbox{\TheSbox}
\end{center}
\caption{\label{fig:spmattype}
The PSBLAS defined data type that
contains a sparse matrix.}
\end{figure}
The following two cases are among the most commonly used:
\begin{description}
\item[fida=``CSR''] Compressed storage by rows. In this case the
following should hold:
\begin{enumerate}
\item \verb|ia2(i)| contains the index of the first element of row
\verb|i|; the last element of the sparse matrix is thus stored at
index $ia2(m+1)-1$. It should contain \verb|m+1| entries in
nondecreasing order (strictly increasing, if there are no empty rows).
\item \verb|ia1(j)| contains the column index and \verb|aspk(j)|
contains the corresponding coefficient value, for all $ia2(1) \le j
\le ia2(m+1)-1$.
\end{enumerate}
\item[fida=``COO''] Coordinate storage. In this case the following
should hold:
\begin{enumerate}
\item \verb|infoa(1)| contains the number of nonzero elements in the
matrix;
\item For all $1 \le j \le infoa(1)$, the coefficient, row index and
column index are stored into \verb|apsk(j)|, \verb|ia1(j)| and
\verb|ia2(j)| respectively.
\end{enumerate}
\end{description}
A sparse matrix has an associated state, which can take the following
values:
\begin{description}
\item[Build:] State entered after the first allocation, and before the
first assembly; in this state it is possible to add nonzero entries.
\item[Assembled:] State entered after the assembly; computations using
the sparse matrix, such as matrix-vector products, are only possible
in this state;
\item[Update:] State entered after a reinitalization; this is used to
handle applications in which the same sparsity pattern is used
multiple times with different coefficients. In this state it is only
possible to enter coefficients for already existing nonzero entries.
\end{description}
\subsubsection{Named Constants}
\label{sec:sp_constants}
\begin{description}
%% \item[psb\_nztotreq\_] Request to fetch the total number of nonzeroes
%% stored in a sparse matrix
%% \item[psb\_nzrowreq\_] Request to fetch the number of nonzeroes in a
%% given row in a sparse matrix
\item[psb\_dupl\_ovwrt\_] Duplicate coefficients should be overwritten
(i.e. ignore duplications)
\item[psb\_dupl\_add\_] Duplicate coefficients should be added;
\item[psb\_dupl\_err\_] Duplicate coefficients should trigger an error conditino
\item[psb\_upd\_dflt\_] Default update strategy for matrix coefficients;
\item[psb\_upd\_srch\_] Update strategy based on search into the data structure;
\item[psb\_upd\_perm\_] Update strategy based on additional
permutation data (see tools routine description).
\end{description}
\subsection{Preconditioner data structure}
@@ -453,11 +592,11 @@ research.
\subsection{Data structure query routines}
\label{sec:dataquery}
\subsubsection*{psb\_cd\_get\_local\_rows --- Get number of local rows}
\addcontentsline{toc}{subsubsection}{psb\_cd\_get\_local\_rows }
\subsubsection*{get\_local\_rows --- Get number of local rows}
\addcontentsline{toc}{subsubsection}{get\_local\_rows }
\begin{verbatim}
nr = psb_cd_get_local_rows(desc)
nr = desc%get_local_rows()
\end{verbatim}
\begin{description}
@@ -479,11 +618,11 @@ Specified as: a structured data of type \descdata.
\end{description}
\subsubsection*{psb\_cd\_get\_local\_cols --- Get number of local cols}
\addcontentsline{toc}{subsubsection}{psb\_cd\_get\_local\_cols }
\subsubsection*{get\_local\_cols --- Get number of local cols}
\addcontentsline{toc}{subsubsection}{get\_local\_cols }
\begin{verbatim}
nc = psb_cd_get_local_cols(desc)
nc = desc%get_local_cols()
\end{verbatim}
\begin{description}
@@ -506,11 +645,11 @@ Specified as: a structured data of type \descdata.
\end{description}
\subsubsection*{psb\_cd\_get\_global\_rows --- Get number of global rows}
\addcontentsline{toc}{subsubsection}{psb\_cd\_get\_global\_rows }
\subsubsection*{get\_global\_rows --- Get number of global rows}
\addcontentsline{toc}{subsubsection}{get\_global\_rows }
\begin{verbatim}
nr = psb_cd_get_global_rows(desc)
nr = desc%get_global_rows()
\end{verbatim}
\begin{description}
@@ -528,11 +667,11 @@ Specified as: a structured data of type \descdata.
\item[Function value] The number of global rows in the mesh
\end{description}
\subsubsection*{psb\_cd\_get\_global\_cols --- Get number of global cols}
\addcontentsline{toc}{subsubsection}{psb\_cd\_get\_global\_cols }
\subsubsection*{get\_global\_cols --- Get number of global cols}
\addcontentsline{toc}{subsubsection}{get\_global\_cols }
\begin{verbatim}
nr = psb_cd_get_global_cols(desc)
nr = desc%get_global_cols()
\end{verbatim}
\begin{description}
@@ -551,9 +690,9 @@ Specified as: a structured data of type \descdata.
\end{description}
\subsubroutine{psb\_cd\_get\_context}{Get communication context}
\subsubroutine{get\_context}{Get communication context}
\begin{verbatim}
ictxt = psb_cd_get_context(desc)
ictxt = desc%get_context()
\end{verbatim}
\begin{description}
@@ -608,12 +747,11 @@ Note: the threshold value is only queried by the library at the time a
call to \verb|psb_cdall| is executed, therefore changing the threshold
has no effect on communication descriptors that have already been initialized.
\subsubsection*{psb\_sp\_get\_nrows --- Get number of rows in a sparse
matrix}
\addcontentsline{toc}{subsubsection}{ psb\_sp\_get\_nrows}
\subsubsection*{get\_nrows --- Get number of rows in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_nrows}
\begin{verbatim}
nr = psb_sp_get_nrows(a)
nr = a%get_nrows()
\end{verbatim}
\begin{description}
@@ -632,12 +770,11 @@ Specified as: a structured data of type \spdata.
\end{description}
\subsubsection*{psb\_sp\_get\_ncols --- Get number of columns in a
sparse matrix}
\addcontentsline{toc}{subsubsection}{psb\_sp\_get\_ncols}
\subsubsection*{get\_ncols --- Get number of columns in a sparse matrix}
\addcontentsline{toc}{subsubsection}{get\_ncols}
\begin{verbatim}
nr = psb_sp_get_ncols(a)
nr = a%get_ncols()
\end{verbatim}
\begin{description}
@@ -656,12 +793,12 @@ Specified as: a structured data of type \spdata.
\end{description}
\subsubsection*{psb\_sp\_get\_nnzeros --- Get number of nonzero elements
\subsubsection*{get\_nnzeros --- Get number of nonzero elements
in a sparse matrix}
\addcontentsline{toc}{subsubsection}{psb\_sp\_get\_nnzeros}
\addcontentsline{toc}{subsubsection}{get\_nnzeros}
\begin{verbatim}
nr = psb_sp_get_nnzeros(a)
nr = a%get_nnzeros()
\end{verbatim}
\begin{description}