79 Integer current_total_nb_element = current.totalNbElement();
87 if (current_total_nb_element==0)
89 Integer ref_size1 = ref.dim1Size();
90 Integer current_size1 = current.dim1Size();
91 Integer ref_size2 = ref.dim2Size();
92 Integer current_size2 = current.dim2Size();
93 if (ref_size2!=current_size2){
94 msg->
pinfo() <<
"Processor: " << sid <<
" VDIFF: Variable '" << var->
name()
95 <<
" bad dim2 size: ref=" << ref_size2 <<
" current=" << current_size2;
98 const Item& item = *i;
99 if (!item.
isOwn() && !compare_ghost)
102 if (group_index_table)
103 index = (*group_index_table)[index];
105 if (index>=ref_size1 || index>=current_size1){
107 msg->
pinfo() <<
"Processor: " << sid <<
" VDIFF: Variable '" << var->
name()
108 <<
"wrong number of elements : impossible comparison";
111 ConstArrayView<DataType> lref = ref[index];
112 ConstArrayView<DataType> lcurrent = current[index];
113 for(
Integer z=0; z<ref_size2; ++z ){
114 DataType diff = DataType();
115 DataType dref = lref[z];
116 DataType dcurrent = lcurrent[z];
117 if (VarDataTypeTraits::verifDifferent(dref,dcurrent,diff,
true)){
118 this->m_diffs_info.add(DiffInfo(dcurrent,dref,diff,item,z));
124 this->_sortAndDump(var,pm,max_print);
129 Integer checkReplica(IParallelMng* pm,IVariable* var,ConstArray2View<DataType> var_values,
134 using ReduceType =
typename VariableDataTypeTraitsT<DataType>::HasReduceMinMax;
135 if constexpr(std::is_same<TrueType,ReduceType>::value)
136 return _checkReplica2(pm,var,var_values,max_print);
140 ARCANE_UNUSED(var_values);
141 ARCANE_UNUSED(max_print);
142 throw NotSupportedException(A_FUNCINFO);
147 Integer _checkReplica2(IParallelMng* pm,IVariable* var,ConstArray2View<DataType> var_values,
150 ITraceMng* msg = pm->traceMng();
151 ItemGroup group = var->itemGroup();
155 GroupIndexTable * group_index_table = (var->isPartial())?group.localIdToIndex().get():0;
158 Integer total_nb_element = var_values.totalNbElement();
159 Integer ref_size1 = var_values.dim1Size();
160 Integer ref_size2 = var_values.dim2Size();
163 ArrayView<Integer> min_dims(2,a_min_dims);
165 ArrayView<Integer> max_dims(2,a_max_dims);
166 max_dims[0] = min_dims[0] = ref_size1;
167 max_dims[1] = min_dims[1] = ref_size2;
171 msg->info(4) <<
"Array2Variable::CheckReplica2 rep_size=" << pm->commSize() <<
" rank=" << pm->commRank();
172 if (max_dims[0]!=min_dims[0] || max_dims[1]!=min_dims[1]){
173 const String& var_name = var->name();
174 msg->info() <<
"Can not compare values on replica for variable '" << var_name <<
"'"
175 <<
" because the number of elements is not the same on all the replica "
176 <<
" min=" << min_dims[0] <<
"," << min_dims[1]
177 <<
" max="<< max_dims[0] <<
"," << max_dims[1];
178 return total_nb_element;
180 if (total_nb_element==0)
183 UniqueArray2<DataType> min_values(var_values);
184 UniqueArray2<DataType> max_values(var_values);
192 if (group_index_table)
193 index = (*group_index_table)[index];
195 if (index>=ref_size1){
197 msg->pinfo() <<
"Processor: " << msg->traceId() <<
" VDIFF: Variable '" << var->name()
198 <<
"wrong number of elements : impossible comparison";
201 ConstArrayView<DataType> lref = min_values[index];
202 ConstArrayView<DataType> lcurrent = max_values[index];
203 for(
Integer z=0; z<ref_size2; ++z ){
204 DataType diff = DataType();
205 DataType dref = lref[z];
206 DataType dcurrent = lcurrent[z];
207 if (VarDataTypeTraits::verifDifferent(dref,dcurrent,diff,
true)){
208 this->m_diffs_info.add(DiffInfo(dcurrent,dref,diff,item,z));
215 this->_sortAndDump(var,pm,max_print);
235 String storage_full_type =
info.storageTypeInfo().fullName();
236 Ref<IData> data = df->createSimpleDataRef(storage_full_type,storage_build_info);
237 m_data =
dynamic_cast<ValueDataType*
>(
data.get());
249 ThatClass* true_ptr =
nullptr;
253 true_ptr =
dynamic_cast<ThatClass*
>(var);
255 true_ptr =
new ThatClass(vb,vi);
258 ARCANE_CHECK_PTR(true_ptr);
270 ThatClass* true_ptr =
dynamic_cast<ThatClass*
>(var);
272 ARCANE_FATAL(
"Cannot build a reference from variable {0}",var->name());
286 m_data->_internal()->resizeOnlyDim1(s);
302 m_data->_internal()->
resize(dim1_size,dim2_size);
317 Int32 dim1_size = valueView().dim1Size();
320 m_data->_internal()->resize(dim1_size,dim2_size);
321 m_data->setShape(shape);
332 m_data->_internal()->shrink();
340print(std::ostream&)
const
358 itemGroup().synchronizer()->synchronize(
this);
375 itemGroup().synchronizer()->synchronize(
this, local_ids);
386 Real v1 =
static_cast<Real>(
sizeof(T));
387 Real v2 =
static_cast<Real>(m_data->view().totalNbElement());
397 ValueType& data_values = m_data->_internal()->_internalDeprecatedValue();
399 Integer dim1_size = valueView().dim1Size();
410 Integer nerror = csa.check(
this,ref_array,from_array,max_print,
true);
411 data_values.copy(ref_array);
428 reader->read(
this,ref_data.get());
431 return csa.check(
this,ref_data->view(),from_array,max_print,compare_ghost);
446 return csa.checkReplica(pm,var,values,max_print);
454 Integer dim1_size = values.dim1Size();
455 Integer dim2_size = values.dim2Size();
457 for(
Integer i=0; i<dim1_size; ++i )
458 for(
Integer j=0; j<dim2_size; ++j )
459 int_values[i][j] = values[i][j];
461 return csa.checkReplica(pm,var,int_values,max_print);
471 return _checkIfSameOnAllReplicaHelper(replica_pm,
this,constValueView(),max_print);
480 Int32 new_size = resize_args.newSize();
481 Int32 nb_additional_element = resize_args.nbAdditionalCapacity();
482 bool use_no_init = resize_args.isUseNoInit();
490 ValueType& data_values = m_data->_internal()->_internalDeprecatedValue();
493 Integer dim2_size = data_values.dim2Size();
495 if (nb_additional_element!=0){
496 Integer capacity = data_values.capacity();
497 if (new_size>capacity)
498 data_values.reserve(new_size+nb_additional_element*dim2_size);
505 Integer current_size = data_values.dim1Size();
513 data_values.resizeNoInit(new_size,dim2_size);
515 data_values.resize(new_size,dim2_size);
517 if (new_size>current_size){
520 if (use_nan || use_nan2){
521 for(
Integer i=current_size; i<new_size; ++i )
528 if (container_ref.totalNbElement() < container_ref.capacity())
529 container_ref.shrink();
544 ARCANE_ASSERT(source.
size()==destination.
size(),
545 (
"Unable to copy: source and destination have different sizes !"));
547 const Integer dim2_size = valueView().dim2Size();
551 for(
Integer i=0; i<nb_copy; ++i ){
552 for(
Integer j=0; j<dim2_size; ++j )
553 value[destination[i]][j] = value[source[i]][j];
566 ARCANE_ASSERT((first_source.
size()==destination.
size()) && (second_source.
size()==destination.
size()),
567 (
"Unable to copy: source and destination have different sizes !"));
569 const Integer dim2_size = valueView().dim2Size();
573 for(
Integer i=0; i<nb_copy; ++i ){
574 for(
Integer j=0; j<dim2_size; ++j )
575 value[destination[i]][j] = (T)((value[first_source[i]][j]+value[second_source[i]][j])/2);
591 ValueType& current_value = m_data->_internal()->_internalDeprecatedValue();
592 Integer current_size = current_value.dim1Size();
596 Integer dim2_size = current_value.dim2Size();
604 current_value.
resize(new_size,dim2_size);
610 for(
Integer i=0; i<new_size; ++i ){
611 Integer nto = new_to_old_ids[i];
614 for(
Integer j=0; j<dim2_size; ++j )
619 for(
Integer i=0; i<new_size; ++i ){
620 Integer nto = new_to_old_ids[i];
621 for(
Integer j=0; j<dim2_size; ++j )
622 current_value[i][j] = old_value[nto][j];