MOAB: Mesh Oriented datABase
(version 5.4.1)
|
00001 /* 00002 * IntxRllCssphere.hpp 00003 * 00004 */ 00005 00006 #ifndef INTXRLLCSSPHERE_HPP_ 00007 #define INTXRLLCSSPHERE_HPP_ 00008 00009 #include "Intx2Mesh.hpp" 00010 00011 namespace moab 00012 { 00013 00014 class IntxRllCssphere : public moab::Intx2Mesh 00015 { 00016 public: 00017 IntxRllCssphere( Interface* mbimpl ); 00018 00019 virtual ~IntxRllCssphere(); 00020 00021 void set_radius( double radius ) 00022 { 00023 R = radius; 00024 } 00025 00026 double setup_tgt_cell( EntityHandle tgt, int& nsTgt ); 00027 00028 // src cell will be always lat lon cell, so it will be a rectangle in lat-lon coors 00029 // it will be used for "interior" determinations of other points 00030 // double setup_src_cell(EntityHandle src, int & nsSrc); 00031 00032 // main method to intersect meshes on a sphere 00033 00034 ErrorCode computeIntersectionBetweenTgtAndSrc( EntityHandle tgt, 00035 EntityHandle src, 00036 double* P, 00037 int& nP, 00038 double& area, 00039 int markb[MAXEDGES], 00040 int markr[MAXEDGES], 00041 int& nsSrc, 00042 int& nsTgt, 00043 bool check_boxes_first = false ); 00044 00045 ErrorCode findNodes( EntityHandle tgt, int nsTgt, EntityHandle src, int nsSrc, double* iP, int nP ); 00046 00047 private: 00048 double R; // radius of the sphere 00049 int plane; // current gnomonic plane, will still be used for projection 00050 int srcEdgeType[4]; // at most 4 00051 // these could be from [-PI/2, +PI/2] and [0 to 2*PI] 00052 }; 00053 00054 } /* namespace moab */ 00055 #endif /* INTXRLLCSSPHERE_HPP_ */