/[escript]/trunk/finley/src/CPPAdapter/MeshAdapter.cpp
ViewVC logotype

Diff of /trunk/finley/src/CPPAdapter/MeshAdapter.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2989 by gross, Thu Mar 18 01:45:55 2010 UTC revision 3355 by caltinay, Tue Nov 16 06:35:06 2010 UTC
# Line 18  Line 18 
18  #ifdef USE_NETCDF  #ifdef USE_NETCDF
19  #include <netcdfcpp.h>  #include <netcdfcpp.h>
20  #endif  #endif
 #ifdef PASO_MPI  
 #include <mpi.h>  
 #include "paso/Paso_MPI.h"  
 #endif  
21  extern "C" {  extern "C" {
22  #include "esysUtils/blocktimer.h"  #include "esysUtils/blocktimer.h"
23  }  }
24    
25    #include <boost/python/import.hpp>
26    
27  using namespace std;  using namespace std;
28  using namespace escript;  using namespace escript;
29    
# Line 85  int MeshAdapter::getMPIRank() const Line 83  int MeshAdapter::getMPIRank() const
83  }  }
84  void MeshAdapter::MPIBarrier() const  void MeshAdapter::MPIBarrier() const
85  {  {
86  #ifdef PASO_MPI  #ifdef ESYS_MPI
87     MPI_Barrier(m_finleyMesh.get()->MPIInfo->comm);     MPI_Barrier(m_finleyMesh.get()->MPIInfo->comm);
88  #endif  #endif
89     return;     return;
# Line 96  bool MeshAdapter::onMasterProcessor() co Line 94  bool MeshAdapter::onMasterProcessor() co
94  }  }
95    
96    
97  #ifdef PASO_MPI  #ifdef ESYS_MPI
98    MPI_Comm    MPI_Comm
99  #else  #else
100    unsigned int    unsigned int
101  #endif  #endif
102  MeshAdapter::getMPIComm() const  MeshAdapter::getMPIComm() const
103  {  {
104  #ifdef PASO_MPI  #ifdef ESYS_MPI
105      return m_finleyMesh->MPIInfo->comm;      return m_finleyMesh->MPIInfo->comm;
106  #else  #else
107      return 0;      return 0;
# Line 149  void MeshAdapter::dump(const string& fil Line 147  void MeshAdapter::dump(const string& fil
147     int num_Elements_numNodes        = mesh->Elements->numNodes;     int num_Elements_numNodes        = mesh->Elements->numNodes;
148     int num_FaceElements_numNodes    = mesh->FaceElements->numNodes;     int num_FaceElements_numNodes    = mesh->FaceElements->numNodes;
149     int num_ContactElements_numNodes = mesh->ContactElements->numNodes;     int num_ContactElements_numNodes = mesh->ContactElements->numNodes;
150  #ifdef PASO_MPI  #ifdef ESYS_MPI
151     MPI_Status status;     MPI_Status status;
152  #endif  #endif
153    
154  /* Incoming token indicates it's my turn to write */  /* Incoming token indicates it's my turn to write */
155  #ifdef PASO_MPI  #ifdef ESYS_MPI
156     if (mpi_rank>0) MPI_Recv(&num_Tags, 0, MPI_INT, mpi_rank-1, 81800, mesh->MPIInfo->comm, &status);     if (mpi_rank>0) MPI_Recv(&num_Tags, 0, MPI_INT, mpi_rank-1, 81800, mesh->MPIInfo->comm, &status);
157  #endif  #endif
158    
159     char *newFileName = Paso_MPI_appendRankToFileName(fileName.c_str(),     char *newFileName = Esys_MPI_appendRankToFileName(fileName.c_str(),
160                                                       mpi_size, mpi_rank);                                                       mpi_size, mpi_rank);
161    
162     /* Figure out how much storage is required for tags */     /* Figure out how much storage is required for tags */
# Line 529  void MeshAdapter::dump(const string& fil Line 527  void MeshAdapter::dump(const string& fil
527     }     }
528    
529  /* Send token to next MPI process so he can take his turn */  /* Send token to next MPI process so he can take his turn */
530  #ifdef PASO_MPI  #ifdef ESYS_MPI
531     if (mpi_rank<mpi_size-1) MPI_Send(&num_Tags, 0, MPI_INT, mpi_rank+1, 81800, mesh->MPIInfo->comm);     if (mpi_rank<mpi_size-1) MPI_Send(&num_Tags, 0, MPI_INT, mpi_rank+1, 81800, mesh->MPIInfo->comm);
532  #endif  #endif
533    
# Line 770  pair<int,int> MeshAdapter::getDataShape( Line 768  pair<int,int> MeshAdapter::getDataShape(
768  // adds linear PDE of second order into a given stiffness matrix and right hand side:  // adds linear PDE of second order into a given stiffness matrix and right hand side:
769  //  //
770  void MeshAdapter::addPDEToSystem(  void MeshAdapter::addPDEToSystem(
771                                   SystemMatrixAdapter& mat, escript::Data& rhs,                                   AbstractSystemMatrix& mat, escript::Data& rhs,
772                                   const escript::Data& A, const escript::Data& B, const escript::Data& C,const  escript::Data& D,const  escript::Data& X,const  escript::Data& Y,                                   const escript::Data& A, const escript::Data& B, const escript::Data& C,const  escript::Data& D,const  escript::Data& X,const  escript::Data& Y,
773                                   const escript::Data& d, const escript::Data& y,                                   const escript::Data& d, const escript::Data& y,
774                                   const escript::Data& d_contact,const escript::Data& y_contact) const                                   const escript::Data& d_contact,const escript::Data& y_contact) const
775  {  {
776       SystemMatrixAdapter* smat=dynamic_cast<SystemMatrixAdapter*>(&mat);
777       if (smat==0)
778       {
779        throw FinleyAdapterException("finley only supports its own system matrices.");
780       }
781     escriptDataC _rhs=rhs.getDataC();     escriptDataC _rhs=rhs.getDataC();
782     escriptDataC _A  =A.getDataC();     escriptDataC _A  =A.getDataC();
783     escriptDataC _B=B.getDataC();     escriptDataC _B=B.getDataC();
# Line 789  void MeshAdapter::addPDEToSystem( Line 792  void MeshAdapter::addPDEToSystem(
792    
793     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
794    
795     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getPaso_SystemMatrix(), &_rhs, &_A, &_B, &_C, &_D, &_X, &_Y );     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,smat->getPaso_SystemMatrix(), &_rhs, &_A, &_B, &_C, &_D, &_X, &_Y );
796     checkFinleyError();     checkFinleyError();
797    
798     Finley_Assemble_PDE(mesh->Nodes,mesh->FaceElements, mat.getPaso_SystemMatrix(), &_rhs, 0, 0, 0, &_d, 0, &_y );     Finley_Assemble_PDE(mesh->Nodes,mesh->FaceElements, smat->getPaso_SystemMatrix(), &_rhs, 0, 0, 0, &_d, 0, &_y );
799     checkFinleyError();     checkFinleyError();
800    
801     Finley_Assemble_PDE(mesh->Nodes,mesh->ContactElements, mat.getPaso_SystemMatrix(), &_rhs , 0, 0, 0, &_d_contact, 0, &_y_contact );     Finley_Assemble_PDE(mesh->Nodes,mesh->ContactElements, smat->getPaso_SystemMatrix(), &_rhs , 0, 0, 0, &_d_contact, 0, &_y_contact );
802     checkFinleyError();     checkFinleyError();
803  }  }
804    
# Line 845  void MeshAdapter::addPDEToRHS( escript:: Line 848  void MeshAdapter::addPDEToRHS( escript::
848  // adds PDE of second order into a transport problem  // adds PDE of second order into a transport problem
849  //  //
850  void MeshAdapter::addPDEToTransportProblem(  void MeshAdapter::addPDEToTransportProblem(
851                                             TransportProblemAdapter& tp, escript::Data& source, const escript::Data& M,                                             AbstractTransportProblem& tp, escript::Data& source, const escript::Data& M,
852                                             const escript::Data& A, const escript::Data& B, const escript::Data& C,                                             const escript::Data& A, const escript::Data& B, const escript::Data& C,
853                                             const  escript::Data& D,const  escript::Data& X,const  escript::Data& Y,                                             const  escript::Data& D,const  escript::Data& X,const  escript::Data& Y,
854                                             const escript::Data& d, const escript::Data& y,                                             const escript::Data& d, const escript::Data& y,
855                                             const escript::Data& d_contact,const escript::Data& y_contact) const                                             const escript::Data& d_contact,const escript::Data& y_contact) const
856  {  {
857       TransportProblemAdapter* tpa=dynamic_cast<TransportProblemAdapter*>(&tp);
858       if (tpa==0)
859       {
860        throw FinleyAdapterException("finley only supports its own transport problems.");
861       }
862    
863    
864     DataTypes::ShapeType shape;     DataTypes::ShapeType shape;
865     source.expand();     source.expand();
866     escriptDataC _source=source.getDataC();     escriptDataC _source=source.getDataC();
# Line 867  void MeshAdapter::addPDEToTransportProbl Line 877  void MeshAdapter::addPDEToTransportProbl
877     escriptDataC _y_contact=y_contact.getDataC();     escriptDataC _y_contact=y_contact.getDataC();
878    
879     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
880     Paso_TransportProblem* _tp = tp.getPaso_TransportProblem();     Paso_TransportProblem* _tp = tpa->getPaso_TransportProblem();
881    
882     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,_tp->mass_matrix, &_source, 0, 0, 0, &_M, 0, 0 );     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,_tp->mass_matrix, &_source, 0, 0, 0, &_M, 0, 0 );
883     checkFinleyError();     checkFinleyError();
# Line 1044  void MeshAdapter::interpolateOnDomain(es Line 1054  void MeshAdapter::interpolateOnDomain(es
1054        case(Elements):        case(Elements):
1055        case(ReducedElements):        case(ReducedElements):
1056        if (getMPISize()>1) {        if (getMPISize()>1) {
1057           escript::Data temp=escript::Data( in,  continuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  continuousFunction(*this) );
1058           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1059           Finley_Assemble_interpolate(mesh->Nodes,mesh->Elements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->Elements,&_in2,&_target);
1060        } else {        } else {
# Line 1054  void MeshAdapter::interpolateOnDomain(es Line 1064  void MeshAdapter::interpolateOnDomain(es
1064        case(FaceElements):        case(FaceElements):
1065        case(ReducedFaceElements):        case(ReducedFaceElements):
1066        if (getMPISize()>1) {        if (getMPISize()>1) {
1067           escript::Data temp=escript::Data( in,  continuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  continuousFunction(*this) );
1068           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1069           Finley_Assemble_interpolate(mesh->Nodes,mesh->FaceElements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->FaceElements,&_in2,&_target);
1070        
# Line 1064  void MeshAdapter::interpolateOnDomain(es Line 1074  void MeshAdapter::interpolateOnDomain(es
1074        break;        break;
1075        case(Points):        case(Points):
1076        if (getMPISize()>1) {        if (getMPISize()>1) {
1077           escript::Data temp=escript::Data( in,  continuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  continuousFunction(*this) );
1078           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1079        } else {        } else {
1080           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in,&_target);
# Line 1075  void MeshAdapter::interpolateOnDomain(es Line 1085  void MeshAdapter::interpolateOnDomain(es
1085        case(ReducedContactElementsZero):        case(ReducedContactElementsZero):
1086        case(ReducedContactElementsOne):        case(ReducedContactElementsOne):
1087        if (getMPISize()>1) {        if (getMPISize()>1) {
1088           escript::Data temp=escript::Data( in,  continuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  continuousFunction(*this) );
1089           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1090           Finley_Assemble_interpolate(mesh->Nodes,mesh->ContactElements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->ContactElements,&_in2,&_target);
1091        } else {        } else {
# Line 1113  void MeshAdapter::interpolateOnDomain(es Line 1123  void MeshAdapter::interpolateOnDomain(es
1123        case(Elements):        case(Elements):
1124        case(ReducedElements):        case(ReducedElements):
1125        if (getMPISize()>1) {        if (getMPISize()>1) {
1126           escript::Data temp=escript::Data( in,  reducedContinuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  reducedContinuousFunction(*this) );
1127           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1128           Finley_Assemble_interpolate(mesh->Nodes,mesh->Elements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->Elements,&_in2,&_target);
1129        } else {        } else {
# Line 1123  void MeshAdapter::interpolateOnDomain(es Line 1133  void MeshAdapter::interpolateOnDomain(es
1133        case(FaceElements):        case(FaceElements):
1134        case(ReducedFaceElements):        case(ReducedFaceElements):
1135        if (getMPISize()>1) {        if (getMPISize()>1) {
1136           escript::Data temp=escript::Data( in,  reducedContinuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  reducedContinuousFunction(*this) );
1137           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1138           Finley_Assemble_interpolate(mesh->Nodes,mesh->FaceElements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->FaceElements,&_in2,&_target);
1139        } else {        } else {
# Line 1132  void MeshAdapter::interpolateOnDomain(es Line 1142  void MeshAdapter::interpolateOnDomain(es
1142        break;        break;
1143        case(Points):        case(Points):
1144        if (getMPISize()>1) {        if (getMPISize()>1) {
1145           escript::Data temp=escript::Data( in,  reducedContinuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  reducedContinuousFunction(*this) );
1146           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1147           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->Points,&_in2,&_target);
1148        } else {        } else {
# Line 1144  void MeshAdapter::interpolateOnDomain(es Line 1154  void MeshAdapter::interpolateOnDomain(es
1154        case(ReducedContactElementsZero):        case(ReducedContactElementsZero):
1155        case(ReducedContactElementsOne):        case(ReducedContactElementsOne):
1156        if (getMPISize()>1) {        if (getMPISize()>1) {
1157           escript::Data temp=escript::Data( in,  reducedContinuousFunction(asAbstractContinuousDomain()) );           escript::Data temp=escript::Data( in,  reducedContinuousFunction(*this) );
1158           escriptDataC _in2 = temp.getDataC();           escriptDataC _in2 = temp.getDataC();
1159           Finley_Assemble_interpolate(mesh->Nodes,mesh->ContactElements,&_in2,&_target);           Finley_Assemble_interpolate(mesh->Nodes,mesh->ContactElements,&_in2,&_target);
1160        } else {        } else {
# Line 1181  void MeshAdapter::setToX(escript::Data& Line 1191  void MeshAdapter::setToX(escript::Data&
1191        escriptDataC _arg=arg.getDataC();        escriptDataC _arg=arg.getDataC();
1192        Finley_Assemble_NodeCoordinates(mesh->Nodes,&_arg);        Finley_Assemble_NodeCoordinates(mesh->Nodes,&_arg);
1193     } else {     } else {
1194        escript::Data tmp_data=Vector(0.0,continuousFunction(asAbstractContinuousDomain()),true);        escript::Data tmp_data=Vector(0.0,continuousFunction(*this),true);
1195        escriptDataC _tmp_data=tmp_data.getDataC();        escriptDataC _tmp_data=tmp_data.getDataC();
1196        Finley_Assemble_NodeCoordinates(mesh->Nodes,&_tmp_data);        Finley_Assemble_NodeCoordinates(mesh->Nodes,&_tmp_data);
1197        // this is then interpolated onto arg:        // this is then interpolated onto arg:
# Line 1275  void MeshAdapter::setToIntegrals(vector< Line 1285  void MeshAdapter::setToIntegrals(vector<
1285     escriptDataC _arg=arg.getDataC();     escriptDataC _arg=arg.getDataC();
1286     switch(arg.getFunctionSpace().getTypeCode()) {     switch(arg.getFunctionSpace().getTypeCode()) {
1287     case(Nodes):     case(Nodes):
1288     temp=escript::Data( arg, escript::function(asAbstractContinuousDomain()) );     temp=escript::Data( arg, escript::function(*this) );
1289     _temp=temp.getDataC();     _temp=temp.getDataC();
1290     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);
1291     break;     break;
1292     case(ReducedNodes):     case(ReducedNodes):
1293     temp=escript::Data( arg, escript::function(asAbstractContinuousDomain()) );     temp=escript::Data( arg, escript::function(*this) );
1294     _temp=temp.getDataC();     _temp=temp.getDataC();
1295     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);
1296     break;     break;
# Line 1312  void MeshAdapter::setToIntegrals(vector< Line 1322  void MeshAdapter::setToIntegrals(vector<
1322     Finley_Assemble_integrate(mesh->Nodes,mesh->ContactElements,&_arg,&integrals[0]);     Finley_Assemble_integrate(mesh->Nodes,mesh->ContactElements,&_arg,&integrals[0]);
1323     break;     break;
1324     case(DegreesOfFreedom):     case(DegreesOfFreedom):
1325     temp=escript::Data( arg, escript::function(asAbstractContinuousDomain()) );     temp=escript::Data( arg, escript::function(*this) );
1326     _temp=temp.getDataC();     _temp=temp.getDataC();
1327     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);
1328     break;     break;
1329     case(ReducedDegreesOfFreedom):     case(ReducedDegreesOfFreedom):
1330     temp=escript::Data( arg, escript::function(asAbstractContinuousDomain()) );     temp=escript::Data( arg, escript::function(*this) );
1331     _temp=temp.getDataC();     _temp=temp.getDataC();
1332     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);     Finley_Assemble_integrate(mesh->Nodes,mesh->Elements,&_temp,&integrals[0]);
1333     break;     break;
# Line 1349  void MeshAdapter::setToGradient(escript: Line 1359  void MeshAdapter::setToGradient(escript:
1359     escript::Data temp;     escript::Data temp;
1360     if (getMPISize()>1) {     if (getMPISize()>1) {
1361        if( arg.getFunctionSpace().getTypeCode() == DegreesOfFreedom ) {        if( arg.getFunctionSpace().getTypeCode() == DegreesOfFreedom ) {
1362           temp=escript::Data( arg,  continuousFunction(asAbstractContinuousDomain()) );           temp=escript::Data( arg,  continuousFunction(*this) );
1363           nodeDataC = temp.getDataC();           nodeDataC = temp.getDataC();
1364        } else if( arg.getFunctionSpace().getTypeCode() == ReducedDegreesOfFreedom ) {        } else if( arg.getFunctionSpace().getTypeCode() == ReducedDegreesOfFreedom ) {
1365           temp=escript::Data( arg,  reducedContinuousFunction(asAbstractContinuousDomain()) );           temp=escript::Data( arg,  reducedContinuousFunction(*this) );
1366           nodeDataC = temp.getDataC();           nodeDataC = temp.getDataC();
1367        } else {        } else {
1368           nodeDataC = arg.getDataC();           nodeDataC = arg.getDataC();
# Line 1471  void MeshAdapter::setNewX(const escript: Line 1481  void MeshAdapter::setNewX(const escript:
1481     const MeshAdapter& newDomain=dynamic_cast<const MeshAdapter&>(*(new_x.getFunctionSpace().getDomain()));     const MeshAdapter& newDomain=dynamic_cast<const MeshAdapter&>(*(new_x.getFunctionSpace().getDomain()));
1482     if (newDomain!=*this)     if (newDomain!=*this)
1483        throw FinleyAdapterException("Error - Illegal domain of new point locations");        throw FinleyAdapterException("Error - Illegal domain of new point locations");
1484     if ( new_x.getFunctionSpace() == continuousFunction(asAbstractContinuousDomain()) ) {     if ( new_x.getFunctionSpace() == continuousFunction(*this) ) {
1485         tmp = new_x.getDataC();         tmp = new_x.getDataC();
1486         Finley_Mesh_setCoordinates(mesh,&tmp);         Finley_Mesh_setCoordinates(mesh,&tmp);
1487     } else {     } else {
1488         escript::Data new_x_inter=escript::Data( new_x,  continuousFunction(asAbstractContinuousDomain()) );         escript::Data new_x_inter=escript::Data( new_x,  continuousFunction(*this) );
1489         tmp = new_x_inter.getDataC();         tmp = new_x_inter.getDataC();
1490         Finley_Mesh_setCoordinates(mesh,&tmp);         Finley_Mesh_setCoordinates(mesh,&tmp);
1491     }     }
# Line 1538  void MeshAdapter::saveDX(const string& f Line 1548  void MeshAdapter::saveDX(const string& f
1548  //  //
1549  void MeshAdapter::saveVTK(const string& filename,const boost::python::dict& arg,  const string& metadata, const string& metadata_schema) const  void MeshAdapter::saveVTK(const string& filename,const boost::python::dict& arg,  const string& metadata, const string& metadata_schema) const
1550  {  {
1551     int num_data;      boost::python::object pySaveVTK = boost::python::import("esys.weipa").attr("_saveVTK");
1552     char **names;      pySaveVTK(filename, const_cast<MeshAdapter*>(this)->getPtr(),
1553     escriptDataC *data;                metadata, metadata_schema, arg);
    escriptDataC **ptr_data;  
   
    extractArgsFromDict(arg, num_data, names, data, ptr_data);  
    Finley_Mesh_saveVTK(filename.c_str(), m_finleyMesh.get(), num_data, names, ptr_data, metadata.c_str(), metadata_schema.c_str());  
    checkFinleyError();  
   
    /* win32 refactor */  
    TMPMEMFREE(data);  
    TMPMEMFREE(ptr_data);  
    for(int i=0; i<num_data; i++)  
    {  
       TMPMEMFREE(names[i]);  
    }  
    TMPMEMFREE(names);  
1554  }  }
1555    
1556  bool MeshAdapter::ownSample(int fs_code, index_t id) const  bool MeshAdapter::ownSample(int fs_code, index_t id) const
1557  {  {
1558  #ifdef PASO_MPI  #ifdef ESYS_MPI
1559      index_t myFirstNode=0, myLastNode=0, k=0;      index_t myFirstNode=0, myLastNode=0, k=0;
1560      index_t* globalNodeIndex=0;      index_t* globalNodeIndex=0;
1561      Finley_Mesh* mesh_p=m_finleyMesh.get();      Finley_Mesh* mesh_p=m_finleyMesh.get();
# Line 1586  bool MeshAdapter::ownSample(int fs_code, Line 1582  bool MeshAdapter::ownSample(int fs_code,
1582  //  //
1583  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros  // creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros
1584  //  //
1585  SystemMatrixAdapter MeshAdapter::newSystemMatrix(  ASM_ptr MeshAdapter::newSystemMatrix(
1586                                                   const int row_blocksize,                                                   const int row_blocksize,
1587                                                   const escript::FunctionSpace& row_functionspace,                                                   const escript::FunctionSpace& row_functionspace,
1588                                                   const int column_blocksize,                                                   const int column_blocksize,
# Line 1633  SystemMatrixAdapter MeshAdapter::newSyst Line 1629  SystemMatrixAdapter MeshAdapter::newSyst
1629     }     }
1630     checkPasoError();     checkPasoError();
1631     Paso_SystemMatrixPattern_free(fsystemMatrixPattern);     Paso_SystemMatrixPattern_free(fsystemMatrixPattern);
1632     return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);     SystemMatrixAdapter* sma=new SystemMatrixAdapter(fsystemMatrix, row_blocksize, row_functionspace, column_blocksize, column_functionspace);
1633       return ASM_ptr(sma);
1634    //   return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);
1635  }  }
1636    
1637  //  //
1638  // creates a TransportProblemAdapter  // creates a TransportProblemAdapter
1639  //  //
1640  TransportProblemAdapter MeshAdapter::newTransportProblem(  ATP_ptr MeshAdapter::newTransportProblem(
1641                                                           const bool useBackwardEuler,                                                           const bool useBackwardEuler,
1642                                                           const int blocksize,                                                           const int blocksize,
1643                                                           const escript::FunctionSpace& functionspace,                                                           const escript::FunctionSpace& functionspace,
# Line 1666  TransportProblemAdapter MeshAdapter::new Line 1664  TransportProblemAdapter MeshAdapter::new
1664     transportProblem=Paso_TransportProblem_alloc(useBackwardEuler,fsystemMatrixPattern,blocksize);     transportProblem=Paso_TransportProblem_alloc(useBackwardEuler,fsystemMatrixPattern,blocksize);
1665     checkPasoError();     checkPasoError();
1666     Paso_SystemMatrixPattern_free(fsystemMatrixPattern);     Paso_SystemMatrixPattern_free(fsystemMatrixPattern);
1667     return TransportProblemAdapter(transportProblem,useBackwardEuler,blocksize,functionspace);     TransportProblemAdapter* tpa=new TransportProblemAdapter(transportProblem,useBackwardEuler,blocksize,functionspace);
1668       return ATP_ptr(tpa);
1669    //   return TransportProblemAdapter(transportProblem,useBackwardEuler,blocksize,functionspace);
1670  }  }
1671    
1672  //  //
# Line 2039  int MeshAdapter::getTransportTypeId(cons Line 2039  int MeshAdapter::getTransportTypeId(cons
2039    
2040  escript::Data MeshAdapter::getX() const  escript::Data MeshAdapter::getX() const
2041  {  {
2042     return continuousFunction(asAbstractContinuousDomain()).getX();     return continuousFunction(*this).getX();
2043  }  }
2044    
2045  escript::Data MeshAdapter::getNormal() const  escript::Data MeshAdapter::getNormal() const
2046  {  {
2047     return functionOnBoundary(asAbstractContinuousDomain()).getNormal();     return functionOnBoundary(*this).getNormal();
2048  }  }
2049    
2050  escript::Data MeshAdapter::getSize() const  escript::Data MeshAdapter::getSize() const
2051  {  {
2052     return escript::function(asAbstractContinuousDomain()).getSize();     return escript::function(*this).getSize();
2053  }  }
2054    
2055  const int* MeshAdapter::borrowSampleReferenceIDs(int functionSpaceType) const  const int* MeshAdapter::borrowSampleReferenceIDs(int functionSpaceType) const
# Line 2397  int MeshAdapter::getApproximationOrder(c Line 2397  int MeshAdapter::getApproximationOrder(c
2397    return order;    return order;
2398  }  }
2399    
2400  ReferenceElementSetWrapper::ReferenceElementSetWrapper(ElementTypeId id, index_t order, index_t reducedOrder)  bool MeshAdapter::supportsContactElements() const
2401    {
2402      return true;
2403    }
2404    
2405    ReferenceElementSetWrapper::ReferenceElementSetWrapper(Finley_ElementTypeId id, index_t order, index_t reducedOrder)
2406  {  {
2407    m_refSet = Finley_ReferenceElementSet_alloc(id, order, reducedOrder);    m_refSet = Finley_ReferenceElementSet_alloc(id, order, reducedOrder);
2408  }  }

Legend:
Removed from v.2989  
changed lines
  Added in v.3355

  ViewVC Help
Powered by ViewVC 1.1.26