/[escript]/trunk/ripley/src/RipleyDomain.cpp
ViewVC logotype

Diff of /trunk/ripley/src/RipleyDomain.cpp

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

revision 3747 by caltinay, Thu Dec 15 00:02:22 2011 UTC revision 3748 by caltinay, Thu Dec 15 07:36:19 2011 UTC
# Line 568  escript::ASM_ptr RipleyDomain::newSystem Line 568  escript::ASM_ptr RipleyDomain::newSystem
568      return sma;      return sma;
569  }  }
570    
571    void RipleyDomain::addPDEToSystem(
572            escript::AbstractSystemMatrix& mat, escript::Data& rhs,
573            const escript::Data& A, const escript::Data& B, const escript::Data& C,
574            const escript::Data& D, const escript::Data& X, const escript::Data& Y,
575            const escript::Data& d, const escript::Data& y,
576            const escript::Data& d_contact, const escript::Data& y_contact,
577            const escript::Data& d_dirac,const escript::Data& y_dirac) const
578    {
579        if (!d_contact.isEmpty() || !y_contact.isEmpty())
580            throw RipleyException("addPDEToSystem(): Ripley does not support contact elements");
581    
582        paso::SystemMatrixAdapter* sma=dynamic_cast<paso::SystemMatrixAdapter*>(&mat);
583        if (!sma)
584            throw RipleyException("addPDEToSystem(): Ripley only accepts Paso system matrices");
585    
586        if (rhs.isEmpty() && (!X.isEmpty() || !Y.isEmpty()))
587            throw RipleyException("addPDEToSystem(): Right hand side coefficients are provided but no right hand side vector given");
588    
589        //TODO: more input param checks (shape, function space etc)
590    
591        Paso_SystemMatrix* S = sma->getPaso_SystemMatrix();
592    
593        if (!rhs.isEmpty() && rhs.getDataPointSize() != S->logical_row_block_size)
594            throw RipleyException("addPDEToSystem(): Matrix row block size and number of components of right hand side don't match");
595    
596        const int numEq=S->logical_row_block_size;
597        const int numComp=S->logical_col_block_size;
598    
599        if (numEq != numComp)
600            throw RipleyException("addPDEToSystem(): Number of equations and number of solutions don't match");
601        //TODO: more system matrix checks
602    
603        if (numEq==1)
604            assemblePDESingle(S, rhs, A, B, C, D, X, Y, d, y);
605        else
606            assemblePDESystem(S, rhs, A, B, C, D, X, Y, d, y);
607    }
608    
609  void RipleyDomain::setNewX(const escript::Data& arg)  void RipleyDomain::setNewX(const escript::Data& arg)
610  {  {
611      throw RipleyException("setNewX(): Operation not supported");      throw RipleyException("setNewX(): Operation not supported");
# Line 724  bool RipleyDomain::ownSample(int fsType, Line 762  bool RipleyDomain::ownSample(int fsType,
762      throw RipleyException("ownSample() not implemented");      throw RipleyException("ownSample() not implemented");
763  }  }
764    
 void RipleyDomain::addPDEToSystem(  
         escript::AbstractSystemMatrix& mat, escript::Data& rhs,  
         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& d, const escript::Data& y,  
         const escript::Data& d_contact, const escript::Data& y_contact,  
         const escript::Data& d_dirac,const escript::Data& y_dirac) const  
 {  
     throw RipleyException("addPDEToSystem() not implemented");  
 }  
   
765  void RipleyDomain::addPDEToLumpedSystem(escript::Data& mat,  void RipleyDomain::addPDEToLumpedSystem(escript::Data& mat,
766          const escript::Data& D, const escript::Data& d,          const escript::Data& D, const escript::Data& d,
767          const escript::Data& d_dirac, const bool useHRZ) const          const escript::Data& d_dirac, const bool useHRZ) const
# Line 824  void RipleyDomain::assembleCoordinates(e Line 851  void RipleyDomain::assembleCoordinates(e
851      throw RipleyException("assembleCoordinates() not implemented");      throw RipleyException("assembleCoordinates() not implemented");
852  }  }
853    
854    void RipleyDomain::assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,
855            const escript::Data& A, const escript::Data& B, const escript::Data& C,
856            const escript::Data& D, const escript::Data& X, const escript::Data& Y,
857            const escript::Data& d, const escript::Data& y) const
858    {
859        throw RipleyException("assemblePDESingle() not implemented");
860    }
861    
862    void RipleyDomain::assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,
863            const escript::Data& A, const escript::Data& B, const escript::Data& C,
864            const escript::Data& D, const escript::Data& X, const escript::Data& Y,
865            const escript::Data& d, const escript::Data& y) const
866    {
867        throw RipleyException("assemblePDESystem() not implemented");
868    }
869    
870  void RipleyDomain::interpolateNodesOnElements(escript::Data& out, escript::Data& in, bool reduced) const  void RipleyDomain::interpolateNodesOnElements(escript::Data& out, escript::Data& in, bool reduced) const
871  {  {
872      throw RipleyException("interpolateNodesOnElements() not implemented");      throw RipleyException("interpolateNodesOnElements() not implemented");

Legend:
Removed from v.3747  
changed lines
  Added in v.3748

  ViewVC Help
Powered by ViewVC 1.1.26