/[escript]/trunk-mpi-branch/paso/src/TRILINOS.cpp
ViewVC logotype

Contents of /trunk-mpi-branch/paso/src/TRILINOS.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1008 - (show annotations)
Mon Mar 5 01:44:30 2007 UTC (14 years, 3 months ago) by ksteube
File size: 3586 byte(s)
Added files for TRILINOS implementation

1 /* $Id$ */
2
3 /*
4 ************************************************************
5 * Copyright 2006 by ACcESS MNRF *
6 * *
7 * http://www.access.edu.au *
8 * Primary Business: Queensland, Australia *
9 * Licensed under the Open Software License version 3.0 *
10 * http://www.opensource.org/licenses/osl-3.0.php *
11 * *
12 ************************************************************
13 */
14
15 /* Interface to Sandia TRILINOS sparse solver */
16
17 /* Author: k.steube@uq.edu.au */
18
19 /* TODO
20 New TrilinosData object
21 Create Map
22 Begin insert global values
23 Insert values
24 End submit entries
25 Fill complete
26 Clean up
27 Solve system given a RHS
28 Get result
29 */
30
31
32 #ifdef TRILINOS
33
34 #include "Paso.h"
35 #include "performance.h"
36 #include "escript/system_dep.h"
37
38 #include "Epetra_ConfigDefs.h"
39 #ifdef PASO_MPI
40 #include "mpi.h"
41 #include "Epetra_MpiComm.h"
42 #else
43 #include "Epetra_SerialComm.h"
44 #endif
45 #include "Epetra_Map.h"
46 #include "Epetra_SerialDenseVector.h"
47 #include "Epetra_Vector.h"
48 #include "Epetra_CrsMatrix.h"
49 #include "Epetra_IntSerialDenseVector.h"
50
51
52
53 /* This C++ class is accessed from a C program via the extern "C" functions that are included below */
54
55
56
57 /**
58 \brief
59 Defines the class that stores TRILINOS map and epetra matrix
60
61 Description:
62 This file is only necessary because we have to use C++ objects from C
63 */
64
65 class ESCRIPT_DLL_API TrilinosData {
66
67 Paso_MPIInfo *MPIInfo;
68 Epetra_Map *epetra_map;
69 Epetra_CrsMatrix *epetra_crs_matrix;
70
71 public:
72
73 TrilinosData(Paso_MPIInfo *info, Paso_SystemMatrixPattern *pattern) {
74 MPIInfo = info;
75 Epetra_MpiComm Comm(MPI_COMM_WORLD);
76 Epetra_Map temp_map(row_distribution->numDOF * row_blocksize, row_distribution->numLocal * row_blocksize, 0, Comm);
77 epetra_map = &temp_map;
78 int *numNz = new int[row_distribution->numDOF]; // probably need numLocal
79 for (i=0; i<row_distribution->numLocal; i++) {
80 for (ii=0; i<row_blocksize; i++) {
81 numNz[ii+row_blocksize*i] = (pattern->ptr[i+1] - pattern->ptr[i]) * col_blocksize
82 }
83 }
84 Epetra_CrsMatrix temp(Copy, *epetra_map, numNz);
85 epetra_crs_matrix = &temp;
86 }
87
88 void SumIntoMyValues(int row, int num, double *value, int *col) {
89 printf("ksteube TrilinosData::SumIntoMyValues num=%d value=%f col=%d\n", num, *value, *col);
90 epetra_crs_matrix->SumIntoMyValues(row, num, value, col);
91 }
92
93 protected:
94
95 private:
96
97 };
98
99
100
101 /* Below here are the methods we use to access the class above from a C program */
102
103
104
105 extern "C"
106 void Initialize_TrilinosData(TrilinosData *p, Paso_SystemMatrixPattern *pattern) {
107 printf("ksteube in Initialize_TrilinosData\n");
108 p = new TrilinosData(pattern->MPIInfo, pattern);
109 printf("ksteube Paso_SystemMatrixPattern len=%d\n", pattern->len);
110 }
111
112 extern "C"
113 void Trilinos_SumIntoMyValues(TrilinosData *p, int row, int col, double *value) {
114 printf("ksteube in Trilinos_SumIntoMyValues row=%d col=%d value=%lf\n", row, col, value);
115 p->SumIntoMyValues(row, 1, &value, &col);
116 }
117
118 extern "C"
119 void Paso_TRILINOS(Paso_SystemMatrix* A,
120 double* out,
121 double* in,
122 Paso_Options* options,
123 Paso_Performance* pp) {
124 #ifdef TRILINOS
125 #else
126 Paso_setError(SYSTEM_ERROR,"Paso_TRILINOS: TRILINOS is not available.");
127 #endif
128 }
129
130 extern "C"
131 void Paso_TRILINOS_free(double* in) {
132 #ifdef TRILINOS
133 #endif
134 }
135
136 #endif /* ifdef TRILINOS */
137

  ViewVC Help
Powered by ViewVC 1.1.26