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"
102:
public ArcaneMeshMaterialTesterObject
115 void buildInit()
override;
116 void compute()
override;
117 void startInit()
override;
118 void continueInit()
override;
141 Integer m_check_spectral_values_iteration;
144 void _computeDensity();
152 void _checkCreation2(Integer a,Integer n);
155 void _dumpAverageValues();
156 void _dumpNoDumpRealValues();
159 void _setDependencies();
160 void _doDependencies();
168 void _checkArrayVariableSynchronize();
169 void _setOrCheckSpectralValues(Int64 iteration,
bool is_check);
170 template<
typename VarType1,
typename VarType2,
typename VarType3>
void
173 void _checkFillPartialValues();
175 template<
typename VarType>
void _checkFillPartialValuesHelper(VarType&
mat_var);
176 template<
typename VarType>
178 template<
typename VarType>
void
180 template<
typename VarType>
void
182 template<
typename VectorType>
void
183 _checkVectorCopy(VectorType&
var_type);
185 void _initUnitTest();
187 void _testDumpProperties();
188 void _checkNullComponentItem();
197MeshMaterialTesterModule::
199: ArcaneMeshMaterialTesterObject(
mbi)
213, m_check_spectral_values_iteration(0)
220MeshMaterialTesterModule::
221~MeshMaterialTesterModule()
230void MeshMaterialTesterModule::
259 clist.add(
"MeshMaterialTester");
262 clist.add(
"ArcanePostProcessing");
263 clist.add(
"ArcaneCheckpoint");
273void MeshMaterialTesterModule::
279 info() <<
"MESH_MATERIAL_TESTER :: buildInit()";
288 if (parallelMng()->isParallel())
291 if (subDomain()->isContinue() && options()->recreateFromDump()){
292 mm->recreateFromDump();
297 for( Integer i=0,n=options()->material().size(); i<n; ++i ){
299 info() <<
"Found material name=" <<
mat_name;
307 for( Integer i=0,n=options()->environment().size(); i<n; ++i ){
309 info() <<
"Found environment name=" <<
env_name;
311 for( Integer
k=0,
kn=options()->environment[i].material.size();
k<
kn; ++
k ){
320 info() <<
"Add environment " <<
env_name <<
" to block1";
327 m_block1 =
mm->createBlock(
mbbi);
338 info() <<
"Finished incremental creation of block";
356 mm->endCreate(subDomain()->isContinue());
358 info() <<
"List of materials:";
360 info() <<
"MAT=" << m->name();
361 for(
String s : m->environmentsName() )
362 info() <<
" In ENV=" << s;
369 m_mat1 =
mm->environments()[0]->materials()[0];
371 m_mat2 =
mm->environments()[1]->materials()[0];
373 m_global_deltat.assign(1.0);
375 for( Integer i=0, n=m_material_mng->
materials().size(); i<n; ++i ){
378 m_density_post_processing.add(
var);
383 info() <<
"Activating load balance test";
389template<
typename ContainerType>
void MeshMaterialTesterModule::
400void MeshMaterialTesterModule::
405 info() <<
"MESH_MATERIAL_TESTER :: startInit()";
410 m_nb_starting_cell.
assign(parallelMng()->reduce(Parallel::ReduceSum,ownCells().size()));
436 modifier.setDoCopyBetweenPartialAndPure(
false);
437 modifier.setDoInitNewItems(
false);
438 modifier.setPersistantWorkBuffer(
false);
445 for( Integer z=0; z<
nb_cell; ++z ){
478 m_mat_density.fillPartialValues(3.0);
482 info() <<
"Liste des mailles de test_group";
488 m_density[
icell] = 1.0;
489 m_mat_density[
icell] = 2.0;
496 m_density[
icell] = 2.0;
500 info() <<
"GVAR_NAME = " <<
gvar.name();
503 fatal() <<
"Bad value for global variable v=" <<
gvar[
icell];
510 m_density[
icell] = 1.5;
526 m_present_material.fill(0);
527 m_mat_density.fill(0.0);
536 info() <<
"ENV name=" <<
env->name();
537 vc.areEqual(
env->isEnvironment(),
true,
"IsEnvEnvOK");
538 vc.areEqual(
env->isMaterial(),
false,
"IsEnvMatOK");
539 vc.areEqual(
env->asEnvironment(),
env,
"ToEnvEnvOK");
543 info() <<
"MAT name=" <<
mat->name();
544 vc.areEqual(
mat->isEnvironment(),
false,
"IsMatEnvOK");
545 vc.areEqual(
mat->isMaterial(),
true,
"IsMatMatOK");
547 vc.areEqual(
mat->asMaterial(),
mat,
"ToMatMatOK");
551 m_mat_density[
mmcell] = 200.0;
554 if (
x1._varIndex()!=
mmcell._varIndex())
555 ARCANE_FATAL(
"Bad convertsion MatCell -> ComponentCell");
557 if (
x1._varIndex()!=
x2._varIndex())
558 ARCANE_FATAL(
"Bad convertsion ComponentCell -> MatCell");
566 info() <<
"BLOCK_ENV name=" <<
env->name();
569 info() <<
"BLOCK_MAT name=" <<
mat->name();
576 info() <<
"ENV COMPONENT name=" <<
cmp->name();
582 info() <<
"MAT COMPONENT name=" <<
cmp->name();
588 info() <<
"MAT name=" <<
mat->name()
589 <<
" density_var_name=" << m_mat_density.materialVariable()->materialVariable(
mat)->name();
592 m_mat_density[
mmcell] = 200.0;
600 info() <<
"Env name=" <<
env->name();
603 info() <<
"EnvCell nb_mat=" <<
ev.nbMaterial() <<
" cell_uid=" <<
ItemPrinter(
ev.globalCell())
604 <<
" component_uid="<<
ev.componentUniqueId()
605 <<
" var_index=" <<
ev._varIndex();
621 ARCANE_FATAL(
"Bad convertsion AllEnvCell -> ComponentCell");
622 if (
x1._varIndex()!=
x2._varIndex())
623 ARCANE_FATAL(
"Bad convertsion ComponentCell -> EnvCell");
651 info() <<
"Cell nb_mat=" <<
ec.nbMaterial()
652 <<
" env=" <<
ec.environment()->name()
653 <<
" (id=" <<
ec.environmentId() <<
")";
656 info() <<
"Cell mat=" <<
mc.material()->name()
657 <<
" (id=" <<
mc.materialId() <<
")"
658 <<
" density=" << m_mat_density[
imatcell]
659 <<
" index=" <<
mc._varIndex()
660 <<
" component_uid=" <<
mc.componentUniqueId();
664 info() <<
"Cell mat=" <<
mc.component()->name()
665 <<
" (id=" <<
mc.componentId() <<
")"
666 <<
" density=" << m_mat_density[
mc]
667 <<
" index=" <<
mc._varIndex()
668 <<
" component_uid=" <<
mc.componentUniqueId();
676 info() <<
"Cell nb_mat=" <<
ec.nbSubItem()
677 <<
" env=" <<
ec.component()->name()
678 <<
" (id=" <<
ec.componentId() <<
")";
685 m_mat_density.addDependCurrentTime(m_density);
686 m_mat_density.addDependCurrentTime(m_mat_density2);
687 m_mat_density.addDependPreviousTime(m_mat_density2);
688 m_mat_density.removeDepend(m_mat_density2);
689 m_mat_density.setComputeFunction(
this,&MeshMaterialTesterModule::startInit);
704 info() <<
"IndirectMatAccess Cell uid=" << cell.
uniqueId() <<
" mat_id=" <<
id <<
" density=" <<
density;
715 info() <<
"IndirectEnvAccess Cell uid=" << cell.
uniqueId() <<
" env_id=" <<
id <<
" density=" <<
density;
722 _dumpNoDumpRealValues();
726 _testDumpProperties();
727 _checkNullComponentItem();
733void MeshMaterialTesterModule::
734_checkNullComponentItem()
737 info() <<
"NullEnvCell global_cell_id=" <<
null_env_cell.globalCell().localId();
739 info() <<
"NullEnvCell var_index =" <<
null_env_cell._varIndex();
741 info() <<
"NullEnvCell component_id =" <<
null_env_cell.componentId();
743 info() <<
"NullEnvCell super_cell =" <<
null_env_cell.superCell();
745 info() <<
"NullEnvCell nb_sub_item=" <<
null_env_cell.nbSubItem();
746 info() <<
"NullEnvCell component_unique_id=" <<
null_env_cell.componentUniqueId();
749 info() <<
"NullEnvCell all_env_cell =" <<
null_env_cell.allEnvCell().null();
755void MeshMaterialTesterModule::
758 IMesh* mesh = defaultMesh();
761 Int32 p0 = v0.variable()->property();
762 Int32 p1 = v1.globalVariable().variable()->property();
763 info() <<
"PROP1 = " <<
p0 <<
" " <<
p1;
767 Int32 p2 = v2.globalVariable().variable()->property();
768 Int32 p3 = v3.variable()->property();
769 info() <<
"PROP2 = " <<
p2 <<
" " <<
p3;
772 Int32 p4 =
v4.globalVariable().variable()->property();
773 info() <<
"PROP4 = " <<
p4;
794 auto* x = options()->additionalEosService();
801 info() <<
"EOS: mat=" <<
mat->name();
804 info() <<
" v=" <<
mc.globalCell().uniqueId();
807 x->initEOS(
mat,m_mat_pressure,m_mat_density,m_mat_internal_energy,m_mat_sound_speed);
809 x->applyEOS(
mat,m_mat_density,m_mat_internal_energy,m_mat_pressure,m_mat_sound_speed);
817void MeshMaterialTesterModule::
828void MeshMaterialTesterModule::
831 info() <<
"MESH_MATERIAL_TESTER :: continueInit()";
833 _dumpNoDumpRealValues();
840void MeshMaterialTesterModule::
843 info() <<
"SET_DEPENDENCIES";
845 m_mat_density.setMaterialComputeFunction(
this,&MeshMaterialTesterModule::_computeMaterialDepend);
847 m_mat_density.addMaterialDepend(m_pressure);
851 m_mat_density.materialVariable()->dependInfos(infos,
mat_infos);
853 for( Integer
k=0, n=infos.
size();
k<n; ++
k )
854 info() <<
"Global depend v=" << infos[
k].variable()->fullName();
857 info() <<
"Material depend v=" <<
mat_infos[
k].variable()->name();
891 if (
mvi.arrayIndex()==0)
999void MeshMaterialTesterModule::
1002 m_pressure.fill(0.0);
1009 m_mat_density.update(
mat);
1017 if (m_mat_density[
imc]!=v)
1018 ARCANE_FATAL(
"Bad value for mat depend v={0} expected={1}",m_mat_density[
imc],v);
1021 if (m_mat_density[
imc]!=v)
1022 ARCANE_FATAL(
"Bad value for mat depend v={0} expected={1}",m_mat_density[
imc],v);
1027 m_pressure.fill(1.0);
1033 m_mat_density.update(
mat);
1034 double v = 1.0 + v0;
1036 if (m_mat_density[
imc]!=v)
1037 ARCANE_FATAL(
"Bad value (1) 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);
1044 if (m_mat_density[
imc]!=v)
1045 ARCANE_FATAL(
"Bad value (2) for global depend v={0} expected={1}",m_mat_density[
imc],v);
1053void MeshMaterialTesterModule::
1056 info() <<
"Compute material depend mat=" <<
mat->name();
1060 Cell cell =
mc.globalCell();
1063 info() <<
"Cell=" <<
ItemPrinter(cell) <<
" density=" << m_mat_density[
mc]
1065 <<
" pressure=" << m_pressure[cell];
1069 m_mat_density.setUpToDate(
mat);
1075void MeshMaterialTesterModule::
1078 info() <<
"_dumpAverageValues()";
1088 info() <<
"SumMat ITER=" << m_global_iteration() <<
" MAT=" <<
mat->name()
1097void MeshMaterialTesterModule::
1100 info() <<
"_doSimd()";
1121void MeshMaterialTesterModule::
1122_dumpNoDumpRealValues()
1126 info() <<
ostr.str();
1130 info() <<
"NB_USED_MATERIAL_VAR=" <<
vars.size();
1131 for( Integer i=0, n=
vars.size(); i<n; ++i )
1132 info() <<
"USED_MATERIAL_VAR name=" <<
vars[i]->name();
1138template<
typename VectorType>
void MeshMaterialTesterModule::
1159 vc.areEqual(
clone_vec.view()._matvarIndexes(),
vec_cells.view()._matvarIndexes(),
"bad clone 1");
1160 if (
clone_vec.view()._constituentItemListView() !=
vec_cells.view()._constituentItemListView())
1162 if (
clone_vec.view()._matvarIndexes().data()==
vec_cells.view()._matvarIndexes().data())
1172void MeshMaterialTesterModule::
1179 info() <<
"SET_DENSITY ON SUB GROUP for material";
1182 info() <<
"REF_IDX MAT1 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1186 info() <<
"REF_IDX MAT2 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1188 info() <<
"SET_DENSITY";
1191 m_mat_density[
mc] = 3.2;
1192 info() <<
"SET_MAT_DENSITY " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1202 info() <<
"SET_DENSITY ON SUB GROUP for material";
1205 info() <<
"REF_IDX MAT1 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1209 info() <<
"REF_IDX MAT2 " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1211 info() <<
"SET_DENSITY";
1214 m_mat_density[
mc] = 3.2;
1215 info() <<
"SET_MAT_DENSITY " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1219 m_mat_density[
mc] = 3.2;
1220 info() <<
"SET_MAT_DENSITY (VIEW) " <<
mc._varIndex() <<
" " <<
mc.globalCell().uniqueId();
1228 info() <<
"SET_DENSITY ON SUB GROUP for environment";
1231 info() <<
"REF_IDX ENV1 " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1233 info() <<
"SET_DENSITY";
1237 info() <<
"SET_ENV_DENSITY " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1242 info() <<
"SET_ENV_DENSITY (VIEW)" <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1253 info() <<
"SET_DENSITY ON SUB GROUP for environment";
1256 info() <<
"REF_IDX ENV1 " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1258 info() <<
"SET_DENSITY";
1262 info() <<
"SET_ENV_DENSITY " <<
mc._varIndex() <<
" uid=" <<
mc.globalCell().uniqueId();
1271void MeshMaterialTesterModule::
1282Integer MeshMaterialTesterModule::
1298Integer MeshMaterialTesterModule::
1314Integer MeshMaterialTesterModule::
1320 info() <<
"ParallelLoop with MatItemVectorView size=" << view.nbItem();
1334void MeshMaterialTesterModule::
1345 for( Integer i=0; i<20; ++i ){
1354 info() <<
" ComponentCell c=" <<
ccell._varIndex();
1385 for( Integer block_size=1; block_size<20; ++block_size){
1387 for( Integer begin=0; begin<
nb_item; begin += block_size ){
1398 ARCANE_FATAL(
"Bad total v={0} expected={1} block_size={2}",
1412 info() <<
"ParallelTest with lambda full_size=" <<
nb_item;
1420 info() <<
"ParallelLoop with component size=" << view.nbItem();
1439 info() <<
"ParallelLoop with environment size=" << view.nbItem();
1482 info() <<
"NB_ITEM=" <<
nb_item;
1483 auto f0 = std::bind(std::mem_fn(&MeshMaterialTesterModule::_subViewFunctor),
this,std::placeholders::_1);
1495void MeshMaterialTesterModule::
1505void MeshMaterialTesterModule::
1517 var.fillToArray(
mat,values);
1519 vc.areEqual(
var[
imatcell],values[index],
"Bad value for fillToArray()");
1545 info() <<
"Indexes=" << indexes;
1554 var.fillToArray(
mat,values,indexes);
1555 for( Integer i=0; i<
nb_index; ++i )
1561 for( Integer i=0; i<
nb_index; ++i )
1569void MeshMaterialTesterModule::
1577 if (m_check_spectral_values_iteration!=0){
1578 info() <<
"Check spectral values after loadbalancing";
1579 _setOrCheckSpectralValues(m_check_spectral_values_iteration,
true);
1580 m_check_spectral_values_iteration = 0;
1587 _dumpAverageValues();
1607 Real d = m_density[
c];
1608 m_density[
c] = d + 1.0;
1645 applyGeneric(allCells(),
var,3.2);
1650 applyGeneric(m_mat1,
var,7.6);
1663 _checkFillPartialValues();
1667 fatal() <<
"Can not find MeshVariable (F1)";
1671 fatal() <<
"Can not find MeshVariable (F2)";
1676 info() <<
"CELL IN MAT1 i=" <<
imatcell.index() <<
" vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1684 info() <<
"CELL IN MAT2 vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1699 info() <<
"CELL IN ENV vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1706 info() <<
"CELL IN ENV WITH COMPONENT vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex();
1714 _checkArrayVariableSynchronize();
1716 for( Integer i=0, n=m_material_mng->
materials().size(); i<n; ++i ){
1718 m_density_post_processing[i]->copy(m_mat_density.globalVariable());
1719 _copyPartialToGlobal(
mat,*m_density_post_processing[i],m_mat_density);
1724 info() <<
"CheckRemove: Cells in MAT1=" << m_mat1->
cells().size();
1728 info() <<
"CheckRemove: CELL IN MAT1 i=" <<
imatcell.index() <<
" vindex=" <<
mvi.arrayIndex() <<
" i=" <<
mvi.valueIndex()
1729 <<
" lid=" <<
mmc.envCell().globalCell();
1733 info() <<
"Cells in MAT2=" << m_mat2->
cells().size();
1737 Int64 last_uid = m_nb_starting_cell() - (m_global_iteration()*30);
1738 info() <<
"LAST_UID_TO_REMOVE=" <<
last_uid;
1746 info() <<
"Removing cells n=" <<
remove_lids.size();
1747 mesh()->
modifier()->setDynamic(
true);
1749 if (parallelMng()->isParallel()){
1759 info() <<
"MESH_MATERIAL_TEST: UpdateGhostLayers";
1760 mesh()->
modifier()->updateGhostLayers();
1761 if ((m_global_iteration() % 2)==0){
1762 mmim.endUpdateWithSort();
1774 info() <<
"End removing cells nb_cell=" << mesh()->
nbCell();
1777 Integer iteration = m_global_iteration();
1779 if ((iteration%3)==0){
1780 info() <<
"Registering mesh partition";
1782 m_check_spectral_values_iteration = (iteration*2)+1;
1783 _setOrCheckSpectralValues(m_check_spectral_values_iteration,
false);
1792 if (m_mat_density[
mc] == 0.0)
1793 m_mat_density[
mc] = 50.0;
1794 if (m_mat_internal_energy[
mc] == 0.0)
1795 m_mat_internal_energy[
mc] = 1.0;
1805void MeshMaterialTesterModule::
1806_checkFillPartialValues()
1809 info() <<
"Check MaterialVariableCellReal";
1811 _checkFillPartialValuesHelper(
mat_var);
1813 info() <<
"Check EnvironmentVariableCellReal";
1815 _checkFillPartialValuesHelper(
env_var);
1818 info() <<
"Ok for creating Material variable with same name as Environment variable";
1821 info() <<
"Check MaterialVariableCellReal";
1824 _checkFillPartialValuesHelper(
mat_var2);
1826 info() <<
"Check EnvironmentVariableCellArrayReal";
1829 _checkFillPartialValuesHelper(
env_var2);
1835template<
typename VarType>
void MeshMaterialTesterModule::
1836_checkFillPartialValuesHelper(VarType&
mat_var)
1838 info() <<
"Check fillPartialValuesWithGlobalValues()";
1840 mat_var.materialVariable()->fillPartialValuesWithGlobalValues();
1843 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_ALLENVIRONMENT)";
1845 mat_var.fillPartialValuesWithSuperValues(LEVEL_ALLENVIRONMENT);
1848 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_ENVIRONMENT)";
1850 mat_var.fillPartialValuesWithSuperValues(LEVEL_ENVIRONMENT);
1853 info() <<
"Check fillPartialValuesWithSuperValues(LEVEL_MATERIAl)";
1855 mat_var.fillPartialValuesWithSuperValues(LEVEL_MATERIAL);
1871 for( Integer i=0; i<n; ++i ){
1876template<
typename VarType>
void MeshMaterialTesterModule::
1896template<
typename VarType>
void MeshMaterialTesterModule::
1907 Cell c = (*iccell).globalCell();
1918template<
typename VarType>
void MeshMaterialTesterModule::
1940template<
typename VarType1,
typename VarType2,
typename VarType3>
void MeshMaterialTesterModule::
1961 vc.setThrowOnError(
false);
1979 if (
vc.nbError()!=0){
1980 error() <<
"Error for cell uid=" << uid <<
" var_index=" <<
var_index;
1987 bool has_mat =
var_real.materialVariable()->space()!=MatVarSpace::Environment;
2007void MeshMaterialTesterModule::
2017void MeshMaterialTesterModule::
2018_checkArrayVariableSynchronize()
2020 info() <<
"_checkArrayVariableSynchronize(): SYNCHRONIZE_MATERIALS";
2024 Int64 iteration = m_global_iteration();
2026 _setOrCheckSpectralValues(iteration,
false);
2029 if ((iteration % 2)==0){
2048 _setOrCheckSpectralValues(iteration,
true);
2054void MeshMaterialTesterModule::
2072 info() <<
"FILL_DENSITY_INFO ITER=" << m_global_iteration()
2073 <<
" mat=" <<
mat->name()
2095 info() <<
"Synchronize density";
2096 m_mat_density.synchronize();
2102void MeshMaterialTesterModule::
2137 info() <<
"FILL MAT=" <<
mat->name();
2147 v /= (Real)
inode->nbCell();
2204void MeshMaterialTesterModule::
2205_checkCreation2(Integer a,Integer n)
2208 info() <<
"I=" << a <<
" N=" << n;
2209 for( Integer i=0; i<n; ++i ){
2213 info() <<
"Z=" << z;
2227 arcaneParallelFor(0,1000,options,[&](Integer a,Integer n) { _checkCreation2(a,n); });
2229 info() <<
"CHECK CREATE N=" << n;
2244void MeshMaterialTesterModule::
2273 m_mat_density[
mc] = 1.0;
2277 m_mat_density.setUpToDate(
mat);
2299 ebi1.addMaterial(
"MAT1");
2300 ebi1.addMaterial(
"MAT2");
2305 ebi2.addMaterial(
"MAT2");
2310 ebi3.addMaterial(
"MAT3");
2311 ebi3.addMaterial(
"MAT1");
2326 info() <<
env1->id();
2327 info() <<
env1->materials()[0]->id();
2328 info() <<
env1->materials()[1]->id();
2329 info() <<
env2->id();
2330 info() <<
env2->materials()[0]->id();
2331 info() <<
env3->id();
2332 info() <<
env3->materials()[0]->id();
2333 info() <<
env3->materials()[1]->id();
2334 info() << block->
id();
2364 info() <<
env1->materials()[0]->cells().size();
2368 IMesh* mesh = defaultMesh();
2383 info() <<
"Cell mat=" <<
mc.materialId();
2388 info() <<
"Cell env=" <<
mmcell.environmentId();
2401 info() <<
"Cell mat=" <<
mc.materialId();
2413 info() <<
"Cell env=" <<
env_cell.environmentId();
2416 info() <<
"Cell mat=" <<
mc.materialId();
2428 info() <<
"Cell env=" <<
env_cell.environmentId();
2431 info() <<
"Cell mat=" <<
mc.materialId();
2464 info() <<
"Cell mat=" <<
cc.componentId();
2470 info() <<
"Cell env=" <<
cc.componentId();
2516 mat_density.setMaterialComputeFunction(
this,&Sample::_computeDensity);
2520 mat_density.addMaterialDepend(defaultMesh()->nodesCoordinates());
2537 ENUMERATE_ENVCELL(ienvcell,view){
2538 mat_density[ienvcell] = 2.5;
2546 ENUMERATE_MATCELL(imatcell,view){
2547 mat_density[imatcell] = 2.5;
2721ARCANE_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'.
Vue sur un vecteur sur les entités d'un composant.
Vecteur sur les entités d'un composant.
Index d'un ConstituentItem dans une variable.
Représente un composant d'une maille multi-matériau.
ARCCORE_HOST_DEVICE MatVarIndex _varIndex() const
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 viewOut(const ViewBuildInfo &vbi, CellMaterialVariableScalarRef< DataType > &var)
Vue en écriture pour les variables materiaux scalaire.
auto viewIn(const ViewBuildInfo &vbi, const CellMaterialVariableScalarRef< DataType > &var)
Vue en lecture 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.