/[escript]/branches/domexper/dudley/src/CPPAdapter/MeshAdapter.cpp
ViewVC logotype

Diff of /branches/domexper/dudley/src/CPPAdapter/MeshAdapter.cpp

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

revision 101 by jgs, Wed Dec 15 03:48:48 2004 UTC revision 102 by jgs, Wed Dec 15 07:08:39 2004 UTC
# Line 1  Line 1 
1    // $Id$
2  /*  /*
3   ******************************************************************************   ******************************************************************************
4   *                                                                            *   *                                                                            *
# Line 196  int MeshAdapter::getTagFromSampleNo(int Line 197  int MeshAdapter::getTagFromSampleNo(int
197  void MeshAdapter::getTagList(int functionSpaceType, int** tagList,  void MeshAdapter::getTagList(int functionSpaceType, int** tagList,
198                   int* numTags) const                   int* numTags) const
199  {  {
200    **tagList=0;    *tagList=NULL;
201    *numTags=0;    *numTags=0;
202    Finley_Mesh* mesh=m_finleyMesh.get();    Finley_Mesh* mesh=m_finleyMesh.get();
203    switch (functionSpaceType) {    switch (functionSpaceType) {
# Line 337  pair<int,int> MeshAdapter::getDataShape( Line 338  pair<int,int> MeshAdapter::getDataShape(
338  //  //
339  void MeshAdapter::addPDEToSystem(  void MeshAdapter::addPDEToSystem(
340                       SystemMatrixAdapter& mat, Data& rhs,                       SystemMatrixAdapter& mat, Data& rhs,
341                       const Data& A, const Data& B, const Data& C,const  Data& D,const  Data& X,const  Data& Y) const                       const Data& A, const Data& B, const Data& C,const  Data& D,const  Data& X,const  Data& Y,
342                         const Data& d, const Data& y,
343                         const Data& d_contact,const Data& y_contact) const
344  {  {
345     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
346     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getFinley_SystemMatrix(),&(rhs.getDataC()),     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getFinley_SystemMatrix(),&(rhs.getDataC()),
347                         &(A.getDataC()),&(B.getDataC()),&(C.getDataC()),&(D.getDataC()),&(X.getDataC()),&(Y.getDataC()));                         &(A.getDataC()),&(B.getDataC()),&(C.getDataC()),&(D.getDataC()),&(X.getDataC()),&(Y.getDataC()));
348     checkFinleyError();     checkFinleyError();
 }  
 //  
 // adds Robin boundary conditions as natural boundary condition into a given stiffness matrix and right hand side:  
 //  
 void MeshAdapter::addRobinConditionsToSystem(  
                      SystemMatrixAdapter& mat, Data& rhs,  
                      const Data& d, const Data& y) const  
 {  
    Finley_Mesh* mesh=m_finleyMesh.get();  
349     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,
350                    mat.getFinley_SystemMatrix(),                    mat.getFinley_SystemMatrix(),
351                    &(rhs.getDataC()),                    &(rhs.getDataC()),
352                                    &(d.getDataC()),&(y.getDataC()),                                    &(d.getDataC()),&(y.getDataC()),
353                                    Finley_Assemble_handelShapeMissMatch_Mean_out);                                    Finley_Assemble_handelShapeMissMatch_Mean_out);
354     checkFinleyError();     checkFinleyError();
 }  
 //  
 // adds contact conditions as natural boundary condition into a given stiffness matrix and right hand side:  
 //  
 void MeshAdapter::addContactToSystem(  
                      SystemMatrixAdapter& mat, Data& rhs,  
                      const Data& d_contact,const Data& y_contact) const  
 {  
    Finley_Mesh* mesh=m_finleyMesh.get();  
355     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,
356                    mat.getFinley_SystemMatrix(),                    mat.getFinley_SystemMatrix(),
357                    &(rhs.getDataC()),                    &(rhs.getDataC()),
# Line 376  void MeshAdapter::addContactToSystem( Line 361  void MeshAdapter::addContactToSystem(
361     checkFinleyError();     checkFinleyError();
362  }  }
363  //  //
364    // adds linear PDE of second order into the right hand side only
365    //
366    void MeshAdapter::addPDEToRHS( Data& rhs,
367                         const  Data& X,const  Data& Y, const Data& y, const Data& y_contact) const
368    {
369       Finley_Mesh* mesh=m_finleyMesh.get();
370       Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,0,&(rhs.getDataC()),0,0,0,0,&(X.getDataC()),&(Y.getDataC()));
371       checkFinleyError();
372       Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,0,&(rhs.getDataC()),0,&(y.getDataC()),
373                                      Finley_Assemble_handelShapeMissMatch_Mean_out);
374    // cout << "Calling :addPDEToRHS." << endl;
375       checkFinleyError();
376       Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,0,&(rhs.getDataC()),0,&(y_contact.getDataC()),
377                                      Finley_Assemble_handelShapeMissMatch_Step_out);
378    // cout << "Calling :addPDEToRHS." << endl;
379       checkFinleyError();
380    }
381    //
382  // interpolates data between different function spaces:  // interpolates data between different function spaces:
383  //  //
384  void MeshAdapter::interpolateOnDomain(Data& target,const Data& in) const  void MeshAdapter::interpolateOnDomain(Data& target,const Data& in) const
# Line 750  SystemMatrixAdapter MeshAdapter::newSyst Line 753  SystemMatrixAdapter MeshAdapter::newSyst
753                        const escript::FunctionSpace& row_functionspace,                        const escript::FunctionSpace& row_functionspace,
754                        const int column_blocksize,                        const int column_blocksize,
755                        const escript::FunctionSpace& column_functionspace,                        const escript::FunctionSpace& column_functionspace,
756                        const int type,                        const int type) const
                       const bool sym) const  
757  {  {
758      int reduceRowOrder=0;      int reduceRowOrder=0;
759      int reduceColOrder=0;      int reduceColOrder=0;
# Line 778  SystemMatrixAdapter MeshAdapter::newSyst Line 780  SystemMatrixAdapter MeshAdapter::newSyst
780          throw FinleyAdapterException("Error - illegal function space type for system matrix columns.");          throw FinleyAdapterException("Error - illegal function space type for system matrix columns.");
781      }      }
782      // generate matrix:      // generate matrix:
783      Finley_SystemMatrix* fsystemMatrix=Finley_SystemMatrix_alloc(getFinley_Mesh(),type,sym?1:0,      
784                                                                   row_blocksize,reduceRowOrder,      Finley_SystemMatrixPattern* fsystemMatrixPattern=Finley_getPattern(getFinley_Mesh(),reduceRowOrder,reduceColOrder);
785                                                                   column_blocksize,reduceColOrder);      checkFinleyError();
786        Finley_SystemMatrix* fsystemMatrix=Finley_SystemMatrix_alloc(type,fsystemMatrixPattern,row_blocksize,column_blocksize);
787      checkFinleyError();      checkFinleyError();
788      return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);      return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);
789  }  }
# Line 907  bool MeshAdapter::operator==(const MeshA Line 910  bool MeshAdapter::operator==(const MeshA
910    return (m_finleyMesh==other.m_finleyMesh);    return (m_finleyMesh==other.m_finleyMesh);
911  }  }
912    
913    int MeshAdapter::getSystemMatrixTypeId(const int solver, const bool symmetry) const
914    {
915       int out=Finley_SystemMatrix_getSystemMatrixTypeId(solver,symmetry?1:0);
916       checkFinleyError();
917       return out;
918    }
919    Data MeshAdapter::getX() const
920    {
921      return continuousFunction(asAbstractContinuousDomain()).getX();
922    }
923    Data MeshAdapter::getNormal() const
924    {
925      return functionOnBoundary(asAbstractContinuousDomain()).getNormal();
926    }
927    Data MeshAdapter::getSize() const
928    {
929      return function(asAbstractContinuousDomain()).getSize();
930    }
931    
932    
933  bool MeshAdapter::operator!=(const MeshAdapter& other) const  bool MeshAdapter::operator!=(const MeshAdapter& other) const
934  {  {
935    return !operator==(other);    return !operator==(other);

Legend:
Removed from v.101  
changed lines
  Added in v.102

  ViewVC Help
Powered by ViewVC 1.1.26