LCOV - code coverage report
Current view: top level - src/elpa2/legacy_interface - elpa2_utilities.F90 (source / functions) Hit Total Coverage
Test: coverage_50ab7a7628bba174fc62cee3ab72b26e81f87fe5.info Lines: 0 10 0.0 %
Date: 2018-01-10 09:29:53 Functions: 0 2 0.0 %

          Line data    Source code
       1             : !    This file is part of ELPA.
       2             : !
       3             : !    The ELPA library was originally created by the ELPA consortium,
       4             : !    consisting of the following organizations:
       5             : !
       6             : !    - Max Planck Computing and Data Facility (MPCDF), formerly known as
       7             : !      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
       8             : !    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
       9             : !      Informatik,
      10             : !    - Technische Universität München, Lehrstuhl für Informatik mit
      11             : !      Schwerpunkt Wissenschaftliches Rechnen ,
      12             : !    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
      13             : !    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
      14             : !      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
      15             : !      and
      16             : !    - IBM Deutschland GmbH
      17             : !
      18             : !
      19             : !    More information can be found here:
      20             : !    http://elpa.mpcdf.mpg.de/
      21             : !
      22             : !    ELPA is free software: you can redistribute it and/or modify
      23             : !    it under the terms of the version 3 of the license of the
      24             : !    GNU Lesser General Public License as published by the Free
      25             : !    Software Foundation.
      26             : !
      27             : !    ELPA is distributed in the hope that it will be useful,
      28             : !    but WITHOUT ANY WARRANTY; without even the implied warranty of
      29             : !    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      30             : !    GNU Lesser General Public License for more details.
      31             : !
      32             : !    You should have received a copy of the GNU Lesser General Public License
      33             : !    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
      34             : !
      35             : !    ELPA reflects a substantial effort on the part of the original
      36             : !    ELPA consortium, and we ask you to respect the spirit of the
      37             : !    license that we chose: i.e., please contribute any changes you
      38             : !    may have back to the original ELPA library distribution, and keep
      39             : !    any derivatives of ELPA under the same license that we chose for
      40             : !    the original distribution, the GNU Lesser General Public License.
      41             : !
      42             : !
      43             : ! ELPA2 -- 2-stage solver for ELPA
      44             : !
      45             : ! Copyright of the original code rests with the authors inside the ELPA
      46             : ! consortium. The copyright of any additional modifications shall rest
      47             : ! with their original authors, but shall adhere to the licensing terms
      48             : ! distributed along with the original code in the file "COPYING".
      49             : !
      50             : ! Author: Andreas Marek, MPCDF
      51             : 
      52             : #include "config-f90.h"
      53             : !> \brief Fortran module tp provide some variables for the LEGACY interface. This is obsolete, please use the new interface
      54             : module elpa2_utilities
      55             :   use elpa
      56             :   implicit none
      57             :   public
      58             : 
      59             :   integer(kind=c_int), parameter :: number_of_real_kernels = ELPA_2STAGE_NUMBER_OF_REAL_KERNELS - 6
      60             :   integer(kind=c_int), parameter :: number_of_complex_kernels = ELPA_2STAGE_NUMBER_OF_COMPLEX_KERNELS
      61             : 
      62             : #ifdef WITH_REAL_GENERIC_KERNEL
      63             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_GENERIC = ELPA_2STAGE_REAL_GENERIC
      64             : #endif
      65             : #ifdef WITH_REAL_GENERIC_SIMPLE_KERNEL
      66             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_GENERIC_SIMPLE = ELPA_2STAGE_REAL_GENERIC_SIMPLE
      67             : #endif
      68             : #ifdef WITH_REAL_BGP_KERNEL
      69             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_BGP = ELPA_2STAGE_REAL_BGP
      70             : #endif
      71             : #ifdef WITH_REAL_BGQ_KERNEL
      72             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_BGQ = ELPA_2STAGE_REAL_BGQ
      73             : #endif
      74             : #ifdef WITH_REAL_SSE_ASSEMBLY_KERNEL
      75             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_SSE = ELPA_2STAGE_REAL_SSE_ASSEMBLY
      76             : #endif
      77             : #ifdef WITH_REAL_SSE_BLOCK2_KERNEL
      78             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_SSE_BLOCK2 = ELPA_2STAGE_REAL_SSE_BLOCK2
      79             : #endif
      80             : #ifdef WITH_REAL_SSE_BLOCK4_KERNEL
      81             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_SSE_BLOCK4 = ELPA_2STAGE_REAL_SSE_BLOCK4
      82             : #endif
      83             : #ifdef WITH_REAL_SSE_BLOCK6_KERNEL
      84             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_SSE_BLOCK6 = ELPA_2STAGE_REAL_SSE_BLOCK6
      85             : #endif
      86             : #ifdef WITH_REAL_AVX_BLOCK2_KERNEL
      87             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX_BLOCK2 = ELPA_2STAGE_REAL_AVX_BLOCK2
      88             : #endif
      89             : #ifdef WITH_REAL_AVX_BLOCK4_KERNEL
      90             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX_BLOCK4 = ELPA_2STAGE_REAL_AVX_BLOCK4
      91             : #endif
      92             : #ifdef WITH_REAL_AVX_BLOCK6_KERNEL
      93             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX_BLOCK6 = ELPA_2STAGE_REAL_AVX_BLOCK6
      94             : #endif
      95             : #ifdef WITH_REAL_AVX2_BLOCK2_KERNEL
      96             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX2_BLOCK2 = ELPA_2STAGE_REAL_AVX2_BLOCK2
      97             : #endif
      98             : #ifdef WITH_REAL_AVX2_BLOCK4_KERNEL
      99             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX2_BLOCK4 = ELPA_2STAGE_REAL_AVX2_BLOCK4
     100             : #endif
     101             : #ifdef WITH_REAL_AVX2_BLOCK6_KERNEL
     102             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX2_BLOCK6 = ELPA_2STAGE_REAL_AVX2_BLOCK6
     103             : #endif
     104             : #ifdef WITH_REAL_AVX512_BLOCK2_KERNEL
     105             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX512_BLOCK2 = ELPA_2STAGE_REAL_AVX512_BLOCK2
     106             : #endif
     107             : #ifdef WITH_REAL_AVX512_BLOCK4_KERNEL
     108             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX512_BLOCK4 = ELPA_2STAGE_REAL_AVX512_BLOCK4
     109             : #endif
     110             : #ifdef WITH_REAL_AVX512_BLOCK6_KERNEL
     111             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_AVX512_BLOCK6 = ELPA_2STAGE_REAL_AVX512_BLOCK6
     112             : #endif
     113             : #ifdef WITH_GPU_KERNEL
     114             :   integer(kind=c_int), parameter :: REAL_ELPA_KERNEL_GPU = ELPA_2STAGE_REAL_GPU
     115             : #endif
     116             : 
     117             :   integer(kind=c_int), parameter :: DEFAULT_REAL_ELPA_KERNEL = ELPA_2STAGE_REAL_DEFAULT
     118             : 
     119             : #ifdef WITH_COMPLEX_GENERIC_KERNEL
     120             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_GENERIC = ELPA_2STAGE_COMPLEX_GENERIC
     121             : #endif
     122             : #ifdef WITH_COMPLEX_GENERIC_SIMPLE_KERNEL
     123             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_GENERIC_SIMPLE = ELPA_2STAGE_COMPLEX_GENERIC_SIMPLE
     124             : #endif
     125             : #ifdef WITH_COMPLEX_BGP_KERNEL
     126             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_BGP = ELPA_2STAGE_COMPLEX_BGP
     127             : #endif
     128             : #ifdef WITH_COMPLEX_BGQ_KERNEL
     129             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_BGQ = ELPA_2STAGE_COMPLEX_BGQ
     130             : #endif
     131             : #ifdef WITH_COMPLEX_SSE_ASSEMBLY_KERNEL
     132             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_SSE = ELPA_2STAGE_COMPLEX_SSE_ASSEMBLY
     133             : #endif
     134             : #ifdef WITH_COMPLEX_SSE_BLOCK1_KERNEL
     135             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_SSE_BLOCK1 = ELPA_2STAGE_COMPLEX_SSE_BLOCK1
     136             : #endif
     137             : #ifdef WITH_COMPLEX_SSE_BLOCK2_KERNEL
     138             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_SSE_BLOCK2 = ELPA_2STAGE_COMPLEX_SSE_BLOCK2
     139             : #endif
     140             : #ifdef WITH_COMPLEX_AVX_BLOCK1_KERNEL
     141             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX_BLOCK1 = ELPA_2STAGE_COMPLEX_AVX_BLOCK1
     142             : #endif
     143             : #ifdef WITH_COMPLEX_AVX_BLOCK2_KERNEL
     144             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX_BLOCK2 = ELPA_2STAGE_COMPLEX_AVX_BLOCK2
     145             : #endif
     146             : #ifdef WITH_COMPLEX_AVX2_BLOCK1_KERNEL
     147             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX2_BLOCK1 = ELPA_2STAGE_COMPLEX_AVX2_BLOCK1
     148             : #endif
     149             : #ifdef WITH_COMPLEX_AVX2_BLOCK2_KERNEL
     150             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX2_BLOCK2 = ELPA_2STAGE_COMPLEX_AVX2_BLOCK2
     151             : #endif
     152             : #ifdef WITH_COMPLEX_AVX512_BLOCK1_KERNEL
     153             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX512_BLOCK1 = ELPA_2STAGE_COMPLEX_AVX512_BLOCK1
     154             : #endif
     155             : #ifdef WITH_COMPLEX_AVX512_BLOCK2_KERNEL
     156             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_AVX512_BLOCK2 = ELPA_2STAGE_COMPLEX_AVX512_BLOCK2
     157             : #endif
     158             : #ifdef WITH_GPU_KERNEL
     159             :   integer(kind=c_int), parameter :: COMPLEX_ELPA_KERNEL_GPU = ELPA_2STAGE_COMPLEX_GPU
     160             : #endif
     161             : 
     162             :   integer(kind=c_int), parameter :: DEFAULT_COMPLEX_ELPA_KERNEL = ELPA_2STAGE_COMPLEX_DEFAULT
     163             : 
     164             :   character(35), parameter, dimension(number_of_real_kernels) :: &
     165             :   REAL_ELPA_KERNEL_NAMES =    (/"REAL_ELPA_KERNEL_GENERIC           ", &
     166             :                                 "REAL_ELPA_KERNEL_GENERIC_SIMPLE    ", &
     167             :                                 "REAL_ELPA_KERNEL_BGP               ", &
     168             :                                 "REAL_ELPA_KERNEL_BGQ               ", &
     169             :                                 "REAL_ELPA_KERNEL_SSE               ", &
     170             :                                 "REAL_ELPA_KERNEL_SSE_BLOCK2        ", &
     171             :                                 "REAL_ELPA_KERNEL_SSE_BLOCK4        ", &
     172             :                                 "REAL_ELPA_KERNEL_SSE_BLOCK6        ", &
     173             :                                 "REAL_ELPA_KERNEL_AVX_BLOCK2        ", &
     174             :                                 "REAL_ELPA_KERNEL_AVX_BLOCK4        ", &
     175             :                                 "REAL_ELPA_KERNEL_AVX_BLOCK6        ", &
     176             :                                 "REAL_ELPA_KERNEL_AVX2_BLOCK2       ", &
     177             :                                 "REAL_ELPA_KERNEL_AVX2_BLOCK4       ", &
     178             :                                 "REAL_ELPA_KERNEL_AVX2_BLOCK6       ", &
     179             :                                 "REAL_ELPA_KERNEL_AVX512_BLOCK2     ", &
     180             :                                 "REAL_ELPA_KERNEL_AVX512_BLOCK4     ", &
     181             :                                 "REAL_ELPA_KERNEL_AVX512_BLOCK6     ", &
     182             :                                 "REAL_ELPA_KERNEL_GPU               "/)
     183             : 
     184             :   character(35), parameter, dimension(number_of_complex_kernels) :: &
     185             :   COMPLEX_ELPA_KERNEL_NAMES = (/"COMPLEX_ELPA_KERNEL_GENERIC        ", &
     186             :                                 "COMPLEX_ELPA_KERNEL_GENERIC_SIMPLE ", &
     187             :                                 "COMPLEX_ELPA_KERNEL_BGP            ", &
     188             :                                 "COMPLEX_ELPA_KERNEL_BGQ            ", &
     189             :                                 "COMPLEX_ELPA_KERNEL_SSE            ", &
     190             :                                 "COMPLEX_ELPA_KERNEL_SSE_BLOCK1     ", &
     191             :                                 "COMPLEX_ELPA_KERNEL_SSE_BLOCK2     ", &
     192             :                                 "COMPLEX_ELPA_KERNEL_AVX_BLOCK1     ", &
     193             :                                 "COMPLEX_ELPA_KERNEL_AVX_BLOCK2     ", &
     194             :                                 "COMPLEX_ELPA_KERNEL_AVX2_BLOCK1    ", &
     195             :                                 "COMPLEX_ELPA_KERNEL_AVX2_BLOCK2    ", &
     196             :                                 "COMPLEX_ELPA_KERNEL_AVX512_BLOCK1  ", &
     197             :                                 "COMPLEX_ELPA_KERNEL_AVX512_BLOCK2  ", &
     198             :                                 "COMPLEX_ELPA_KERNEL_GPU            "/)
     199             : 
     200             :   integer(kind=c_int), parameter                           ::             &
     201             :            AVAILABLE_REAL_ELPA_KERNELS(number_of_real_kernels) =       &
     202             :                                       (/                               &
     203             : #if WITH_REAL_GENERIC_KERNEL
     204             :                                         1                              &
     205             : #else
     206             :                                         0                              &
     207             : #endif
     208             : #if WITH_REAL_GENERIC_SIMPLE_KERNEL
     209             :                                           ,1                           &
     210             : #else
     211             :                                           ,0                           &
     212             : #endif
     213             : #if WITH_REAL_BGP_KERNEL
     214             :                                             ,1                         &
     215             : #else
     216             :                                             ,0                         &
     217             : #endif
     218             : #if WITH_REAL_BGQ_KERNEL
     219             :                                               ,1                       &
     220             : #else
     221             :                                               ,0                       &
     222             : #endif
     223             : #if WITH_REAL_SSE_ASSEMBLY_KERNEL
     224             :                                                 ,1                     &
     225             : #else
     226             :                                                 ,0                     &
     227             : #endif
     228             : #if WITH_REAL_SSE_BLOCK2_KERNEL
     229             :                                                   ,1                   &
     230             : #else
     231             :                                                   ,0                   &
     232             : #endif
     233             : #if WITH_REAL_SSE_BLOCK4_KERNEL
     234             :                                                     ,1                 &
     235             : #else
     236             :                                                     ,0                 &
     237             : #endif
     238             : #if WITH_REAL_SSE_BLOCK6_KERNEL
     239             :                                                       ,1               &
     240             : #else
     241             :                                                       ,0               &
     242             : 
     243             : #endif
     244             : #if WITH_REAL_AVX_BLOCK2_KERNEL
     245             :                                                         ,1             &
     246             : #else
     247             :                                                         ,0             &
     248             : #endif
     249             : #if WITH_REAL_AVX_BLOCK4_KERNEL
     250             :                                                           ,1           &
     251             : #else
     252             :                                                           ,0           &
     253             : #endif
     254             : #if WITH_REAL_AVX_BLOCK6_KERNEL
     255             :                                                             ,1         &
     256             : #else
     257             :                                                             ,0         &
     258             : #endif
     259             : #if WITH_REAL_AVX2_BLOCK2_KERNEL
     260             :                                                               ,1       &
     261             : #else
     262             :                                                               ,0       &
     263             : #endif
     264             : #if WITH_REAL_AVX2_BLOCK4_KERNEL
     265             :                                                                ,1      &
     266             : #else
     267             :                                                                ,0      &
     268             : #endif
     269             : #if WITH_REAL_AVX2_BLOCK6_KERNEL
     270             :                                                                ,1      &
     271             : #else
     272             :                                                                ,0      &
     273             : #endif
     274             : #if WITH_REAL_AVX512_BLOCK2_KERNEL
     275             :                                                                  ,1    &
     276             : #else
     277             :                                                                  ,0    &
     278             : #endif
     279             : #if WITH_REAL_AVX512_BLOCK4_KERNEL
     280             :                                                                    ,1  &
     281             : #else
     282             :                                                                    ,0  &
     283             : #endif
     284             : #if WITH_REAL_AVX512_BLOCK6_KERNEL
     285             :                                                                      ,1  &
     286             : #else
     287             :                                                                      ,0  &
     288             : #endif
     289             : 
     290             : #ifdef WITH_GPU_VERSION
     291             :                                                                        ,1    &
     292             : #else
     293             :                                                                        ,0    &
     294             : #endif
     295             :                                                        /)
     296             : 
     297             :   integer(kind=c_int), parameter ::                                          &
     298             :            AVAILABLE_COMPLEX_ELPA_KERNELS(number_of_complex_kernels) =    &
     299             :                                       (/                                  &
     300             : #if WITH_COMPLEX_GENERIC_KERNEL
     301             :                                         1                                 &
     302             : #else
     303             :                                         0                                 &
     304             : #endif
     305             : #if WITH_COMPLEX_GENERIC_SIMPLE_KERNEL
     306             :                                           ,1                              &
     307             : #else
     308             :                                           ,0                              &
     309             : #endif
     310             : #if WITH_COMPLEX_BGP_KERNEL
     311             :                                             ,1                            &
     312             : #else
     313             :                                             ,0                            &
     314             : #endif
     315             : #if WITH_COMPLEX_BGQ_KERNEL
     316             :                                               ,1                          &
     317             : #else
     318             :                                               ,0                          &
     319             : #endif
     320             : #if WITH_COMPLEX_SSE_ASSEMBLY_KERNEL
     321             :                                                 ,1                        &
     322             : #else
     323             :                                                 ,0                        &
     324             : #endif
     325             : #if WITH_COMPLEX_SSE_BLOCK1_KERNEL
     326             :                                                   ,1                      &
     327             : #else
     328             :                                                   ,0                      &
     329             : #endif
     330             : #if WITH_COMPLEX_SSE_BLOCK2_KERNEL
     331             :                                                     ,1                    &
     332             : #else
     333             :                                                     ,0                    &
     334             : #endif
     335             : #if WITH_COMPLEX_AVX_BLOCK1_KERNEL
     336             :                                                       ,1                  &
     337             : #else
     338             :                                                       ,0                  &
     339             : #endif
     340             : #if WITH_COMPLEX_AVX_BLOCK2_KERNEL
     341             :                                                         ,1                &
     342             : #else
     343             :                                                         ,0                &
     344             : #endif
     345             : #if WITH_COMPLEX_AVX2_BLOCK1_KERNEL
     346             :                                                          ,1               &
     347             : #else
     348             :                                                          ,0               &
     349             : #endif
     350             : #if WITH_COMPLEX_AVX2_BLOCK2_KERNEL
     351             :                                                            ,1             &
     352             : #else
     353             :                                                            ,0             &
     354             : #endif
     355             : #if WITH_COMPLEX_AVX512_BLOCK1_KERNEL
     356             :                                                              ,1               &
     357             : #else
     358             :                                                              ,0               &
     359             : #endif
     360             : #if WITH_COMPLEX_AVX512_BLOCK2_KERNEL
     361             :                                                                ,1             &
     362             : #else
     363             :                                                                ,0             &
     364             : #endif
     365             : 
     366             : #ifdef WITH_GPU_VERSION
     367             :                                                                  ,1           &
     368             : #else
     369             :                                                                  ,0           &
     370             : #endif
     371             :                                                                /)
     372             : 
     373             : 
     374             :   contains
     375             : 
     376             : 
     377           0 :    function elpa_real_kernel_name(THIS_ELPA_REAL_KERNEL) result(name)
     378             :       implicit none
     379             : 
     380             :       integer, intent(in) :: THIS_ELPA_REAL_KERNEL
     381             :       character(35)        :: name
     382             : 
     383             : 
     384           0 :       if (AVAILABLE_REAL_ELPA_KERNELS(THIS_ELPA_REAL_KERNEL) .eq. 1) then
     385           0 :         name = trim(REAL_ELPA_KERNEL_NAMES(THIS_ELPA_REAL_KERNEL))
     386             :       else
     387           0 :         name = ""
     388             :       endif
     389           0 :       return
     390             : 
     391             :     end function
     392             : 
     393           0 :    function elpa_complex_kernel_name(THIS_ELPA_COMPLEX_KERNEL) result(name)
     394             :       implicit none
     395             : 
     396             :       integer, intent(in) :: THIS_ELPA_COMPLEX_KERNEL
     397             :       character(35)       :: name
     398             : 
     399             : 
     400           0 :       if (AVAILABLE_COMPLEX_ELPA_KERNELS(THIS_ELPA_COMPLEX_KERNEL) .eq. 1) then
     401           0 :         name = trim(COMPLEX_ELPA_KERNEL_NAMES(THIS_ELPA_COMPLEX_KERNEL))
     402             :       else
     403           0 :         name = ""
     404             :       endif
     405             : 
     406           0 :       return
     407             : 
     408             :     end function
     409             : 
     410             : end module elpa2_utilities

Generated by: LCOV version 1.12