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

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

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

revision 3557 by caltinay, Thu Oct 28 00:50:41 2010 UTC revision 3558 by jfenwick, Fri Aug 26 06:09:02 2011 UTC
# Line 602  namespace finley { Line 602  namespace finley {
602                      int reducedIntegrationOrder,                      int reducedIntegrationOrder,
603              int useElementsOnFace,              int useElementsOnFace,
604              int useFullElementOrder,              int useFullElementOrder,
605                      int optimize)                       int optimize,
606                const std::vector<double>& points,
607                const std::vector<int>& tags, const std::map<std::string, int>& tagnamestonums
608                )
609    {    {
610      int numElements[]={n0,n1,n2};      int numElements[]={n0,n1,n2};
611      double length[]={l0,l1,l2};      double length[]={l0,l1,l2};
# Line 629  namespace finley { Line 632  namespace finley {
632      //      //
633      // Convert any finley errors into a C++ exception      // Convert any finley errors into a C++ exception
634      checkFinleyError();      checkFinleyError();
635      AbstractContinuousDomain* temp=new MeshAdapter(fMesh);      MeshAdapter* temp=new MeshAdapter(fMesh);
636        temp->addDiracPoints(points, tags);
637        Finley_Mesh* out=temp->getMesh().get();
638        for (map<string, int>::const_iterator it=tagnamestonums.begin();it!=tagnamestonums.end();++it)
639        {
640          Finley_Mesh_addTagMap(out, it->first.c_str(), it->second);
641        }        
642      return temp->getPtr();      return temp->getPtr();
643    }    }
644    
645    
646    
647      Domain_ptr brick_driver(const boost::python::list& args)
648      {
649          using boost::python::extract;
650    
651          // we need to convert lists to stl vectors
652          boost::python::list pypoints=boost::python::extract<boost::python::list>(args[15]);
653          boost::python::list pytags=boost::python::extract<boost::python::list>(args[16]);
654          int numpts=boost::python::extract<int>(pypoints.attr("__len__")());
655          int numtags=boost::python::extract<int>(pytags.attr("__len__")());
656          vector<double> points;
657          vector<int> tags;
658          tags.resize(numtags, -1);
659          for (int i=0;i<numpts;++i)
660          {
661          boost::python::object temp=pypoints[i];
662          int l=boost::python::extract<int>(temp.attr("__len__")());
663          for (int k=0;k<l;++k)
664          {
665              points.push_back(extract<double>(temp[k]));      
666          }
667          }
668          map<string, int> namestonums;
669          int curmax=40;                // bricks use up to 30
670          for (int i=0;i<numtags;++i)
671          {
672          extract<int> ex_int(pytags[i]);
673          extract<string> ex_str(pytags[i]);
674          if (ex_int.check())
675          {
676              tags[i]=ex_int();
677              if (tags[i]>= curmax)
678              {
679              curmax=tags[i]+1;
680              }
681          }
682          else if (ex_str.check())
683          {
684              string s=ex_str();
685              map<string, int>::iterator it=namestonums.find(s);
686              if (it!=namestonums.end())
687              {
688              // we have the tag already so look it up
689              tags[i]=it->second;
690              }
691              else
692              {
693              namestonums[s]=curmax;
694              tags[i]=curmax;
695              curmax++;
696              }
697          }
698          else
699          {
700              throw FinleyAdapterException("Error - Unable to extract tag value.");
701          }
702        
703          }
704          
705          Domain_ptr res=brick(boost::python::extract<int>(args[0]), boost::python::extract<int>(args[1]),
706                   boost::python::extract<int>(args[2]),
707               boost::python::extract<int>(args[3]), boost::python::extract<double>(args[4]),
708               boost::python::extract<double>(args[5]),
709               boost::python::extract<double>(args[6]), boost::python::extract<int>(args[7]),
710               boost::python::extract<int>(args[8]),
711               boost::python::extract<int>(args[9]),
712               boost::python::extract<int>(args[10]), boost::python::extract<int>(args[11]),
713               boost::python::extract<int>(args[12]),
714               boost::python::extract<int>(args[13]), boost::python::extract<int>(args[14]),
715               points,
716               tags, namestonums);
717    
718          return res;
719      }  
720        
721  /*  AbstractContinuousDomain*  rectangle(int n0,int n1,int order,*/  /*  AbstractContinuousDomain*  rectangle(int n0,int n1,int order,*/
722    Domain_ptr  rectangle(int n0,int n1,int order,    Domain_ptr  rectangle(int n0,int n1,int order,
723              double l0, double l1,              double l0, double l1,
# Line 641  namespace finley { Line 726  namespace finley {
726                          int reducedIntegrationOrder,                          int reducedIntegrationOrder,
727              int useElementsOnFace,              int useElementsOnFace,
728                  int useFullElementOrder,                  int useFullElementOrder,
729                          int optimize)                          int optimize,
730                const vector<double>& points,
731                const vector<int>& tags,
732                const std::map<std::string, int>& tagnamestonums)
733    {    {
734      int numElements[]={n0,n1};      int numElements[]={n0,n1};
735      double length[]={l0,l1};      double length[]={l0,l1};
# Line 665  namespace finley { Line 753  namespace finley {
753      //      //
754      // Convert any finley errors into a C++ exception      // Convert any finley errors into a C++ exception
755      checkFinleyError();      checkFinleyError();
756      AbstractContinuousDomain* temp=new MeshAdapter(fMesh);      MeshAdapter* temp=new MeshAdapter(fMesh);
757        temp->addDiracPoints(points, tags);
758        Finley_Mesh* out=temp->getMesh().get();
759        for (map<string, int>::const_iterator it=tagnamestonums.begin();it!=tagnamestonums.end();++it)
760        {
761          Finley_Mesh_addTagMap(out, it->first.c_str(), it->second);
762        }    
763      return temp->getPtr();      return temp->getPtr();
764    }    }
765    
# Line 693  namespace finley { Line 787  namespace finley {
787      return temp->getPtr();      return temp->getPtr();
788    }    }
789    
790      Domain_ptr rectangle_driver(const boost::python::list& args)
791      {
792          using boost::python::extract;
793    
794          // we need to convert lists to stl vectors
795          boost::python::list pypoints=boost::python::extract<boost::python::list>(args[12]);
796          boost::python::list pytags=boost::python::extract<boost::python::list>(args[13]);
797          int numpts=boost::python::extract<int>(pypoints.attr("__len__")());
798          int numtags=boost::python::extract<int>(pytags.attr("__len__")());
799          vector<double> points;
800          vector<int> tags;
801          tags.resize(numtags, -1);
802          for (int i=0;i<numpts;++i)
803          {
804          boost::python::object temp=pypoints[i];
805          int l=boost::python::extract<int>(temp.attr("__len__")());
806          for (int k=0;k<l;++k)
807          {
808              points.push_back(extract<double>(temp[k]));      
809          }
810          }
811          map<string, int> tagstonames;
812          int curmax=40;
813          // but which order to assign tags to names?????
814          for (int i=0;i<numtags;++i)
815          {
816          extract<int> ex_int(pytags[i]);
817          extract<string> ex_str(pytags[i]);
818          if (ex_int.check())
819          {
820              tags[i]=ex_int();
821              if (tags[i]>= curmax)
822              {
823              curmax=tags[i]+1;
824              }
825          }
826          else if (ex_str.check())
827          {
828              string s=ex_str();
829              map<string, int>::iterator it=tagstonames.find(s);
830              if (it!=tagstonames.end())
831              {
832              // we have the tag already so look it up
833              tags[i]=it->second;
834              }
835              else
836              {
837              tagstonames[s]=curmax;
838              tags[i]=curmax;
839              curmax++;
840              }
841          }
842          else
843          {
844              throw FinleyAdapterException("Error - Unable to extract tag value.");
845          }
846          }
847          
848          return rectangle(boost::python::extract<int>(args[0]), boost::python::extract<int>(args[1]), boost::python::extract<int>(args[2]),
849               boost::python::extract<double>(args[3]),
850               boost::python::extract<double>(args[4]),
851               boost::python::extract<int>(args[5]), boost::python::extract<int>(args[6]),
852               boost::python::extract<int>(args[7]),
853               boost::python::extract<int>(args[8]),
854               boost::python::extract<int>(args[9]), boost::python::extract<int>(args[10]),
855               boost::python::extract<int>(args[11]),
856               points,
857               tags, tagstonames);
858      }  
859    
860    
861    Domain_ptr  glueFaces(const boost::python::list& meshList,    Domain_ptr  glueFaces(const boost::python::list& meshList,
862                                     double safety_factor,                                     double safety_factor,
863                             double tolerance,                             double tolerance,

Legend:
Removed from v.3557  
changed lines
  Added in v.3558

  ViewVC Help
Powered by ViewVC 1.1.26