From 851800d9a5bbc3d5a1eeee090af77f64b43d91f3 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Wed, 3 Apr 2013 09:55:52 +0000 Subject: [PATCH] mld2p4-2: mlprec/impl/smoother/Makefile mlprec/impl/smoother/mld_c_as_smoother_clone.f90 mlprec/impl/smoother/mld_c_base_smoother_clone.f90 mlprec/impl/smoother/mld_c_jac_smoother_clone.f90 mlprec/impl/smoother/mld_d_as_smoother_clone.f90 mlprec/impl/smoother/mld_d_base_smoother_clone.f90 mlprec/impl/smoother/mld_d_jac_smoother_clone.f90 mlprec/impl/smoother/mld_s_as_smoother_clone.f90 mlprec/impl/smoother/mld_s_base_smoother_clone.f90 mlprec/impl/smoother/mld_s_jac_smoother_clone.f90 mlprec/impl/smoother/mld_z_as_smoother_clone.f90 mlprec/impl/smoother/mld_z_base_smoother_clone.f90 mlprec/impl/smoother/mld_z_jac_smoother_clone.f90 mlprec/mld_c_as_smoother.f90 mlprec/mld_c_base_smoother_mod.f90 mlprec/mld_c_jac_smoother.f90 mlprec/mld_d_as_smoother.f90 mlprec/mld_d_base_smoother_mod.f90 mlprec/mld_d_jac_smoother.f90 mlprec/mld_s_as_smoother.f90 mlprec/mld_s_base_smoother_mod.f90 mlprec/mld_s_jac_smoother.f90 mlprec/mld_z_as_smoother.f90 mlprec/mld_z_base_smoother_mod.f90 mlprec/mld_z_jac_smoother.f90 Defined CLONE method in mld smoother type. --- mlprec/impl/smoother/Makefile | 62 ++++++++----- .../impl/smoother/mld_c_as_smoother_clone.f90 | 88 +++++++++++++++++++ .../smoother/mld_c_base_smoother_clone.f90 | 67 ++++++++++++++ .../smoother/mld_c_jac_smoother_clone.f90 | 83 +++++++++++++++++ .../impl/smoother/mld_d_as_smoother_clone.f90 | 88 +++++++++++++++++++ .../smoother/mld_d_base_smoother_clone.f90 | 67 ++++++++++++++ .../smoother/mld_d_jac_smoother_clone.f90 | 83 +++++++++++++++++ .../impl/smoother/mld_s_as_smoother_clone.f90 | 88 +++++++++++++++++++ .../smoother/mld_s_base_smoother_clone.f90 | 67 ++++++++++++++ .../smoother/mld_s_jac_smoother_clone.f90 | 83 +++++++++++++++++ .../impl/smoother/mld_z_as_smoother_clone.f90 | 88 +++++++++++++++++++ .../smoother/mld_z_base_smoother_clone.f90 | 67 ++++++++++++++ .../smoother/mld_z_jac_smoother_clone.f90 | 83 +++++++++++++++++ mlprec/mld_c_as_smoother.f90 | 11 +++ mlprec/mld_c_base_smoother_mod.f90 | 16 ++++ mlprec/mld_c_jac_smoother.f90 | 11 +++ mlprec/mld_d_as_smoother.f90 | 11 +++ mlprec/mld_d_base_smoother_mod.f90 | 16 ++++ mlprec/mld_d_jac_smoother.f90 | 11 +++ mlprec/mld_s_as_smoother.f90 | 11 +++ mlprec/mld_s_base_smoother_mod.f90 | 16 ++++ mlprec/mld_s_jac_smoother.f90 | 11 +++ mlprec/mld_z_as_smoother.f90 | 11 +++ mlprec/mld_z_base_smoother_mod.f90 | 16 ++++ mlprec/mld_z_jac_smoother.f90 | 11 +++ 25 files changed, 1145 insertions(+), 21 deletions(-) create mode 100644 mlprec/impl/smoother/mld_c_as_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_c_base_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_c_jac_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_d_as_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_d_base_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_d_jac_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_s_as_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_s_base_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_s_jac_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_z_as_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_z_base_smoother_clone.f90 create mode 100644 mlprec/impl/smoother/mld_z_jac_smoother_clone.f90 diff --git a/mlprec/impl/smoother/Makefile b/mlprec/impl/smoother/Makefile index f6886cbf..8237f66d 100644 --- a/mlprec/impl/smoother/Makefile +++ b/mlprec/impl/smoother/Makefile @@ -11,106 +11,126 @@ OBJS=mld_c_as_smoother_apply.o \ mld_c_as_smoother_apply_vect.o \ mld_c_as_smoother_bld.o \ mld_c_as_smoother_check.o \ +mld_c_as_smoother_clone.o \ +mld_c_as_smoother_csetc.o \ +mld_c_as_smoother_cseti.o \ +mld_c_as_smoother_csetr.o \ mld_c_as_smoother_dmp.o \ mld_c_as_smoother_free.o \ mld_c_as_smoother_setc.o \ mld_c_as_smoother_seti.o \ -mld_c_as_smoother_csetc.o \ -mld_c_as_smoother_cseti.o \ +mld_c_as_smoother_setr.o \ mld_c_base_smoother_apply.o \ mld_c_base_smoother_apply_vect.o \ mld_c_base_smoother_bld.o \ mld_c_base_smoother_check.o \ +mld_c_base_smoother_clone.o \ +mld_c_base_smoother_csetc.o \ +mld_c_base_smoother_cseti.o \ +mld_c_base_smoother_csetr.o \ mld_c_base_smoother_descr.o \ mld_c_base_smoother_dmp.o \ mld_c_base_smoother_free.o \ mld_c_base_smoother_setc.o \ mld_c_base_smoother_seti.o \ mld_c_base_smoother_setr.o \ -mld_c_base_smoother_csetc.o \ -mld_c_base_smoother_cseti.o \ -mld_c_base_smoother_csetr.o \ mld_c_jac_smoother_apply.o \ mld_c_jac_smoother_apply_vect.o \ mld_c_jac_smoother_bld.o \ +mld_c_jac_smoother_clone.o \ mld_d_as_smoother_apply.o \ mld_d_as_smoother_apply_vect.o \ mld_d_as_smoother_bld.o \ mld_d_as_smoother_check.o \ +mld_d_as_smoother_clone.o \ +mld_d_as_smoother_csetc.o \ +mld_d_as_smoother_cseti.o \ +mld_d_as_smoother_csetr.o \ mld_d_as_smoother_dmp.o \ mld_d_as_smoother_free.o \ mld_d_as_smoother_setc.o \ mld_d_as_smoother_seti.o \ -mld_d_as_smoother_csetc.o \ -mld_d_as_smoother_cseti.o \ +mld_d_as_smoother_setr.o \ mld_d_base_smoother_apply.o \ mld_d_base_smoother_apply_vect.o \ mld_d_base_smoother_bld.o \ mld_d_base_smoother_check.o \ +mld_d_base_smoother_clone.o \ +mld_d_base_smoother_csetc.o \ +mld_d_base_smoother_cseti.o \ +mld_d_base_smoother_csetr.o \ mld_d_base_smoother_descr.o \ mld_d_base_smoother_dmp.o \ mld_d_base_smoother_free.o \ mld_d_base_smoother_setc.o \ mld_d_base_smoother_seti.o \ mld_d_base_smoother_setr.o \ -mld_d_base_smoother_csetc.o \ -mld_d_base_smoother_cseti.o \ -mld_d_base_smoother_csetr.o \ mld_d_jac_smoother_apply.o \ mld_d_jac_smoother_apply_vect.o \ mld_d_jac_smoother_bld.o \ +mld_d_jac_smoother_clone.o \ mld_s_as_smoother_apply.o \ mld_s_as_smoother_apply_vect.o \ mld_s_as_smoother_bld.o \ mld_s_as_smoother_check.o \ +mld_s_as_smoother_clone.o \ +mld_s_as_smoother_csetc.o \ +mld_s_as_smoother_cseti.o \ +mld_s_as_smoother_csetr.o \ mld_s_as_smoother_dmp.o \ mld_s_as_smoother_free.o \ mld_s_as_smoother_setc.o \ mld_s_as_smoother_seti.o \ -mld_s_as_smoother_csetc.o \ -mld_s_as_smoother_cseti.o \ +mld_s_as_smoother_setr.o \ mld_s_base_smoother_apply.o \ mld_s_base_smoother_apply_vect.o \ mld_s_base_smoother_bld.o \ mld_s_base_smoother_check.o \ +mld_s_base_smoother_clone.o \ +mld_s_base_smoother_csetc.o \ +mld_s_base_smoother_cseti.o \ +mld_s_base_smoother_csetr.o \ mld_s_base_smoother_descr.o \ mld_s_base_smoother_dmp.o \ mld_s_base_smoother_free.o \ mld_s_base_smoother_setc.o \ mld_s_base_smoother_seti.o \ mld_s_base_smoother_setr.o \ -mld_s_base_smoother_csetc.o \ -mld_s_base_smoother_cseti.o \ -mld_s_base_smoother_csetr.o \ mld_s_jac_smoother_apply.o \ mld_s_jac_smoother_apply_vect.o \ mld_s_jac_smoother_bld.o \ +mld_s_jac_smoother_clone.o \ mld_z_as_smoother_apply.o \ mld_z_as_smoother_apply_vect.o \ mld_z_as_smoother_bld.o \ mld_z_as_smoother_check.o \ +mld_z_as_smoother_clone.o \ +mld_z_as_smoother_csetc.o \ +mld_z_as_smoother_cseti.o \ +mld_z_as_smoother_csetr.o \ mld_z_as_smoother_dmp.o \ mld_z_as_smoother_free.o \ mld_z_as_smoother_setc.o \ mld_z_as_smoother_seti.o \ -mld_z_as_smoother_csetc.o \ -mld_z_as_smoother_cseti.o \ +mld_z_as_smoother_setr.o \ mld_z_base_smoother_apply.o \ mld_z_base_smoother_apply_vect.o \ mld_z_base_smoother_bld.o \ mld_z_base_smoother_check.o \ +mld_z_base_smoother_clone.o \ +mld_z_base_smoother_csetc.o \ +mld_z_base_smoother_cseti.o \ +mld_z_base_smoother_csetr.o \ mld_z_base_smoother_descr.o \ mld_z_base_smoother_dmp.o \ mld_z_base_smoother_free.o \ mld_z_base_smoother_setc.o \ mld_z_base_smoother_seti.o \ mld_z_base_smoother_setr.o \ -mld_z_base_smoother_csetc.o \ -mld_z_base_smoother_cseti.o \ -mld_z_base_smoother_csetr.o \ mld_z_jac_smoother_apply.o \ mld_z_jac_smoother_apply_vect.o \ -mld_z_jac_smoother_bld.o +mld_z_jac_smoother_bld.o \ +mld_z_jac_smoother_clone.o diff --git a/mlprec/impl/smoother/mld_c_as_smoother_clone.f90 b/mlprec/impl/smoother/mld_c_as_smoother_clone.f90 new file mode 100644 index 00000000..63882558 --- /dev/null +++ b/mlprec/impl/smoother/mld_c_as_smoother_clone.f90 @@ -0,0 +1,88 @@ +!!$ +!!$ +!!$ 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_as_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_c_as_smoother, mld_protect_name => mld_c_as_smoother_clone + + Implicit None + + ! Arguments + class(mld_c_as_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_c_as_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_c_as_smoother_type) + smo%novr = sm%novr + smo%restr = sm%restr + smo%prol = sm%prol + smo%nd_nnz_tot = sm%nd_nnz_tot + call sm%nd%clone(smo%nd,info) + if (info == psb_success_) & + & call sm%desc_data%clone(smo%desc_data,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_as_smoother_clone diff --git a/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 new file mode 100644 index 00000000..8d478bfb --- /dev/null +++ b/mlprec/impl/smoother/mld_c_base_smoother_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_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_c_base_smoother_mod, mld_protect_name => mld_c_base_smoother_clone + Implicit None + ! Arguments + class(mld_c_base_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_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_smoother_clone diff --git a/mlprec/impl/smoother/mld_c_jac_smoother_clone.f90 b/mlprec/impl/smoother/mld_c_jac_smoother_clone.f90 new file mode 100644 index 00000000..62a45077 --- /dev/null +++ b/mlprec/impl/smoother/mld_c_jac_smoother_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_jac_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_c_jac_smoother, mld_protect_name => mld_c_jac_smoother_clone + + Implicit None + + ! Arguments + class(mld_c_jac_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_c_jac_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_c_jac_smoother_type) + smo%nnz_nd_tot = sm%nnz_nd_tot + call sm%nd%clone(smo%nd,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_jac_smoother_clone diff --git a/mlprec/impl/smoother/mld_d_as_smoother_clone.f90 b/mlprec/impl/smoother/mld_d_as_smoother_clone.f90 new file mode 100644 index 00000000..f06564a7 --- /dev/null +++ b/mlprec/impl/smoother/mld_d_as_smoother_clone.f90 @@ -0,0 +1,88 @@ +!!$ +!!$ +!!$ 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_as_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_d_as_smoother, mld_protect_name => mld_d_as_smoother_clone + + Implicit None + + ! Arguments + class(mld_d_as_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_d_as_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_d_as_smoother_type) + smo%novr = sm%novr + smo%restr = sm%restr + smo%prol = sm%prol + smo%nd_nnz_tot = sm%nd_nnz_tot + call sm%nd%clone(smo%nd,info) + if (info == psb_success_) & + & call sm%desc_data%clone(smo%desc_data,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_as_smoother_clone diff --git a/mlprec/impl/smoother/mld_d_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_d_base_smoother_clone.f90 new file mode 100644 index 00000000..b8b76439 --- /dev/null +++ b/mlprec/impl/smoother/mld_d_base_smoother_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_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_d_base_smoother_mod, mld_protect_name => mld_d_base_smoother_clone + Implicit None + ! Arguments + class(mld_d_base_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_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_smoother_clone diff --git a/mlprec/impl/smoother/mld_d_jac_smoother_clone.f90 b/mlprec/impl/smoother/mld_d_jac_smoother_clone.f90 new file mode 100644 index 00000000..d87ccdd4 --- /dev/null +++ b/mlprec/impl/smoother/mld_d_jac_smoother_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_jac_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_d_jac_smoother, mld_protect_name => mld_d_jac_smoother_clone + + Implicit None + + ! Arguments + class(mld_d_jac_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_d_jac_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_d_jac_smoother_type) + smo%nnz_nd_tot = sm%nnz_nd_tot + call sm%nd%clone(smo%nd,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_jac_smoother_clone diff --git a/mlprec/impl/smoother/mld_s_as_smoother_clone.f90 b/mlprec/impl/smoother/mld_s_as_smoother_clone.f90 new file mode 100644 index 00000000..c26d4d07 --- /dev/null +++ b/mlprec/impl/smoother/mld_s_as_smoother_clone.f90 @@ -0,0 +1,88 @@ +!!$ +!!$ +!!$ 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_as_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_s_as_smoother, mld_protect_name => mld_s_as_smoother_clone + + Implicit None + + ! Arguments + class(mld_s_as_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_s_as_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_s_as_smoother_type) + smo%novr = sm%novr + smo%restr = sm%restr + smo%prol = sm%prol + smo%nd_nnz_tot = sm%nd_nnz_tot + call sm%nd%clone(smo%nd,info) + if (info == psb_success_) & + & call sm%desc_data%clone(smo%desc_data,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_as_smoother_clone diff --git a/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 new file mode 100644 index 00000000..3e5ba785 --- /dev/null +++ b/mlprec/impl/smoother/mld_s_base_smoother_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_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_s_base_smoother_mod, mld_protect_name => mld_s_base_smoother_clone + Implicit None + ! Arguments + class(mld_s_base_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_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_smoother_clone diff --git a/mlprec/impl/smoother/mld_s_jac_smoother_clone.f90 b/mlprec/impl/smoother/mld_s_jac_smoother_clone.f90 new file mode 100644 index 00000000..617d8cbc --- /dev/null +++ b/mlprec/impl/smoother/mld_s_jac_smoother_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_jac_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_s_jac_smoother, mld_protect_name => mld_s_jac_smoother_clone + + Implicit None + + ! Arguments + class(mld_s_jac_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_s_jac_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_s_jac_smoother_type) + smo%nnz_nd_tot = sm%nnz_nd_tot + call sm%nd%clone(smo%nd,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_jac_smoother_clone diff --git a/mlprec/impl/smoother/mld_z_as_smoother_clone.f90 b/mlprec/impl/smoother/mld_z_as_smoother_clone.f90 new file mode 100644 index 00000000..a1a69e00 --- /dev/null +++ b/mlprec/impl/smoother/mld_z_as_smoother_clone.f90 @@ -0,0 +1,88 @@ +!!$ +!!$ +!!$ 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_as_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_z_as_smoother, mld_protect_name => mld_z_as_smoother_clone + + Implicit None + + ! Arguments + class(mld_z_as_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_z_as_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_z_as_smoother_type) + smo%novr = sm%novr + smo%restr = sm%restr + smo%prol = sm%prol + smo%nd_nnz_tot = sm%nd_nnz_tot + call sm%nd%clone(smo%nd,info) + if (info == psb_success_) & + & call sm%desc_data%clone(smo%desc_data,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_as_smoother_clone diff --git a/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 new file mode 100644 index 00000000..b669e14a --- /dev/null +++ b/mlprec/impl/smoother/mld_z_base_smoother_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_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_z_base_smoother_mod, mld_protect_name => mld_z_base_smoother_clone + Implicit None + ! Arguments + class(mld_z_base_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_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_smoother_clone diff --git a/mlprec/impl/smoother/mld_z_jac_smoother_clone.f90 b/mlprec/impl/smoother/mld_z_jac_smoother_clone.f90 new file mode 100644 index 00000000..2ad3c2a0 --- /dev/null +++ b/mlprec/impl/smoother/mld_z_jac_smoother_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_jac_smoother_clone(sm,smout,info) + + use psb_base_mod + use mld_z_jac_smoother, mld_protect_name => mld_z_jac_smoother_clone + + Implicit None + + ! Arguments + class(mld_z_jac_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + + info=psb_success_ + call psb_erractionsave(err_act) + + allocate(mld_z_jac_smoother_type :: smout, stat=info) + if (info /= 0) then + info = psb_err_alloc_dealloc_ + goto 9999 + end if + select type(smo => smout) + type is (mld_z_jac_smoother_type) + smo%nnz_nd_tot = sm%nnz_nd_tot + call sm%nd%clone(smo%nd,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_jac_smoother_clone diff --git a/mlprec/mld_c_as_smoother.f90 b/mlprec/mld_c_as_smoother.f90 index b8186684..991887eb 100644 --- a/mlprec/mld_c_as_smoother.f90 +++ b/mlprec/mld_c_as_smoother.f90 @@ -58,6 +58,7 @@ module mld_c_as_smoother procedure, pass(sm) :: check => mld_c_as_smoother_check procedure, pass(sm) :: dump => mld_c_as_smoother_dmp procedure, pass(sm) :: build => mld_c_as_smoother_bld + procedure, pass(sm) :: clone => mld_c_as_smoother_clone procedure, pass(sm) :: apply_v => mld_c_as_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_c_as_smoother_apply procedure, pass(sm) :: free => mld_c_as_smoother_free @@ -238,6 +239,16 @@ module mld_c_as_smoother end subroutine mld_c_as_smoother_dmp end interface + interface + subroutine mld_c_as_smoother_clone(sm,smout,info) + import :: mld_c_as_smoother_type, psb_spk_, & + & mld_c_base_smoother_type, psb_ipk_ + class(mld_c_as_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_as_smoother_clone + end interface + contains function c_as_smoother_sizeof(sm) result(val) diff --git a/mlprec/mld_c_base_smoother_mod.f90 b/mlprec/mld_c_base_smoother_mod.f90 index 8fdc5845..0fb3e09e 100644 --- a/mlprec/mld_c_base_smoother_mod.f90 +++ b/mlprec/mld_c_base_smoother_mod.f90 @@ -94,6 +94,7 @@ module mld_c_base_smoother_mod contains procedure, pass(sm) :: check => mld_c_base_smoother_check procedure, pass(sm) :: dump => mld_c_base_smoother_dmp + procedure, pass(sm) :: clone => mld_c_base_smoother_clone procedure, pass(sm) :: build => mld_c_base_smoother_bld procedure, pass(sm) :: apply_v => mld_c_base_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_c_base_smoother_apply @@ -294,6 +295,21 @@ module mld_c_base_smoother_mod logical, optional, intent(in) :: smoother, solver end subroutine mld_c_base_smoother_dmp end interface + + interface + subroutine mld_c_base_smoother_clone(sm,smout,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_smoother_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_base_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_smoother_clone + end interface + contains ! diff --git a/mlprec/mld_c_jac_smoother.f90 b/mlprec/mld_c_jac_smoother.f90 index c66e91b3..410f3656 100644 --- a/mlprec/mld_c_jac_smoother.f90 +++ b/mlprec/mld_c_jac_smoother.f90 @@ -55,6 +55,7 @@ module mld_c_jac_smoother integer(psb_ipk_) :: nnz_nd_tot contains procedure, pass(sm) :: build => mld_c_jac_smoother_bld + procedure, pass(sm) :: clone => mld_c_jac_smoother_clone procedure, pass(sm) :: apply_v => mld_c_jac_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_c_jac_smoother_apply procedure, pass(sm) :: free => c_jac_smoother_free @@ -115,6 +116,16 @@ module mld_c_jac_smoother end subroutine mld_c_jac_smoother_bld end interface + interface + subroutine mld_c_jac_smoother_clone(sm,smout,info) + import :: mld_c_jac_smoother_type, psb_spk_, & + & mld_c_base_smoother_type, psb_ipk_ + class(mld_c_jac_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_jac_smoother_clone + end interface + contains diff --git a/mlprec/mld_d_as_smoother.f90 b/mlprec/mld_d_as_smoother.f90 index 7caeead9..bf0b5d00 100644 --- a/mlprec/mld_d_as_smoother.f90 +++ b/mlprec/mld_d_as_smoother.f90 @@ -58,6 +58,7 @@ module mld_d_as_smoother procedure, pass(sm) :: check => mld_d_as_smoother_check procedure, pass(sm) :: dump => mld_d_as_smoother_dmp procedure, pass(sm) :: build => mld_d_as_smoother_bld + procedure, pass(sm) :: clone => mld_d_as_smoother_clone procedure, pass(sm) :: apply_v => mld_d_as_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_d_as_smoother_apply procedure, pass(sm) :: free => mld_d_as_smoother_free @@ -238,6 +239,16 @@ module mld_d_as_smoother end subroutine mld_d_as_smoother_dmp end interface + interface + subroutine mld_d_as_smoother_clone(sm,smout,info) + import :: mld_d_as_smoother_type, psb_dpk_, & + & mld_d_base_smoother_type, psb_ipk_ + class(mld_d_as_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_as_smoother_clone + end interface + contains function d_as_smoother_sizeof(sm) result(val) diff --git a/mlprec/mld_d_base_smoother_mod.f90 b/mlprec/mld_d_base_smoother_mod.f90 index 28e3c2c4..6f7cc194 100644 --- a/mlprec/mld_d_base_smoother_mod.f90 +++ b/mlprec/mld_d_base_smoother_mod.f90 @@ -94,6 +94,7 @@ module mld_d_base_smoother_mod contains procedure, pass(sm) :: check => mld_d_base_smoother_check procedure, pass(sm) :: dump => mld_d_base_smoother_dmp + procedure, pass(sm) :: clone => mld_d_base_smoother_clone procedure, pass(sm) :: build => mld_d_base_smoother_bld procedure, pass(sm) :: apply_v => mld_d_base_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_d_base_smoother_apply @@ -294,6 +295,21 @@ module mld_d_base_smoother_mod logical, optional, intent(in) :: smoother, solver end subroutine mld_d_base_smoother_dmp end interface + + interface + subroutine mld_d_base_smoother_clone(sm,smout,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_smoother_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_base_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_smoother_clone + end interface + contains ! diff --git a/mlprec/mld_d_jac_smoother.f90 b/mlprec/mld_d_jac_smoother.f90 index 0ee8abf6..357e89c6 100644 --- a/mlprec/mld_d_jac_smoother.f90 +++ b/mlprec/mld_d_jac_smoother.f90 @@ -55,6 +55,7 @@ module mld_d_jac_smoother integer(psb_ipk_) :: nnz_nd_tot contains procedure, pass(sm) :: build => mld_d_jac_smoother_bld + procedure, pass(sm) :: clone => mld_d_jac_smoother_clone procedure, pass(sm) :: apply_v => mld_d_jac_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_d_jac_smoother_apply procedure, pass(sm) :: free => d_jac_smoother_free @@ -115,6 +116,16 @@ module mld_d_jac_smoother end subroutine mld_d_jac_smoother_bld end interface + interface + subroutine mld_d_jac_smoother_clone(sm,smout,info) + import :: mld_d_jac_smoother_type, psb_dpk_, & + & mld_d_base_smoother_type, psb_ipk_ + class(mld_d_jac_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_jac_smoother_clone + end interface + contains diff --git a/mlprec/mld_s_as_smoother.f90 b/mlprec/mld_s_as_smoother.f90 index 953abc12..4d2d84ed 100644 --- a/mlprec/mld_s_as_smoother.f90 +++ b/mlprec/mld_s_as_smoother.f90 @@ -58,6 +58,7 @@ module mld_s_as_smoother procedure, pass(sm) :: check => mld_s_as_smoother_check procedure, pass(sm) :: dump => mld_s_as_smoother_dmp procedure, pass(sm) :: build => mld_s_as_smoother_bld + procedure, pass(sm) :: clone => mld_s_as_smoother_clone procedure, pass(sm) :: apply_v => mld_s_as_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_s_as_smoother_apply procedure, pass(sm) :: free => mld_s_as_smoother_free @@ -238,6 +239,16 @@ module mld_s_as_smoother end subroutine mld_s_as_smoother_dmp end interface + interface + subroutine mld_s_as_smoother_clone(sm,smout,info) + import :: mld_s_as_smoother_type, psb_spk_, & + & mld_s_base_smoother_type, psb_ipk_ + class(mld_s_as_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_as_smoother_clone + end interface + contains function s_as_smoother_sizeof(sm) result(val) diff --git a/mlprec/mld_s_base_smoother_mod.f90 b/mlprec/mld_s_base_smoother_mod.f90 index 84883e0d..55525617 100644 --- a/mlprec/mld_s_base_smoother_mod.f90 +++ b/mlprec/mld_s_base_smoother_mod.f90 @@ -94,6 +94,7 @@ module mld_s_base_smoother_mod contains procedure, pass(sm) :: check => mld_s_base_smoother_check procedure, pass(sm) :: dump => mld_s_base_smoother_dmp + procedure, pass(sm) :: clone => mld_s_base_smoother_clone procedure, pass(sm) :: build => mld_s_base_smoother_bld procedure, pass(sm) :: apply_v => mld_s_base_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_s_base_smoother_apply @@ -294,6 +295,21 @@ module mld_s_base_smoother_mod logical, optional, intent(in) :: smoother, solver end subroutine mld_s_base_smoother_dmp end interface + + interface + subroutine mld_s_base_smoother_clone(sm,smout,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_smoother_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_base_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_smoother_clone + end interface + contains ! diff --git a/mlprec/mld_s_jac_smoother.f90 b/mlprec/mld_s_jac_smoother.f90 index 2342120e..5a95d422 100644 --- a/mlprec/mld_s_jac_smoother.f90 +++ b/mlprec/mld_s_jac_smoother.f90 @@ -55,6 +55,7 @@ module mld_s_jac_smoother integer(psb_ipk_) :: nnz_nd_tot contains procedure, pass(sm) :: build => mld_s_jac_smoother_bld + procedure, pass(sm) :: clone => mld_s_jac_smoother_clone procedure, pass(sm) :: apply_v => mld_s_jac_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_s_jac_smoother_apply procedure, pass(sm) :: free => s_jac_smoother_free @@ -115,6 +116,16 @@ module mld_s_jac_smoother end subroutine mld_s_jac_smoother_bld end interface + interface + subroutine mld_s_jac_smoother_clone(sm,smout,info) + import :: mld_s_jac_smoother_type, psb_spk_, & + & mld_s_base_smoother_type, psb_ipk_ + class(mld_s_jac_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_jac_smoother_clone + end interface + contains diff --git a/mlprec/mld_z_as_smoother.f90 b/mlprec/mld_z_as_smoother.f90 index 22078c92..5d081ff1 100644 --- a/mlprec/mld_z_as_smoother.f90 +++ b/mlprec/mld_z_as_smoother.f90 @@ -58,6 +58,7 @@ module mld_z_as_smoother procedure, pass(sm) :: check => mld_z_as_smoother_check procedure, pass(sm) :: dump => mld_z_as_smoother_dmp procedure, pass(sm) :: build => mld_z_as_smoother_bld + procedure, pass(sm) :: clone => mld_z_as_smoother_clone procedure, pass(sm) :: apply_v => mld_z_as_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_z_as_smoother_apply procedure, pass(sm) :: free => mld_z_as_smoother_free @@ -238,6 +239,16 @@ module mld_z_as_smoother end subroutine mld_z_as_smoother_dmp end interface + interface + subroutine mld_z_as_smoother_clone(sm,smout,info) + import :: mld_z_as_smoother_type, psb_dpk_, & + & mld_z_base_smoother_type, psb_ipk_ + class(mld_z_as_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_as_smoother_clone + end interface + contains function z_as_smoother_sizeof(sm) result(val) diff --git a/mlprec/mld_z_base_smoother_mod.f90 b/mlprec/mld_z_base_smoother_mod.f90 index d7a83908..882f68b5 100644 --- a/mlprec/mld_z_base_smoother_mod.f90 +++ b/mlprec/mld_z_base_smoother_mod.f90 @@ -94,6 +94,7 @@ module mld_z_base_smoother_mod contains procedure, pass(sm) :: check => mld_z_base_smoother_check procedure, pass(sm) :: dump => mld_z_base_smoother_dmp + procedure, pass(sm) :: clone => mld_z_base_smoother_clone procedure, pass(sm) :: build => mld_z_base_smoother_bld procedure, pass(sm) :: apply_v => mld_z_base_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_z_base_smoother_apply @@ -294,6 +295,21 @@ module mld_z_base_smoother_mod logical, optional, intent(in) :: smoother, solver end subroutine mld_z_base_smoother_dmp end interface + + interface + subroutine mld_z_base_smoother_clone(sm,smout,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_smoother_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_base_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), allocatable, intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_smoother_clone + end interface + contains ! diff --git a/mlprec/mld_z_jac_smoother.f90 b/mlprec/mld_z_jac_smoother.f90 index 9b8676bf..5d62897b 100644 --- a/mlprec/mld_z_jac_smoother.f90 +++ b/mlprec/mld_z_jac_smoother.f90 @@ -55,6 +55,7 @@ module mld_z_jac_smoother integer(psb_ipk_) :: nnz_nd_tot contains procedure, pass(sm) :: build => mld_z_jac_smoother_bld + procedure, pass(sm) :: clone => mld_z_jac_smoother_clone procedure, pass(sm) :: apply_v => mld_z_jac_smoother_apply_vect procedure, pass(sm) :: apply_a => mld_z_jac_smoother_apply procedure, pass(sm) :: free => z_jac_smoother_free @@ -115,6 +116,16 @@ module mld_z_jac_smoother end subroutine mld_z_jac_smoother_bld end interface + interface + subroutine mld_z_jac_smoother_clone(sm,smout,info) + import :: mld_z_jac_smoother_type, psb_dpk_, & + & mld_z_base_smoother_type, psb_ipk_ + class(mld_z_jac_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), intent(out) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_jac_smoother_clone + end interface + contains