MOAB: Mesh Oriented datABase
(version 5.2.1)
|
00001 /* 00002 * Intx2MeshOnSphere.hpp 00003 * 00004 * Created on: Oct 3, 2012 00005 * Author: iulian 00006 */ 00007 00008 #ifndef INTX2MESHONSPHERE_HPP_ 00009 #define INTX2MESHONSPHERE_HPP_ 00010 00011 #include "Intx2Mesh.hpp" 00012 00013 namespace moab 00014 { 00015 00016 class Intx2MeshOnSphere : public moab::Intx2Mesh 00017 { 00018 public: 00019 Intx2MeshOnSphere( Interface* mbimpl, IntxAreaUtils::AreaMethod amethod = IntxAreaUtils::lHuiller ); 00020 00021 virtual ~Intx2MeshOnSphere(); 00022 00023 void set_radius_source_mesh( double radius ) 00024 { 00025 Rsrc = radius; 00026 } 00027 void set_radius_destination_mesh( double radius ) 00028 { 00029 Rdest = radius; 00030 } 00031 00032 double setup_tgt_cell( EntityHandle tgt, int& nsTgt ); 00033 00034 // main method to intersect meshes on a sphere 00035 00036 ErrorCode computeIntersectionBetweenTgtAndSrc( EntityHandle tgt, EntityHandle src, double* P, int& nP, double& area, 00037 int markb[MAXEDGES], int markr[MAXEDGES], int& nsSrc, int& nsTgt, 00038 bool check_boxes_first = false ); 00039 00040 ErrorCode findNodes( EntityHandle tgt, int nsTgt, EntityHandle src, int nsSrc, double* iP, int nP ); 00041 00042 ErrorCode update_tracer_data( EntityHandle out_set, Tag& tagElem, Tag& tagArea ); 00043 #ifdef MOAB_HAVE_MPI 00044 virtual ErrorCode construct_covering_set( EntityHandle& initial_distributed_set, EntityHandle& covering_set ); 00045 00046 virtual ErrorCode build_processor_euler_boxes( EntityHandle euler_set, Range& local_verts ); 00047 #endif 00048 00049 const IntxAreaUtils::AreaMethod areaMethod; 00050 00051 private: 00052 int plane; // current gnomonic plane 00053 double Rsrc, Rdest; // radius of the sphere 00054 }; 00055 00056 } /* namespace moab */ 00057 #endif /* INTX2MESHONSPHERE_HPP_ */