Changeset 1984 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp
- Timestamp:
- 12/06/20 22:14:56 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp
r1975 r1984 13 13 #include "transformation.hpp" 14 14 #include "transformation_enum.hpp" 15 15 #include "transformation_path.hpp" 16 16 #include "element.hpp" 17 17 #include "local_connector.hpp" … … 19 19 #include "gatherer_connector.hpp" 20 20 #include "distribution_type.hpp" 21 #include "generic_algorithm_transformation.hpp" 21 22 22 23 23 24 namespace xios 24 25 { 25 26 27 28 29 30 31 32 33 26 /// ////////////////////// Déclarations ////////////////////// /// 27 28 class CScalarGroup; 29 class CScalarAttributes; 30 class CScalar; 31 ///-------------------------------------------------------------- 32 33 // Declare/Define CVarAttribute 34 BEGIN_DECLARE_ATTRIBUTE_MAP(CScalar) 34 35 #include "scalar_attribute.conf" 35 END_DECLARE_ATTRIBUTE_MAP(CScalar) 36 37 ///-------------------------------------------------------------- 38 39 class CScalar 40 : public CObjectTemplate<CScalar> 41 , public CScalarAttributes 36 END_DECLARE_ATTRIBUTE_MAP(CScalar) 37 38 ///-------------------------------------------------------------- 39 40 class CScalar: public CObjectTemplate<CScalar> 41 , public CScalarAttributes 42 { 43 friend class CScalarGroup; 44 45 /// typedef /// 46 typedef CObjectTemplate<CScalar> SuperClass; 47 typedef CScalarAttributes SuperClassAttribute; 48 49 public: 50 enum EEventId 42 51 { 43 friend class CScalarGroup; 44 45 /// typedef /// 46 typedef CObjectTemplate<CScalar> SuperClass; 47 typedef CScalarAttributes SuperClassAttribute; 48 49 public: 50 enum EEventId 51 { 52 EVENT_ID_SCALAR_DISTRIBUTION, 53 EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE, 54 } ; 55 static bool dispatchEvent(CEventServer& event); 52 EVENT_ID_SCALAR_DISTRIBUTION, 53 EVENT_ID_SEND_DISTRIBUTED_ATTRIBUTE, 54 } ; 55 static bool dispatchEvent(CEventServer& event); 56 56 57 57 58 public : 59 60 typedef CScalarAttributes RelAttributes; 61 typedef CScalarGroup RelGroup; 62 typedef CTransformation<CScalar>::TransformationMapTypes TransMapTypes; 63 64 /// Constructeurs /// 65 CScalar(void); 66 explicit CScalar(const StdString & id); 67 CScalar(const CScalar & var); // Not implemented yet. 68 CScalar(const CScalar * const var); // Not implemented yet. 69 70 /// Destructeur /// 71 virtual ~CScalar(void); 72 73 public : 74 /// Accesseurs statiques /// 75 static StdString GetName(void); 76 static StdString GetDefName(void); 77 static ENodeType GetType(void); 78 79 public: 80 static CScalar* createScalar(); 81 82 public: 83 void checkAttributes(void); 84 bool checkAttributes_done_ = false ; 58 public : 59 60 typedef CScalarAttributes RelAttributes; 61 typedef CScalarGroup RelGroup; 62 63 /// Constructeurs /// 64 CScalar(void); 65 explicit CScalar(const StdString & id); 66 CScalar(const CScalar & var); // Not implemented yet. 67 CScalar(const CScalar * const var); // Not implemented yet. 68 69 /// Destructeur /// 70 virtual ~CScalar(void); 71 72 public : 73 /// Accesseurs statiques /// 74 static StdString GetName(void); 75 static StdString GetDefName(void); 76 static ENodeType GetType(void); 77 78 public: 79 static CScalar* createScalar(); 80 81 public: 82 void checkAttributes(void); 83 bool checkAttributes_done_ = false ; 85 84 86 87 88 85 void addRelFile(const StdString& filename); 86 bool IsWritten(const StdString& filename) const; 87 virtual void parse(xml::CXMLNode & node); 89 88 90 91 92 93 89 public: 90 void sendScalarToCouplerOut(CContextClient* client, const string& fieldId, int posInGrid) ; 91 private: 92 std::set<CContextClient*> sendScalarToCouplerOut_done_ ; 94 93 95 public: 96 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 97 98 public: 99 bool hasTransformation(); 100 void solveInheritanceTransformation(); 101 TransMapTypes getAllTransformations(); 102 void duplicateTransformation(CScalar*); 103 CTransformation<CScalar>* addTransformation(ETranformationType transType, const StdString& id=""); 104 bool isEqual(CScalar* scalar); 105 private: 94 public: 95 void makeAliasForCoupling(const string& fieldId, int posInGrid) ; 96 97 //////////////////////////////// 98 //// TRANSFORMATIONS //// 99 //////////////////////////////// 100 public: 101 typedef CTransformation<CScalar>::TransformationMapTypes TransMapTypes; 102 private: 103 static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m); 104 static std::map<StdString, ETranformationType> transformationMapList_; 105 static bool dummyTransformationMapList_; TransMapTypes transformationMap_; 106 void setTransformations(const TransMapTypes&); 107 108 public: 109 bool hasTransformation(); 110 TransMapTypes getAllTransformations(); 111 void duplicateTransformation(CScalar*); 112 CTransformation<CScalar>* addTransformation(ETranformationType transType, const StdString& id=""); 113 114 void solveInheritanceTransformation_old(); 115 void solveInheritanceTransformation(); 116 private: 117 bool solveInheritanceTransformation_done_= false ; 118 private: 119 CGenericAlgorithmTransformation* transformationAlgorithm_ = nullptr ; 120 public: 121 void setTransformationAlgorithm(CGenericAlgorithmTransformation* transformationAlgorithm) { transformationAlgorithm_=transformationAlgorithm ;} 122 CGenericAlgorithmTransformation* getTransformationAlgorithm(void) { return transformationAlgorithm_ ;} 123 private: 124 CTransformationPaths transformationPaths_ ; 125 public: 126 CTransformationPaths getTransformationPaths(void) {return transformationPaths_;} 127 void setTransformationPaths(const CTransformationPaths& transformationPaths) { transformationPaths_=transformationPaths ;} 128 //////////////////////////////// 129 //////////////////////////////// 130 131 bool isEqual(CScalar* scalar); 132 private: 106 133 /** Clients that have to send a scalar. There can be multiple clients in case of secondary server, otherwise only one client. */ 107 108 109 110 134 std::list<CContextClient*> clients; 135 std::set<CContextClient*> clientsSet; 136 public: 137 void setContextClient(CContextClient* contextClient) ; 111 138 112 private: 113 std::set<StdString> relFiles; 114 TransMapTypes transformationMap_; 115 116 void setTransformations(const TransMapTypes&); 117 118 private: 119 static bool initializeTransformationMap(std::map<StdString, ETranformationType>& m); 120 static std::map<StdString, ETranformationType> transformationMapList_; 121 static bool dummyTransformationMapList_; 122 123 /** define if the scalar is completed or not ie all attributes have been received before in case 124 of grid reading from file or coupling */ 125 private: 126 /** define if the scalar is completed or not ie all attributes have been received before in case 127 of grid reading from file or coupling */ 128 bool isCompleted_=true ; 129 public: 130 /*! 131 \brief Check if a scalar is completed 132 Before make any scalar processing, we must be sure that all scalar informations have 133 been sent, for exemple when reading a grid in a file or when grid elements are sent by an 134 other context (coupling). So all direct reference of the scalar (scalar_ref) must be also completed 135 \return true if scalar and scalar reference are completed 136 */ 137 bool isCompleted(void) 138 { 139 if (hasDirectScalarReference()) if (!getDirectScalarReference()->isCompleted()) return false; 140 else return isCompleted_ ; 141 } 142 void setCompleted(void) { isCompleted_=true ; } 143 void unsetCompleted(void) { isCompleted_=false ; } 144 145 146 147 ////////////////////////////////////////////////////////////////////////////////////// 148 // this part is related to distribution, element definition, views and connectors // 149 ////////////////////////////////////////////////////////////////////////////////////// 150 private: 151 CLocalElement* localElement_ = nullptr ; 152 void initializeLocalElement(void) ; 139 private: 140 std::set<StdString> relFiles; 141 142 private: 143 /** define if the scalar is completed or not ie all attributes have been received before in case 144 of grid reading from file or coupling */ 145 bool isCompleted_=true ; 146 public: 147 /*! 148 \brief Check if a scalar is completed 149 Before make any scalar processing, we must be sure that all scalar informations have 150 been sent, for exemple when reading a grid in a file or when grid elements are sent by an 151 other context (coupling). So all direct reference of the scalar (scalar_ref) must be also completed 152 \return true if scalar and scalar reference are completed 153 */ 154 bool isCompleted(void) 155 { 156 if (hasDirectScalarReference()) if (!getDirectScalarReference()->isCompleted()) return false; 157 else return isCompleted_ ; 158 } 159 void setCompleted(void) { isCompleted_=true ; } 160 void unsetCompleted(void) { isCompleted_=false ; } 161 162 163 164 ////////////////////////////////////////////////////////////////////////////////////// 165 // this part is related to distribution, element definition, views and connectors // 166 ////////////////////////////////////////////////////////////////////////////////////// 167 private: 168 CLocalElement* localElement_ = nullptr ; 169 void initializeLocalElement(void) ; 153 170 154 155 156 171 public: 172 CLocalElement* getLocalElement(void) { if (localElement_==nullptr) initializeLocalElement() ; return localElement_ ; } 173 CLocalView* getLocalView(CElementView::type type) { return getLocalElement()->getView(type) ;} 157 174 158 159 160 161 175 private: 176 void addFullView(void) ; 177 void addWorkflowView(void) ; 178 void addModelView(void) ; 162 179 163 164 165 166 167 168 169 170 171 180 private: 181 CLocalConnector* modelToWorkflowConnector_ ; 182 void computeModelToWorkflowConnector(void) ; 183 public: 184 CLocalConnector* getModelToWorkflowConnector(void) { if (modelToWorkflowConnector_==nullptr) computeModelToWorkflowConnector() ; return modelToWorkflowConnector_ ;} 185 186 public: 187 void computeRemoteElement(CContextClient* client, EDistributionType) ; 188 void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, CScattererConnector* &scattererConnector, 172 189 const string& scalarId="") ; 173 190 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 191 static void recvScalarDistribution(CEventServer& event) ; 192 void receivedScalarDistribution(CEventServer& event, int phasis) ; 193 void setServerMask(CArray<bool,1>& serverMask, CContextClient* client) ; 194 void sendDistributedAttributes(CContextClient* client, CScattererConnector& scattererConnector, const string& scalarId) ; 195 static void recvDistributedAttributes(CEventServer& event) ; 196 void recvDistributedAttributes(CEventServer& event, const string& type) ; 197 198 private: 199 map<CContextClient*, CDistributedElement*> remoteElement_ ; 200 public: 201 CDistributedElement* getRemoteElement(CContextClient* client) {return remoteElement_[client] ;} 202 private: 203 map<CContextClient*, CScattererConnector*> clientToServerConnector_ ; 204 public: 205 CScattererConnector* getClientToServerConnector(CContextClient* client) { return clientToServerConnector_[client] ;} 206 207 private: 208 CGathererConnector* gathererConnector_ ; 209 public: 210 CGathererConnector* getGathererConnector(void) { return gathererConnector_ ;} 211 private: 212 CGathererConnector* serverFromClientConnector_ ; 213 CDistributedElement* elementFrom_ ; 214 public: 215 CGathererConnector* getServerFromClientConnector(void) { return serverFromClientConnector_ ;} 216 217 private: 218 CScattererConnector* serverToClientConnector_ = nullptr ; 219 public: 220 CScattererConnector* getServerToClientConnector(void) { return serverToClientConnector_ ;} 221 222 private: 223 map<CContextClient*,CGathererConnector*> clientFromServerConnector_ ; 224 public: 225 CGathererConnector* getClientFromServerConnector(CContextClient* client) { return clientFromServerConnector_[client] ;} 226 227 private: 228 DECLARE_REF_FUNC(Scalar,scalar) 229 230 }; // class CVar 231 ///-------------------------------------------------------------- 232 233 // Declare/Define CScalarGroup and CScalarDefinition 234 DECLARE_GROUP(CScalar); 218 235 } // namespace xios 219 236
Note: See TracChangeset
for help on using the changeset viewer.