XIOS  1.0
Xml I/O Server
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Amis Macros
domain_algorithm_compute_connectivity.cpp
Aller à la documentation de ce fichier.
1 
11 #include "mesh.hpp"
12 #include "domain.hpp"
13 #include "grid.hpp"
15 
16 namespace xios {
18  CTransformation<CDomain>* transformation,
19  int elementPositionInGrid,
20  std::map<int, int>& elementPositionInGridSrc2ScalarPosition,
21  std::map<int, int>& elementPositionInGridSrc2AxisPosition,
22  std::map<int, int>& elementPositionInGridSrc2DomainPosition,
23  std::map<int, int>& elementPositionInGridDst2ScalarPosition,
24  std::map<int, int>& elementPositionInGridDst2AxisPosition,
25  std::map<int, int>& elementPositionInGridDst2DomainPosition)
26 TRY
27 {
28  std::vector<CDomain*> domainListDestP = gridDst->getDomains();
29  std::vector<CDomain*> domainListSrcP = gridSrc->getDomains();
30 
31  CComputeConnectivityDomain* compute_connectivityDomain = dynamic_cast<CComputeConnectivityDomain*> (transformation);
32  int domainDstIndex = elementPositionInGridDst2DomainPosition[elementPositionInGrid];
33  int domainSrcIndex = elementPositionInGridSrc2DomainPosition[elementPositionInGrid];
34 
35  return (new CDomainAlgorithmComputeConnectivity(domainListDestP[domainDstIndex], domainListSrcP[domainSrcIndex], compute_connectivityDomain));
36 }
37 CATCH
38 
40 TRY
41 {
43 }
44 CATCH
45 
47  CComputeConnectivityDomain* compute_connectivityDomain)
48 : CDomainAlgorithmTransformation(domainDestination, domainSource)
49 TRY
50 {
52  compute_connectivityDomain->checkValid(domainDestination);
53  int& nbNeighborMax = compute_connectivityDomain->n_neighbor_max;
54  CArray<int,1>& nbNeighbor = compute_connectivityDomain->n_neighbor;
55  CArray<int,2>& localNeighbors = compute_connectivityDomain->local_neighbor;
56  int type = 1; // Edge type
57  switch (compute_connectivityDomain->type)
58  {
59  case CComputeConnectivityDomain::type_attr::node :
60  type = 0;
61  break;
62  case CComputeConnectivityDomain::type_attr::edge :
63  type = 1;
64  break;
65  default:
66  break;
67  }
68 
69  computeLocalConnectivity(type, domainDestination, nbNeighborMax, nbNeighbor, localNeighbors);
70 }
71 CATCH
72 
82  CDomain* domain,
83  int& nbConnectivityMax,
84  CArray<int,1>& nbConnectivity,
85  CArray<int,2>& localConnectivity)
86 TRY
87 {
88 
89  CMesh mesh;
90 
91  CArray<double,2>& bounds_lon = domain->bounds_lon_1d;
92  CArray<double,2>& bounds_lat = domain->bounds_lat_1d;
93  int ncell = bounds_lon.shape()[1];
94  CArray<int,1> localIndex(ncell);
95  for (int idx = 0; idx <ncell; ++idx) localIndex(idx) = idx;
96 
97  mesh.getLocalNghbFaces(type, localIndex, bounds_lon, bounds_lat, localConnectivity, nbConnectivity);
98  nbConnectivityMax = 0;
99  for (int idx =0; idx < nbConnectivity.numElements(); ++idx)
100  if (nbConnectivityMax < nbConnectivity(idx)) nbConnectivityMax = nbConnectivity(idx);
101 }
102 CATCH
103 
108 {
109 }
110 
111 }
CArray< int, 1 > & nbNeighbor
Algorithm for compute_connectivitying on an domain.
Helper class to create different transformations.
static bool registerTransformation(ETranformationType transType, CreateTransformationCallBack createFn)
#define TRY
Definition: exception.hpp:154
#define xios(arg)
void computeIndexSourceMapping_(const std::vector< CArray< double, 1 > * > &dataAuxInputs)
Compute the index mapping between domain on grid source and one on grid destination.
void computeLocalConnectivity(int type, CDomain *domain, int &nbConnectivityMax, CArray< int, 1 > &nbConnectivity, CArray< int, 2 > &localConnectivity)
Compute local connectivity of a domain.
virtual void checkValid(CDomain *domain)
This class defines the interface for all other inherited algorithms class.
void getLocalNghbFaces(const int, const CArray< int, 1 > &, const CArray< double, 2 > &, const CArray< double, 2 > &, CArray< int, 2 > &, CArray< int, 1 > &)
Definition: mesh.cpp:1975
Declaration of class CMesh.
CArray< int, 2 > & localNeighbors
#define CATCH
Definition: exception.hpp:155
static CGenericAlgorithmTransformation * create(CGrid *gridDst, CGrid *gridSrc, CTransformation< CDomain > *transformation, int elementPositionInGrid, std::map< int, int > &elementPositionInGridSrc2ScalarPosition, std::map< int, int > &elementPositionInGridSrc2AxisPosition, std::map< int, int > &elementPositionInGridSrc2DomainPosition, std::map< int, int > &elementPositionInGridDst2ScalarPosition, std::map< int, int > &elementPositionInGridDst2AxisPosition, std::map< int, int > &elementPositionInGridDst2DomainPosition)
CDomainAlgorithmComputeConnectivity(CDomain *domainDestination, CDomain *domainSource, CComputeConnectivityDomain *compute_connectivityDomain)