14#define ARCANE_TRACE_ENUMERATOR
16#include "arcane/utils/List.h"
17#include "arcane/utils/OStringStream.h"
18#include "arcane/utils/ValueChecker.h"
19#include "arcane/utils/SimdOperation.h"
21#include "arcane/IUnitTest.h"
22#include "arcane/ITimeLoopMng.h"
23#include "arcane/ITimeLoopService.h"
24#include "arcane/ITimeLoop.h"
25#include "arcane/TimeLoopEntryPointInfo.h"
26#include "arcane/IMesh.h"
27#include "arcane/IItemFamily.h"
28#include "arcane/ItemPrinter.h"
29#include "arcane/IParallelMng.h"
30#include "arcane/IMeshModifier.h"
31#include "arcane/IMeshUtilities.h"
32#include "arcane/IMeshPartitioner.h"
33#include "arcane/VariableDependInfo.h"
35#include "arcane/Concurrency.h"
36#include "arcane/VariableView.h"
38#include "arcane/materials/IMeshMaterialMng.h"
39#include "arcane/materials/IMeshMaterial.h"
40#include "arcane/materials/IMeshEnvironment.h"
41#include "arcane/materials/IMeshBlock.h"
42#include "arcane/materials/MeshMaterialModifier.h"
43#include "arcane/materials/MeshMaterialVariableRef.h"
44#include "arcane/materials/MeshEnvironmentVariableRef.h"
45#include "arcane/materials/MaterialVariableBuildInfo.h"
46#include "arcane/materials/MeshBlockBuildInfo.h"
47#include "arcane/materials/MeshEnvironmentBuildInfo.h"
48#include "arcane/materials/MeshMaterialVariableDependInfo.h"
49#include "arcane/materials/CellToAllEnvCellConverter.h"
50#include "arcane/materials/MatCellVector.h"
51#include "arcane/materials/EnvCellVector.h"
52#include "arcane/materials/MatConcurrency.h"
53#include "arcane/materials/MeshMaterialIndirectModifier.h"
54#include "arcane/materials/MeshMaterialVariableSynchronizerList.h"
56#include "arcane/materials/MeshMaterialInfo.h"
58#include "arcane/tests/ArcaneTestGlobal.h"
59#include "arcane/tests/IMaterialEquationOfState.h"
60#include "arcane/tests/MeshMaterialTester_axl.h"
63#include "arcane/tests/StdMeshVariables.cc"
98:
public ArcaneMeshMaterialTesterObject
111 void buildInit()
override;
112 void compute()
override;
113 void startInit()
override;
114 void continueInit()
override;
137 Integer m_check_spectral_values_iteration;
140 void _computeDensity();
148 void _checkCreation2(Integer a,Integer n);
151 void _dumpAverageValues();
152 void _dumpNoDumpRealValues();
155 void _setDependencies();
156 void _doDependencies();
164 void _checkArrayVariableSynchronize();
165 void _setOrCheckSpectralValues(Int64 iteration,
bool is_check);
166 template<
typename VarType1,
typename VarType2,
typename VarType3>
void
169 void _checkFillPartialValues();
171 template<
typename VarType>
void _checkFillPartialValuesHelper(VarType&
mat_var);
172 template<
typename VarType>
174 template<
typename VarType>
void
176 template<
typename VarType>
void
178 template<
typename VectorType>
void
179 _checkVectorCopy(VectorType&
var_type);
181 void _initUnitTest();
183 void _testDumpProperties();
184 void _checkNullComponentItem();
193MeshMaterialTesterModule::
195: ArcaneMeshMaterialTesterObject(
mbi)
209, m_check_spectral_values_iteration(0)
216MeshMaterialTesterModule::
217~MeshMaterialTesterModule()
226void MeshMaterialTesterModule::
255 clist.add(
"MeshMaterialTester");
258 clist.add(
"ArcanePostProcessing");
259 clist.add(
"ArcaneCheckpoint");
269void MeshMaterialTesterModule::
275 info() <<
"MESH_MATERIAL_TESTER :: buildInit()";
284 if (parallelMng()->isParallel())
287 if (subDomain()->isContinue() && options()->recreateFromDump()){
288 mm->recreateFromDump();
293 for( Integer i=0,n=options()->material().size(); i<n; ++i ){
295 info() <<
"Found material name=" <<
mat_name;
303 for( Integer i=0,n=options()->environment().size(); i<n; ++i ){
305 info() <<
"Found environment name=" <<
env_name;
307 for( Integer
k=0,
kn=options()->environment[i].material.size();
k<
kn; ++
k ){
316 info() <<
"Add environment " <<
env_name <<
" to block1";
323 m_block1 =
mm->createBlock(
mbbi);
334 info() <<
"Finished incremental creation of block";
352 mm->endCreate(subDomain()->isContinue());
354 info() <<
"List of materials:";
356 info() <<
"MAT=" << m->name();
357 for(
String s : m->environmentsName() )
358 info() <<
" In ENV=" << s;
365 m_mat1 =
mm->environments()[0]->materials()[0];
367 m_mat2 =
mm->environments()[1]->materials()[0];
369 m_global_deltat.assign(1.0);
371 for( Integer i=0, n=m_material_mng->
materials().size(); i<n; ++i ){
374 m_density_post_processing.add(
var);
379 info() <<
"Activating load balance test";
385template<
typename ContainerType>
void MeshMaterialTesterModule::
396void MeshMaterialTesterModule::
401 info() <<
"MESH_MATERIAL_TESTER :: startInit()";
406 m_nb_starting_cell.
assign(parallelMng()->reduce(Parallel::ReduceSum,ownCells().size()));
432 modifier.setDoCopyBetweenPartialAndPure(
false);
433 modifier.setDoInitNewItems(
false);
434 modifier.setPersistantWorkBuffer(
false);
441 for( Integer z=0; z<
nb_cell; ++z ){
474 m_mat_density.fillPartialValues(3.0);
478 info() <<
"Liste des mailles de test_group";
484 m_density[
icell] = 1.0;
485 m_mat_density[
icell] = 2.0;
492 m_density[
icell] = 2.0;
496 info() <<
"GVAR_NAME = " <<
gvar.name();
499 fatal() <<
"Bad value for global variable v=" <<
gvar[
icell];
506 m_density[
icell] = 1.5;
522 m_present_material.fill(0);
523 m_mat_density.fill(0.0);
532 info() <<
"ENV name=" <<
env->name();
533 vc.areEqual(
env->isEnvironment(),
true,
"IsEnvEnvOK");
534 vc.areEqual(
env->isMaterial(),
false,
"IsEnvMatOK");
535 vc.areEqual(
env->asEnvironment(),
env,
"ToEnvEnvOK");
539 info() <<
"MAT name=" <<
mat->name();
540 vc.areEqual(
mat->isEnvironment(),
false,
"IsMatEnvOK");
541 vc.areEqual(
mat->isMaterial(),
true,
"IsMatMatOK");
543 vc.areEqual(
mat->asMaterial(),
mat,
"ToMatMatOK");
547 m_mat_density[
mmcell] = 200.0;
550 if (
x1._varIndex()!=
mmcell._varIndex())
551 ARCANE_FATAL(
"Bad convertsion MatCell -> ComponentCell");
553 if (
x1._varIndex()!=
x2._varIndex())
554 ARCANE_FATAL(
"Bad convertsion ComponentCell -> MatCell");
562 info() <<
"BLOCK_ENV name=" <<
env->name();
565 info() <<
"BLOCK_MAT name=" <<
mat->name();
572 info() <<
"ENV COMPONENT name=" <<
cmp->name();
578 info() <<
"MAT COMPONENT name=" <<
cmp->name();
584 info() <<
"MAT name=" <<
mat->name()
585 <<
" density_var_name=" << m_mat_density.materialVariable()->materialVariable(
mat)->name();
588 m_mat_density[
mmcell] = 200.0;
596 info() <<
"Env name=" <<
env->name();
599 info() <<
"EnvCell nb_mat=" <<
ev.nbMaterial() <<
" cell_uid=" <<
ItemPrinter(
ev.globalCell())
600 <<
" component_uid="<<
ev.componentUniqueId()
601 <<
" var_index=" <<
ev._varIndex();
617 ARCANE_FATAL(
"Bad convertsion AllEnvCell -> ComponentCell");
618 if (
x1._varIndex()!=
x2._varIndex())
619 ARCANE_FATAL(
"Bad convertsion ComponentCell -> EnvCell");
647 info() <<
"Cell nb_mat=" <<
ec.nbMaterial()
648 <<
" env=" <<
ec.environment()->name()
649 <<
" (id=" <<
ec.environmentId() <<
")";
652 info() <<
"Cell mat=" <<
mc.material()->name()
653 <<
" (id=" <<
mc.materialId() <<
")"
654 <<
" density=" << m_mat_density[
imatcell]
655 <<
" index=" <<
mc._varIndex()
656 <<
" component_uid=" <<
mc.componentUniqueId();
660 info() <<
"Cell mat=" <<
mc.component()->name()
661 <<
" (id=" <<
mc.componentId() <<
")"
662 <<
" density=" << m_mat_density[
mc]
663 <<
" index=" <<
mc._varIndex()
664 <<
" component_uid=" <<
mc.componentUniqueId();
672 info() <<
"Cell nb_mat=" <<
ec.nbSubItem()
673 <<
" env=" <<
ec.component()->name()
674 <<
" (id=" <<
ec.componentId() <<
")";
681 m_mat_density.addDependCurrentTime(m_density);
682 m_mat_density.addDependCurrentTime(m_mat_density2);
683 m_mat_density.addDependPreviousTime(m_mat_density2);
684 m_mat_density.removeDepend(m_mat_density2);
685 m_mat_density.setComputeFunction(
this,&MeshMaterialTesterModule::startInit);
700 info() <<
"IndirectMatAccess Cell uid=" << cell.
uniqueId() <<
" mat_id=" <<
id <<
" density=" <<
density;
711 info() <<
"IndirectEnvAccess Cell uid=" << cell.
uniqueId() <<
" env_id=" <<
id <<
" density=" <<
density;
718 _dumpNoDumpRealValues();
722 _testDumpProperties();
723 _checkNullComponentItem();
729void MeshMaterialTesterModule::
730_checkNullComponentItem()
733 info() <<
"NullEnvCell global_cell_id=" <<
null_env_cell.globalCell().localId();
735 info() <<
"NullEnvCell var_index =" <<
null_env_cell._varIndex();
737 info() <<
"NullEnvCell component_id =" <<
null_env_cell.componentId();
739 info() <<
"NullEnvCell super_cell =" <<
null_env_cell.superCell();
741 info() <<
"NullEnvCell nb_sub_item=" <<
null_env_cell.nbSubItem();
742 info() <<
"NullEnvCell component_unique_id=" <<
null_env_cell.componentUniqueId();
743 info() <<
"NullEnvCell sub_items =" <<
null_env_cell.subItems();
745 info() <<
"NullEnvCell all_env_cell =" <<
null_env_cell.allEnvCell().null();
751void MeshMaterialTesterModule::
754 IMesh* mesh = defaultMesh();
757 Int32 p0 = v0.variable()->property();
758 Int32 p1 = v1.globalVariable().variable()->property();
759 info() <<
"PROP1 = " <<
p0 <<
" " <<
p1;
763 Int32 p2 = v2.globalVariable().variable()->property();
764 Int32 p3 = v3.variable()->property();
765 info() <<
"PROP2 = " <<
p2 <<
" " <<
p3;
768 Int32 p4 =
v4.globalVariable().variable()->property();
769 info() <<
"PROP4 = " <<
p4;
790 auto* x = options()->additionalEosService();
797 info() <<
"EOS: mat=" <<
mat->name();
800 info() <<
" v=" <<
mc.globalCell().uniqueId();
803 x->initEOS(
mat,m_mat_pressure,m_mat_density,m_mat_internal_energy,m_mat_sound_speed);
805 x->applyEOS(
mat,m_mat_density,m_mat_internal_energy,m_mat_pressure,m_mat_sound_speed);
813void MeshMaterialTesterModule::
824void MeshMaterialTesterModule::
827 info() <<
"MESH_MATERIAL_TESTER :: continueInit()";
829 _dumpNoDumpRealValues();
836void MeshMaterialTesterModule::
839 info() <<
"SET_DEPENDENCIES";
841 m_mat_density.setMaterialComputeFunction(
this,&MeshMaterialTesterModule::_computeMaterialDepend);
843 m_mat_density.addMaterialDepend(m_pressure);
847 m_mat_density.materialVariable()->dependInfos(infos,
mat_infos);
849 for( Integer
k=0, n=infos.
size();
k<n; ++
k )
850 info() <<
"Global depend v=" << infos[
k].variable()->fullName();
853 info() <<
"Material depend v=" <<
mat_infos[
k].variable()->name();
887 if (
mvi.arrayIndex()==0)
995void MeshMaterialTesterModule::
998 m_pressure.fill(0.0);
1005 m_mat_density.update(
mat);
1013 if (m_mat_density[
imc]!=v)
1014 ARCANE_FATAL(
"Bad value for mat depend v={0} expected={1}",m_mat_density[
imc],v);
1017 if (m_mat_density[
imc]!=v)
1018 ARCANE_FATAL(
"Bad value for mat depend v={0} expected={1}",m_mat_density[
imc],v);
1023 m_pressure.fill(1.0);
1029 m_mat_density.update(
mat);
1030 double v = 1.0 + v0;
1032 if (m_mat_density[
imc]!=v)
1033 ARCANE_FATAL(
"Bad value (1) for global depend v={0} expected={1}",m_mat_density[
imc],v);
1036 if (m_mat_density[
imc]!=v)
1037 ARCANE_FATAL(
"Bad value (2) for global depend v={0} expected={1}",m_mat_density[
imc],v);
1040 if (m_mat_density[
imc]!=v)
1041 ARCANE_FATAL(
"Bad value (2) for global depend v={0} expected={1}",m_mat_density[
imc],v);
1049void MeshMaterialTesterModule::
1052 info() <<
"Compute material depend mat=" <<
mat->name();
1056 Cell cell =
mc.globalCell();
1059 info() <<
"Cell=" <<
ItemPrinter(cell) <<
" density=" << m_mat_density[
mc]
1061 <<
" pressure=" << m_pressure[cell];
1065 m_mat_density.setUpToDate(
mat);
1071void MeshMaterialTesterModule::
1074 info() <<
"_dumpAverageValues()";
1084 info() <<
"SumMat ITER=" << m_global_iteration() <<
" MAT=" <<
mat->name()
1093void MeshMaterialTesterModule::
1096 info() <<
"_doSimd()";
1117void MeshMaterialTesterModule::
1118_dumpNoDumpRealValues()
1122 info() <<
ostr.str();
1126 info() <<
"NB_USED_MATERIAL_VAR=" <<
vars.size();
1127 for( Integer i=0, n=
vars.size(); i<n; ++i )
1128 info() <<
"USED_MATERIAL_VAR name=" <<
vars[i]->name();
1134template<
typename VectorType>
void MeshMaterialTesterModule::
1155 vc.areEqual(
clone_vec.view()._matvarIndexes(),
vec_cells.view()._matvarIndexes(),
"bad clone 1");
1156 if (
clone_vec.view()._constituentItemListView() !=
vec_cells.view()._constituentItemListView())
1158 if (
clone_vec.view()._matvarIndexes().data()==
vec_cells.view()._matvarIndexes().data())
1168void MeshMaterialTesterModule::
1175 info() <<
"SET_DENSITY ON SUB GROUP for material";
1178 info() <<
"REF_IDX MAT1 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1182 info() <<
"REF_IDX MAT2 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1184 info() <<
"SET_DENSITY";
1187 m_mat_density[
mc] = 3.2;
1188 info() <<
"SET_MAT_DENSITY " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1198 info() <<
"SET_DENSITY ON SUB GROUP for material";
1201 info() <<
"REF_IDX MAT1 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1205 info() <<
"REF_IDX MAT2 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1207 info() <<
"SET_DENSITY";
1210 m_mat_density[
mc] = 3.2;
1211 info() <<
"SET_MAT_DENSITY " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1215 m_mat_density[
mc] = 3.2;
1216 info() <<
"SET_MAT_DENSITY (VIEW) " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1224 info() <<
"SET_DENSITY ON SUB GROUP for environment";
1227 info() <<
"REF_IDX ENV1 " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1229 info() <<
"SET_DENSITY";
1233 info() <<
"SET_ENV_DENSITY " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1238 info() <<
"SET_ENV_DENSITY (VIEW)" <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1249 info() <<
"SET_DENSITY ON SUB GROUP for environment";
1252 info() <<
"REF_IDX ENV1 " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1254 info() <<
"SET_DENSITY";
1258 info() <<
"SET_ENV_DENSITY " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1267void MeshMaterialTesterModule::
1278Integer MeshMaterialTesterModule::
1294Integer MeshMaterialTesterModule::
1310Integer MeshMaterialTesterModule::
1316 info() <<
"ParallelLoop with MatItemVectorView size=" << view.nbItem();
1330void MeshMaterialTesterModule::
1341 for( Integer i=0; i<20; ++i ){
1350 info() <<
" ComponentCell c=" <<
ccell._varIndex();
1381 for( Integer block_size=1; block_size<20; ++block_size){
1383 for( Integer begin=0; begin<
nb_item; begin += block_size ){
1394 ARCANE_FATAL(
"Bad total v={0} expected={1} block_size={2}",
1408 info() <<
"ParallelTest with lambda full_size=" <<
nb_item;
1416 info() <<
"ParallelLoop with component size=" << view.nbItem();
1435 info() <<
"ParallelLoop with environment size=" << view.nbItem();
1478 info() <<
"NB_ITEM=" <<
nb_item;
1479 auto f0 = std::bind(std::mem_fn(&MeshMaterialTesterModule::_subViewFunctor),
this,std::placeholders::_1);
1491void MeshMaterialTesterModule::
1501void MeshMaterialTesterModule::
1513 var.fillToArray(
mat,values);
1515 vc.areEqual(
var[
imatcell],values[index],
"Bad value for fillToArray()");
1541 info() <<
"Indexes=" << indexes;
1550 var.fillToArray(
mat,values,indexes);
1551 for( Integer i=0; i<
nb_index; ++i )
1557 for( Integer i=0; i<
nb_index; ++i )
1565void MeshMaterialTesterModule::
1573 if (m_check_spectral_values_iteration!=0){
1574 info() <<
"Check spectral values after loadbalancing";
1575 _setOrCheckSpectralValues(m_check_spectral_values_iteration,
true);
1576 m_check_spectral_values_iteration = 0;
1583 _dumpAverageValues();
1603 Real d = m_density[
c];
1604 m_density[
c] = d + 1.0;
1641 applyGeneric(allCells(),
var,3.2);
1646 applyGeneric(m_mat1,
var,7.6);
1659 _checkFillPartialValues();
1663 fatal() <<
"Can not find MeshVariable (F1)";
1667 fatal() <<
"Can not find MeshVariable (F2)";
1672 info() <<
"CELL IN MAT1 i=" <<
imatcell.index() <<
" vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1680 info() <<
"CELL IN MAT2 vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1695 info() <<
"CELL IN ENV vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1702 info() <<
"CELL IN ENV WITH COMPONENT vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1710 _checkArrayVariableSynchronize();
1712 for( Integer i=0, n=m_material_mng->
materials().size(); i<n; ++i ){
1714 m_density_post_processing[i]->copy(m_mat_density.globalVariable());
1715 _copyPartialToGlobal(
mat,*m_density_post_processing[i],m_mat_density);
1720 info() <<
"CheckRemove: Cells in MAT1=" << m_mat1->
cells().size();
1724 info() <<
"CheckRemove: CELL IN MAT1 i=" <<
imatcell.index() <<
" vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex()
1725 <<
" lid=" <<
mmc.envCell().globalCell();
1729 info() <<
"Cells in MAT2=" << m_mat2->
cells().size();
1733 Int64 last_uid = m_nb_starting_cell() - (m_global_iteration()*30);
1734 info() <<
"LAST_UID_TO_REMOVE=" <<
last_uid;
1742 info() <<
"Removing cells n=" <<
remove_lids.size();
1743 mesh()->
modifier()->setDynamic(
true);
1745 if (parallelMng()->isParallel()){
1755 info() <<
"MESH_MATERIAL_TEST: UpdateGhostLayers";
1756 mesh()->
modifier()->updateGhostLayers();
1757 if ((m_global_iteration() % 2)==0){
1758 mmim.endUpdateWithSort();
1770 info() <<
"End removing cells nb_cell=" << mesh()->
nbCell();
1773 Integer iteration = m_global_iteration();
1775 if ((iteration%3)==0){
1776 info() <<
"Registering mesh partition";
1778 m_check_spectral_values_iteration = (iteration*2)+1;
1779 _setOrCheckSpectralValues(m_check_spectral_values_iteration,
false);
1788 if (m_mat_density[
mc] == 0.0)
1789 m_mat_density[
mc] = 50.0;
1790 if (m_mat_internal_energy[
mc] == 0.0)
1791 m_mat_internal_energy[
mc] = 1.0;
1801void MeshMaterialTesterModule::
1802_checkFillPartialValues()
1805 info() <<
"Check MaterialVariableCellReal";
1807 _checkFillPartialValuesHelper(
mat_var);
1809 info() <<
"Check EnvironmentVariableCellReal";
1811 _checkFillPartialValuesHelper(
env_var);
1814 info() <<
"Ok for creating Material variable with same name as Environment variable";
1817 info() <<
"Check MaterialVariableCellReal";
1820 _checkFillPartialValuesHelper(
mat_var2);
1822 info() <<
"Check EnvironmentVariableCellArrayReal";
1825 _checkFillPartialValuesHelper(
env_var2);
1831template<
typename VarType>
void MeshMaterialTesterModule::
1832_checkFillPartialValuesHelper(VarType&
mat_var)
1834 info() <<
"Check fillPartialValuesWithGlobalValues()";
1836 mat_var.materialVariable()->fillPartialValuesWithGlobalValues();
1839 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_ALLENVIRONMENT)";
1841 mat_var.fillPartialValuesWithSuperValues(LEVEL_ALLENVIRONMENT);
1844 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_ENVIRONMENT)";
1846 mat_var.fillPartialValuesWithSuperValues(LEVEL_ENVIRONMENT);
1849 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_MATERIAl)";
1851 mat_var.fillPartialValuesWithSuperValues(LEVEL_MATERIAL);
1867 for( Integer i=0; i<n; ++i ){
1872template<
typename VarType>
void MeshMaterialTesterModule::
1892template<
typename VarType>
void MeshMaterialTesterModule::
1903 Cell c = (*iccell).globalCell();
1914template<
typename VarType>
void MeshMaterialTesterModule::
1936template<
typename VarType1,
typename VarType2,
typename VarType3>
void MeshMaterialTesterModule::
1957 vc.setThrowOnError(
false);
1975 if (
vc.nbError()!=0){
1976 error() <<
"Error for cell uid=" << uid <<
" var_index=" <<
var_index;
1983 bool has_mat =
var_real.materialVariable()->space()!=MatVarSpace::Environment;
2003void MeshMaterialTesterModule::
2013void MeshMaterialTesterModule::
2014_checkArrayVariableSynchronize()
2016 info() <<
"_checkArrayVariableSynchronize(): SYNCHRONIZE_MATERIALS";
2020 Int64 iteration = m_global_iteration();
2022 _setOrCheckSpectralValues(iteration,
false);
2025 if ((iteration % 2)==0){
2044 _setOrCheckSpectralValues(iteration,
true);
2050void MeshMaterialTesterModule::
2068 info() <<
"FILL_DENSITY_INFO ITER=" << m_global_iteration()
2069 <<
" mat=" <<
mat->name()
2091 info() <<
"Synchronize density";
2092 m_mat_density.synchronize();
2098void MeshMaterialTesterModule::
2133 info() <<
"FILL MAT=" <<
mat->name();
2143 v /= (Real)
inode->nbCell();
2200void MeshMaterialTesterModule::
2201_checkCreation2(Integer a,Integer n)
2204 info() <<
"I=" << a <<
" N=" << n;
2205 for( Integer i=0; i<n; ++i ){
2209 info() <<
"Z=" << z;
2223 arcaneParallelFor(0,1000,options,[&](Integer a,Integer n) { _checkCreation2(a,n); });
2225 info() <<
"CHECK CREATE N=" << n;
2240void MeshMaterialTesterModule::
2269 m_mat_density[
mc] = 1.0;
2273 m_mat_density.setUpToDate(
mat);
2295 ebi1.addMaterial(
"MAT1");
2296 ebi1.addMaterial(
"MAT2");
2301 ebi2.addMaterial(
"MAT2");
2306 ebi3.addMaterial(
"MAT3");
2307 ebi3.addMaterial(
"MAT1");
2322 info() <<
env1->id();
2323 info() <<
env1->materials()[0]->id();
2324 info() <<
env1->materials()[1]->id();
2325 info() <<
env2->id();
2326 info() <<
env2->materials()[0]->id();
2327 info() <<
env3->id();
2328 info() <<
env3->materials()[0]->id();
2329 info() <<
env3->materials()[1]->id();
2330 info() << block->
id();
2360 info() <<
env1->materials()[0]->cells().size();
2364 IMesh* mesh = defaultMesh();
2379 info() <<
"Cell mat=" <<
mc.materialId();
2384 info() <<
"Cell env=" <<
mmcell.environmentId();
2397 info() <<
"Cell mat=" <<
mc.materialId();
2409 info() <<
"Cell env=" <<
env_cell.environmentId();
2412 info() <<
"Cell mat=" <<
mc.materialId();
2424 info() <<
"Cell env=" <<
env_cell.environmentId();
2427 info() <<
"Cell mat=" <<
mc.materialId();
2460 info() <<
"Cell mat=" <<
cc.componentId();
2466 info() <<
"Cell env=" <<
cc.componentId();
2512 mat_density.setMaterialComputeFunction(
this,&Sample::_computeDensity);
2516 mat_density.addMaterialDepend(defaultMesh()->nodesCoordinates());
2533 ENUMERATE_ENVCELL(ienvcell,view){
2534 mat_density[ienvcell] = 2.5;
2542 ENUMERATE_MATCELL(imatcell,view){
2543 mat_density[imatcell] = 2.5;
2717ARCANE_REGISTER_MODULE_MESHMATERIALTESTER(MeshMaterialTesterModule);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
#define ENUMERATE_COMPONENTITEM_LAMBDA(iter_type, iter, container)
Macro pour itérer sur les entités d'un composant via une fonction lambda du C++11.
Module de test pour la gestion des matériaux et des milieux.
void _applyEos(bool is_init)
Appelle le service d'EOS s'il est disponible.
MaterialVariableCellReal m_mat_nodump_real
Variable pour tester la bonne prise en compte du PNoDump.
void _checkCreation()
Test la création à la volée des variables, avec multi-threading.
MaterialVariableCellReal m_mat_not_used_real
Variable pour tester la bonne prise en compte de setUsed(false)
void _fillDensity(IMeshMaterial *mat, VariableCellReal &tmp_cell_mat_density, VariableNodeReal &tmp_node_mat_density, Int32Array &mat_to_add_array, Int32Array &mat_to_remove_array, bool is_compute_mat)
void _testComponentPart(IMeshMaterial *mat, IMeshEnvironment *env)
Teste les itérateurs par partie.
IMeshPartitioner * m_mesh_partitioner
Partitioner en cas d'équilibrage. Est géré par une option du JDD.
Tableau d'items de types quelconques.
Cell boundaryCell() const
Maille associée à cette face frontière (maille nulle si aucune)
Cell backCell() const
Maille derrière la face (maille nulle si aucune)
virtual Integer nbCell()=0
Nombre de mailles du maillage.
Interface d'un partitionneur de maillage.
virtual IMeshModifier * modifier()=0
Interface de modification associée.
virtual void setCheckLevel(Integer level)=0
Positionne le niveau de vérification du maillage.
virtual Integer checkLevel() const =0
Niveau actuel de vérification.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual char reduce(eReduceType rt, char v)=0
Effectue la réduction de type rt sur le réel v et retourne la valeur.
Interface du gestionnaire d'un sous-domaine.
Interface du gestionnaire de la boucle en temps.
Interface d'une boucle en temps.
static const char * WBuild
appelé lors de la lecture du jeu de données
static const char * WComputeLoop
appelé pendant la boucle de calcul
static const char * WInit
appelé pendant l'initialisation, l'initialisation d'une reprise ou d'un nouveau cas
Interface d'un service de test unitaire.
Interface d'une variable.
@ PNoDump
Indique que la variable ne doit pas être sauvegardée.
Classe utilitaire pour imprimer les infos sur une entité.
Int32 nbNode() const
Nombre de noeuds de l'entité
NodeLocalIdView nodeIds() const
Liste des noeuds de l'entité
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
ItemUniqueId uniqueId() const
Identifiant unique sur tous les domaines.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Maille arcane avec info matériaux et milieux.
void fill(const DataType &value)
Remplit les valeurs partielles et globales de la variable avec la valeur value.
void fillPartialValues(const DataType &value)
Remplit les valeurs partielles de la variable avec la valeur value.
GlobalVariableRefType & globalVariable()
Variable globale associée à cette variable matériau.
Conversion de 'Cell' en 'AllEnvCell'.
Représente un composant d'une maille multi-matériau.
ARCCORE_HOST_DEVICE MatVarIndex _varIndex() const
Index d'un Item matériaux dans une variable.
Vue sur un vecteur sur les entités d'un composant.
Vecteur sur les entités d'un composant.
Vecteur sur les entités d'un milieu.
Maille arcane d'un milieu.
Vue sur un vecteur sur les entités d'un milieu.
Interface d'un bloc d'un maillage.
virtual Int32 id() const =0
Identifiant du bloc. Il s'agit aussi de l'indice (en commencant par 0) de ce bloc dans la liste des b...
Interface d'un composant (matériau ou milieu) d'un maillage.
virtual String name() const =0
Nom du composant.
virtual CellGroup cells() const =0
Groupe des mailles de ce matériau.
virtual Int32 id() const =0
Identifiant du composant.
virtual ComponentImpurePartItemVectorView impureItems() const =0
Vue sur la liste des entités impures (partielles) partielles du composant.
virtual ComponentPurePartItemVectorView pureItems() const =0
Vue sur la liste des entités pures (associées à la maille globale) du composant.
Interface d'un milieu d'un maillage.
Interface du gestionnaire des matériaux et des milieux d'un maillage.
virtual ConstArrayView< IMeshMaterial * > materials() const =0
Liste des matériaux.
virtual MeshComponentList materialsAsComponents() const =0
Liste des matériaux vus comme composants.
virtual MeshComponentList components() const =0
Liste de tous les composants.
virtual IMeshMaterialVariable * findVariable(const String &name)=0
Variable de nom name ou nullptr si aucune de ce nom existe.
virtual void setAllocateScalarEnvironmentVariableAsMaterial(bool v)=0
Positionne l'option indiquant si les variables scalaires milieux sont allouées sur les matériaux.
virtual bool isAllocateScalarEnvironmentVariableAsMaterial() const =0
Indique si les variables scalaires milieux sont allouées sur les matériaux.
virtual void dumpInfos(std::ostream &o)=0
Ecrit les infos des matériaux et milieux sur le flot o.
virtual void forceRecompute()=0
Force le recalcul des informations des matériaux.
virtual void checkMaterialsInCells(Integer max_print=10)=0
Vérifie que les mailles des matériaux sont cohérentes entre les sous-domaines.
virtual void setMeshModificationNotified(bool v)=0
Indique si les milieux et matériaux suivent les changements de topologie dans le maillage.
virtual void fillWithUsedVariables(Array< IMeshMaterialVariable * > &variables)=0
Remplit le tableau variables avec la liste des variables matériaux utilisés.
virtual bool synchronizeMaterialsInCells()=0
Synchronise les mailles des matériaux.
virtual MeshComponentList environmentsAsComponents() const =0
Liste des milieux vus comme composants.
virtual void setModificationFlags(int v)=0
Positionner les flags pour paramêtrer les modifications de matériaux/milieux.
static IMeshMaterialMng * getReference(const MeshHandleOrMesh &mesh_handle, bool create=true)
Récupère ou créé la référence associée à mesh.
Interface d'une variable matériau d'un maillage.
virtual void dumpValues(std::ostream &ostr)=0
Affiche les valeurs de la variable sur le flot ostr.
Interface d'un matériau d'un maillage.
virtual IMeshEnvironment * environment() const =0
Milieu auquel appartient ce matériau.
virtual MatItemVectorView matView() const =0
Vue associée à ce matériau.
Vecteur sur les entités d'un matériau.
Représente un matériau d'une maille multi-matériau.
Vue sur un vecteur sur les entités d'un matériau.
Représente un index sur les variables matériaux et milieux.
Informations pour la création d'un milieu.
Objet permettant de modifier indirectement les matériaux ou les milieux.
Infos d'un matériau d'un maillage.
Objet permettant de modifier les matériaux ou les milieux.
IMeshMaterialVariable * materialVariable() const
Variable matériau associée.
void synchronize()
Synchronise les valeurs entre les sous-domaines.
Synchronisation d'une liste de variables matériaux.
Informations pour la création d'un bloc.
Informations pour construire un module.
Flot de sortie lié à une String.
Options d'exécution d'une boucle parallèle en multi-thread.
void setGrainSize(Integer v)
Positionne la taille (approximative) d'un intervalle d'itération.
Infos d'un point d'entrée d'une boucle en temps.
Vérification de la validité de certaines valeurs.
Paramètres nécessaires à la construction d'une variable.
void assign(const DataType &v)
Affecte à la variable la valeur v.
void setUpToDate()
Indique que la variable vient d'être mise à jour.
Integer size() const
Nombre d'éléments du vecteur.
Vue modifiable d'un tableau d'un type T.
void resize(Int64 s)
Change le nombre d'éléments du tableau à s.
void add(ConstReferenceType val)
Ajoute l'élément val à la fin du tableau.
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
void arcaneParallelFor(Integer i0, Integer size, InstanceType *itype, void(InstanceType::*lambda_function)(Integer i0, Integer size))
Applique en concurrence la fonction lambda lambda_function sur l'intervalle d'itération [i0,...
ARCCORE_HOST_DEVICE Real2 min(Real2 a, Real2 b)
Retourne le minimum de deux Real2.
ItemGroupT< Cell > CellGroup
Groupe de mailles.
MeshVariableScalarRefT< Cell, Real > VariableCellReal
Grandeur au centre des mailles de type réel.
auto viewIn(RunCommand &cmd, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture pour les variables materiaux scalaire.
auto viewOut(RunCommand &cmd, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
Real toReal(Real r)
Converti r en un Real.
Active toujours les traces dans les parties Arcane concernant les matériaux.
MatVarSpace
Espace de définition d'une variable matériau.
void Foreach(const ItemVectorView &items_view, const ParallelLoopOptions &options, InstanceType *instance, void(InstanceType::*function)(ItemVectorViewT< ItemType > items))
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
Ensemble des classes assurant la gestion des matériaux et des milieux.