Date: 2025-03-28T21:10:41+00:00

Actual source code: petscmat.h

      1: !
      2: !
      3: !  Include file for Fortran use of the Mat package in PETSc
      4: !  Portions of this code are under:
      5: !  Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved.
      6: !
      7: #if !defined (PETSCMATDEF_H)
      8: #define PETSCMATDEF_H

     10: #include "petsc/finclude/petscvec.h"

     12: #define Mat type(tMat)
     13: #define MatNullSpace type(tMatNullSpace)
     14: #define MatFDColoring type(tMatFDColoring)
     15: #define MatColoring type(tMatColoring)
     16: #define MatTransposeColoring type(tMatTransposeColoring)
     17: #define MatPartitioning type(tMatPartitioning)
     18: #define MatCoarsen type(tMatCoarsen)

     20: #define MatAIJIndices PetscFortranAddr
     21: #define MatType character*(80)
     22: #define MatSolverType character*(80)
     23: #define MatOption PetscEnum
     24: #define MatCreateSubMatrixOption PetscEnum
     25: #define MPChacoGlobalType PetscEnum
     26: #define MPChacoLocalType PetscEnum
     27: #define MPChacoEigenType PetscEnum
     28: #define MPPTScotchStragegyType PetscEnum
     29: #define MatAssemblyType PetscEnum
     30: #define MatFactorType PetscEnum
     31: #define MatFactorError PetscEnum
     32: #define MatFactorShiftType PetscEnum
     33: #define MatProductType PetscEnum
     34: #define MatProductAlgorithm character*(80)
     35: #define MatFactorSchurStatus PetscEnum
     36: #define MatOrderingType character*(80)
     37: #define MatSORType PetscEnum
     38: #define MatInfoType PetscEnum
     39: #define MatReuse PetscEnum
     40: #define MatOperation PetscEnum
     41: #define MatColoringType character*(80)
     42: #define MatInfo PetscLogDouble
     43: #define MatFactorInfo PetscReal
     44: #define MatDuplicateOption PetscEnum
     45: #define MatStructure PetscEnum
     46: #define MatPartitioningType character*(80)
     47: #define MatCoarsenType character*(80)
     48: #define MatCompositeType PetscEnum
     49: #define MatCompositeMergeType PetscEnum
     50: #define MatStencil PetscInt
     51: #define MatStencil_k 1
     52: #define MatStencil_j 2
     53: #define MatStencil_i 3
     54: #define MatStencil_c 4

     56: #define MATPARTITIONING_CURRENT 'current'
     57: #define MATPARTITIONING_PARMETIS 'parmetis'

     59: #define MATCOARSEN_MIS 'mis'

     61: #define MATCOLORINGJP      'jp'
     62: #define MATCOLORINGPOWER   'power'
     63: #define MATCOLORINGNATURAL 'natural'
     64: #define MATCOLORINGSL      'sl'
     65: #define MATCOLORINGLF      'lf'
     66: #define MATCOLORINGID      'id'
     67: #define MATCOLORINGGREEDY  'greedy'

     69: #define MATORDERINGNATURAL   'natural'
     70: #define MATORDERINGNATURAL_OR_ND 'natural_or_nd'
     71: #define MATORDERINGND        'nd'
     72: #define MATORDERING1WD       '1wd'
     73: #define MATORDERINGRCM       'rcm'
     74: #define MATORDERINGQMD       'qmd'
     75: #define MATORDERINGROWLENGTH 'rowlength'
     76: #define MATORDERINGWBM       'wbm'
     77: #define MATORDERINGSPECTRAL  'spectral'
     78: #define MATORDERINGAMD       'amd'
     79: #define MATORDERINGEXTERNAL  'external'
     80: !
     81: !  Matrix types
     82: !
     83: #define MATSAME            'same'
     84: #define MATMAIJ            'maij'
     85: #define MATSEQMAIJ         'seqmaij'
     86: #define MATMPIMAIJ         'mpimaij'
     87: #define MATKAIJ            'kaij'
     88: #define MATSEQKAIJ         'seqkaij'
     89: #define MATMPIKAIJ         'mpikaij'
     90: #define MATIS              'is'
     91: #define MATAIJ             'aij'
     92: #define MATSEQAIJ          'seqaij'
     93: #define MATMPIAIJ          'mpiaij'
     94: #define MATAIJCRL          'aijcrl'
     95: #define MATSEQAIJCRL       'seqaijcrl'
     96: #define MATMPIAIJCRL       'mpiaijcrl'
     97: #define MATAIJCUSPARSE     'aijcusparse'
     98: #define MATSEQAIJCUSPARSE  'seqaijcusparse'
     99: #define MATMPIAIJCUSPARSE  'mpiaijcusparse'
    100: #define MATAIJHIPSPARSE    'aijhipsparse'
    101: #define MATSEQAIJHIPSPARSE 'seqaijhipsparse'
    102: #define MATMPIAIJHIPSPARSE 'mpiaijhipsparse'
    103: #define MATAIJKOKKOS       'aijkokkos'
    104: #define MATSEQAIJKOKKOS    'seqaijkokkos'
    105: #define MATMPIAIJKOKKOS    'mpiaijkokkos'
    106: #define MATAIJVIENNACL     'aijviennacl'
    107: #define MATSEQAIJVIENNACL  'seqaijviennacl'
    108: #define MATMPIAIJVIENNACL  'mpiaijviennacl'
    109: #define MATAIJPERM         'aijperm'
    110: #define MATSEQAIJPERM      'seqaijperm'
    111: #define MATMPIAIJPERM      'mpiaijperm'
    112: #define MATAIJSELL         'aijsell'
    113: #define MATSEQAIJSELL      'seqaijsell'
    114: #define MATMPIAIJSELL      'mpiaijsell'
    115: #define MATAIJMKL          'aijmkl'
    116: #define MATSEQAIJMKL       'seqaijmkl'
    117: #define MATMPIAIJMKL       'mpiaijmkl'
    118: #define MATBAIJMKL         'baijmkl'
    119: #define MATSEQBAIJMKL      'seqbaijmkl'
    120: #define MATMPIBAIJMKL      'mpibaijmkl'
    121: #define MATSHELL           'shell'
    122: #define MATCENTERING       'centering'
    123: #define MATDENSE           'dense'
    124: #define MATDENSECUDA       'densecuda'
    125: #define MATDENSEHIP        'densehip'
    126: #define MATSEQDENSE        'seqdense'
    127: #define MATSEQDENSECUDA    'seqdensecuda'
    128: #define MATSEQDENSEHIP     'seqdensehip'
    129: #define MATMPIDENSE        'mpidense'
    130: #define MATMPIDENSECUDA    'mpidensecuda'
    131: #define MATMPIDENSEHIP     'mpidensehip'
    132: #define MATELEMENTAL       'elemental'
    133: #define MATSCALAPACK       'scalapack'
    134: #define MATBAIJ            'baij'
    135: #define MATSEQBAIJ         'seqbaij'
    136: #define MATMPIBAIJ         'mpibaij'
    137: #define MATMPIADJ          'mpiadj'
    138: #define MATSBAIJ           'sbaij'
    139: #define MATSEQSBAIJ        'seqsbaij'
    140: #define MATMPISBAIJ        'mpisbaij'
    141: #define MATMFFD            'mffd'
    142: #define MATNORMAL          'normal'
    143: #define MATNORMALHERMITIAN 'normalh'
    144: #define MATLRC             'lrc'
    145: #define MATSCATTER         'scatter'
    146: #define MATBLOCKMAT        'blockmat'
    147: #define MATCOMPOSITE       'composite'
    148: #define MATFFT             'fft'
    149: #define MATFFTW            'fftw'
    150: #define MATSEQCUFFT        'seqcufft'
    151: #define MATTRANSPOSEVIRTUAL       'transpose'
    152: #define MATHERMITIANTRANSPOSEVIRTUAL 'hermitiantranspose'
    153: #define MATSCHURCOMPLEMENT 'schurcomplement'
    154: #define MATPYTHON          'python'
    155: #define MATHYPRE           'hypre'
    156: #define MATHYPRESTRUCT     'hyprestruct'
    157: #define MATHYPRESSTRUCT    'hypresstruct'
    158: #define MATSUBMATRIX       'submatrix'
    159: #define MATLOCALREF        'localref'
    160: #define MATNEST            'nest'
    161: #define MATPREALLOCATOR    'preallocator'
    162: #define MATSELL            'sell'
    163: #define MATSEQSELL         'seqsell'
    164: #define MATMPISELL         'mpisell'
    165: #define MATDUMMY           'dummy'
    166: #define MATLMVM            'lmvm'
    167: #define MATLMVMDFP         'lmvmdfp'
    168: #define MATLMVMDDFP        'lmvmddfp'
    169: #define MATLMVMBFGS        'lmvmbfgs'
    170: #define MATLMVMDBFGS       'lmvmdbfgs'
    171: #define MATLMVMDQN         'lmvmdqn'
    172: #define MATLMVMSR1         'lmvmsr1'
    173: #define MATLMVMBROYDEN     'lmvmbroyden'
    174: #define MATLMVMBADBROYDEN  'lmvmbadbroyden'
    175: #define MATLMVMSYMBROYDEN  'lmvmsymbroyden'
    176: #define MATLMVMSYMBADBROYDEN 'lmvmsymbadbroyden'
    177: #define MATLMVMDIAGBROYDEN 'lmvmdiagbroyden'
    178: #define MATCONSTANTDIAGONAL 'constantdiagonal'
    179: #define MATHTOOL           'htool'
    180: #define MATH2OPUS          'h2opus'

    182: !
    183: ! MatMFFDType values
    184: !
    185: #define MATMFFD_DS 'ds'
    186: #define MATMFFD_WP 'wp'

    188: !
    189: ! MatSolverTypes
    190: !
    191: #define MATSOLVERSUPERLU         'superlu'
    192: #define MATSOLVERSUPERLU_DIST    'superlu_dist'
    193: #define MATSOLVERSTRUMPACK       'strumpack'
    194: #define MATSOLVERUMFPACK         'umfpack'
    195: #define MATSOLVERCHOLMOD         'cholmod'
    196: #define MATSOLVERKLU             'klu'
    197: #define MATSOLVERELEMENTAL       'elemental'
    198: #define MATSOLVERSCALAPACK       'scalapack'
    199: #define MATSOLVERESSL            'essl'
    200: #define MATSOLVERLUSOL           'lusol'
    201: #define MATSOLVERMUMPS           'mumps'
    202: #define MATSOLVERMKL_PARDISO     'mkl_pardiso'
    203: #define MATSOLVERMKL_CPARDISO    'mkl_cpardiso'
    204: #define MATSOLVERPASTIX          'pastix'
    205: #define MATSOLVERMATLAB          'matlab'
    206: #define MATSOLVERPETSC           'petsc'
    207: #define MATSOLVERBAS             'bas'
    208: #define MATSOLVERCUSPARSE        'cusparse'
    209: #define MATSOLVERCUDA            'cuda'
    210: #define MATSOLVERHIPSPARSE       'hipsparse'
    211: #define MATSOLVERHIP             'hip'
    212: #define MATSOLVERKOKKOS          'kokkos'
    213: #define MATSOLVERSPQR            'spqr'
    214: #define MATSOLVERHTOOL           'htool'

    216: !
    217: ! GPU Storage Formats for CUSPARSE
    218: !
    219: #define MatCUSPARSEStorageFormat PetscEnum
    220: #define MatCUSPARSEFormatOperation PetscEnum

    222: !
    223: ! GPU Storage Formats for HIPSPARSE
    224: !
    225: #define MatHIPSPARSEStorageFormat PetscEnum
    226: #define MatHIPSPARSEFormatOperation PetscEnum

    228: !
    229: ! sparsity reducing ordering for STRUMPACK
    230: !
    231: #define MatSTRUMPACKReordering PetscEnum
    232: !
    233: ! compression types for STRUMPACK
    234: !
    235: #define MatSTRUMPACKCompressionType PetscEnum

    237: #endif