diff --git a/mlprec/impl/smoother/Makefile b/mlprec/impl/smoother/Makefile index 6e268af2..f7b32ae9 100644 --- a/mlprec/impl/smoother/Makefile +++ b/mlprec/impl/smoother/Makefile @@ -26,6 +26,8 @@ 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_clone_settings.o \ +mld_c_base_smoother_clear_data.o \ mld_c_base_smoother_cnv.o \ mld_c_base_smoother_csetc.o \ mld_c_base_smoother_cseti.o \ @@ -65,6 +67,8 @@ 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_clone_settings.o \ +mld_d_base_smoother_clear_data.o \ mld_d_base_smoother_cnv.o \ mld_d_base_smoother_csetc.o \ mld_d_base_smoother_cseti.o \ @@ -104,6 +108,8 @@ 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_clone_settings.o \ +mld_s_base_smoother_clear_data.o \ mld_s_base_smoother_cnv.o \ mld_s_base_smoother_csetc.o \ mld_s_base_smoother_cseti.o \ @@ -143,6 +149,8 @@ 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_clone_settings.o \ +mld_z_base_smoother_clear_data.o \ mld_z_base_smoother_cnv.o \ mld_z_base_smoother_csetc.o \ mld_z_base_smoother_cseti.o \ diff --git a/mlprec/impl/smoother/mld_c_base_smoother_clear_data.f90 b/mlprec/impl/smoother/mld_c_base_smoother_clear_data.f90 new file mode 100644 index 00000000..c9371e85 --- /dev/null +++ b/mlprec/impl/smoother/mld_c_base_smoother_clear_data.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sm,info) + + use psb_base_mod + use mld_c_base_smoother_mod, mld_protect_name => mld_c_base_smoother_clear_data + Implicit None + ! Arguments + class(mld_c_base_smoother_type), intent(inout) :: sm + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_smoother_clear_data' + + call psb_erractionsave(err_act) + + info = 0 + if (allocated(sm%sv)) then + call sm%sv%clear_data(info) + if (info /= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_base_smoother_clear_data diff --git a/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 index 4b3ad865..221778b8 100644 --- a/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 +++ b/mlprec/impl/smoother/mld_c_base_smoother_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_c_base_smoother_clone(sm,smout,info) class(mld_c_base_smoother_type), allocatable, intent(inout) :: smout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_clone' + character(len=20) :: name='c_base_smoother_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/smoother/mld_c_base_smoother_clone_settings.f90 b/mlprec/impl/smoother/mld_c_base_smoother_clone_settings.f90 new file mode 100644 index 00000000..03ddfe85 --- /dev/null +++ b/mlprec/impl/smoother/mld_c_base_smoother_clone_settings.f90 @@ -0,0 +1,89 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sm,smout,info) + + use psb_base_mod + use mld_c_base_smoother_mod, mld_protect_name => mld_c_base_smoother_clone_settings + Implicit None + ! Arguments + class(mld_c_base_smoother_type), intent(inout) :: sm + class(mld_c_base_smoother_type), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_smoother_clone_settings' + + call psb_erractionsave(err_act) + + info=psb_success_ + if (same_type_as(sm,smout)) then + if (allocated(smout%sv)) then + if (.not.same_type_as(sm%sv,smout%sv)) then + call smout%sv%free(info) + if (info == 0) deallocate(smout%sv,stat=info) + end if + end if + if (info /= 0) then + info = psb_err_internal_error_ + else + if (allocated(smout%sv)) then + if (same_type_as(sm%sv,smout%sv)) then + call sm%sv%clone_settings(smout%sv,info) + else + info = psb_err_internal_error_ + end if + else + allocate(smout%sv,mold=sm%sv,stat=info) + if (info == 0) call sm%sv%clone_settings(smout%sv,info) + if (info /= 0) info = psb_err_internal_error_ + end if + end if + else + info = psb_err_internal_error_ + end if + if (info /= 0) then + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_base_smoother_clone_settings diff --git a/mlprec/impl/smoother/mld_c_base_smoother_cnv.f90 b/mlprec/impl/smoother/mld_c_base_smoother_cnv.f90 index c04a111f..a1743e86 100644 --- a/mlprec/impl/smoother/mld_c_base_smoother_cnv.f90 +++ b/mlprec/impl/smoother/mld_c_base_smoother_cnv.f90 @@ -48,7 +48,7 @@ subroutine mld_c_base_smoother_cnv(sm,info,amold,vmold,imold) class(psb_c_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_cnv' + character(len=20) :: name='c_base_smoother_cnv' call psb_erractionsave(err_act) diff --git a/mlprec/impl/smoother/mld_d_base_smoother_clear_data.f90 b/mlprec/impl/smoother/mld_d_base_smoother_clear_data.f90 new file mode 100644 index 00000000..055c328a --- /dev/null +++ b/mlprec/impl/smoother/mld_d_base_smoother_clear_data.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sm,info) + + use psb_base_mod + use mld_d_base_smoother_mod, mld_protect_name => mld_d_base_smoother_clear_data + Implicit None + ! Arguments + class(mld_d_base_smoother_type), intent(inout) :: sm + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_clear_data' + + call psb_erractionsave(err_act) + + info = 0 + if (allocated(sm%sv)) then + call sm%sv%clear_data(info) + if (info /= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_base_smoother_clear_data diff --git a/mlprec/impl/smoother/mld_d_base_smoother_clone_settings.f90 b/mlprec/impl/smoother/mld_d_base_smoother_clone_settings.f90 new file mode 100644 index 00000000..32960db8 --- /dev/null +++ b/mlprec/impl/smoother/mld_d_base_smoother_clone_settings.f90 @@ -0,0 +1,89 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sm,smout,info) + + use psb_base_mod + use mld_d_base_smoother_mod, mld_protect_name => mld_d_base_smoother_clone_settings + Implicit None + ! Arguments + class(mld_d_base_smoother_type), intent(inout) :: sm + class(mld_d_base_smoother_type), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_smoother_clone_settings' + + call psb_erractionsave(err_act) + + info=psb_success_ + if (same_type_as(sm,smout)) then + if (allocated(smout%sv)) then + if (.not.same_type_as(sm%sv,smout%sv)) then + call smout%sv%free(info) + if (info == 0) deallocate(smout%sv,stat=info) + end if + end if + if (info /= 0) then + info = psb_err_internal_error_ + else + if (allocated(smout%sv)) then + if (same_type_as(sm%sv,smout%sv)) then + call sm%sv%clone_settings(smout%sv,info) + else + info = psb_err_internal_error_ + end if + else + allocate(smout%sv,mold=sm%sv,stat=info) + if (info == 0) call sm%sv%clone_settings(smout%sv,info) + if (info /= 0) info = psb_err_internal_error_ + end if + end if + else + info = psb_err_internal_error_ + end if + if (info /= 0) then + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_base_smoother_clone_settings diff --git a/mlprec/impl/smoother/mld_s_base_smoother_clear_data.f90 b/mlprec/impl/smoother/mld_s_base_smoother_clear_data.f90 new file mode 100644 index 00000000..d92afd4f --- /dev/null +++ b/mlprec/impl/smoother/mld_s_base_smoother_clear_data.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sm,info) + + use psb_base_mod + use mld_s_base_smoother_mod, mld_protect_name => mld_s_base_smoother_clear_data + Implicit None + ! Arguments + class(mld_s_base_smoother_type), intent(inout) :: sm + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_smoother_clear_data' + + call psb_erractionsave(err_act) + + info = 0 + if (allocated(sm%sv)) then + call sm%sv%clear_data(info) + if (info /= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_base_smoother_clear_data diff --git a/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 index 231ec5a4..0efc0c67 100644 --- a/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 +++ b/mlprec/impl/smoother/mld_s_base_smoother_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_s_base_smoother_clone(sm,smout,info) class(mld_s_base_smoother_type), allocatable, intent(inout) :: smout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_clone' + character(len=20) :: name='s_base_smoother_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/smoother/mld_s_base_smoother_clone_settings.f90 b/mlprec/impl/smoother/mld_s_base_smoother_clone_settings.f90 new file mode 100644 index 00000000..ff32a8d3 --- /dev/null +++ b/mlprec/impl/smoother/mld_s_base_smoother_clone_settings.f90 @@ -0,0 +1,89 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sm,smout,info) + + use psb_base_mod + use mld_s_base_smoother_mod, mld_protect_name => mld_s_base_smoother_clone_settings + Implicit None + ! Arguments + class(mld_s_base_smoother_type), intent(inout) :: sm + class(mld_s_base_smoother_type), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_smoother_clone_settings' + + call psb_erractionsave(err_act) + + info=psb_success_ + if (same_type_as(sm,smout)) then + if (allocated(smout%sv)) then + if (.not.same_type_as(sm%sv,smout%sv)) then + call smout%sv%free(info) + if (info == 0) deallocate(smout%sv,stat=info) + end if + end if + if (info /= 0) then + info = psb_err_internal_error_ + else + if (allocated(smout%sv)) then + if (same_type_as(sm%sv,smout%sv)) then + call sm%sv%clone_settings(smout%sv,info) + else + info = psb_err_internal_error_ + end if + else + allocate(smout%sv,mold=sm%sv,stat=info) + if (info == 0) call sm%sv%clone_settings(smout%sv,info) + if (info /= 0) info = psb_err_internal_error_ + end if + end if + else + info = psb_err_internal_error_ + end if + if (info /= 0) then + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_base_smoother_clone_settings diff --git a/mlprec/impl/smoother/mld_s_base_smoother_cnv.f90 b/mlprec/impl/smoother/mld_s_base_smoother_cnv.f90 index 4dad645d..971abe38 100644 --- a/mlprec/impl/smoother/mld_s_base_smoother_cnv.f90 +++ b/mlprec/impl/smoother/mld_s_base_smoother_cnv.f90 @@ -48,7 +48,7 @@ subroutine mld_s_base_smoother_cnv(sm,info,amold,vmold,imold) class(psb_s_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_cnv' + character(len=20) :: name='s_base_smoother_cnv' call psb_erractionsave(err_act) diff --git a/mlprec/impl/smoother/mld_z_base_smoother_clear_data.f90 b/mlprec/impl/smoother/mld_z_base_smoother_clear_data.f90 new file mode 100644 index 00000000..0a9b36b7 --- /dev/null +++ b/mlprec/impl/smoother/mld_z_base_smoother_clear_data.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sm,info) + + use psb_base_mod + use mld_z_base_smoother_mod, mld_protect_name => mld_z_base_smoother_clear_data + Implicit None + ! Arguments + class(mld_z_base_smoother_type), intent(inout) :: sm + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_smoother_clear_data' + + call psb_erractionsave(err_act) + + info = 0 + if (allocated(sm%sv)) then + call sm%sv%clear_data(info) + if (info /= 0) then + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_base_smoother_clear_data diff --git a/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 b/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 index 5a0efdc8..cd7f16a2 100644 --- a/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 +++ b/mlprec/impl/smoother/mld_z_base_smoother_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_z_base_smoother_clone(sm,smout,info) class(mld_z_base_smoother_type), allocatable, intent(inout) :: smout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_clone' + character(len=20) :: name='z_base_smoother_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/smoother/mld_z_base_smoother_clone_settings.f90 b/mlprec/impl/smoother/mld_z_base_smoother_clone_settings.f90 new file mode 100644 index 00000000..7accab8e --- /dev/null +++ b/mlprec/impl/smoother/mld_z_base_smoother_clone_settings.f90 @@ -0,0 +1,89 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sm,smout,info) + + use psb_base_mod + use mld_z_base_smoother_mod, mld_protect_name => mld_z_base_smoother_clone_settings + Implicit None + ! Arguments + class(mld_z_base_smoother_type), intent(inout) :: sm + class(mld_z_base_smoother_type), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_smoother_clone_settings' + + call psb_erractionsave(err_act) + + info=psb_success_ + if (same_type_as(sm,smout)) then + if (allocated(smout%sv)) then + if (.not.same_type_as(sm%sv,smout%sv)) then + call smout%sv%free(info) + if (info == 0) deallocate(smout%sv,stat=info) + end if + end if + if (info /= 0) then + info = psb_err_internal_error_ + else + if (allocated(smout%sv)) then + if (same_type_as(sm%sv,smout%sv)) then + call sm%sv%clone_settings(smout%sv,info) + else + info = psb_err_internal_error_ + end if + else + allocate(smout%sv,mold=sm%sv,stat=info) + if (info == 0) call sm%sv%clone_settings(smout%sv,info) + if (info /= 0) info = psb_err_internal_error_ + end if + end if + else + info = psb_err_internal_error_ + end if + if (info /= 0) then + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_base_smoother_clone_settings diff --git a/mlprec/impl/smoother/mld_z_base_smoother_cnv.f90 b/mlprec/impl/smoother/mld_z_base_smoother_cnv.f90 index aed4fe2e..b0a006bf 100644 --- a/mlprec/impl/smoother/mld_z_base_smoother_cnv.f90 +++ b/mlprec/impl/smoother/mld_z_base_smoother_cnv.f90 @@ -48,7 +48,7 @@ subroutine mld_z_base_smoother_cnv(sm,info,amold,vmold,imold) class(psb_z_base_vect_type), intent(in), optional :: vmold class(psb_i_base_vect_type), intent(in), optional :: imold integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_smoother_cnv' + character(len=20) :: name='z_base_smoother_cnv' call psb_erractionsave(err_act) diff --git a/mlprec/impl/solver/Makefile b/mlprec/impl/solver/Makefile index d688c6e0..7091fc90 100644 --- a/mlprec/impl/solver/Makefile +++ b/mlprec/impl/solver/Makefile @@ -12,6 +12,8 @@ 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_clone_settings.o \ +mld_c_base_solver_clear_data.o \ mld_c_base_solver_cnv.o \ mld_c_base_solver_csetc.o \ mld_c_base_solver_cseti.o \ @@ -54,6 +56,8 @@ 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_clone_settings.o \ +mld_d_base_solver_clear_data.o \ mld_d_base_solver_cnv.o \ mld_d_base_solver_csetc.o \ mld_d_base_solver_cseti.o \ @@ -96,6 +100,8 @@ 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_clone_settings.o \ +mld_s_base_solver_clear_data.o \ mld_s_base_solver_cnv.o \ mld_s_base_solver_csetc.o \ mld_s_base_solver_cseti.o \ @@ -138,6 +144,8 @@ 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_clone_settings.o \ +mld_z_base_solver_clear_data.o \ mld_z_base_solver_cnv.o \ mld_z_base_solver_csetc.o \ mld_z_base_solver_cseti.o \ diff --git a/mlprec/impl/solver/mld_c_base_solver_clear_data.f90 b/mlprec/impl/solver/mld_c_base_solver_clear_data.f90 new file mode 100644 index 00000000..53da468c --- /dev/null +++ b/mlprec/impl/solver/mld_c_base_solver_clear_data.f90 @@ -0,0 +1,60 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sv,info) + + use psb_base_mod + use mld_c_base_solver_mod, mld_protect_name => mld_c_base_solver_clear_data + Implicit None + ! Arguments + class(mld_c_base_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_solver_clear_data' + + call psb_erractionsave(err_act) + info = 0 + + ! Do nothing + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_base_solver_clear_data diff --git a/mlprec/impl/solver/mld_c_base_solver_clone.f90 b/mlprec/impl/solver/mld_c_base_solver_clone.f90 index fc158c5c..666d2d39 100644 --- a/mlprec/impl/solver/mld_c_base_solver_clone.f90 +++ b/mlprec/impl/solver/mld_c_base_solver_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_c_base_solver_clone(sv,svout,info) class(mld_c_base_solver_type), allocatable, intent(inout) :: svout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_solver_clone' + character(len=20) :: name='c_base_solver_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/solver/mld_c_base_solver_clone_settings.f90 b/mlprec/impl/solver/mld_c_base_solver_clone_settings.f90 new file mode 100644 index 00000000..d9975d15 --- /dev/null +++ b/mlprec/impl/solver/mld_c_base_solver_clone_settings.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sv,svout,info) + + use psb_base_mod + use mld_c_base_solver_mod, mld_protect_name => mld_c_base_solver_clone_settings + Implicit None + ! Arguments + class(mld_c_base_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='c_base_solver_clone' + + call psb_erractionsave(err_act) + + if (same_type_as(sv,svout)) then + ! Do nothing + else + + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_base_solver_clone diff --git a/mlprec/impl/solver/mld_d_base_solver_clear_data.f90 b/mlprec/impl/solver/mld_d_base_solver_clear_data.f90 new file mode 100644 index 00000000..cbd0996c --- /dev/null +++ b/mlprec/impl/solver/mld_d_base_solver_clear_data.f90 @@ -0,0 +1,60 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sv,info) + + use psb_base_mod + use mld_d_base_solver_mod, mld_protect_name => mld_d_base_solver_clear_data + Implicit None + ! Arguments + class(mld_d_base_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='d_base_solver_clear_data' + + call psb_erractionsave(err_act) + info = 0 + + ! Do nothing + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_base_solver_clear_data diff --git a/mlprec/impl/solver/mld_d_base_solver_clone_settings.f90 b/mlprec/impl/solver/mld_d_base_solver_clone_settings.f90 new file mode 100644 index 00000000..4c593ea0 --- /dev/null +++ b/mlprec/impl/solver/mld_d_base_solver_clone_settings.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sv,svout,info) + + use psb_base_mod + use mld_d_base_solver_mod, mld_protect_name => mld_d_base_solver_clone_settings + Implicit None + ! Arguments + class(mld_d_base_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), intent(inout) :: 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) + + if (same_type_as(sv,svout)) then + ! Do nothing + else + + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_base_solver_clone diff --git a/mlprec/impl/solver/mld_s_base_solver_clear_data.f90 b/mlprec/impl/solver/mld_s_base_solver_clear_data.f90 new file mode 100644 index 00000000..1954d507 --- /dev/null +++ b/mlprec/impl/solver/mld_s_base_solver_clear_data.f90 @@ -0,0 +1,60 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sv,info) + + use psb_base_mod + use mld_s_base_solver_mod, mld_protect_name => mld_s_base_solver_clear_data + Implicit None + ! Arguments + class(mld_s_base_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_solver_clear_data' + + call psb_erractionsave(err_act) + info = 0 + + ! Do nothing + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_base_solver_clear_data diff --git a/mlprec/impl/solver/mld_s_base_solver_clone.f90 b/mlprec/impl/solver/mld_s_base_solver_clone.f90 index 6e90e1af..7b1da808 100644 --- a/mlprec/impl/solver/mld_s_base_solver_clone.f90 +++ b/mlprec/impl/solver/mld_s_base_solver_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_s_base_solver_clone(sv,svout,info) class(mld_s_base_solver_type), allocatable, intent(inout) :: svout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_solver_clone' + character(len=20) :: name='s_base_solver_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/solver/mld_s_base_solver_clone_settings.f90 b/mlprec/impl/solver/mld_s_base_solver_clone_settings.f90 new file mode 100644 index 00000000..3e43b931 --- /dev/null +++ b/mlprec/impl/solver/mld_s_base_solver_clone_settings.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sv,svout,info) + + use psb_base_mod + use mld_s_base_solver_mod, mld_protect_name => mld_s_base_solver_clone_settings + Implicit None + ! Arguments + class(mld_s_base_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='s_base_solver_clone' + + call psb_erractionsave(err_act) + + if (same_type_as(sv,svout)) then + ! Do nothing + else + + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_base_solver_clone diff --git a/mlprec/impl/solver/mld_z_base_solver_clear_data.f90 b/mlprec/impl/solver/mld_z_base_solver_clear_data.f90 new file mode 100644 index 00000000..a28cee5c --- /dev/null +++ b/mlprec/impl/solver/mld_z_base_solver_clear_data.f90 @@ -0,0 +1,60 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_clear_data(sv,info) + + use psb_base_mod + use mld_z_base_solver_mod, mld_protect_name => mld_z_base_solver_clear_data + Implicit None + ! Arguments + class(mld_z_base_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_solver_clear_data' + + call psb_erractionsave(err_act) + info = 0 + + ! Do nothing + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_base_solver_clear_data diff --git a/mlprec/impl/solver/mld_z_base_solver_clone.f90 b/mlprec/impl/solver/mld_z_base_solver_clone.f90 index 7deb75eb..8c73d112 100644 --- a/mlprec/impl/solver/mld_z_base_solver_clone.f90 +++ b/mlprec/impl/solver/mld_z_base_solver_clone.f90 @@ -45,7 +45,7 @@ subroutine mld_z_base_solver_clone(sv,svout,info) class(mld_z_base_solver_type), allocatable, intent(inout) :: svout integer(psb_ipk_), intent(out) :: info integer(psb_ipk_) :: err_act - character(len=20) :: name='d_base_solver_clone' + character(len=20) :: name='z_base_solver_clone' call psb_erractionsave(err_act) diff --git a/mlprec/impl/solver/mld_z_base_solver_clone_settings.f90 b/mlprec/impl/solver/mld_z_base_solver_clone_settings.f90 new file mode 100644 index 00000000..fd32fedc --- /dev/null +++ b/mlprec/impl/solver/mld_z_base_solver_clone_settings.f90 @@ -0,0 +1,67 @@ +! +! +! MLD2P4 version 2.2 +! MultiLevel Domain Decomposition Parallel Preconditioners Package +! based on PSBLAS (Parallel Sparse BLAS version 3.5) +! +! (C) Copyright 2008-2018 +! +! Salvatore Filippone +! Pasqua D'Ambra +! Daniela di Serafino +! +! 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_settings(sv,svout,info) + + use psb_base_mod + use mld_z_base_solver_mod, mld_protect_name => mld_z_base_solver_clone_settings + Implicit None + ! Arguments + class(mld_z_base_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + integer(psb_ipk_) :: err_act + character(len=20) :: name='z_base_solver_clone' + + call psb_erractionsave(err_act) + + if (same_type_as(sv,svout)) then + ! Do nothing + else + + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end if + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_base_solver_clone diff --git a/mlprec/mld_c_base_smoother_mod.f90 b/mlprec/mld_c_base_smoother_mod.f90 index ed7b0720..0a80f1b9 100644 --- a/mlprec/mld_c_base_smoother_mod.f90 +++ b/mlprec/mld_c_base_smoother_mod.f90 @@ -106,15 +106,17 @@ module mld_c_base_smoother_mod type mld_c_base_smoother_type class(mld_c_base_solver_type), allocatable :: sv contains + procedure, pass(sm) :: apply_v => mld_c_base_smoother_apply_vect + procedure, pass(sm) :: apply_a => mld_c_base_smoother_apply + generic, public :: apply => apply_a, apply_v 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) :: cnv => mld_c_base_smoother_cnv - procedure, pass(sm) :: apply_v => mld_c_base_smoother_apply_vect - procedure, pass(sm) :: apply_a => mld_c_base_smoother_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sm) :: free => mld_c_base_smoother_free + procedure, pass(sm) :: clone_settings => mld_c_base_smoother_clone_settings + procedure, pass(sm) :: clear_data => mld_c_base_smoother_clear_data procedure, pass(sm) :: cseti => mld_c_base_smoother_cseti procedure, pass(sm) :: csetc => mld_c_base_smoother_csetc procedure, pass(sm) :: csetr => mld_c_base_smoother_csetr @@ -309,7 +311,33 @@ module mld_c_base_smoother_mod integer(psb_ipk_), intent(out) :: info end subroutine mld_c_base_smoother_clone end interface - + + interface + subroutine mld_c_base_smoother_clone_settings(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), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_smoother_clone_settings + end interface + + interface + subroutine mld_c_base_smoother_clear_data(sm,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_smoother_clear_data + end interface contains ! diff --git a/mlprec/mld_c_base_solver_mod.f90 b/mlprec/mld_c_base_solver_mod.f90 index fabc755f..bc250976 100644 --- a/mlprec/mld_c_base_solver_mod.f90 +++ b/mlprec/mld_c_base_solver_mod.f90 @@ -87,14 +87,16 @@ module mld_c_base_solver_mod type mld_c_base_solver_type contains + procedure, pass(sv) :: apply_v => mld_c_base_solver_apply_vect + procedure, pass(sv) :: apply_a => mld_c_base_solver_apply + generic, public :: apply => apply_a, apply_v 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) :: clone_settings => mld_c_base_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_c_base_solver_clear_data procedure, pass(sv) :: build => mld_c_base_solver_bld procedure, pass(sv) :: cnv => mld_c_base_solver_cnv - procedure, pass(sv) :: apply_v => mld_c_base_solver_apply_vect - procedure, pass(sv) :: apply_a => mld_c_base_solver_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sv) :: free => mld_c_base_solver_free procedure, pass(sv) :: cseti => mld_c_base_solver_cseti procedure, pass(sv) :: csetc => mld_c_base_solver_csetc @@ -298,7 +300,6 @@ module mld_c_base_solver_mod 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, & @@ -313,7 +314,32 @@ module mld_c_base_solver_mod end subroutine mld_c_base_solver_clone end interface + interface + subroutine mld_c_base_solver_clone_settings(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), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_solver_clone_settings + end interface + interface + subroutine mld_c_base_solver_clear_data(sv,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_base_solver_clear_data + end interface contains ! diff --git a/mlprec/mld_d_base_smoother_mod.f90 b/mlprec/mld_d_base_smoother_mod.f90 index 5bc5edd4..755a982d 100644 --- a/mlprec/mld_d_base_smoother_mod.f90 +++ b/mlprec/mld_d_base_smoother_mod.f90 @@ -106,15 +106,17 @@ module mld_d_base_smoother_mod type mld_d_base_smoother_type class(mld_d_base_solver_type), allocatable :: sv contains + procedure, pass(sm) :: apply_v => mld_d_base_smoother_apply_vect + procedure, pass(sm) :: apply_a => mld_d_base_smoother_apply + generic, public :: apply => apply_a, apply_v 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) :: cnv => mld_d_base_smoother_cnv - procedure, pass(sm) :: apply_v => mld_d_base_smoother_apply_vect - procedure, pass(sm) :: apply_a => mld_d_base_smoother_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sm) :: free => mld_d_base_smoother_free + procedure, pass(sm) :: clone_settings => mld_d_base_smoother_clone_settings + procedure, pass(sm) :: clear_data => mld_d_base_smoother_clear_data procedure, pass(sm) :: cseti => mld_d_base_smoother_cseti procedure, pass(sm) :: csetc => mld_d_base_smoother_csetc procedure, pass(sm) :: csetr => mld_d_base_smoother_csetr @@ -309,7 +311,33 @@ module mld_d_base_smoother_mod integer(psb_ipk_), intent(out) :: info end subroutine mld_d_base_smoother_clone end interface - + + interface + subroutine mld_d_base_smoother_clone_settings(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), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_smoother_clone_settings + end interface + + interface + subroutine mld_d_base_smoother_clear_data(sm,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_smoother_clear_data + end interface contains ! diff --git a/mlprec/mld_d_base_solver_mod.f90 b/mlprec/mld_d_base_solver_mod.f90 index 426c738a..9a56ce6b 100644 --- a/mlprec/mld_d_base_solver_mod.f90 +++ b/mlprec/mld_d_base_solver_mod.f90 @@ -87,14 +87,16 @@ module mld_d_base_solver_mod type mld_d_base_solver_type contains + procedure, pass(sv) :: apply_v => mld_d_base_solver_apply_vect + procedure, pass(sv) :: apply_a => mld_d_base_solver_apply + generic, public :: apply => apply_a, apply_v 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) :: clone_settings => mld_d_base_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_d_base_solver_clear_data procedure, pass(sv) :: build => mld_d_base_solver_bld procedure, pass(sv) :: cnv => mld_d_base_solver_cnv - procedure, pass(sv) :: apply_v => mld_d_base_solver_apply_vect - procedure, pass(sv) :: apply_a => mld_d_base_solver_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sv) :: free => mld_d_base_solver_free procedure, pass(sv) :: cseti => mld_d_base_solver_cseti procedure, pass(sv) :: csetc => mld_d_base_solver_csetc @@ -298,7 +300,6 @@ module mld_d_base_solver_mod 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, & @@ -313,7 +314,32 @@ module mld_d_base_solver_mod end subroutine mld_d_base_solver_clone end interface + interface + subroutine mld_d_base_solver_clone_settings(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), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_solver_clone_settings + end interface + interface + subroutine mld_d_base_solver_clear_data(sv,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_base_solver_clear_data + end interface contains ! diff --git a/mlprec/mld_s_base_smoother_mod.f90 b/mlprec/mld_s_base_smoother_mod.f90 index 2ac5eab2..9d5e7b67 100644 --- a/mlprec/mld_s_base_smoother_mod.f90 +++ b/mlprec/mld_s_base_smoother_mod.f90 @@ -106,15 +106,17 @@ module mld_s_base_smoother_mod type mld_s_base_smoother_type class(mld_s_base_solver_type), allocatable :: sv contains + procedure, pass(sm) :: apply_v => mld_s_base_smoother_apply_vect + procedure, pass(sm) :: apply_a => mld_s_base_smoother_apply + generic, public :: apply => apply_a, apply_v 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) :: cnv => mld_s_base_smoother_cnv - procedure, pass(sm) :: apply_v => mld_s_base_smoother_apply_vect - procedure, pass(sm) :: apply_a => mld_s_base_smoother_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sm) :: free => mld_s_base_smoother_free + procedure, pass(sm) :: clone_settings => mld_s_base_smoother_clone_settings + procedure, pass(sm) :: clear_data => mld_s_base_smoother_clear_data procedure, pass(sm) :: cseti => mld_s_base_smoother_cseti procedure, pass(sm) :: csetc => mld_s_base_smoother_csetc procedure, pass(sm) :: csetr => mld_s_base_smoother_csetr @@ -309,7 +311,33 @@ module mld_s_base_smoother_mod integer(psb_ipk_), intent(out) :: info end subroutine mld_s_base_smoother_clone end interface - + + interface + subroutine mld_s_base_smoother_clone_settings(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), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_smoother_clone_settings + end interface + + interface + subroutine mld_s_base_smoother_clear_data(sm,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_smoother_clear_data + end interface contains ! diff --git a/mlprec/mld_s_base_solver_mod.f90 b/mlprec/mld_s_base_solver_mod.f90 index 92f3502c..3df02c35 100644 --- a/mlprec/mld_s_base_solver_mod.f90 +++ b/mlprec/mld_s_base_solver_mod.f90 @@ -87,14 +87,16 @@ module mld_s_base_solver_mod type mld_s_base_solver_type contains + procedure, pass(sv) :: apply_v => mld_s_base_solver_apply_vect + procedure, pass(sv) :: apply_a => mld_s_base_solver_apply + generic, public :: apply => apply_a, apply_v 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) :: clone_settings => mld_s_base_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_s_base_solver_clear_data procedure, pass(sv) :: build => mld_s_base_solver_bld procedure, pass(sv) :: cnv => mld_s_base_solver_cnv - procedure, pass(sv) :: apply_v => mld_s_base_solver_apply_vect - procedure, pass(sv) :: apply_a => mld_s_base_solver_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sv) :: free => mld_s_base_solver_free procedure, pass(sv) :: cseti => mld_s_base_solver_cseti procedure, pass(sv) :: csetc => mld_s_base_solver_csetc @@ -298,7 +300,6 @@ module mld_s_base_solver_mod 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, & @@ -313,7 +314,32 @@ module mld_s_base_solver_mod end subroutine mld_s_base_solver_clone end interface + interface + subroutine mld_s_base_solver_clone_settings(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), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_solver_clone_settings + end interface + interface + subroutine mld_s_base_solver_clear_data(sv,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_base_solver_clear_data + end interface contains ! diff --git a/mlprec/mld_z_base_smoother_mod.f90 b/mlprec/mld_z_base_smoother_mod.f90 index dce0b42d..4d61e26d 100644 --- a/mlprec/mld_z_base_smoother_mod.f90 +++ b/mlprec/mld_z_base_smoother_mod.f90 @@ -106,15 +106,17 @@ module mld_z_base_smoother_mod type mld_z_base_smoother_type class(mld_z_base_solver_type), allocatable :: sv contains + procedure, pass(sm) :: apply_v => mld_z_base_smoother_apply_vect + procedure, pass(sm) :: apply_a => mld_z_base_smoother_apply + generic, public :: apply => apply_a, apply_v 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) :: cnv => mld_z_base_smoother_cnv - procedure, pass(sm) :: apply_v => mld_z_base_smoother_apply_vect - procedure, pass(sm) :: apply_a => mld_z_base_smoother_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sm) :: free => mld_z_base_smoother_free + procedure, pass(sm) :: clone_settings => mld_z_base_smoother_clone_settings + procedure, pass(sm) :: clear_data => mld_z_base_smoother_clear_data procedure, pass(sm) :: cseti => mld_z_base_smoother_cseti procedure, pass(sm) :: csetc => mld_z_base_smoother_csetc procedure, pass(sm) :: csetr => mld_z_base_smoother_csetr @@ -309,7 +311,33 @@ module mld_z_base_smoother_mod integer(psb_ipk_), intent(out) :: info end subroutine mld_z_base_smoother_clone end interface - + + interface + subroutine mld_z_base_smoother_clone_settings(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), intent(inout) :: smout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_smoother_clone_settings + end interface + + interface + subroutine mld_z_base_smoother_clear_data(sm,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_smoother_clear_data + end interface contains ! diff --git a/mlprec/mld_z_base_solver_mod.f90 b/mlprec/mld_z_base_solver_mod.f90 index 4ed04403..3988d97e 100644 --- a/mlprec/mld_z_base_solver_mod.f90 +++ b/mlprec/mld_z_base_solver_mod.f90 @@ -87,14 +87,16 @@ module mld_z_base_solver_mod type mld_z_base_solver_type contains + procedure, pass(sv) :: apply_v => mld_z_base_solver_apply_vect + procedure, pass(sv) :: apply_a => mld_z_base_solver_apply + generic, public :: apply => apply_a, apply_v 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) :: clone_settings => mld_z_base_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_z_base_solver_clear_data procedure, pass(sv) :: build => mld_z_base_solver_bld procedure, pass(sv) :: cnv => mld_z_base_solver_cnv - procedure, pass(sv) :: apply_v => mld_z_base_solver_apply_vect - procedure, pass(sv) :: apply_a => mld_z_base_solver_apply - generic, public :: apply => apply_a, apply_v procedure, pass(sv) :: free => mld_z_base_solver_free procedure, pass(sv) :: cseti => mld_z_base_solver_cseti procedure, pass(sv) :: csetc => mld_z_base_solver_csetc @@ -298,7 +300,6 @@ module mld_z_base_solver_mod 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, & @@ -313,7 +314,32 @@ module mld_z_base_solver_mod end subroutine mld_z_base_solver_clone end interface + interface + subroutine mld_z_base_solver_clone_settings(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), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_solver_clone_settings + end interface + interface + subroutine mld_z_base_solver_clear_data(sv,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 + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_base_solver_clear_data + end interface contains !