Commit a9381890 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Add test for matrix inversion process

parent 07136b8b
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ LDADD=libnptm/libnptm.la -L/usr/lib64 ${USER_LDFLAGS} ${HDF5_LDFLAGS} ${LAPACKLD
lib_LTLIBRARIES=libnptm/libnptm.la
libnptm_libnptm_la_SOURCES=../src/libnptm/algebraic.cpp ../src/libnptm/clu_subs.cpp ../src/libnptm/Commons.cpp ../src/libnptm/Configuration.cpp ../src/libnptm/file_io.cpp ../src/libnptm/lapack_calls.cpp ../src/libnptm/logging.cpp ../src/libnptm/magma_calls.cpp ../src/libnptm/Parsers.cpp ../src/libnptm/sph_subs.cpp ../src/libnptm/utils.cpp ../src/libnptm/tfrfme.cpp ../src/libnptm/TransitionMatrix.cpp ../src/libnptm/tra_subs.cpp
if BUILDFORTRAN
PROGS=cluster/edfb_clu cluster/clu cluster/np_cluster sphere/edfb_sph sphere/sph sphere/np_sphere trapping/frfme trapping/lffft trapping/np_trapping testing/test_TEDF testing/test_TTMS
PROGS=cluster/edfb_clu cluster/clu cluster/np_cluster sphere/edfb_sph sphere/sph sphere/np_sphere trapping/frfme trapping/lffft trapping/np_trapping testing/test_TEDF testing/test_TTMS testing/test_zinvert
bin_PROGRAMS=$(PROGS)
EDFBCLUSOURCES=../src/cluster/edfb_clu.f
CLUSOURCES=../src/cluster/clu.f
@@ -21,12 +21,14 @@ sphere_np_sphere_SOURCES=../src/sphere/np_sphere.cpp ../src/sphere/sphere.cpp
trapping_np_trapping_SOURCES=../src/trapping/np_trapping.cpp ../src/trapping/cfrfme.cpp ../src/trapping/clffft.cpp
testing_test_TEDF_SOURCES=../src/testing/test_TEDF.cpp
testing_test_TTMS_SOURCES=../src/testing/test_TTMS.cpp
testing_test_zinvert_SOURCES=../src/testing/test_zinvert.cpp
else
PROGS=cluster/np_cluster sphere/np_sphere trapping/np_trapping testing/test_TEDF testing/test_TTMS
PROGS=cluster/np_cluster sphere/np_sphere trapping/np_trapping testing/test_TEDF testing/test_TTMS testing/test_zinvert
bin_PROGRAMS=$(PROGS)
cluster_np_cluster_SOURCES=../src/cluster/np_cluster.cpp ../src/cluster/cluster.cpp
sphere_np_sphere_SOURCES=../src/sphere/np_sphere.cpp ../src/sphere/sphere.cpp
trapping_np_trapping_SOURCES=../src/trapping/np_trapping.cpp ../src/trapping/cfrfme.cpp ../src/trapping/clffft.cpp
testing_test_TEDF_SOURCES=../src/testing/test_TEDF.cpp
testing_test_TTMS_SOURCES=../src/testing/test_TTMS.cpp
testing_test_zinvert_SOURCES=../src/testing/test_zinvert.cpp
endif
+33 −6
Original line number Diff line number Diff line
@@ -107,7 +107,8 @@ CONFIG_CLEAN_VPATH_FILES =
@BUILDFORTRAN_FALSE@	sphere/np_sphere$(EXEEXT) \
@BUILDFORTRAN_FALSE@	trapping/np_trapping$(EXEEXT) \
@BUILDFORTRAN_FALSE@	testing/test_TEDF$(EXEEXT) \
@BUILDFORTRAN_FALSE@	testing/test_TTMS$(EXEEXT)
@BUILDFORTRAN_FALSE@	testing/test_TTMS$(EXEEXT) \
@BUILDFORTRAN_FALSE@	testing/test_zinvert$(EXEEXT)
@BUILDFORTRAN_TRUE@am__EXEEXT_1 = cluster/edfb_clu$(EXEEXT) \
@BUILDFORTRAN_TRUE@	cluster/clu$(EXEEXT) \
@BUILDFORTRAN_TRUE@	cluster/np_cluster$(EXEEXT) \
@@ -118,7 +119,8 @@ CONFIG_CLEAN_VPATH_FILES =
@BUILDFORTRAN_TRUE@	trapping/lffft$(EXEEXT) \
@BUILDFORTRAN_TRUE@	trapping/np_trapping$(EXEEXT) \
@BUILDFORTRAN_TRUE@	testing/test_TEDF$(EXEEXT) \
@BUILDFORTRAN_TRUE@	testing/test_TTMS$(EXEEXT)
@BUILDFORTRAN_TRUE@	testing/test_TTMS$(EXEEXT) \
@BUILDFORTRAN_TRUE@	testing/test_zinvert$(EXEEXT)
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)"
PROGRAMS = $(bin_PROGRAMS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -243,6 +245,17 @@ testing_test_TTMS_LDADD = $(LDADD)
testing_test_TTMS_DEPENDENCIES = libnptm/libnptm.la \
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__testing_test_zinvert_SOURCES_DIST =  \
	../src/testing/test_zinvert.cpp
@BUILDFORTRAN_FALSE@am_testing_test_zinvert_OBJECTS =  \
@BUILDFORTRAN_FALSE@	../src/testing/test_zinvert.$(OBJEXT)
@BUILDFORTRAN_TRUE@am_testing_test_zinvert_OBJECTS =  \
@BUILDFORTRAN_TRUE@	../src/testing/test_zinvert.$(OBJEXT)
testing_test_zinvert_OBJECTS = $(am_testing_test_zinvert_OBJECTS)
testing_test_zinvert_LDADD = $(LDADD)
testing_test_zinvert_DEPENDENCIES = libnptm/libnptm.la \
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__trapping_frfme_SOURCES_DIST = ../src/trapping/frfme.f
@BUILDFORTRAN_TRUE@am__objects_5 = ../src/trapping/frfme.$(OBJEXT)
@BUILDFORTRAN_TRUE@am_trapping_frfme_OBJECTS = $(am__objects_5)
@@ -310,6 +323,7 @@ am__depfiles_remade = ../src/cluster/$(DEPDIR)/cluster.Po \
	../src/sphere/$(DEPDIR)/sphere.Po \
	../src/testing/$(DEPDIR)/test_TEDF.Po \
	../src/testing/$(DEPDIR)/test_TTMS.Po \
	../src/testing/$(DEPDIR)/test_zinvert.Po \
	../src/trapping/$(DEPDIR)/cfrfme.Po \
	../src/trapping/$(DEPDIR)/clffft.Po \
	../src/trapping/$(DEPDIR)/np_trapping.Po
@@ -369,8 +383,9 @@ SOURCES = $(libnptm_libnptm_la_SOURCES) $(cluster_clu_SOURCES) \
	$(cluster_edfb_clu_SOURCES) $(cluster_np_cluster_SOURCES) \
	$(sphere_edfb_sph_SOURCES) $(sphere_np_sphere_SOURCES) \
	$(sphere_sph_SOURCES) $(testing_test_TEDF_SOURCES) \
	$(testing_test_TTMS_SOURCES) $(trapping_frfme_SOURCES) \
	$(trapping_lffft_SOURCES) $(trapping_np_trapping_SOURCES)
	$(testing_test_TTMS_SOURCES) $(testing_test_zinvert_SOURCES) \
	$(trapping_frfme_SOURCES) $(trapping_lffft_SOURCES) \
	$(trapping_np_trapping_SOURCES)
DIST_SOURCES = $(libnptm_libnptm_la_SOURCES) \
	$(am__cluster_clu_SOURCES_DIST) \
	$(am__cluster_edfb_clu_SOURCES_DIST) \
@@ -380,6 +395,7 @@ DIST_SOURCES = $(libnptm_libnptm_la_SOURCES) \
	$(am__sphere_sph_SOURCES_DIST) \
	$(am__testing_test_TEDF_SOURCES_DIST) \
	$(am__testing_test_TTMS_SOURCES_DIST) \
	$(am__testing_test_zinvert_SOURCES_DIST) \
	$(am__trapping_frfme_SOURCES_DIST) \
	$(am__trapping_lffft_SOURCES_DIST) \
	$(am__trapping_np_trapping_SOURCES_DIST)
@@ -581,8 +597,8 @@ top_srcdir = @top_srcdir@
LDADD = libnptm/libnptm.la -L/usr/lib64 ${USER_LDFLAGS} ${HDF5_LDFLAGS} ${LAPACKLDFLAGS} ${MAGMALDFLAGS}
lib_LTLIBRARIES = libnptm/libnptm.la
libnptm_libnptm_la_SOURCES = ../src/libnptm/algebraic.cpp ../src/libnptm/clu_subs.cpp ../src/libnptm/Commons.cpp ../src/libnptm/Configuration.cpp ../src/libnptm/file_io.cpp ../src/libnptm/lapack_calls.cpp ../src/libnptm/logging.cpp ../src/libnptm/magma_calls.cpp ../src/libnptm/Parsers.cpp ../src/libnptm/sph_subs.cpp ../src/libnptm/utils.cpp ../src/libnptm/tfrfme.cpp ../src/libnptm/TransitionMatrix.cpp ../src/libnptm/tra_subs.cpp
@BUILDFORTRAN_FALSE@PROGS = cluster/np_cluster sphere/np_sphere trapping/np_trapping testing/test_TEDF testing/test_TTMS
@BUILDFORTRAN_TRUE@PROGS = cluster/edfb_clu cluster/clu cluster/np_cluster sphere/edfb_sph sphere/sph sphere/np_sphere trapping/frfme trapping/lffft trapping/np_trapping testing/test_TEDF testing/test_TTMS
@BUILDFORTRAN_FALSE@PROGS = cluster/np_cluster sphere/np_sphere trapping/np_trapping testing/test_TEDF testing/test_TTMS testing/test_zinvert
@BUILDFORTRAN_TRUE@PROGS = cluster/edfb_clu cluster/clu cluster/np_cluster sphere/edfb_sph sphere/sph sphere/np_sphere trapping/frfme trapping/lffft trapping/np_trapping testing/test_TEDF testing/test_TTMS testing/test_zinvert
@BUILDFORTRAN_TRUE@EDFBCLUSOURCES = ../src/cluster/edfb_clu.f
@BUILDFORTRAN_TRUE@CLUSOURCES = ../src/cluster/clu.f
@BUILDFORTRAN_TRUE@EDFBSPHSOURCES = ../src/sphere/edfb_sph.f
@@ -605,6 +621,8 @@ libnptm_libnptm_la_SOURCES = ../src/libnptm/algebraic.cpp ../src/libnptm/clu_sub
@BUILDFORTRAN_TRUE@testing_test_TEDF_SOURCES = ../src/testing/test_TEDF.cpp
@BUILDFORTRAN_FALSE@testing_test_TTMS_SOURCES = ../src/testing/test_TTMS.cpp
@BUILDFORTRAN_TRUE@testing_test_TTMS_SOURCES = ../src/testing/test_TTMS.cpp
@BUILDFORTRAN_FALSE@testing_test_zinvert_SOURCES = ../src/testing/test_zinvert.cpp
@BUILDFORTRAN_TRUE@testing_test_zinvert_SOURCES = ../src/testing/test_zinvert.cpp
all: all-am

.SUFFIXES:
@@ -845,6 +863,12 @@ testing/test_TEDF$(EXEEXT): $(testing_test_TEDF_OBJECTS) $(testing_test_TEDF_DEP
testing/test_TTMS$(EXEEXT): $(testing_test_TTMS_OBJECTS) $(testing_test_TTMS_DEPENDENCIES) $(EXTRA_testing_test_TTMS_DEPENDENCIES) testing/$(am__dirstamp)
	@rm -f testing/test_TTMS$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(testing_test_TTMS_OBJECTS) $(testing_test_TTMS_LDADD) $(LIBS)
../src/testing/test_zinvert.$(OBJEXT): ../src/testing/$(am__dirstamp) \
	../src/testing/$(DEPDIR)/$(am__dirstamp)

testing/test_zinvert$(EXEEXT): $(testing_test_zinvert_OBJECTS) $(testing_test_zinvert_DEPENDENCIES) $(EXTRA_testing_test_zinvert_DEPENDENCIES) testing/$(am__dirstamp)
	@rm -f testing/test_zinvert$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(testing_test_zinvert_OBJECTS) $(testing_test_zinvert_LDADD) $(LIBS)
../src/trapping/$(am__dirstamp):
	@$(MKDIR_P) ../src/trapping
	@: > ../src/trapping/$(am__dirstamp)
@@ -910,6 +934,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@../src/sphere/$(DEPDIR)/sphere.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/testing/$(DEPDIR)/test_TEDF.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/testing/$(DEPDIR)/test_TTMS.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/testing/$(DEPDIR)/test_zinvert.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/trapping/$(DEPDIR)/cfrfme.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/trapping/$(DEPDIR)/clffft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../src/trapping/$(DEPDIR)/np_trapping.Po@am__quote@ # am--include-marker
@@ -1279,6 +1304,7 @@ distclean: distclean-am
	-rm -f ../src/sphere/$(DEPDIR)/sphere.Po
	-rm -f ../src/testing/$(DEPDIR)/test_TEDF.Po
	-rm -f ../src/testing/$(DEPDIR)/test_TTMS.Po
	-rm -f ../src/testing/$(DEPDIR)/test_zinvert.Po
	-rm -f ../src/trapping/$(DEPDIR)/cfrfme.Po
	-rm -f ../src/trapping/$(DEPDIR)/clffft.Po
	-rm -f ../src/trapping/$(DEPDIR)/np_trapping.Po
@@ -1349,6 +1375,7 @@ maintainer-clean: maintainer-clean-am
	-rm -f ../src/sphere/$(DEPDIR)/sphere.Po
	-rm -f ../src/testing/$(DEPDIR)/test_TEDF.Po
	-rm -f ../src/testing/$(DEPDIR)/test_TTMS.Po
	-rm -f ../src/testing/$(DEPDIR)/test_zinvert.Po
	-rm -f ../src/trapping/$(DEPDIR)/cfrfme.Po
	-rm -f ../src/trapping/$(DEPDIR)/clffft.Po
	-rm -f ../src/trapping/$(DEPDIR)/np_trapping.Po
+89 −0
Original line number Diff line number Diff line
/* Copyright (C) 2024   INAF - Osservatorio Astronomico di Cagliari

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   A copy of the GNU General Public License is distributed along with
   this program in the COPYING file. If not, see: <https://www.gnu.org/licenses/>.
 */

/*! \file test_zinvert.cpp
 *
 * \brief Test of matrix inversion process.
 */
#include <cstdio>

#ifndef INCLUDE_TYPES_H_
#include "../include/types.h"
#endif

#ifdef USE_MAGMA
#include "../include/magma_calls.h"
#define SUCCESS MAGMA_SUCCESS
#else
#define SUCCESS 0
#endif

#ifdef USE_MAGMA_SVD
#include "magma_operators.h"
#endif

#include "../include/algebraic.h"

int main() {
  int result = (int)SUCCESS;
  printf("INFO: matrix inversion test.\n");
  printf("INFO: sizeof(np_int) = %ld\n", sizeof(np_int));
#ifdef USE_MAGMA
  magma_init();
  printf("INFO: sizeof(magma_int_t) = %ld\n", sizeof(magma_int_t));
#endif
  const np_int n = 3;
  const np_int nn = n * n;
  const double tolerance = 1.0e-6;
  dcomplex **test_matrix;
  dcomplex *vec_matrix = new dcomplex[n];
  dcomplex *vec_inv_matrix = new dcomplex[n];
  for (int ivi = 0; ivi < nn; ivi++) vec_matrix[ivi] = 1.0 + ivi + I * (1.0 + ivi);
  test_matrix[0] = vec_matrix;
  test_matrix[1] = vec_matrix + 2;
  vec_inv_matrix[0] = 3.0 + I * 3.0;
  vec_inv_matrix[1] = 1.0 / 3.0 + I * 0.0;
  vec_inv_matrix[2] = 2.0 / 3.0 + I * 0.0;
  vec_inv_matrix[3] = 6.0 + I * 6.0;
  vec_inv_matrix[4] = 2.0 + I * 2.0;
  vec_inv_matrix[5] = 0.5 + I * 0.0;
  vec_inv_matrix[6] = 9.0 + I * 9.0;
  vec_inv_matrix[7] = 4.0 + I * 4.0;
  vec_inv_matrix[8] = 0.0 + I * 0.0;
#ifdef USE_MAGMA
  if (sizeof(np_int) != sizeof(magma_int_t)) {
    printf("ERROR: sizeof(np_int) = %ld; sizeof(magma_int_t) = %ld\n",
	   sizeof(np_int), sizeof(magma_int_t));
    result = 2;
  }
#endif
  if (result == 0) {
    invert_matrix(test_matrix, n, result, n);
    for (int tvi = 0; tvi < 4; tvi++) {
      dcomplex difference = vec_matrix[tvi] - vec_inv_matrix[tvi];
      if (real(difference) < -tolerance || real(difference) > tolerance) result = 1;
      if (imag(difference) < -tolerance || imag(difference) > tolerance) result = 1;
    }
    if (result != 0) printf("ERROR: failed matrix inversion test!\n");
  }
  delete[] vec_inv_matrix;
  delete[] vec_matrix;
  delete[] test_matrix;
#ifdef USE_MAGMA
  magma_finalize();
#endif
  return result;
}