diff --git a/mlprec/impl/solver/Makefile b/mlprec/impl/solver/Makefile index dae4b151..2ebf3afc 100644 --- a/mlprec/impl/solver/Makefile +++ b/mlprec/impl/solver/Makefile @@ -11,90 +11,106 @@ OBJS=mld_c_base_solver_apply.o \ mld_c_base_solver_apply_vect.o \ mld_c_base_solver_bld.o \ mld_c_base_solver_check.o \ +mld_c_base_solver_clone.o \ +mld_c_base_solver_csetc.o \ +mld_c_base_solver_cseti.o \ +mld_c_base_solver_csetr.o \ mld_c_base_solver_descr.o \ mld_c_base_solver_dmp.o \ mld_c_base_solver_free.o \ mld_c_base_solver_setc.o \ mld_c_base_solver_seti.o \ mld_c_base_solver_setr.o \ -mld_c_base_solver_csetc.o \ -mld_c_base_solver_cseti.o \ -mld_c_base_solver_csetr.o \ mld_c_diag_solver_apply.o \ mld_c_diag_solver_apply_vect.o \ mld_c_diag_solver_bld.o \ +mld_c_diag_solver_clone.o \ mld_c_id_solver_apply.o \ mld_c_id_solver_apply_vect.o \ +mld_c_id_solver_clone.o \ mld_c_ilu_solver_apply.o \ mld_c_ilu_solver_apply_vect.o \ mld_c_ilu_solver_bld.o \ +mld_c_ilu_solver_clone.o \ mld_c_ilu_solver_dmp.o \ mld_d_base_solver_apply.o \ mld_d_base_solver_apply_vect.o \ mld_d_base_solver_bld.o \ mld_d_base_solver_check.o \ +mld_d_base_solver_clone.o \ +mld_d_base_solver_csetc.o \ +mld_d_base_solver_cseti.o \ +mld_d_base_solver_csetr.o \ mld_d_base_solver_descr.o \ mld_d_base_solver_dmp.o \ mld_d_base_solver_free.o \ mld_d_base_solver_setc.o \ mld_d_base_solver_seti.o \ mld_d_base_solver_setr.o \ -mld_d_base_solver_csetc.o \ -mld_d_base_solver_cseti.o \ -mld_d_base_solver_csetr.o \ mld_d_diag_solver_apply.o \ mld_d_diag_solver_apply_vect.o \ mld_d_diag_solver_bld.o \ +mld_d_diag_solver_clone.o \ mld_d_id_solver_apply.o \ mld_d_id_solver_apply_vect.o \ +mld_d_id_solver_clone.o \ mld_d_ilu_solver_apply.o \ mld_d_ilu_solver_apply_vect.o \ mld_d_ilu_solver_bld.o \ +mld_d_ilu_solver_clone.o \ mld_d_ilu_solver_dmp.o \ mld_s_base_solver_apply.o \ mld_s_base_solver_apply_vect.o \ mld_s_base_solver_bld.o \ mld_s_base_solver_check.o \ +mld_s_base_solver_clone.o \ +mld_s_base_solver_csetc.o \ +mld_s_base_solver_cseti.o \ +mld_s_base_solver_csetr.o \ mld_s_base_solver_descr.o \ mld_s_base_solver_dmp.o \ mld_s_base_solver_free.o \ mld_s_base_solver_setc.o \ mld_s_base_solver_seti.o \ mld_s_base_solver_setr.o \ -mld_s_base_solver_csetc.o \ -mld_s_base_solver_cseti.o \ -mld_s_base_solver_csetr.o \ mld_s_diag_solver_apply.o \ mld_s_diag_solver_apply_vect.o \ mld_s_diag_solver_bld.o \ +mld_s_diag_solver_clone.o \ mld_s_id_solver_apply.o \ mld_s_id_solver_apply_vect.o \ +mld_s_id_solver_clone.o \ mld_s_ilu_solver_apply.o \ mld_s_ilu_solver_apply_vect.o \ mld_s_ilu_solver_bld.o \ +mld_s_ilu_solver_clone.o \ mld_s_ilu_solver_dmp.o \ mld_z_base_solver_apply.o \ mld_z_base_solver_apply_vect.o \ mld_z_base_solver_bld.o \ mld_z_base_solver_check.o \ +mld_z_base_solver_clone.o \ +mld_z_base_solver_csetc.o \ +mld_z_base_solver_cseti.o \ +mld_z_base_solver_csetr.o \ mld_z_base_solver_descr.o \ mld_z_base_solver_dmp.o \ mld_z_base_solver_free.o \ mld_z_base_solver_setc.o \ mld_z_base_solver_seti.o \ mld_z_base_solver_setr.o \ -mld_z_base_solver_csetc.o \ -mld_z_base_solver_cseti.o \ -mld_z_base_solver_csetr.o \ mld_z_diag_solver_apply.o \ mld_z_diag_solver_apply_vect.o \ mld_z_diag_solver_bld.o \ +mld_z_diag_solver_clone.o \ mld_z_id_solver_apply.o \ mld_z_id_solver_apply_vect.o \ +mld_z_id_solver_clone.o \ mld_z_ilu_solver_apply.o \ mld_z_ilu_solver_apply_vect.o \ mld_z_ilu_solver_bld.o \ -mld_z_ilu_solver_dmp.o +mld_z_ilu_solver_clone.o \ +mld_z_ilu_solver_dmp.o LIBNAME=libmld_prec.a diff --git a/mlprec/impl/solver/mld_c_base_solver_clone.f90 b/mlprec/impl/solver/mld_c_base_solver_clone.f90 new file mode 100644 index 00000000..e9a6d8f4 --- /dev/null +++ b/mlprec/impl/solver/mld_c_base_solver_clone.f90 @@ -0,0 +1,67 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_c_base_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_c_base_solver_mod, mld_protect_name => mld_c_base_solver_clone + Implicit None + ! Arguments + class(mld_c_base_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_solver_clone' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_c_base_solver_clone diff --git a/mlprec/impl/solver/mld_c_diag_solver_clone.f90 b/mlprec/impl/solver/mld_c_diag_solver_clone.f90 new file mode 100644 index 00000000..8161c8d6 --- /dev/null +++ b/mlprec/impl/solver/mld_c_diag_solver_clone.f90 @@ -0,0 +1,83 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_c_diag_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_c_diag_solver, mld_protect_name => mld_c_diag_solver_clone + + Implicit None + + ! Arguments + class(mld_c_diag_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_c_diag_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_c_diag_solver_type) + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_c_diag_solver_clone diff --git a/mlprec/impl/solver/mld_c_id_solver_clone.f90 b/mlprec/impl/solver/mld_c_id_solver_clone.f90 new file mode 100644 index 00000000..e6823b1e --- /dev/null +++ b/mlprec/impl/solver/mld_c_id_solver_clone.f90 @@ -0,0 +1,81 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_c_id_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_c_id_solver, mld_protect_name => mld_c_id_solver_clone + + Implicit None + + ! Arguments + class(mld_c_id_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_c_id_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_c_id_solver_type) + ! Nothing to be done. + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_c_id_solver_clone diff --git a/mlprec/impl/solver/mld_c_ilu_solver_clone.f90 b/mlprec/impl/solver/mld_c_ilu_solver_clone.f90 new file mode 100644 index 00000000..d64dcb13 --- /dev/null +++ b/mlprec/impl/solver/mld_c_ilu_solver_clone.f90 @@ -0,0 +1,91 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_c_ilu_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_c_ilu_solver, mld_protect_name => mld_c_ilu_solver_clone + + Implicit None + + ! Arguments + class(mld_c_ilu_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_c_ilu_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(svo => svout) + type is (mld_c_ilu_solver_type) + svo%fact_type = sv%fact_type + svo%fill_in = sv%fill_in + svo%thresh = sv%thresh + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + if (info == psb_success_) & + & call sv%l%clone(svo%l,info) + if (info == psb_success_) & + & call sv%u%clone(svo%u,info) + + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_c_ilu_solver_clone diff --git a/mlprec/impl/solver/mld_d_base_solver_clone.f90 b/mlprec/impl/solver/mld_d_base_solver_clone.f90 new file mode 100644 index 00000000..213e96f0 --- /dev/null +++ b/mlprec/impl/solver/mld_d_base_solver_clone.f90 @@ -0,0 +1,67 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_d_base_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_d_base_solver_mod, mld_protect_name => mld_d_base_solver_clone + Implicit None + ! Arguments + class(mld_d_base_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_solver_clone' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_d_base_solver_clone diff --git a/mlprec/impl/solver/mld_d_diag_solver_clone.f90 b/mlprec/impl/solver/mld_d_diag_solver_clone.f90 new file mode 100644 index 00000000..c026fbb9 --- /dev/null +++ b/mlprec/impl/solver/mld_d_diag_solver_clone.f90 @@ -0,0 +1,83 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_d_diag_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_d_diag_solver, mld_protect_name => mld_d_diag_solver_clone + + Implicit None + + ! Arguments + class(mld_d_diag_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_d_diag_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_d_diag_solver_type) + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_d_diag_solver_clone diff --git a/mlprec/impl/solver/mld_d_id_solver_clone.f90 b/mlprec/impl/solver/mld_d_id_solver_clone.f90 new file mode 100644 index 00000000..5f4ae281 --- /dev/null +++ b/mlprec/impl/solver/mld_d_id_solver_clone.f90 @@ -0,0 +1,81 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_d_id_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_d_id_solver, mld_protect_name => mld_d_id_solver_clone + + Implicit None + + ! Arguments + class(mld_d_id_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_d_id_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_d_id_solver_type) + ! Nothing to be done. + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_d_id_solver_clone diff --git a/mlprec/impl/solver/mld_d_ilu_solver_clone.f90 b/mlprec/impl/solver/mld_d_ilu_solver_clone.f90 new file mode 100644 index 00000000..c1323a0f --- /dev/null +++ b/mlprec/impl/solver/mld_d_ilu_solver_clone.f90 @@ -0,0 +1,91 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_d_ilu_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_d_ilu_solver, mld_protect_name => mld_d_ilu_solver_clone + + Implicit None + + ! Arguments + class(mld_d_ilu_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_d_ilu_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(svo => svout) + type is (mld_d_ilu_solver_type) + svo%fact_type = sv%fact_type + svo%fill_in = sv%fill_in + svo%thresh = sv%thresh + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + if (info == psb_success_) & + & call sv%l%clone(svo%l,info) + if (info == psb_success_) & + & call sv%u%clone(svo%u,info) + + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_d_ilu_solver_clone diff --git a/mlprec/impl/solver/mld_s_base_solver_clone.f90 b/mlprec/impl/solver/mld_s_base_solver_clone.f90 new file mode 100644 index 00000000..cc5c2445 --- /dev/null +++ b/mlprec/impl/solver/mld_s_base_solver_clone.f90 @@ -0,0 +1,67 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_s_base_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_s_base_solver_mod, mld_protect_name => mld_s_base_solver_clone + Implicit None + ! Arguments + class(mld_s_base_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_solver_clone' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_s_base_solver_clone diff --git a/mlprec/impl/solver/mld_s_diag_solver_clone.f90 b/mlprec/impl/solver/mld_s_diag_solver_clone.f90 new file mode 100644 index 00000000..7c181826 --- /dev/null +++ b/mlprec/impl/solver/mld_s_diag_solver_clone.f90 @@ -0,0 +1,83 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_s_diag_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_s_diag_solver, mld_protect_name => mld_s_diag_solver_clone + + Implicit None + + ! Arguments + class(mld_s_diag_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_s_diag_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_s_diag_solver_type) + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_s_diag_solver_clone diff --git a/mlprec/impl/solver/mld_s_id_solver_clone.f90 b/mlprec/impl/solver/mld_s_id_solver_clone.f90 new file mode 100644 index 00000000..9776d791 --- /dev/null +++ b/mlprec/impl/solver/mld_s_id_solver_clone.f90 @@ -0,0 +1,81 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_s_id_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_s_id_solver, mld_protect_name => mld_s_id_solver_clone + + Implicit None + + ! Arguments + class(mld_s_id_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_s_id_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_s_id_solver_type) + ! Nothing to be done. + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_s_id_solver_clone diff --git a/mlprec/impl/solver/mld_s_ilu_solver_clone.f90 b/mlprec/impl/solver/mld_s_ilu_solver_clone.f90 new file mode 100644 index 00000000..d2fad046 --- /dev/null +++ b/mlprec/impl/solver/mld_s_ilu_solver_clone.f90 @@ -0,0 +1,91 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_s_ilu_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_s_ilu_solver, mld_protect_name => mld_s_ilu_solver_clone + + Implicit None + + ! Arguments + class(mld_s_ilu_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_s_ilu_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(svo => svout) + type is (mld_s_ilu_solver_type) + svo%fact_type = sv%fact_type + svo%fill_in = sv%fill_in + svo%thresh = sv%thresh + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + if (info == psb_success_) & + & call sv%l%clone(svo%l,info) + if (info == psb_success_) & + & call sv%u%clone(svo%u,info) + + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_s_ilu_solver_clone diff --git a/mlprec/impl/solver/mld_z_base_solver_clone.f90 b/mlprec/impl/solver/mld_z_base_solver_clone.f90 new file mode 100644 index 00000000..ca0050b6 --- /dev/null +++ b/mlprec/impl/solver/mld_z_base_solver_clone.f90 @@ -0,0 +1,67 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_z_base_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_z_base_solver_mod, mld_protect_name => mld_z_base_solver_clone + Implicit None + ! Arguments + class(mld_z_base_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_solver_clone' + + call psb_erractionsave(err_act) + + info = psb_err_missing_override_method_ + call psb_errpush(info,name) + goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_z_base_solver_clone diff --git a/mlprec/impl/solver/mld_z_diag_solver_clone.f90 b/mlprec/impl/solver/mld_z_diag_solver_clone.f90 new file mode 100644 index 00000000..d1e1266b --- /dev/null +++ b/mlprec/impl/solver/mld_z_diag_solver_clone.f90 @@ -0,0 +1,83 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_z_diag_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_z_diag_solver, mld_protect_name => mld_z_diag_solver_clone + + Implicit None + + ! Arguments + class(mld_z_diag_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_z_diag_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_z_diag_solver_type) + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_z_diag_solver_clone diff --git a/mlprec/impl/solver/mld_z_id_solver_clone.f90 b/mlprec/impl/solver/mld_z_id_solver_clone.f90 new file mode 100644 index 00000000..6612196a --- /dev/null +++ b/mlprec/impl/solver/mld_z_id_solver_clone.f90 @@ -0,0 +1,81 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_z_id_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_z_id_solver, mld_protect_name => mld_z_id_solver_clone + + Implicit None + + ! Arguments + class(mld_z_id_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_z_id_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + + select type(svo => svout) + type is (mld_z_id_solver_type) + ! Nothing to be done. + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_z_id_solver_clone diff --git a/mlprec/impl/solver/mld_z_ilu_solver_clone.f90 b/mlprec/impl/solver/mld_z_ilu_solver_clone.f90 new file mode 100644 index 00000000..0fb44681 --- /dev/null +++ b/mlprec/impl/solver/mld_z_ilu_solver_clone.f90 @@ -0,0 +1,91 @@ +!!$ +!!$ +!!$ MLD2P4 version 2.0 +!!$ MultiLevel Domain Decomposition Parallel Preconditioners Package +!!$ based on PSBLAS (Parallel Sparse BLAS version 3.0) +!!$ +!!$ (C) Copyright 2008,2009,2010,2010,2012 +!!$ +!!$ Salvatore Filippone University of Rome Tor Vergata +!!$ Alfredo Buttari CNRS-IRIT, Toulouse +!!$ Pasqua D'Ambra ICAR-CNR, Naples +!!$ Daniela di Serafino Second University of Naples +!!$ +!!$ 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 MLD2P4 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 MLD2P4 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. +!!$ +!!$ +subroutine mld_z_ilu_solver_clone(sv,svout,info) + + use psb_base_mod + use mld_z_ilu_solver, mld_protect_name => mld_z_ilu_solver_clone + + Implicit None + + ! Arguments + class(mld_z_ilu_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_z_ilu_solver_type :: svout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(svo => svout) + type is (mld_z_ilu_solver_type) + svo%fact_type = sv%fact_type + svo%fill_in = sv%fill_in + svo%thresh = sv%thresh + call psb_safe_ab_cpy(sv%d,svo%d,info) + if (info == psb_success_) & + & call sv%dv%clone(svo%dv,info) + if (info == psb_success_) & + & call sv%l%clone(svo%l,info) + if (info == psb_success_) & + & call sv%u%clone(svo%u,info) + + class default + info = psb_err_internal_error_ + end select + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 continue + call psb_erractionrestore(err_act) + if (err_act == psb_act_abort_) then + call psb_error() + return + end if + return +end subroutine mld_z_ilu_solver_clone diff --git a/mlprec/mld_base_prec_type.F90 b/mlprec/mld_base_prec_type.F90 index 500f471e..5bc99dc9 100644 --- a/mlprec/mld_base_prec_type.F90 +++ b/mlprec/mld_base_prec_type.F90 @@ -101,6 +101,7 @@ module mld_base_prec_type integer(psb_ipk_) :: aggr_omega_alg, aggr_eig, aggr_filter integer(psb_ipk_) :: coarse_mat, coarse_solve contains + procedure, pass(pm) :: clone => ml_parms_clone procedure, pass(pm) :: descr => ml_parms_descr procedure, pass(pm) :: mldescr => ml_parms_mldescr procedure, pass(pm) :: coarsedescr => ml_parms_coarsedescr @@ -111,6 +112,7 @@ module mld_base_prec_type type, extends(mld_ml_parms) :: mld_sml_parms real(psb_spk_) :: aggr_omega_val, aggr_thresh contains + procedure, pass(pm) :: clone => s_ml_parms_clone procedure, pass(pm) :: descr => s_ml_parms_descr procedure, pass(pm) :: printout => s_ml_parms_printout end type mld_sml_parms @@ -118,6 +120,7 @@ module mld_base_prec_type type, extends(mld_ml_parms) :: mld_dml_parms real(psb_dpk_) :: aggr_omega_val, aggr_thresh contains + procedure, pass(pm) :: clone => d_ml_parms_clone procedure, pass(pm) :: descr => d_ml_parms_descr procedure, pass(pm) :: printout => d_ml_parms_printout end type mld_dml_parms @@ -952,4 +955,52 @@ contains call psb_bcast(ictxt,dat%aggr_thresh,root) end subroutine mld_dml_bcast + subroutine ml_parms_clone(pm,pmout,info) + + implicit none + class(mld_ml_parms), intent(inout) :: pm + class(mld_ml_parms), intent(out) :: pmout + integer(psb_ipk_), intent(out) :: info + + info = psb_success_ + pmout%sweeps = pm%sweeps + pmout%sweeps_pre = pm%sweeps_pre + pmout%sweeps_post = pm%sweeps_post + pmout%ml_type = pm%ml_type + pmout%smoother_pos = pm%smoother_pos + pmout%aggr_alg = pm%aggr_alg + pmout%aggr_kind = pm%aggr_kind + pmout%aggr_omega_alg = pm%aggr_omega_alg + pmout%aggr_eig = pm%aggr_eig + pmout%aggr_filter = pm%aggr_filter + pmout%coarse_mat = pm%coarse_mat + pmout%coarse_solve = pm%coarse_solve + + end subroutine ml_parms_clone + + subroutine s_ml_parms_clone(pm,pmout,info) + + implicit none + class(mld_sml_parms), intent(inout) :: pm + class(mld_sml_parms), intent(out) :: pmout + integer(psb_ipk_), intent(out) :: info + + + call pm%mld_ml_parms%clone(pmout%mld_ml_parms,info) + pmout%aggr_omega_val = pm%aggr_omega_val + pmout%aggr_thresh = pm%aggr_thresh + end subroutine s_ml_parms_clone + + subroutine d_ml_parms_clone(pm,pmout,info) + + implicit none + class(mld_dml_parms), intent(inout) :: pm + class(mld_dml_parms), intent(out) :: pmout + integer(psb_ipk_), intent(out) :: info + + call pm%mld_ml_parms%clone(pmout%mld_ml_parms,info) + pmout%aggr_omega_val = pm%aggr_omega_val + pmout%aggr_thresh = pm%aggr_thresh + end subroutine d_ml_parms_clone + end module mld_base_prec_type diff --git a/mlprec/mld_c_base_solver_mod.f90 b/mlprec/mld_c_base_solver_mod.f90 index 3d2be13d..d647b5ed 100644 --- a/mlprec/mld_c_base_solver_mod.f90 +++ b/mlprec/mld_c_base_solver_mod.f90 @@ -86,6 +86,7 @@ module mld_c_base_solver_mod contains procedure, pass(sv) :: check => mld_c_base_solver_check procedure, pass(sv) :: dump => mld_c_base_solver_dmp + procedure, pass(sv) :: clone => mld_c_base_solver_clone procedure, pass(sv) :: build => mld_c_base_solver_bld procedure, pass(sv) :: apply_v => mld_c_base_solver_apply_vect procedure, pass(sv) :: apply_a => mld_c_base_solver_apply @@ -307,7 +308,21 @@ module mld_c_base_solver_mod logical, optional, intent(in) :: solver end subroutine mld_c_base_solver_dmp end interface - + + + interface + subroutine mld_c_base_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_cspmat_type, psb_c_base_sparse_mat, & + & psb_c_vect_type, psb_c_base_vect_type, psb_spk_, & + & mld_c_base_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_base_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_solver_clone + end interface diff --git a/mlprec/mld_c_diag_solver.f90 b/mlprec/mld_c_diag_solver.f90 index 684bb154..943da415 100644 --- a/mlprec/mld_c_diag_solver.f90 +++ b/mlprec/mld_c_diag_solver.f90 @@ -52,6 +52,7 @@ module mld_c_diag_solver complex(psb_spk_), allocatable :: d(:) contains procedure, pass(sv) :: build => mld_c_diag_solver_bld + procedure, pass(sv) :: clone => mld_c_diag_solver_clone procedure, pass(sv) :: apply_v => mld_c_diag_solver_apply_vect procedure, pass(sv) :: apply_a => mld_c_diag_solver_apply procedure, pass(sv) :: free => c_diag_solver_free @@ -112,6 +113,20 @@ module mld_c_diag_solver class(psb_c_base_vect_type), intent(in), optional :: vmold end subroutine mld_c_diag_solver_bld end interface + + interface + subroutine mld_c_diag_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_cspmat_type, psb_c_base_sparse_mat, & + & psb_c_vect_type, psb_c_base_vect_type, psb_spk_, & + & mld_c_base_solver_type, mld_c_diag_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_diag_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_diag_solver_clone + end interface contains diff --git a/mlprec/mld_c_id_solver.f90 b/mlprec/mld_c_id_solver.f90 index ec1b40ee..64ee0d76 100644 --- a/mlprec/mld_c_id_solver.f90 +++ b/mlprec/mld_c_id_solver.f90 @@ -50,6 +50,7 @@ module mld_c_id_solver type, extends(mld_c_base_solver_type) :: mld_c_id_solver_type contains procedure, pass(sv) :: build => c_id_solver_bld + procedure, pass(sv) :: clone => mld_c_id_solver_clone procedure, pass(sv) :: apply_v => mld_c_id_solver_apply_vect procedure, pass(sv) :: apply_a => mld_c_id_solver_apply procedure, pass(sv) :: free => c_id_solver_free @@ -93,6 +94,20 @@ module mld_c_id_solver end subroutine mld_c_id_solver_apply end interface + interface + subroutine mld_c_id_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_cspmat_type, psb_c_base_sparse_mat, & + & psb_c_vect_type, psb_c_base_vect_type, psb_spk_, & + & mld_c_base_solver_type, mld_c_id_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_id_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_id_solver_clone + end interface + contains diff --git a/mlprec/mld_c_ilu_solver.f90 b/mlprec/mld_c_ilu_solver.f90 index 6232ea75..796fd5b2 100644 --- a/mlprec/mld_c_ilu_solver.f90 +++ b/mlprec/mld_c_ilu_solver.f90 @@ -56,6 +56,7 @@ module mld_c_ilu_solver real(psb_spk_) :: thresh contains procedure, pass(sv) :: dump => mld_c_ilu_solver_dmp + procedure, pass(sv) :: clone => mld_c_ilu_solver_clone procedure, pass(sv) :: build => mld_c_ilu_solver_bld procedure, pass(sv) :: apply_v => mld_c_ilu_solver_apply_vect procedure, pass(sv) :: apply_a => mld_c_ilu_solver_apply @@ -153,6 +154,19 @@ module mld_c_ilu_solver end subroutine mld_c_ilu_solver_dmp end interface + interface + subroutine mld_c_ilu_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_cspmat_type, psb_c_base_sparse_mat, & + & psb_c_vect_type, psb_c_base_vect_type, psb_spk_, & + & mld_c_base_solver_type, mld_c_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_ilu_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_ilu_solver_clone + end interface contains diff --git a/mlprec/mld_d_base_solver_mod.f90 b/mlprec/mld_d_base_solver_mod.f90 index c7ebadf9..ec2c5fc1 100644 --- a/mlprec/mld_d_base_solver_mod.f90 +++ b/mlprec/mld_d_base_solver_mod.f90 @@ -86,6 +86,7 @@ module mld_d_base_solver_mod contains procedure, pass(sv) :: check => mld_d_base_solver_check procedure, pass(sv) :: dump => mld_d_base_solver_dmp + procedure, pass(sv) :: clone => mld_d_base_solver_clone procedure, pass(sv) :: build => mld_d_base_solver_bld procedure, pass(sv) :: apply_v => mld_d_base_solver_apply_vect procedure, pass(sv) :: apply_a => mld_d_base_solver_apply @@ -307,7 +308,21 @@ module mld_d_base_solver_mod logical, optional, intent(in) :: solver end subroutine mld_d_base_solver_dmp end interface - + + + interface + subroutine mld_d_base_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_dspmat_type, psb_d_base_sparse_mat, & + & psb_d_vect_type, psb_d_base_vect_type, psb_dpk_, & + & mld_d_base_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_base_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_solver_clone + end interface diff --git a/mlprec/mld_d_diag_solver.f90 b/mlprec/mld_d_diag_solver.f90 index 1f802859..4eb1d7b5 100644 --- a/mlprec/mld_d_diag_solver.f90 +++ b/mlprec/mld_d_diag_solver.f90 @@ -52,6 +52,7 @@ module mld_d_diag_solver real(psb_dpk_), allocatable :: d(:) contains procedure, pass(sv) :: build => mld_d_diag_solver_bld + procedure, pass(sv) :: clone => mld_d_diag_solver_clone procedure, pass(sv) :: apply_v => mld_d_diag_solver_apply_vect procedure, pass(sv) :: apply_a => mld_d_diag_solver_apply procedure, pass(sv) :: free => d_diag_solver_free @@ -112,6 +113,20 @@ module mld_d_diag_solver class(psb_d_base_vect_type), intent(in), optional :: vmold end subroutine mld_d_diag_solver_bld end interface + + interface + subroutine mld_d_diag_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_dspmat_type, psb_d_base_sparse_mat, & + & psb_d_vect_type, psb_d_base_vect_type, psb_dpk_, & + & mld_d_base_solver_type, mld_d_diag_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_diag_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_diag_solver_clone + end interface contains diff --git a/mlprec/mld_d_id_solver.f90 b/mlprec/mld_d_id_solver.f90 index 61e5a615..3140042b 100644 --- a/mlprec/mld_d_id_solver.f90 +++ b/mlprec/mld_d_id_solver.f90 @@ -50,6 +50,7 @@ module mld_d_id_solver type, extends(mld_d_base_solver_type) :: mld_d_id_solver_type contains procedure, pass(sv) :: build => d_id_solver_bld + procedure, pass(sv) :: clone => mld_d_id_solver_clone procedure, pass(sv) :: apply_v => mld_d_id_solver_apply_vect procedure, pass(sv) :: apply_a => mld_d_id_solver_apply procedure, pass(sv) :: free => d_id_solver_free @@ -93,6 +94,20 @@ module mld_d_id_solver end subroutine mld_d_id_solver_apply end interface + interface + subroutine mld_d_id_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_dspmat_type, psb_d_base_sparse_mat, & + & psb_d_vect_type, psb_d_base_vect_type, psb_dpk_, & + & mld_d_base_solver_type, mld_d_id_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_id_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_id_solver_clone + end interface + contains diff --git a/mlprec/mld_d_ilu_solver.f90 b/mlprec/mld_d_ilu_solver.f90 index f207da28..f9b391d9 100644 --- a/mlprec/mld_d_ilu_solver.f90 +++ b/mlprec/mld_d_ilu_solver.f90 @@ -56,6 +56,7 @@ module mld_d_ilu_solver real(psb_dpk_) :: thresh contains procedure, pass(sv) :: dump => mld_d_ilu_solver_dmp + procedure, pass(sv) :: clone => mld_d_ilu_solver_clone procedure, pass(sv) :: build => mld_d_ilu_solver_bld procedure, pass(sv) :: apply_v => mld_d_ilu_solver_apply_vect procedure, pass(sv) :: apply_a => mld_d_ilu_solver_apply @@ -153,6 +154,19 @@ module mld_d_ilu_solver end subroutine mld_d_ilu_solver_dmp end interface + interface + subroutine mld_d_ilu_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_dspmat_type, psb_d_base_sparse_mat, & + & psb_d_vect_type, psb_d_base_vect_type, psb_dpk_, & + & mld_d_base_solver_type, mld_d_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_ilu_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_ilu_solver_clone + end interface contains diff --git a/mlprec/mld_s_base_solver_mod.f90 b/mlprec/mld_s_base_solver_mod.f90 index d2ccd0b7..f9f871f4 100644 --- a/mlprec/mld_s_base_solver_mod.f90 +++ b/mlprec/mld_s_base_solver_mod.f90 @@ -86,6 +86,7 @@ module mld_s_base_solver_mod contains procedure, pass(sv) :: check => mld_s_base_solver_check procedure, pass(sv) :: dump => mld_s_base_solver_dmp + procedure, pass(sv) :: clone => mld_s_base_solver_clone procedure, pass(sv) :: build => mld_s_base_solver_bld procedure, pass(sv) :: apply_v => mld_s_base_solver_apply_vect procedure, pass(sv) :: apply_a => mld_s_base_solver_apply @@ -307,7 +308,21 @@ module mld_s_base_solver_mod logical, optional, intent(in) :: solver end subroutine mld_s_base_solver_dmp end interface - + + + interface + subroutine mld_s_base_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_sspmat_type, psb_s_base_sparse_mat, & + & psb_s_vect_type, psb_s_base_vect_type, psb_spk_, & + & mld_s_base_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_base_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_solver_clone + end interface diff --git a/mlprec/mld_s_diag_solver.f90 b/mlprec/mld_s_diag_solver.f90 index a6a0b082..10bea87d 100644 --- a/mlprec/mld_s_diag_solver.f90 +++ b/mlprec/mld_s_diag_solver.f90 @@ -52,6 +52,7 @@ module mld_s_diag_solver real(psb_spk_), allocatable :: d(:) contains procedure, pass(sv) :: build => mld_s_diag_solver_bld + procedure, pass(sv) :: clone => mld_s_diag_solver_clone procedure, pass(sv) :: apply_v => mld_s_diag_solver_apply_vect procedure, pass(sv) :: apply_a => mld_s_diag_solver_apply procedure, pass(sv) :: free => s_diag_solver_free @@ -112,6 +113,20 @@ module mld_s_diag_solver class(psb_s_base_vect_type), intent(in), optional :: vmold end subroutine mld_s_diag_solver_bld end interface + + interface + subroutine mld_s_diag_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_sspmat_type, psb_s_base_sparse_mat, & + & psb_s_vect_type, psb_s_base_vect_type, psb_spk_, & + & mld_s_base_solver_type, mld_s_diag_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_diag_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_diag_solver_clone + end interface contains diff --git a/mlprec/mld_s_id_solver.f90 b/mlprec/mld_s_id_solver.f90 index ca154059..8c0b2097 100644 --- a/mlprec/mld_s_id_solver.f90 +++ b/mlprec/mld_s_id_solver.f90 @@ -50,6 +50,7 @@ module mld_s_id_solver type, extends(mld_s_base_solver_type) :: mld_s_id_solver_type contains procedure, pass(sv) :: build => s_id_solver_bld + procedure, pass(sv) :: clone => mld_s_id_solver_clone procedure, pass(sv) :: apply_v => mld_s_id_solver_apply_vect procedure, pass(sv) :: apply_a => mld_s_id_solver_apply procedure, pass(sv) :: free => s_id_solver_free @@ -93,6 +94,20 @@ module mld_s_id_solver end subroutine mld_s_id_solver_apply end interface + interface + subroutine mld_s_id_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_sspmat_type, psb_s_base_sparse_mat, & + & psb_s_vect_type, psb_s_base_vect_type, psb_spk_, & + & mld_s_base_solver_type, mld_s_id_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_id_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_id_solver_clone + end interface + contains diff --git a/mlprec/mld_s_ilu_solver.f90 b/mlprec/mld_s_ilu_solver.f90 index e89ad10d..46cc8572 100644 --- a/mlprec/mld_s_ilu_solver.f90 +++ b/mlprec/mld_s_ilu_solver.f90 @@ -56,6 +56,7 @@ module mld_s_ilu_solver real(psb_spk_) :: thresh contains procedure, pass(sv) :: dump => mld_s_ilu_solver_dmp + procedure, pass(sv) :: clone => mld_s_ilu_solver_clone procedure, pass(sv) :: build => mld_s_ilu_solver_bld procedure, pass(sv) :: apply_v => mld_s_ilu_solver_apply_vect procedure, pass(sv) :: apply_a => mld_s_ilu_solver_apply @@ -153,6 +154,19 @@ module mld_s_ilu_solver end subroutine mld_s_ilu_solver_dmp end interface + interface + subroutine mld_s_ilu_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_sspmat_type, psb_s_base_sparse_mat, & + & psb_s_vect_type, psb_s_base_vect_type, psb_spk_, & + & mld_s_base_solver_type, mld_s_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_ilu_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_ilu_solver_clone + end interface contains diff --git a/mlprec/mld_z_base_solver_mod.f90 b/mlprec/mld_z_base_solver_mod.f90 index 04658556..4791306b 100644 --- a/mlprec/mld_z_base_solver_mod.f90 +++ b/mlprec/mld_z_base_solver_mod.f90 @@ -86,6 +86,7 @@ module mld_z_base_solver_mod contains procedure, pass(sv) :: check => mld_z_base_solver_check procedure, pass(sv) :: dump => mld_z_base_solver_dmp + procedure, pass(sv) :: clone => mld_z_base_solver_clone procedure, pass(sv) :: build => mld_z_base_solver_bld procedure, pass(sv) :: apply_v => mld_z_base_solver_apply_vect procedure, pass(sv) :: apply_a => mld_z_base_solver_apply @@ -307,7 +308,21 @@ module mld_z_base_solver_mod logical, optional, intent(in) :: solver end subroutine mld_z_base_solver_dmp end interface - + + + interface + subroutine mld_z_base_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_zspmat_type, psb_z_base_sparse_mat, & + & psb_z_vect_type, psb_z_base_vect_type, psb_dpk_, & + & mld_z_base_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_base_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_solver_clone + end interface diff --git a/mlprec/mld_z_diag_solver.f90 b/mlprec/mld_z_diag_solver.f90 index a26ce848..5701b44b 100644 --- a/mlprec/mld_z_diag_solver.f90 +++ b/mlprec/mld_z_diag_solver.f90 @@ -52,6 +52,7 @@ module mld_z_diag_solver complex(psb_dpk_), allocatable :: d(:) contains procedure, pass(sv) :: build => mld_z_diag_solver_bld + procedure, pass(sv) :: clone => mld_z_diag_solver_clone procedure, pass(sv) :: apply_v => mld_z_diag_solver_apply_vect procedure, pass(sv) :: apply_a => mld_z_diag_solver_apply procedure, pass(sv) :: free => z_diag_solver_free @@ -112,6 +113,20 @@ module mld_z_diag_solver class(psb_z_base_vect_type), intent(in), optional :: vmold end subroutine mld_z_diag_solver_bld end interface + + interface + subroutine mld_z_diag_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_zspmat_type, psb_z_base_sparse_mat, & + & psb_z_vect_type, psb_z_base_vect_type, psb_dpk_, & + & mld_z_base_solver_type, mld_z_diag_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_diag_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_diag_solver_clone + end interface contains diff --git a/mlprec/mld_z_id_solver.f90 b/mlprec/mld_z_id_solver.f90 index 9ef42c76..1604e99e 100644 --- a/mlprec/mld_z_id_solver.f90 +++ b/mlprec/mld_z_id_solver.f90 @@ -50,6 +50,7 @@ module mld_z_id_solver type, extends(mld_z_base_solver_type) :: mld_z_id_solver_type contains procedure, pass(sv) :: build => z_id_solver_bld + procedure, pass(sv) :: clone => mld_z_id_solver_clone procedure, pass(sv) :: apply_v => mld_z_id_solver_apply_vect procedure, pass(sv) :: apply_a => mld_z_id_solver_apply procedure, pass(sv) :: free => z_id_solver_free @@ -93,6 +94,20 @@ module mld_z_id_solver end subroutine mld_z_id_solver_apply end interface + interface + subroutine mld_z_id_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_zspmat_type, psb_z_base_sparse_mat, & + & psb_z_vect_type, psb_z_base_vect_type, psb_dpk_, & + & mld_z_base_solver_type, mld_z_id_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_id_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_id_solver_clone + end interface + contains diff --git a/mlprec/mld_z_ilu_solver.f90 b/mlprec/mld_z_ilu_solver.f90 index 35ce690b..74e5789a 100644 --- a/mlprec/mld_z_ilu_solver.f90 +++ b/mlprec/mld_z_ilu_solver.f90 @@ -56,6 +56,7 @@ module mld_z_ilu_solver real(psb_dpk_) :: thresh contains procedure, pass(sv) :: dump => mld_z_ilu_solver_dmp + procedure, pass(sv) :: clone => mld_z_ilu_solver_clone procedure, pass(sv) :: build => mld_z_ilu_solver_bld procedure, pass(sv) :: apply_v => mld_z_ilu_solver_apply_vect procedure, pass(sv) :: apply_a => mld_z_ilu_solver_apply @@ -153,6 +154,19 @@ module mld_z_ilu_solver end subroutine mld_z_ilu_solver_dmp end interface + interface + subroutine mld_z_ilu_solver_clone(sv,svout,info) + import :: psb_desc_type, psb_zspmat_type, psb_z_base_sparse_mat, & + & psb_z_vect_type, psb_z_base_vect_type, psb_dpk_, & + & mld_z_base_solver_type, mld_z_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_ilu_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), allocatable, intent(out) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_ilu_solver_clone + end interface contains