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

Diff of /branches/diaplayground/finley/src/CPPAdapter/MeshAdapter.cpp

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

revision 97 by jgs, Tue Dec 14 05:39:33 2004 UTC revision 100 by jgs, Wed Dec 15 03:48:48 2004 UTC
# Line 1  Line 1 
 // $Id$  
1  /*  /*
2   ******************************************************************************   ******************************************************************************
3   *                                                                            *   *                                                                            *
# Line 197  int MeshAdapter::getTagFromSampleNo(int Line 196  int MeshAdapter::getTagFromSampleNo(int
196  void MeshAdapter::getTagList(int functionSpaceType, int** tagList,  void MeshAdapter::getTagList(int functionSpaceType, int** tagList,
197                   int* numTags) const                   int* numTags) const
198  {  {
199    *tagList=NULL;    **tagList=0;
200    *numTags=0;    *numTags=0;
201    Finley_Mesh* mesh=m_finleyMesh.get();    Finley_Mesh* mesh=m_finleyMesh.get();
202    switch (functionSpaceType) {    switch (functionSpaceType) {
# Line 338  pair<int,int> MeshAdapter::getDataShape( Line 337  pair<int,int> MeshAdapter::getDataShape(
337  //  //
338  void MeshAdapter::addPDEToSystem(  void MeshAdapter::addPDEToSystem(
339                       SystemMatrixAdapter& mat, Data& rhs,                       SystemMatrixAdapter& mat, Data& rhs,
340                       const Data& A, const Data& B, const Data& C,const  Data& D,const  Data& X,const  Data& Y,                       const Data& A, const Data& B, const Data& C,const  Data& D,const  Data& X,const  Data& Y) const
                      const Data& d, const Data& y,  
                      const Data& d_contact,const Data& y_contact) const  
341  {  {
342     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
343     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getFinley_SystemMatrix(),&(rhs.getDataC()),     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getFinley_SystemMatrix(),&(rhs.getDataC()),
344                         &(A.getDataC()),&(B.getDataC()),&(C.getDataC()),&(D.getDataC()),&(X.getDataC()),&(Y.getDataC()));                         &(A.getDataC()),&(B.getDataC()),&(C.getDataC()),&(D.getDataC()),&(X.getDataC()),&(Y.getDataC()));
345     checkFinleyError();     checkFinleyError();
346    }
347    //
348    // adds Robin boundary conditions as natural boundary condition into a given stiffness matrix and right hand side:
349    //
350    void MeshAdapter::addRobinConditionsToSystem(
351                         SystemMatrixAdapter& mat, Data& rhs,
352                         const Data& d, const Data& y) const
353    {
354       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()),
358                                    &(d.getDataC()),&(y.getDataC()),                                    &(d.getDataC()),&(y.getDataC()),
359                                    Finley_Assemble_handelShapeMissMatch_Mean_out);                                    Finley_Assemble_handelShapeMissMatch_Mean_out);
360     checkFinleyError();     checkFinleyError();
    Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,  
                   mat.getFinley_SystemMatrix(),  
                   &(rhs.getDataC()),  
                                   &(d_contact.getDataC()),  
                   &(y_contact.getDataC()),  
                                   Finley_Assemble_handelShapeMissMatch_Step_out);  
    checkFinleyError();  
361  }  }
362  //  //
363  // adds linear PDE of second order into the right hand side only  // adds contact conditions as natural boundary condition into a given stiffness matrix and right hand side:
364  //  //
365  void MeshAdapter::addPDEToRHS( Data& rhs,  void MeshAdapter::addContactToSystem(
366                       const  Data& X,const  Data& Y, const Data& y, const Data& y_contact) const                       SystemMatrixAdapter& mat, Data& rhs,
367                         const Data& d_contact,const Data& y_contact) const
368  {  {
369     Finley_Mesh* mesh=m_finleyMesh.get();     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()));     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,
371     checkFinleyError();                    mat.getFinley_SystemMatrix(),
372     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,0,&(rhs.getDataC()),0,&(y.getDataC()),                    &(rhs.getDataC()),
373                                    Finley_Assemble_handelShapeMissMatch_Mean_out);                                    &(d_contact.getDataC()),
374  // cout << "Calling :addPDEToRHS." << endl;                    &(y_contact.getDataC()),
    checkFinleyError();  
    Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,0,&(rhs.getDataC()),0,&(y_contact.getDataC()),  
375                                    Finley_Assemble_handelShapeMissMatch_Step_out);                                    Finley_Assemble_handelShapeMissMatch_Step_out);
 // cout << "Calling :addPDEToRHS." << endl;  
376     checkFinleyError();     checkFinleyError();
377  }  }
378  //  //
# Line 753  SystemMatrixAdapter MeshAdapter::newSyst Line 750  SystemMatrixAdapter MeshAdapter::newSyst
750                        const escript::FunctionSpace& row_functionspace,                        const escript::FunctionSpace& row_functionspace,
751                        const int column_blocksize,                        const int column_blocksize,
752                        const escript::FunctionSpace& column_functionspace,                        const escript::FunctionSpace& column_functionspace,
753                        const int type) const                        const int type,
754                          const bool sym) const
755  {  {
756      int reduceRowOrder=0;      int reduceRowOrder=0;
757      int reduceColOrder=0;      int reduceColOrder=0;
# Line 780  SystemMatrixAdapter MeshAdapter::newSyst Line 778  SystemMatrixAdapter MeshAdapter::newSyst
778          throw FinleyAdapterException("Error - illegal function space type for system matrix columns.");          throw FinleyAdapterException("Error - illegal function space type for system matrix columns.");
779      }      }
780      // generate matrix:      // generate matrix:
781            Finley_SystemMatrix* fsystemMatrix=Finley_SystemMatrix_alloc(getFinley_Mesh(),type,sym?1:0,
782      Finley_SystemMatrixPattern* fsystemMatrixPattern=Finley_getPattern(getFinley_Mesh(),reduceRowOrder,reduceColOrder);                                                                   row_blocksize,reduceRowOrder,
783      checkFinleyError();                                                                   column_blocksize,reduceColOrder);
     Finley_SystemMatrix* fsystemMatrix=Finley_SystemMatrix_alloc(type,fsystemMatrixPattern,row_blocksize,column_blocksize);  
784      checkFinleyError();      checkFinleyError();
785      return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);      return SystemMatrixAdapter(fsystemMatrix,row_blocksize,row_functionspace,column_blocksize,column_functionspace);
786  }  }
# Line 910  bool MeshAdapter::operator==(const MeshA Line 907  bool MeshAdapter::operator==(const MeshA
907    return (m_finleyMesh==other.m_finleyMesh);    return (m_finleyMesh==other.m_finleyMesh);
908  }  }
909    
 int MeshAdapter::getSystemMatrixTypeId(const int solver, const bool symmetry) const  
 {  
    int out=Finley_SystemMatrix_getSystemMatrixTypeId(solver,symmetry?1:0);  
    checkFinleyError();  
    return out;  
 }  
 Data MeshAdapter::getX() const  
 {  
   return continuousFunction(asAbstractContinuousDomain()).getX();  
 }  
 Data MeshAdapter::getNormal() const  
 {  
   return functionOnBoundary(asAbstractContinuousDomain()).getNormal();  
 }  
 Data MeshAdapter::getSize() const  
 {  
   return function(asAbstractContinuousDomain()).getSize();  
 }  
   
   
910  bool MeshAdapter::operator!=(const MeshAdapter& other) const  bool MeshAdapter::operator!=(const MeshAdapter& other) const
911  {  {
912    return !operator==(other);    return !operator==(other);

Legend:
Removed from v.97  
changed lines
  Added in v.100

  ViewVC Help
Powered by ViewVC 1.1.26