/[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 751 by bcumming, Mon Jun 26 01:46:34 2006 UTC revision 798 by gross, Fri Aug 4 01:05:36 2006 UTC
# Line 70  Finley_Mesh* MeshAdapter::getFinley_Mesh Line 70  Finley_Mesh* MeshAdapter::getFinley_Mesh
70    
71  void MeshAdapter::write(const std::string& fileName) const  void MeshAdapter::write(const std::string& fileName) const
72  {  {
73    char fName[fileName.size()+1];    char *fName = (fileName.size()+1>0) ? TMPMEMALLOC(fileName.size()+1,char) : (char*)NULL;
74    strcpy(fName,fileName.c_str());    strcpy(fName,fileName.c_str());
75    Finley_Mesh_write(m_finleyMesh.get(),fName);    Finley_Mesh_write(m_finleyMesh.get(),fName);
76    checkFinleyError();    checkFinleyError();
77      TMPMEMFREE(fName);
78  }  }
79    
80  string MeshAdapter::getDescription() const  string MeshAdapter::getDescription() const
# Line 251  void MeshAdapter::addPDEToSystem( Line 252  void MeshAdapter::addPDEToSystem(
252                       const escript::Data& d, const escript::Data& y,                       const escript::Data& d, const escript::Data& y,
253                       const escript::Data& d_contact,const escript::Data& y_contact) const                       const escript::Data& d_contact,const escript::Data& y_contact) const
254  {  {
255    escriptDataC _rhs=rhs.getDataC();     escriptDataC _rhs=rhs.getDataC();
256    escriptDataC _A  =A.getDataC();     escriptDataC _A  =A.getDataC();
257    escriptDataC _B=B.getDataC();     escriptDataC _B=B.getDataC();
258    escriptDataC _C=C.getDataC();     escriptDataC _C=C.getDataC();
259    escriptDataC _D=D.getDataC();     escriptDataC _D=D.getDataC();
260    escriptDataC _X=X.getDataC();     escriptDataC _X=X.getDataC();
261    escriptDataC _Y=Y.getDataC();     escriptDataC _Y=Y.getDataC();
262    escriptDataC _d=d.getDataC();     escriptDataC _d=d.getDataC();
263    escriptDataC _y=y.getDataC();     escriptDataC _y=y.getDataC();
264    escriptDataC _d_contact=d_contact.getDataC();     escriptDataC _d_contact=d_contact.getDataC();
265    escriptDataC _y_contact=y_contact.getDataC();     escriptDataC _y_contact=y_contact.getDataC();
266    
267     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
    Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getPaso_SystemMatrix(), &_rhs, &_A, &_B, &_C, &_D, &_X, &_Y );  
268    
269       Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,mat.getPaso_SystemMatrix(), &_rhs, &_A, &_B, &_C, &_D, &_X, &_Y );
270     checkFinleyError();     checkFinleyError();
271    
272     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements, mat.getPaso_SystemMatrix(), &_rhs, &_d, &_y, Finley_Assemble_handelShapeMissMatch_Mean_out);     Finley_Assemble_PDE(mesh->Nodes,mesh->FaceElements, mat.getPaso_SystemMatrix(), &_rhs, 0, 0, 0, &_d, 0, &_y );
273     checkFinleyError();     checkFinleyError();
274    
275     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->ContactElements, mat.getPaso_SystemMatrix(), &_rhs , &_d_contact, &_y_contact ,             Finley_Assemble_handelShapeMissMatch_Step_out);     Finley_Assemble_PDE(mesh->Nodes,mesh->ContactElements, mat.getPaso_SystemMatrix(), &_rhs , 0, 0, 0, &_d_contact, 0, &_y_contact );
276     checkFinleyError();     checkFinleyError();
277  }  }
278    
# Line 282  void MeshAdapter::addPDEToRHS( escript:: Line 283  void MeshAdapter::addPDEToRHS( escript::
283  {  {
284     Finley_Mesh* mesh=m_finleyMesh.get();     Finley_Mesh* mesh=m_finleyMesh.get();
285    
286     // Finley_Assemble_PDE_RHS(mesh->Nodes,mesh->Elements,&(rhs.getDataC()),&(X.getDataC()),&(Y.getDataC()));     escriptDataC _rhs=rhs.getDataC();
287     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements,0,&(rhs.getDataC()),0,0,0,0,&(X.getDataC()),&(Y.getDataC()));     escriptDataC _X=X.getDataC();
288     checkFinleyError();     escriptDataC _Y=Y.getDataC();
289       escriptDataC _y=y.getDataC();
290       escriptDataC _y_contact=y_contact.getDataC();
291    
292     // Finley_Assemble_RobinCondition_RHS(mesh->Nodes,mesh->FaceElements,&(rhs.getDataC()),&(y.getDataC()),Finley_Assemble_handelShapeMissMatch_Mean_out);     Finley_Assemble_PDE(mesh->Nodes,mesh->Elements, 0, &_rhs, 0, 0, 0, 0, &_X, &_Y );
293     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->FaceElements,0,&(rhs.getDataC()),0,&(y.getDataC()),Finley_Assemble_handelShapeMissMatch_Mean_out);     checkFinleyError();
294    
295       Finley_Assemble_PDE(mesh->Nodes,mesh->FaceElements, 0, &_rhs, 0, 0, 0, 0, 0, &_y );
296     checkFinleyError();     checkFinleyError();
297     Finley_Assemble_RobinCondition(mesh->Nodes,mesh->ContactElements,0,&(rhs.getDataC()),0,&(y_contact.getDataC()),Finley_Assemble_handelShapeMissMatch_Step_out);  
298     // Finley_Assemble_RobinCondition_RHS(mesh->Nodes,mesh->ContactElements,&(rhs.getDataC()),&(y_contact.getDataC()),Finley_Assemble_handelShapeMissMatch_Step_out);     Finley_Assemble_PDE(mesh->Nodes,mesh->ContactElements, 0, &_rhs , 0, 0, 0, 0, 0, &_y_contact );
299     checkFinleyError();     checkFinleyError();
300  }  }
301    
# Line 700  void MeshAdapter::saveDX(const std::stri Line 704  void MeshAdapter::saveDX(const std::stri
704  {  {
705      int MAX_namelength=256;      int MAX_namelength=256;
706      const int num_data=boost::python::extract<int>(arg.attr("__len__")());      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
707      char names[num_data][MAX_namelength];    /* win32 refactor */
708      char* c_names[num_data];    char* *names = (num_data>0) ? TMPMEMALLOC(num_data,char*) : (char**)NULL;
709      escriptDataC data[num_data];    for(int i=0;i<num_data;i++)
710      escriptDataC* ptr_data[num_data];    {
711        names[i] = (MAX_namelength>0) ? TMPMEMALLOC(MAX_namelength,char) : (char*)NULL;
712      }
713    
714      char* *c_names = (num_data>0) ? TMPMEMALLOC(num_data,char*) : (char**)NULL;
715      escriptDataC *data = (num_data>0) ? TMPMEMALLOC(num_data,escriptDataC) : (escriptDataC*)NULL;
716      escriptDataC* *ptr_data = (num_data>0) ? TMPMEMALLOC(num_data,escriptDataC*) : (escriptDataC**)NULL;
717    
718      boost::python::list keys=arg.keys();      boost::python::list keys=arg.keys();
719      for (int i=0;i<num_data;++i) {      for (int i=0;i<num_data;++i) {
720           escript::Data& d=boost::python::extract<escript::Data&>(arg[keys[i]]);           escript::Data& d=boost::python::extract<escript::Data&>(arg[keys[i]]);
721           if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)           if (dynamic_cast<const MeshAdapter&>(d.getFunctionSpace().getDomain()) !=*this)
722               throw FinleyAdapterException("Error  in saveVTK: Data must be defined on same Domain");               throw FinleyAdapterException("Error  in saveDX: Data must be defined on same Domain");
723           data[i]=d.getDataC();           data[i]=d.getDataC();
724           ptr_data[i]=&(data[i]);           ptr_data[i]=&(data[i]);
725           std::string n=boost::python::extract<std::string>(keys[i]);           std::string n=boost::python::extract<std::string>(keys[i]);
# Line 723  void MeshAdapter::saveDX(const std::stri Line 733  void MeshAdapter::saveDX(const std::stri
733      }      }
734      Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);      Finley_Mesh_saveDX(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
735      checkFinleyError();      checkFinleyError();
736        
737          /* win32 refactor */
738      TMPMEMFREE(c_names);
739      TMPMEMFREE(data);
740      TMPMEMFREE(ptr_data);
741      for(int i=0;i<num_data;i++)
742      {
743        TMPMEMFREE(names[i]);
744      }
745      TMPMEMFREE(names);
746    
747      return;      return;
748  }  }
749    
# Line 731  void MeshAdapter::saveVTK(const std::str Line 752  void MeshAdapter::saveVTK(const std::str
752  {  {
753      int MAX_namelength=256;      int MAX_namelength=256;
754      const int num_data=boost::python::extract<int>(arg.attr("__len__")());      const int num_data=boost::python::extract<int>(arg.attr("__len__")());
755      char names[num_data][MAX_namelength];    /* win32 refactor */
756      char* c_names[num_data];    char* *names = (num_data>0) ? TMPMEMALLOC(num_data,char*) : (char**)NULL;
757      escriptDataC data[num_data];    for(int i=0;i<num_data;i++)
758      escriptDataC* ptr_data[num_data];    {
759        names[i] = (MAX_namelength>0) ? TMPMEMALLOC(MAX_namelength,char) : (char*)NULL;
760      }
761    
762      char* *c_names = (num_data>0) ? TMPMEMALLOC(num_data,char*) : (char**)NULL;
763      escriptDataC *data = (num_data>0) ? TMPMEMALLOC(num_data,escriptDataC) : (escriptDataC*)NULL;
764      escriptDataC* *ptr_data = (num_data>0) ? TMPMEMALLOC(num_data,escriptDataC*) : (escriptDataC**)NULL;
765    
766      boost::python::list keys=arg.keys();      boost::python::list keys=arg.keys();
767      for (int i=0;i<num_data;++i) {      for (int i=0;i<num_data;++i) {
# Line 752  void MeshAdapter::saveVTK(const std::str Line 779  void MeshAdapter::saveVTK(const std::str
779              strcpy(c_names[i],n.c_str());              strcpy(c_names[i],n.c_str());
780           }           }
781      }      }
782    #ifndef PASO_MPI    
783      Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);      Finley_Mesh_saveVTK(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
784      checkFinleyError();  #else
785        Finley_Mesh_saveVTK_MPIO(filename.c_str(),m_finleyMesh.get(),num_data,c_names,ptr_data);
786    #endif
787    
788    checkFinleyError();
789      /* win32 refactor */
790      TMPMEMFREE(c_names);
791      TMPMEMFREE(data);
792      TMPMEMFREE(ptr_data);
793      for(int i=0;i<num_data;i++)
794      {
795        TMPMEMFREE(names[i]);
796      }
797      TMPMEMFREE(names);
798    
799      return;      return;
800  }  }
801                                                                                                                                                                                                                                                                                                                                                    
# Line 1049  int MeshAdapter::getReferenceNoFromSampl Line 1091  int MeshAdapter::getReferenceNoFromSampl
1091    return out;    return out;
1092  }  }
1093    
1094    void MeshAdapter::setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const
1095    {
1096      Finley_Mesh* mesh=m_finleyMesh.get();
1097      escriptDataC tmp=mask.getDataC();
1098      switch(functionSpaceType) {
1099           case(Nodes):
1100              Finley_NodeFile_setTags(mesh->Nodes,newTag,&tmp);
1101              break;
1102           case(DegreesOfFreedom):
1103              throw FinleyAdapterException("Error - DegreesOfFreedom does not support tags");
1104              break;
1105           case(ReducedDegreesOfFreedom):
1106              throw FinleyAdapterException("Error - ReducedDegreesOfFreedom does not support tags");
1107              break;
1108           case(Elements):
1109              Finley_ElementFile_setTags(mesh->Elements,newTag,&tmp);
1110              break;
1111           case(FaceElements):
1112              Finley_ElementFile_setTags(mesh->FaceElements,newTag,&tmp);
1113              break;
1114           case(Points):
1115              Finley_ElementFile_setTags(mesh->Points,newTag,&tmp);
1116              break;
1117           case(ContactElementsZero):
1118              Finley_ElementFile_setTags(mesh->ContactElements,newTag,&tmp);
1119              break;
1120           case(ContactElementsOne):
1121              Finley_ElementFile_setTags(mesh->ContactElements,newTag,&tmp);
1122              break;
1123           default:
1124              stringstream temp;
1125              temp << "Error - Finley does not know anything about function space type " << functionSpaceType;
1126              throw FinleyAdapterException(temp.str());
1127      }
1128      checkFinleyError();
1129      return;
1130    }
1131    
1132    
1133  }  // end of namespace  }  // end of namespace

Legend:
Removed from v.751  
changed lines
  Added in v.798

  ViewVC Help
Powered by ViewVC 1.1.26