From d55dd1f21b22f8c7e46395d7110083b8a1532cc0 Mon Sep 17 00:00:00 2001 From: Salvatore Filippone Date: Tue, 12 May 2020 21:57:11 +0200 Subject: [PATCH] New clear_data and clone_settings methods for ILU --- mlprec/impl/solver/Makefile | 8 +++ .../solver/mld_c_ilu_solver_clear_data.f90 | 67 ++++++++++++++++++ .../mld_c_ilu_solver_clone_settings.f90 | 70 +++++++++++++++++++ .../solver/mld_d_ilu_solver_clear_data.f90 | 67 ++++++++++++++++++ .../mld_d_ilu_solver_clone_settings.f90 | 70 +++++++++++++++++++ .../solver/mld_s_ilu_solver_clear_data.f90 | 67 ++++++++++++++++++ .../mld_s_ilu_solver_clone_settings.f90 | 70 +++++++++++++++++++ .../solver/mld_z_ilu_solver_clear_data.f90 | 67 ++++++++++++++++++ .../mld_z_ilu_solver_clone_settings.f90 | 70 +++++++++++++++++++ mlprec/mld_c_ilu_solver.f90 | 29 ++++++++ mlprec/mld_d_ilu_solver.f90 | 29 ++++++++ mlprec/mld_s_ilu_solver.f90 | 29 ++++++++ mlprec/mld_z_ilu_solver.f90 | 29 ++++++++ 13 files changed, 672 insertions(+) create mode 100644 mlprec/impl/solver/mld_c_ilu_solver_clear_data.f90 create mode 100644 mlprec/impl/solver/mld_c_ilu_solver_clone_settings.f90 create mode 100644 mlprec/impl/solver/mld_d_ilu_solver_clear_data.f90 create mode 100644 mlprec/impl/solver/mld_d_ilu_solver_clone_settings.f90 create mode 100644 mlprec/impl/solver/mld_s_ilu_solver_clear_data.f90 create mode 100644 mlprec/impl/solver/mld_s_ilu_solver_clone_settings.f90 create mode 100644 mlprec/impl/solver/mld_z_ilu_solver_clear_data.f90 create mode 100644 mlprec/impl/solver/mld_z_ilu_solver_clone_settings.f90 diff --git a/mlprec/impl/solver/Makefile b/mlprec/impl/solver/Makefile index 28237d0a..f367d4e1 100644 --- a/mlprec/impl/solver/Makefile +++ b/mlprec/impl/solver/Makefile @@ -46,6 +46,8 @@ mld_c_ilu_solver_apply.o \ mld_c_ilu_solver_apply_vect.o \ mld_c_ilu_solver_bld.o \ mld_c_ilu_solver_clone.o \ +mld_c_ilu_solver_clear_data.o \ +mld_c_ilu_solver_clone_settings.o \ mld_c_ilu_solver_cnv.o \ mld_c_ilu_solver_dmp.o \ mld_cilu0_fact.o \ @@ -93,6 +95,8 @@ mld_d_ilu_solver_apply.o \ mld_d_ilu_solver_apply_vect.o \ mld_d_ilu_solver_bld.o \ mld_d_ilu_solver_clone.o \ +mld_d_ilu_solver_clear_data.o \ +mld_d_ilu_solver_clone_settings.o \ mld_d_ilu_solver_cnv.o \ mld_d_ilu_solver_dmp.o \ mld_dilu0_fact.o \ @@ -140,6 +144,8 @@ mld_s_ilu_solver_apply.o \ mld_s_ilu_solver_apply_vect.o \ mld_s_ilu_solver_bld.o \ mld_s_ilu_solver_clone.o \ +mld_s_ilu_solver_clear_data.o \ +mld_s_ilu_solver_clone_settings.o \ mld_s_ilu_solver_cnv.o \ mld_s_ilu_solver_dmp.o \ mld_silu0_fact.o \ @@ -183,6 +189,8 @@ mld_z_bwgs_solver_apply_vect.o \ mld_z_id_solver_apply.o \ mld_z_id_solver_apply_vect.o \ mld_z_id_solver_clone.o \ +mld_z_ilu_solver_clear_data.o \ +mld_z_ilu_solver_clone_settings.o \ mld_z_ilu_solver_apply.o \ mld_z_ilu_solver_apply_vect.o \ mld_z_ilu_solver_bld.o \ diff --git a/mlprec/impl/solver/mld_c_ilu_solver_clear_data.f90 b/mlprec/impl/solver/mld_c_ilu_solver_clear_data.f90 new file mode 100644 index 00000000..40b3e8cd --- /dev/null +++ b/mlprec/impl/solver/mld_c_ilu_solver_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_ilu_solver_clear_data(sv,info) + + use psb_base_mod + use mld_c_ilu_solver, mld_protect_name => mld_c_ilu_solver_clear_data + + Implicit None + + ! Arguments + class(mld_c_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + call sv%l%free() + call sv%u%free() + call sv%dv%free(info) + if ((info==0).and.allocated(sv%d)) deallocate(sv%d,stat=info) + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_ilu_solver_clear_data diff --git a/mlprec/impl/solver/mld_c_ilu_solver_clone_settings.f90 b/mlprec/impl/solver/mld_c_ilu_solver_clone_settings.f90 new file mode 100644 index 00000000..3e25e4e4 --- /dev/null +++ b/mlprec/impl/solver/mld_c_ilu_solver_clone_settings.f90 @@ -0,0 +1,70 @@ +! +! +! 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_ilu_solver_clone_settings(sv,svout,info) + + use psb_base_mod + use mld_c_ilu_solver, mld_protect_name => mld_c_ilu_solver_clone_settings + Implicit None + ! Arguments + class(mld_c_ilu_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_ilu_solver_clone_settings' + + call psb_erractionsave(err_act) + + select type(svout) + class is(mld_c_ilu_solver_type) + svout%fact_type = sv%fact_type + svout%fill_in = sv%fill_in + svout%thresh = sv%thresh + + class default + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_c_ilu_solver_clone_settings diff --git a/mlprec/impl/solver/mld_d_ilu_solver_clear_data.f90 b/mlprec/impl/solver/mld_d_ilu_solver_clear_data.f90 new file mode 100644 index 00000000..11ce8e6d --- /dev/null +++ b/mlprec/impl/solver/mld_d_ilu_solver_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_ilu_solver_clear_data(sv,info) + + use psb_base_mod + use mld_d_ilu_solver, mld_protect_name => mld_d_ilu_solver_clear_data + + Implicit None + + ! Arguments + class(mld_d_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + call sv%l%free() + call sv%u%free() + call sv%dv%free(info) + if ((info==0).and.allocated(sv%d)) deallocate(sv%d,stat=info) + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_ilu_solver_clear_data diff --git a/mlprec/impl/solver/mld_d_ilu_solver_clone_settings.f90 b/mlprec/impl/solver/mld_d_ilu_solver_clone_settings.f90 new file mode 100644 index 00000000..8ab93e13 --- /dev/null +++ b/mlprec/impl/solver/mld_d_ilu_solver_clone_settings.f90 @@ -0,0 +1,70 @@ +! +! +! 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_ilu_solver_clone_settings(sv,svout,info) + + use psb_base_mod + use mld_d_ilu_solver, mld_protect_name => mld_d_ilu_solver_clone_settings + Implicit None + ! Arguments + class(mld_d_ilu_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_ilu_solver_clone_settings' + + call psb_erractionsave(err_act) + + select type(svout) + class is(mld_d_ilu_solver_type) + svout%fact_type = sv%fact_type + svout%fill_in = sv%fill_in + svout%thresh = sv%thresh + + class default + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_d_ilu_solver_clone_settings diff --git a/mlprec/impl/solver/mld_s_ilu_solver_clear_data.f90 b/mlprec/impl/solver/mld_s_ilu_solver_clear_data.f90 new file mode 100644 index 00000000..19f43c0e --- /dev/null +++ b/mlprec/impl/solver/mld_s_ilu_solver_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_ilu_solver_clear_data(sv,info) + + use psb_base_mod + use mld_s_ilu_solver, mld_protect_name => mld_s_ilu_solver_clear_data + + Implicit None + + ! Arguments + class(mld_s_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + call sv%l%free() + call sv%u%free() + call sv%dv%free(info) + if ((info==0).and.allocated(sv%d)) deallocate(sv%d,stat=info) + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_ilu_solver_clear_data diff --git a/mlprec/impl/solver/mld_s_ilu_solver_clone_settings.f90 b/mlprec/impl/solver/mld_s_ilu_solver_clone_settings.f90 new file mode 100644 index 00000000..c918bde7 --- /dev/null +++ b/mlprec/impl/solver/mld_s_ilu_solver_clone_settings.f90 @@ -0,0 +1,70 @@ +! +! +! 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_ilu_solver_clone_settings(sv,svout,info) + + use psb_base_mod + use mld_s_ilu_solver, mld_protect_name => mld_s_ilu_solver_clone_settings + Implicit None + ! Arguments + class(mld_s_ilu_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_ilu_solver_clone_settings' + + call psb_erractionsave(err_act) + + select type(svout) + class is(mld_s_ilu_solver_type) + svout%fact_type = sv%fact_type + svout%fill_in = sv%fill_in + svout%thresh = sv%thresh + + class default + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_s_ilu_solver_clone_settings diff --git a/mlprec/impl/solver/mld_z_ilu_solver_clear_data.f90 b/mlprec/impl/solver/mld_z_ilu_solver_clear_data.f90 new file mode 100644 index 00000000..7d5e91d3 --- /dev/null +++ b/mlprec/impl/solver/mld_z_ilu_solver_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_ilu_solver_clear_data(sv,info) + + use psb_base_mod + use mld_z_ilu_solver, mld_protect_name => mld_z_ilu_solver_clear_data + + Implicit None + + ! Arguments + class(mld_z_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + ! Local variables + integer(psb_ipk_) :: err_act + + info=psb_success_ + call psb_erractionsave(err_act) + + call sv%l%free() + call sv%u%free() + call sv%dv%free(info) + if ((info==0).and.allocated(sv%d)) deallocate(sv%d,stat=info) + + if (info /= 0) goto 9999 + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_ilu_solver_clear_data diff --git a/mlprec/impl/solver/mld_z_ilu_solver_clone_settings.f90 b/mlprec/impl/solver/mld_z_ilu_solver_clone_settings.f90 new file mode 100644 index 00000000..9ba84b60 --- /dev/null +++ b/mlprec/impl/solver/mld_z_ilu_solver_clone_settings.f90 @@ -0,0 +1,70 @@ +! +! +! 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_ilu_solver_clone_settings(sv,svout,info) + + use psb_base_mod + use mld_z_ilu_solver, mld_protect_name => mld_z_ilu_solver_clone_settings + Implicit None + ! Arguments + class(mld_z_ilu_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_ilu_solver_clone_settings' + + call psb_erractionsave(err_act) + + select type(svout) + class is(mld_z_ilu_solver_type) + svout%fact_type = sv%fact_type + svout%fill_in = sv%fill_in + svout%thresh = sv%thresh + + class default + info = psb_err_internal_error_ + call psb_errpush(info,name) + goto 9999 + end select + + call psb_erractionrestore(err_act) + return + +9999 call psb_error_handler(err_act) + + return +end subroutine mld_z_ilu_solver_clone_settings diff --git a/mlprec/mld_c_ilu_solver.f90 b/mlprec/mld_c_ilu_solver.f90 index e236686d..e8ab8f9c 100644 --- a/mlprec/mld_c_ilu_solver.f90 +++ b/mlprec/mld_c_ilu_solver.f90 @@ -70,6 +70,8 @@ module mld_c_ilu_solver procedure, pass(sv) :: dump => mld_c_ilu_solver_dmp procedure, pass(sv) :: check => c_ilu_solver_check procedure, pass(sv) :: clone => mld_c_ilu_solver_clone + procedure, pass(sv) :: clone_settings => mld_c_ilu_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_c_ilu_solver_clear_data procedure, pass(sv) :: build => mld_c_ilu_solver_bld procedure, pass(sv) :: cnv => mld_c_ilu_solver_cnv procedure, pass(sv) :: apply_v => mld_c_ilu_solver_apply_vect @@ -196,6 +198,33 @@ module mld_c_ilu_solver end subroutine mld_c_ilu_solver_clone end interface + interface + subroutine mld_c_ilu_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, mld_c_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_ilu_solver_type), intent(inout) :: sv + class(mld_c_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_ilu_solver_clone_settings + end interface + + interface + subroutine mld_c_ilu_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_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_c_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + end subroutine mld_c_ilu_solver_clear_data + end interface + contains subroutine c_ilu_solver_default(sv) diff --git a/mlprec/mld_d_ilu_solver.f90 b/mlprec/mld_d_ilu_solver.f90 index 9d8eec9a..b2ff7a0b 100644 --- a/mlprec/mld_d_ilu_solver.f90 +++ b/mlprec/mld_d_ilu_solver.f90 @@ -70,6 +70,8 @@ module mld_d_ilu_solver procedure, pass(sv) :: dump => mld_d_ilu_solver_dmp procedure, pass(sv) :: check => d_ilu_solver_check procedure, pass(sv) :: clone => mld_d_ilu_solver_clone + procedure, pass(sv) :: clone_settings => mld_d_ilu_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_d_ilu_solver_clear_data procedure, pass(sv) :: build => mld_d_ilu_solver_bld procedure, pass(sv) :: cnv => mld_d_ilu_solver_cnv procedure, pass(sv) :: apply_v => mld_d_ilu_solver_apply_vect @@ -196,6 +198,33 @@ module mld_d_ilu_solver end subroutine mld_d_ilu_solver_clone end interface + interface + subroutine mld_d_ilu_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, mld_d_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_ilu_solver_type), intent(inout) :: sv + class(mld_d_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_ilu_solver_clone_settings + end interface + + interface + subroutine mld_d_ilu_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_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_d_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + end subroutine mld_d_ilu_solver_clear_data + end interface + contains subroutine d_ilu_solver_default(sv) diff --git a/mlprec/mld_s_ilu_solver.f90 b/mlprec/mld_s_ilu_solver.f90 index 6165315e..a9f3e3ad 100644 --- a/mlprec/mld_s_ilu_solver.f90 +++ b/mlprec/mld_s_ilu_solver.f90 @@ -70,6 +70,8 @@ module mld_s_ilu_solver procedure, pass(sv) :: dump => mld_s_ilu_solver_dmp procedure, pass(sv) :: check => s_ilu_solver_check procedure, pass(sv) :: clone => mld_s_ilu_solver_clone + procedure, pass(sv) :: clone_settings => mld_s_ilu_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_s_ilu_solver_clear_data procedure, pass(sv) :: build => mld_s_ilu_solver_bld procedure, pass(sv) :: cnv => mld_s_ilu_solver_cnv procedure, pass(sv) :: apply_v => mld_s_ilu_solver_apply_vect @@ -196,6 +198,33 @@ module mld_s_ilu_solver end subroutine mld_s_ilu_solver_clone end interface + interface + subroutine mld_s_ilu_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, mld_s_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_ilu_solver_type), intent(inout) :: sv + class(mld_s_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_ilu_solver_clone_settings + end interface + + interface + subroutine mld_s_ilu_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_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_s_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + end subroutine mld_s_ilu_solver_clear_data + end interface + contains subroutine s_ilu_solver_default(sv) diff --git a/mlprec/mld_z_ilu_solver.f90 b/mlprec/mld_z_ilu_solver.f90 index 615721aa..b3585a2b 100644 --- a/mlprec/mld_z_ilu_solver.f90 +++ b/mlprec/mld_z_ilu_solver.f90 @@ -70,6 +70,8 @@ module mld_z_ilu_solver procedure, pass(sv) :: dump => mld_z_ilu_solver_dmp procedure, pass(sv) :: check => z_ilu_solver_check procedure, pass(sv) :: clone => mld_z_ilu_solver_clone + procedure, pass(sv) :: clone_settings => mld_z_ilu_solver_clone_settings + procedure, pass(sv) :: clear_data => mld_z_ilu_solver_clear_data procedure, pass(sv) :: build => mld_z_ilu_solver_bld procedure, pass(sv) :: cnv => mld_z_ilu_solver_cnv procedure, pass(sv) :: apply_v => mld_z_ilu_solver_apply_vect @@ -196,6 +198,33 @@ module mld_z_ilu_solver end subroutine mld_z_ilu_solver_clone end interface + interface + subroutine mld_z_ilu_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, mld_z_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_ilu_solver_type), intent(inout) :: sv + class(mld_z_base_solver_type), intent(inout) :: svout + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_ilu_solver_clone_settings + end interface + + interface + subroutine mld_z_ilu_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_ilu_solver_type, psb_ipk_ + Implicit None + + ! Arguments + class(mld_z_ilu_solver_type), intent(inout) :: sv + integer(psb_ipk_), intent(out) :: info + end subroutine mld_z_ilu_solver_clear_data + end interface + contains subroutine z_ilu_solver_default(sv)