Files
psblas3/test/fileread/cf_sample.f90
T
Salvatore Filippone 7ea9809956 psblas3:
base/comm/psb_cgather.f90
 base/comm/psb_chalo.f90
 base/comm/psb_covrl.f90
 base/comm/psb_cscatter.F90
 base/comm/psb_cspgather.F90
 base/comm/psb_dgather.f90
 base/comm/psb_dhalo.f90
 base/comm/psb_dovrl.f90
 base/comm/psb_dscatter.F90
 base/comm/psb_dspgather.F90
 base/comm/psb_igather.f90
 base/comm/psb_ihalo.f90
 base/comm/psb_iovrl.f90
 base/comm/psb_iscatter.F90
 base/comm/psb_sgather.f90
 base/comm/psb_shalo.f90
 base/comm/psb_sovrl.f90
 base/comm/psb_sscatter.F90
 base/comm/psb_sspgather.F90
 base/comm/psb_zgather.f90
 base/comm/psb_zhalo.f90
 base/comm/psb_zovrl.f90
 base/comm/psb_zscatter.F90
 base/comm/psb_zspgather.F90
 base/internals/psb_indx_map_fnd_owner.F90
 base/internals/psi_bld_tmphalo.f90
 base/internals/psi_bld_tmpovrl.f90
 base/internals/psi_compute_size.f90
 base/internals/psi_crea_bnd_elem.f90
 base/internals/psi_crea_index.f90
 base/internals/psi_crea_ovr_elem.f90
 base/internals/psi_cswapdata.F90
 base/internals/psi_cswaptran.F90
 base/internals/psi_desc_impl.f90
 base/internals/psi_desc_index.F90
 base/internals/psi_dl_check.f90
 base/internals/psi_dswapdata.F90
 base/internals/psi_dswaptran.F90
 base/internals/psi_exist_ovr_elem.f
 base/internals/psi_extrct_dl.F90
 base/internals/psi_fnd_owner.F90
 base/internals/psi_idx_cnv.f90
 base/internals/psi_idx_ins_cnv.f90
 base/internals/psi_iswapdata.F90
 base/internals/psi_iswaptran.F90
 base/internals/psi_ldsc_pre_halo.f90
 base/internals/psi_list_search.f
 base/internals/psi_ovrl_restr.f90
 base/internals/psi_ovrl_save.f90
 base/internals/psi_ovrl_upd.f90
 base/internals/psi_sort_dl.f90
 base/internals/psi_sswapdata.F90
 base/internals/psi_sswaptran.F90
 base/internals/psi_zswapdata.F90
 base/internals/psi_zswaptran.F90
 base/internals/srtlist.f
 base/modules/Makefile
 base/modules/error.f90
 base/modules/parts.f90
 base/modules/psb_base_linmap_mod.f90
 base/modules/psb_base_mat_mod.f90
 base/modules/psb_base_tools_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_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_desc_const_mod.f90
 base/modules/psb_desc_type.f90
 base/modules/psb_error_impl.F90
 base/modules/psb_error_mod.F90
 base/modules/psb_gen_block_map_mod.f90
 base/modules/psb_glist_map_mod.f90
 base/modules/psb_hash_map_mod.f90
 base/modules/psb_hash_mod.f90
 base/modules/psb_i_comm_mod.f90
 base/modules/psb_indx_map_mod.f90
 base/modules/psb_ip_reord_mod.f90
 base/modules/psb_list_map_mod.f90
 base/modules/psb_realloc_mod.F90
 base/modules/psb_repl_map_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_sort_mod.f90
 base/modules/psb_string_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_bcast_mod.F90
 base/modules/psi_c_mod.f90
 base/modules/psi_comm_buffers_mod.F90
 base/modules/psi_d_mod.f90
 base/modules/psi_i_mod.f90
 base/modules/psi_p2p_mod.F90
 base/modules/psi_penv_mod.F90
 base/modules/psi_reduce_mod.F90
 base/modules/psi_s_mod.f90
 base/modules/psi_serial_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_cnrmi.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_snrmi.f90
 base/psblas/psb_sspmm.f90
 base/psblas/psb_sspsm.f90
 base/psblas/psb_sxdot.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_znrmi.f90
 base/psblas/psb_zspmm.f90
 base/psblas/psb_zspsm.f90
 base/serial/aux/calsr.f90
 base/serial/aux/calsrx.f90
 base/serial/aux/camsort_dw.f90
 base/serial/aux/camsort_up.f90
 base/serial/aux/camsr.f90
 base/serial/aux/camsrx.f90
 base/serial/aux/casr.f90
 base/serial/aux/casrx.f90
 base/serial/aux/clsr.f90
 base/serial/aux/clsrx.f90
 base/serial/aux/dasr.f90
 base/serial/aux/dasrx.f90
 base/serial/aux/dmsort_dw.f90
 base/serial/aux/dmsort_up.f90
 base/serial/aux/dmsr.f90
 base/serial/aux/dmsrx.f90
 base/serial/aux/dsr.f90
 base/serial/aux/dsrx.f90
 base/serial/aux/iasr.f90
 base/serial/aux/iasrx.f90
 base/serial/aux/ibsrch.f
 base/serial/aux/imsr.f90
 base/serial/aux/imsru.f90
 base/serial/aux/imsrx.f90
 base/serial/aux/isaperm.f
 base/serial/aux/isr.f90
 base/serial/aux/isrx.f90
 base/serial/aux/issrch.f
 base/serial/aux/msort_dw.f90
 base/serial/aux/msort_up.f90
 base/serial/aux/sasr.f90
 base/serial/aux/sasrx.f90
 base/serial/aux/smsort_dw.f90
 base/serial/aux/smsort_up.f90
 base/serial/aux/smsr.f90
 base/serial/aux/smsrx.f90
 base/serial/aux/ssr.f90
 base/serial/aux/ssrx.f90
 base/serial/aux/zalsr.f90
 base/serial/aux/zalsrx.f90
 base/serial/aux/zamsort_dw.f90
 base/serial/aux/zamsort_up.f90
 base/serial/aux/zamsr.f90
 base/serial/aux/zamsrx.f90
 base/serial/aux/zasr.f90
 base/serial/aux/zasrx.f90
 base/serial/aux/zlsr.f90
 base/serial/aux/zlsrx.f90
 base/serial/f77/caxpby.f
 base/serial/f77/daxpby.f
 base/serial/f77/saxpby.f
 base/serial/f77/smmp.f
 base/serial/f77/zaxpby.f
 base/serial/impl/psb_base_mat_impl.f90
 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_aspxpby.f90
 base/serial/psb_cgelp.f90
 base/serial/psb_cgeprt.f90
 base/serial/psb_cnumbmm.f90
 base/serial/psb_crwextd.f90
 base/serial/psb_csymbmm.f90
 base/serial/psb_dgelp.f90
 base/serial/psb_dgeprt.f90
 base/serial/psb_dnumbmm.f90
 base/serial/psb_drwextd.f90
 base/serial/psb_dsymbmm.f90
 base/serial/psb_sgelp.f90
 base/serial/psb_sgeprt.f90
 base/serial/psb_snumbmm.f90
 base/serial/psb_sort_impl.f90
 base/serial/psb_spdot_srtd.f90
 base/serial/psb_spge_dot.f90
 base/serial/psb_srwextd.f90
 base/serial/psb_ssymbmm.f90
 base/serial/psb_zgelp.f90
 base/serial/psb_zgeprt.f90
 base/serial/psb_znumbmm.f90
 base/serial/psb_zrwextd.f90
 base/serial/psb_zsymbmm.f90
 base/serial/psi_serial_impl.f90
 base/tools/psb_c_map.f90
 base/tools/psb_callc.f90
 base/tools/psb_casb.f90
 base/tools/psb_ccdbldext.F90
 base/tools/psb_cd_inloc.f90
 base/tools/psb_cd_lstext.f90
 base/tools/psb_cd_reinit.f90
 base/tools/psb_cd_set_bld.f90
 base/tools/psb_cd_switch_ovl_indxmap.f90
 base/tools/psb_cdall.f90
 base/tools/psb_cdals.f90
 base/tools/psb_cdalv.f90
 base/tools/psb_cdcpy.F90
 base/tools/psb_cdins.f90
 base/tools/psb_cdprt.f90
 base/tools/psb_cdren.f90
 base/tools/psb_cdrep.f90
 base/tools/psb_cfree.f90
 base/tools/psb_cins.f90
 base/tools/psb_cspalloc.f90
 base/tools/psb_cspasb.f90
 base/tools/psb_cspfree.f90
 base/tools/psb_csphalo.F90
 base/tools/psb_cspins.f90
 base/tools/psb_csprn.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_get_overlap.f90
 base/tools/psb_glob_to_loc.f90
 base/tools/psb_ialloc.f90
 base/tools/psb_iasb.f90
 base/tools/psb_icdasb.F90
 base/tools/psb_ifree.f90
 base/tools/psb_iins.f90
 base/tools/psb_loc_to_glob.f90
 base/tools/psb_s_map.f90
 base/tools/psb_sallc.f90
 base/tools/psb_sasb.f90
 base/tools/psb_scdbldext.F90
 base/tools/psb_sfree.f90
 base/tools/psb_sins.f90
 base/tools/psb_sspalloc.f90
 base/tools/psb_sspasb.f90
 base/tools/psb_sspfree.f90
 base/tools/psb_ssphalo.F90
 base/tools/psb_sspins.f90
 base/tools/psb_ssprn.f90
 base/tools/psb_z_map.f90
 base/tools/psb_zallc.f90
 base/tools/psb_zasb.f90
 base/tools/psb_zcdbldext.F90
 base/tools/psb_zfree.f90
 base/tools/psb_zins.f90
 base/tools/psb_zspalloc.f90
 base/tools/psb_zspasb.f90
 base/tools/psb_zspfree.f90
 base/tools/psb_zsphalo.F90
 base/tools/psb_zspins.f90
 base/tools/psb_zsprn.f90
 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/psb_d_ell_impl.f90
 opt/psb_d_ell_mat_mod.f90
 prec/Makefile
 prec/impl/psb_c_bjacprec_impl.f90
 prec/impl/psb_c_diagprec_impl.f90
 prec/impl/psb_c_nullprec_impl.f90
 prec/impl/psb_c_prec_type_impl.f90
 prec/impl/psb_cilu_fct.f90
 prec/impl/psb_cprecbld.f90
 prec/impl/psb_cprecinit.f90
 prec/impl/psb_cprecset.f90
 prec/impl/psb_d_bjacprec_impl.f90
 prec/impl/psb_d_diagprec_impl.f90
 prec/impl/psb_d_nullprec_impl.f90
 prec/impl/psb_d_prec_type_impl.f90
 prec/impl/psb_dilu_fct.f90
 prec/impl/psb_dprecbld.f90
 prec/impl/psb_dprecinit.f90
 prec/impl/psb_dprecset.f90
 prec/impl/psb_s_bjacprec_impl.f90
 prec/impl/psb_s_diagprec_impl.f90
 prec/impl/psb_s_nullprec_impl.f90
 prec/impl/psb_s_prec_type_impl.f90
 prec/impl/psb_silu_fct.f90
 prec/impl/psb_sprecbld.f90
 prec/impl/psb_sprecinit.f90
 prec/impl/psb_sprecset.f90
 prec/impl/psb_z_bjacprec_impl.f90
 prec/impl/psb_z_diagprec_impl.f90
 prec/impl/psb_z_nullprec_impl.f90
 prec/impl/psb_z_prec_type_impl.f90
 prec/impl/psb_zilu_fct.f90
 prec/impl/psb_zprecbld.f90
 prec/impl/psb_zprecinit.f90
 prec/impl/psb_zprecset.f90
 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_mod.f90
 prec/psb_c_prec_type.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_mod.f90
 prec/psb_d_prec_type.f90
 prec/psb_prec_const_mod.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_mod.f90
 prec/psb_s_prec_type.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_mod.f90
 prec/psb_z_prec_type.f90
 test/fileread/cf_sample.f90
 test/fileread/df_sample.f90
 test/fileread/getp.f90
 test/fileread/sf_sample.f90
 test/fileread/zf_sample.f90
 test/kernel/d_file_spmv.f90
 test/kernel/pdgenspmv.f90
 test/kernel/s_file_spmv.f90
 test/newfmt/ppde.F90
 test/newfmt/spde.f90
 test/pargen/ppde.f90
 test/pargen/spde.f90
 test/serial/d_coo_matgen.f90
 test/serial/d_matgen.F90
 test/serial/psb_d_cxx_impl.f90
 test/serial/psb_d_cxx_mat_mod.f90
 test/serial/psb_d_cyy_impl.f90
 test/serial/psb_d_cyy_mat_mod.f90
 test/torture/psb_c_mvsv_tester.f90
 test/torture/psb_d_mvsv_tester.f90
 test/torture/psb_s_mvsv_tester.f90
 test/torture/psb_z_mvsv_tester.f90
 test/torture/psbtf.f90
 test/util/dhb2mm.f90
 test/util/dmm2hb.f90
 test/util/zhb2mm.f90
 test/util/zmm2hb.f90
 util/psb_blockpart_mod.f90
 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_gps_mod.f90
 util/psb_hbio_mod.f90
 util/psb_mat_dist_impl.f90
 util/psb_mat_dist_mod.f90
 util/psb_metispart_mod.F90
 util/psb_mmio_mod.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

Introduced use of psb_ipk_. 
Modified hash_mod: should now work even with psb_ipk_= 8 bytes. 
Still need to fix the parallel environment for long-integers.
2012-01-27 11:12:47 +00:00

333 lines
11 KiB
Fortran

!!$
!!$ Parallel Sparse BLAS version 3.0
!!$ (C) Copyright 2006, 2007, 2008, 2009, 2010
!!$ Salvatore Filippone University of Rome Tor Vergata
!!$ Alfredo Buttari CNRS-IRIT, Toulouse
!!$
!!$ Redistribution and use in source and binary forms, with or without
!!$ modification, are permitted provided that the following conditions
!!$ are met:
!!$ 1. Redistributions of source code must retain the above copyright
!!$ notice, this list of conditions and the following disclaimer.
!!$ 2. Redistributions in binary form must reproduce the above copyright
!!$ notice, this list of conditions, and the following disclaimer in the
!!$ documentation and/or other materials provided with the distribution.
!!$ 3. The name of the PSBLAS group or the names of its contributors may
!!$ not be used to endorse or promote products derived from this
!!$ software without specific written permission.
!!$
!!$ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
!!$ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
!!$ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
!!$ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PSBLAS GROUP OR ITS CONTRIBUTORS
!!$ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
!!$ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
!!$ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
!!$ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
!!$ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
!!$ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
!!$ POSSIBILITY OF SUCH DAMAGE.
!!$
!!$
program cf_sample
use psb_base_mod
use psb_prec_mod
use psb_krylov_mod
use psb_util_mod
use getp
implicit none
! input parameters
character(len=40) :: kmethd, ptype, mtrx_file, rhs_file
! sparse matrices
type(psb_cspmat_type) :: a, aux_a
! preconditioner data
type(psb_cprec_type) :: prec
! dense matrices
complex(psb_spk_), allocatable, target :: aux_b(:,:), d(:)
complex(psb_spk_), allocatable , save :: x_col_glob(:), r_col_glob(:)
complex(psb_spk_), pointer :: b_col_glob(:)
type(psb_c_vect_type) :: b_col, x_col, r_col
! communications data structure
type(psb_desc_type):: desc_a
integer(psb_ipk_) :: ictxt, iam, np
! solver paramters
integer(psb_ipk_) :: iter, itmax, ierr, itrace, ircode, ipart,&
& methd, istopc, irst
integer(psb_long_int_k_) :: amatsize, precsize, descsize
real(psb_spk_) :: err, eps
character(len=5) :: afmt
character(len=20) :: name
character(len=2) :: filefmt
integer(psb_ipk_), parameter :: iunit=12
integer(psb_ipk_) :: iparm(20)
! other variables
integer(psb_ipk_) :: i,info,j,m_problem
integer(psb_ipk_) :: internal, m,ii,nnzero
real(psb_dpk_) :: t1, t2, tprec
real(psb_spk_) :: r_amax, b_amax, scale,resmx,resmxp
integer(psb_ipk_) :: nrhs, nrow, n_row, dim, nv, ne
integer(psb_ipk_), allocatable :: ivg(:), ipv(:), perm(:)
character(len=40) :: fname, fnout
call psb_init(ictxt)
call psb_info(ictxt,iam,np)
if (iam < 0) then
! This should not happen, but just in case
call psb_exit(ictxt)
stop
endif
name='cf_sample'
if(psb_get_errstatus() /= 0) goto 9999
info=psb_success_
call psb_set_errverbosity(2)
!
! Hello world
!
if (iam == psb_root_) then
write(*,*) 'Welcome to PSBLAS version: ',psb_version_string_
write(*,*) 'This is the ',trim(name),' sample program'
end if
!
! get parameters
!
call get_parms(ictxt,mtrx_file,rhs_file,filefmt,kmethd,ptype,&
& ipart,afmt,istopc,itmax,itrace,irst,eps)
call psb_barrier(ictxt)
t1 = psb_wtime()
! read the input matrix to be processed and (possibly) the rhs
nrhs = 1
if (iam == psb_root_) then
select case(psb_toupper(filefmt))
case('MM')
! For Matrix Market we have an input file for the matrix
! and an (optional) second file for the RHS.
call mm_mat_read(aux_a,info,iunit=iunit,filename=mtrx_file)
if (info == psb_success_) then
if (rhs_file /= 'NONE') then
call mm_vet_read(aux_b,info,iunit=iunit,filename=rhs_file)
end if
end if
case ('HB')
! For Harwell-Boeing we have a single file which may or may not
! contain an RHS.
call hb_read(aux_a,info,iunit=iunit,b=aux_b,filename=mtrx_file)
case default
info = -1
write(psb_err_unit,*) 'Wrong choice for fileformat ', filefmt
end select
if (info /= psb_success_) then
write(psb_err_unit,*) 'Error while reading input matrix '
call psb_abort(ictxt)
end if
m_problem = aux_a%get_nrows()
call psb_bcast(ictxt,m_problem)
!!$ call psb_mat_renum(psb_mat_renum_gps_,aux_a,info,perm)
! At this point aux_b may still be unallocated
if (psb_size(aux_b,dim=1) == m_problem) then
! if any rhs were present, broadcast the first one
write(psb_err_unit,'("Ok, got an rhs ")')
b_col_glob =>aux_b(:,1)
!!$ call psb_gelp('N',perm(1:m_problem),&
!!$ & b_col_glob(1:m_problem),info)
else
write(psb_out_unit,'("Generating an rhs...")')
write(psb_out_unit,'(" ")')
call psb_realloc(m_problem,1,aux_b,ircode)
if (ircode /= 0) then
call psb_errpush(psb_err_alloc_dealloc_,name)
goto 9999
endif
b_col_glob => aux_b(:,1)
do i=1, m_problem
b_col_glob(i) = (1.d0,1.d0)
enddo
endif
call psb_bcast(ictxt,b_col_glob(1:m_problem))
else
call psb_bcast(ictxt,m_problem)
call psb_realloc(m_problem,1,aux_b,ircode)
if (ircode /= 0) then
call psb_errpush(psb_err_alloc_dealloc_,name)
goto 9999
endif
b_col_glob =>aux_b(:,1)
call psb_bcast(ictxt,b_col_glob(1:m_problem))
end if
! switch over different partition types
if (ipart == 0) then
call psb_barrier(ictxt)
if (iam == psb_root_) write(psb_out_unit,'("Partition type: block")')
allocate(ivg(m_problem),ipv(np))
do i=1,m_problem
call part_block(i,m_problem,np,ipv,nv)
ivg(i) = ipv(1)
enddo
call psb_matdist(aux_a, a, ictxt, &
& desc_a,b_col_glob,b_col,info,fmt=afmt,v=ivg)
else if (ipart == 2) then
if (iam == psb_root_) then
write(psb_out_unit,'("Partition type: graph")')
write(psb_out_unit,'(" ")')
! write(psb_err_unit,'("Build type: graph")')
call build_mtpart(aux_a,np)
endif
call psb_barrier(ictxt)
call distr_mtpart(psb_root_,ictxt)
call getv_mtpart(ivg)
call psb_matdist(aux_a, a, ictxt, &
& desc_a,b_col_glob,b_col,info,fmt=afmt,v=ivg)
else
if (iam == psb_root_) write(psb_out_unit,'("Partition type: block")')
call psb_matdist(aux_a, a, ictxt, &
& desc_a,b_col_glob,b_col,info,fmt=afmt,parts=part_block)
end if
call psb_geall(x_col,desc_a,info)
call x_col%set(czero)
call psb_geasb(x_col,desc_a,info)
call psb_geall(r_col,desc_a,info)
call r_col%set(czero)
call psb_geasb(r_col,desc_a,info)
t2 = psb_wtime() - t1
call psb_amx(ictxt, t2)
if (iam == psb_root_) then
write(psb_out_unit,'(" ")')
write(psb_out_unit,'("Time to read and partition matrix : ",es12.5)')t2
write(psb_out_unit,'(" ")')
end if
!
call psb_precinit(prec,ptype,info)
! building the preconditioner
t1 = psb_wtime()
call psb_precbld(a,desc_a,prec,info)
tprec = psb_wtime()-t1
if (info /= psb_success_) then
call psb_errpush(psb_err_from_subroutine_,name,a_err='psb_precbld')
goto 9999
end if
call psb_amx(ictxt,tprec)
if(iam == psb_root_) then
write(psb_out_unit,'("Preconditioner time: ",es12.5)')tprec
write(psb_out_unit,'(" ")')
end if
iparm = 0
call psb_barrier(ictxt)
t1 = psb_wtime()
call psb_krylov(kmethd,a,prec,b_col,x_col,eps,desc_a,info,&
& itmax=itmax,iter=iter,err=err,itrace=itrace,istop=istopc,irst=irst)
call psb_barrier(ictxt)
t2 = psb_wtime() - t1
call psb_amx(ictxt,t2)
call psb_geaxpby(cone,b_col,czero,r_col,desc_a,info)
call psb_spmm(-cone,a,x_col,cone,r_col,desc_a,info)
resmx = psb_genrm2(r_col,desc_a,info)
resmxp = psb_geamax(r_col,desc_a,info)
amatsize = psb_sizeof(a)
descsize = psb_sizeof(desc_a)
precsize = psb_sizeof(prec)
call psb_sum(ictxt,amatsize)
call psb_sum(ictxt,descsize)
call psb_sum(ictxt,precsize)
if (iam == psb_root_) then
call psb_precdescr(prec)
write(psb_out_unit,'("Matrix: ",a)')mtrx_file
write(psb_out_unit,'("Computed solution on ",i8," processors")')np
write(psb_out_unit,'("Iterations to convergence: ",i6)')iter
write(psb_out_unit,'("Error estimate on exit : ",es12.5)') err
write(psb_out_unit,'("Time to buil prec. : ",es12.5)')tprec
write(psb_out_unit,'("Time to solve matrix : ",es12.5)')t2
write(psb_out_unit,'("Time per iteration : ",es12.5)')t2/(iter)
write(psb_out_unit,'("Total time : ",es12.5)')t2+tprec
write(psb_out_unit,'("Residual norm 2 : ",es12.5)')resmx
write(psb_out_unit,'("Residual norm inf : ",es12.5)')resmxp
!!$ write(psb_out_unit,*)"Condition number : ",cond
write(psb_out_unit,'("Total memory occupation for A: ",i12)')amatsize
write(psb_out_unit,'("Total memory occupation for PREC: ",i12)')precsize
write(psb_out_unit,'("Total memory occupation for DESC_A: ",i12)')descsize
write(psb_out_unit,'("Storage type for DESC_A : ",a)')&
& desc_a%indxmap%get_fmt()
end if
allocate(x_col_glob(m_problem),r_col_glob(m_problem),stat=ierr)
if (ierr /= 0) then
write(psb_err_unit,*) 'allocation error: no data collection'
else
call psb_gather(x_col_glob,x_col,desc_a,info,root=psb_root_)
call psb_gather(r_col_glob,r_col,desc_a,info,root=psb_root_)
if (iam == psb_root_) then
write(psb_err_unit,'(" ")')
write(psb_err_unit,'("Saving x on file")')
write(20,*) 'matrix: ',mtrx_file
write(20,*) 'computed solution on ',np,' processors.'
write(20,*) 'iterations to convergence: ',iter
write(20,*) 'error estimate (infinity norm) on exit:', &
& ' ||r||/(||a||||x||+||b||) = ',err
write(20,'("Residual norm 2 : ",es12.5)')resmx
write(20,'("Residual norm inf : ",es12.5)')resmxp
write(20,'(a8,4(2x,a20))') 'I','X(I)','R(I)','B(I)'
do i=1,m_problem
write(20,998) i,x_col_glob(i),r_col_glob(i),b_col_glob(i)
enddo
end if
end if
998 format(i8,6(1x,g11.5))
993 format(i6,4(1x,e12.6))
call psb_gefree(b_col, desc_a,info)
call psb_gefree(x_col, desc_a,info)
call psb_spfree(a, desc_a,info)
call psb_precfree(prec,info)
call psb_cdfree(desc_a,info)
9999 continue
if(info /= psb_success_) then
call psb_error(ictxt)
end if
call psb_exit(ictxt)
stop
end program cf_sample