Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
HyodaMats.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* HyodaMats.cc (C) 2000-2013 */
9/*---------------------------------------------------------------------------*/
10/*---------------------------------------------------------------------------*/
11#ifndef _HYODA_PLUGIN_MATERIALS_H_
12#define _HYODA_PLUGIN_MATERIALS_H_
13
14#include "arcane/IApplication.h"
15#include "arcane/IParallelMng.h"
16
17#include "arcane/AbstractService.h"
18#include "arcane/FactoryService.h"
19
20#include "arcane/IVariableMng.h"
21#include "arcane/SharedVariable.h"
22#include "arcane/CommonVariables.h"
23
24#include "arcane/IMesh.h"
25#include "arcane/IItemFamily.h"
26
27#include "arcane/materials/IMeshMaterialMng.h"
28#include "arcane/materials/IMeshMaterial.h"
29#include "arcane/materials/IMeshEnvironment.h"
30#include "arcane/materials/MeshMaterialModifier.h"
31#include "arcane/materials/MeshMaterialVariableRef.h"
32#include "arcane/materials/MaterialVariableBuildInfo.h"
33#include "arcane/materials/MeshEnvironmentBuildInfo.h"
34#include "arcane/materials/CellToAllEnvCellConverter.h"
35#include "arcane/materials/MatItemVector.h"
36
37#include "arcane/hyoda/Hyoda.h"
38#include "arcane/hyoda/HyodaArc.h"
39#include "arcane/hyoda/HyodaMix.h"
40#include "arcane/hyoda/HyodaIceT.h"
41#include "arcane/hyoda/IHyodaPlugin.h"
42
43//#include <GL/osmesa.h>
44#include "GL/glu.h"
45
46/*---------------------------------------------------------------------------*/
47/*---------------------------------------------------------------------------*/
48
49ARCANE_BEGIN_NAMESPACE
50class HyodaMix;
51using namespace Arcane;
52using namespace Arcane::Materials;
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56
58 public IHyodaPlugin{
59public:
62 m_sub_domain(sbi.subDomain()),
63 m_defaultMesh(m_sub_domain->defaultMesh()),
64 m_interface_normal(VariableBuildInfo(m_defaultMesh,
65 "InterfaceNormal")),
66 m_interface_distance(VariableBuildInfo(m_defaultMesh,
67 "InterfaceDistance2",
68 IVariable::PNoDump|IVariable::PNoRestore))
69 {}
70
71 // **************************************************************************
72 // * drawGlobalCell
73 // **************************************************************************
74 int drawGlobalCell(Cell cell, Real min, Real max, Real val){
75 Real3 rgb;
76 debug()<<"\t[HyodaMats::drawGlobalCell] Cell #"<<cell.localId();
78 hyoda()->meshIceT()->setColor(min,max,val,rgb);
79 ENUMERATE_NODE(node, cell->nodes()){
80 glColor3d(rgb[0], rgb[1], rgb[2]);
81 glVertex2d(m_defaultMesh->nodesCoordinates()[node].x,
82 m_defaultMesh->nodesCoordinates()[node].y);
83 }
84 glEnd();
85 return 0;
86 }
87
88 // **************************************************************************
89 // * draw
90 // **************************************************************************
91 int draw(IVariable *variable, Real min, Real max)
92 {
93 ARCANE_UNUSED(variable);
94
95 IMeshMaterialMng *material_mng=IMeshMaterialMng::getReference(m_defaultMesh);
97
98 // Itération sur tous les milieux et tous les matériaux d'une maille.
99 ENUMERATE_ALLENVCELL(iallenvcell, material_mng, m_defaultMesh->allCells()){
101 Cell global_cell = all_env_cell.globalCell();
102 hyodaMix()->setCellOrigin(global_cell);
103
104 info()<<"[HyodaMats::draw] aeCell #"
105 << global_cell.localId()
106 << ", nbEnvironment=" << all_env_cell.nbEnvironment();
107 // Nous sommes dans le cas du plugin materials qui doit avoir qu'un seul milieu par maille
108 if (all_env_cell.nbEnvironment()!=1)
109 info() << "[HyodaMats::draw] all_env_cell.nbEnvironment()!=1";
110
112 info()<<"\t[HyodaMats::draw] eCell #"
113 << (*ienvcell).globalCell().localId()
114 << ", nbMaterial=" << (*ienvcell).nbMaterial();
115 // Si la maille en cours n'a qu'un seul matériau, on l'affiche en global
116 if ((*ienvcell).nbMaterial()==1) drawGlobalCell((*ienvcell).globalCell(),
117 min, max,
118 mat_density[(*ienvcell).globalCell()]);
119 // Si la maille a 2 materiaux
120 // et que la normale est non nulle
121 // et qu'on a une distance non nulle
122 if ((*ienvcell).nbMaterial()==2
123 && m_interface_normal[global_cell].abs()!=0.
124 && m_interface_distance[global_cell].size()==1
125 && m_interface_distance[global_cell].at(0)!=0.){
126 Int32 rtn=hyodaMix()->xCellPoints(global_cell,
127 m_interface_normal[global_cell],
128 m_interface_distance[global_cell].at(0),0);
129 info()<<"\t[HyodaMats::draw] Cell #"
130 << global_cell.localId()
131 << ", rtn=" << rtn
132 << ", mat0="<< mat_density[(*ienvcell).cell(0)]
133 << ", mat1="<< mat_density[(*ienvcell).cell(1)];
134 hyodaMix()->xCellDrawInterface((*ienvcell).globalCell(),/*order*/0);
135 }
136 /*ENUMERATE_CELL_MATCELL(imatcell,(*ienvcell)){
137 MatCell mc = *imatcell;
138 Int32 idx = mc.materialId();
139 //m_present_material[global_cell] = m_present_material[global_cell] | (1<<idx);
140 debug()<<"\t\t[HyodaMats::draw] mCell #"
141 << (*imatcell).globalCell().localId()
142 << ", materialId=" << idx;
143 }*/
144 }
145 }
146 return 0;
147 }
148
149private:
150 ISubDomain *m_sub_domain;
151 IMesh* m_defaultMesh;
152 VariableCellReal3 m_interface_normal;
153 VariableCellArrayReal m_interface_distance;
154 };
155
156
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162ARCANE_END_NAMESPACE
163
164/*---------------------------------------------------------------------------*/
165/*---------------------------------------------------------------------------*/
166
167#endif // _HYODA_PLUGIN_MATERIALS_H_
#define ENUMERATE_NODE(name, group)
Enumérateur générique d'un groupe de noeuds.
#define ARCANE_REGISTER_SUB_DOMAIN_FACTORY(aclass, ainterface, aname)
Enregistre un service de fabrique pour la classe aclass.
Classe de base d'un service.
Maille d'un maillage.
Definition Item.h:1178
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface d'une variable.
Definition IVariable.h:54
NodeConnectedListViewType nodes() const
Liste des noeuds de l'entité
Definition Item.h:771
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Maille arcane avec info matériaux et milieux.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Structure contenant les informations pour créer un service.
Paramètres nécessaires à la construction d'une variable.
#define ENUMERATE_CELL_ENVCELL(iname, all_env_cell)
Macro pour itérer sur tous les milieux d'une maille.
#define ENUMERATE_ALLENVCELL(iname,...)
Macro pour itérer sur toutes les mailles AllEnvCell d'un groupe.
Active toujours les traces dans les parties Arcane concernant les matériaux.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-