Changeset 16415


Ignore:
Timestamp:
10/15/13 15:31:25 (11 years ago)
Author:
Eric.Larour
Message:

NEW: implemented new IssmMpiSparseMat format. Switched the mumps solver to this new format.

Location:
issm/trunk-jpl/src
Files:
4 added
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/Makefile.am

    r16413 r16415  
    229229                                        ./toolkits/issm/IssmSolver.h\
    230230                                        ./toolkits/issm/IssmSolver.cpp\
     231                                        ./toolkits/issm/SparseRow.h\
    231232                                        ./toolkits/issm/Bucket.h\
    232233                                        ./toolkits/mpi/issmmpi.h\
     
    804805mumps_sources=      ./toolkits/mumps\
    805806                                        ./toolkits/mumps/mumpsincludes.h\
    806                                         ./toolkits/mumps/MpiDenseMumpsSolve.cpp
     807                                        ./toolkits/mumps/MumpsSolve.cpp
    807808#}}}
    808809#Gsl sources  {{{
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r16407 r16415  
    627627        DenseEnum,
    628628        MpiDenseEnum,
     629        MpiSparseEnum,
    629630        SeqEnum,
    630631        MpiEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r16407 r16415  
    599599                case DenseEnum : return "Dense";
    600600                case MpiDenseEnum : return "MpiDense";
     601                case MpiSparseEnum : return "MpiSparse";
    601602                case SeqEnum : return "Seq";
    602603                case MpiEnum : return "Mpi";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r16407 r16415  
    611611              else if (strcmp(name,"Dense")==0) return DenseEnum;
    612612              else if (strcmp(name,"MpiDense")==0) return MpiDenseEnum;
     613              else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum;
    613614              else if (strcmp(name,"Seq")==0) return SeqEnum;
    614615              else if (strcmp(name,"Mpi")==0) return MpiEnum;
  • issm/trunk-jpl/src/c/toolkits/issm/IssmMat.h

    r15358 r16415  
    2929template <class doubletype> class IssmDenseMat;
    3030template <class doubletype> class IssmMpiDenseMat;
     31template <class doubletype> class IssmMpiSparseMat;
    3132class Parameters;
    3233
     
    5354                                        #endif
    5455                                        break;
     56                                case MpiSparseEnum:
     57                                        #ifdef _HAVE_MPI_
     58                                        this->matrix=new IssmMpiSparseMat<doubletype>();
     59                                        #else
     60                                        _error_("MpiSparse matrix requires compilation of MPI!");
     61                                        #endif
     62                                        break;
    5563                                default:
    5664                                        _error_("matrix type not supported yet!");
     
    7280                                        #endif
    7381                                        break;
     82                                case MpiSparseEnum:
     83                                        #ifdef _HAVE_MPI_
     84                                        this->matrix=new IssmMpiSparseMat<doubletype>(M,N);
     85                                        #else
     86                                        _error_("MpiSparse matrix requires compilation of MPI!");
     87                                        #endif
     88                                        break;
    7489                                default:
    7590                                        _error_("matrix type not supported yet!");
     
    91106                                        #endif
    92107                                        break;
     108                                case MpiSparseEnum:
     109                                        #ifdef _HAVE_MPI_
     110                                        this->matrix=new IssmMpiSparseMat<doubletype>(M,N,sparsity);
     111                                        #else
     112                                        _error_("MpiSparse matrix requires compilation of MPI!");
     113                                        #endif
     114                                        break;
    93115                                default:
    94116                                        _error_("matrix type not supported yet!");
     
    110132                                        #endif
    111133                                        break;
     134                                case MpiSparseEnum:
     135                                        #ifdef _HAVE_MPI_
     136                                        this->matrix=new IssmMpiSparseMat<doubletype>(m,n,M,N,d_nnz,o_nnz);
     137                                        #else
     138                                        _error_("MpiSparse matrix requires compilation of MPI!");
     139                                        #endif
     140                                        break;
    112141                                default:
    113142                                        _error_("matrix type not supported yet!");
     
    129158                                        #endif
    130159                                        break;
     160                                case MpiSparseEnum:
     161                                        #ifdef _HAVE_MPI_
     162                                        this->matrix=new IssmMpiSparseMat<doubletype>(serial_mat,M,N,sparsity);
     163                                        #else
     164                                        _error_("MpiSparse matrix requires compilation of MPI!");
     165                                        #endif
     166                                        break;
    131167                                default:
    132168                                        _error_("matrix type not supported yet!");
     
    147183                                        #else
    148184                                        _error_("MpiDense matrix requires compilation of MPI!");
     185                                        #endif
     186                                        break;
     187                                case MpiSparseEnum:
     188                                        #ifdef _HAVE_MPI_
     189                                        this->matrix=new IssmMpiSparseMat<doubletype>(M,N,connectivity,numberofdofspernode);
     190                                        #else
     191                                        _error_("MpiSparse matrix requires compilation of MPI!");
    149192                                        #endif
    150193                                        break;
  • issm/trunk-jpl/src/c/toolkits/issm/IssmMpiDenseMat.h

    r16152 r16415  
    146146                                        _printf_("cpu " << i << " #rows: " << this->m << "\n");
    147147                                        for (j=0;j<this->m;j++){
    148                                                 _printf_("row " << j << "\n");
     148                                                _printf_("row " << j << ":");
    149149                                                for (k=0;k<this->N;k++){
    150                                                         _printf_(this->matrix[j*this->N+k] << " \n");
     150                                                        if(this->matrix[j*this->N+k]!=0)_printf_("(" << k << "," << this->matrix[j*this->N+k] << ") ");
    151151                                                }
    152152                                                _printf_("\n");
  • issm/trunk-jpl/src/c/toolkits/issm/IssmToolkitUtils.cpp

    r16144 r16415  
    3838        if (strcmp(mat_type,"mpidense")==0){
    3939                mat_type_enum=MpiDenseEnum;
     40        }
     41        else if (strcmp(mat_type,"mpisparse")==0){
     42                mat_type_enum=MpiSparseEnum;
    4043        }
    4144        else if (strcmp(mat_type,"dense")==0){
  • issm/trunk-jpl/src/c/toolkits/issm/issmtoolkit.h

    r14792 r16415  
    2222#ifdef _HAVE_MPI_
    2323#include "./IssmMpiDenseMat.h"
     24#include "./IssmMpiSparseMat.h"
    2425#include "./IssmMpiVec.h"
    2526#endif
  • issm/trunk-jpl/src/c/toolkits/mumps/mumpsincludes.h

    r16070 r16415  
    1717
    1818class Parameters;
     19template <class doubletype> class SparseRow;
    1920
    2021void MpiDenseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, IssmDouble* Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters);
     22void MpiSparseMumpsSolve(IssmDouble* uf,int uf_M,int uf_n, SparseRow<IssmDouble>** Kff,int Kff_M, int Kff_N, int Kff_m, IssmDouble* pf, int pf_M, int pf_m, Parameters* parameters);
    2123
    2224#if defined(_HAVE_ADOLC_) && !defined(_WRAPPERS_)
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r16407 r16415  
    591591def DenseEnum(): return StringToEnum("Dense")[0]
    592592def MpiDenseEnum(): return StringToEnum("MpiDense")[0]
     593def MpiSparseEnum(): return StringToEnum("MpiSparse")[0]
    593594def SeqEnum(): return StringToEnum("Seq")[0]
    594595def MpiEnum(): return StringToEnum("Mpi")[0]
  • issm/trunk-jpl/src/m/solvers/issmmumpssolver.m

    r16191 r16415  
    1111%default issmoptions options
    1212issmoptions.toolkit='issm';
    13 issmoptions.mat_type=getfieldvalue(options,'mat_type','mpidense');
     13issmoptions.mat_type=getfieldvalue(options,'mat_type','mpisparse');
    1414issmoptions.vec_type=getfieldvalue(options,'vec_type','mpi');
    1515issmoptions.solver_type=getfieldvalue(options,'solver_type','mumps');
Note: See TracChangeset for help on using the changeset viewer.