@@ -129,10 +129,9 @@ ClientState::HandleVariant RegisterField(
129129 // not the arbitrary adapter name given at creation.
130130 registration.function_space .SetLayoutName (name);
131131 auto field = registration.function_space .template CreateField <T>(
132- std::move (name),
133- std::make_unique<XGCFieldData<T>>(
134- registration.function_space .GetXGCLayout (), ValueBasis{},
135- registration.data , registration.plane_comm ));
132+ std::move (name), std::make_unique<XGCFieldData<T>>(
133+ registration.function_space .GetXGCLayout (), ValueBasis{},
134+ registration.data , registration.plane_comm ));
136135 return ClientState::HandleVariant{
137136 app.AddField (std::move (field), participates)};
138137}
@@ -184,6 +183,18 @@ void pcms_destroy_reverse_classification(PcmsReverseClassificationHandle rc)
184183 delete reinterpret_cast <pcms::ReverseClassificationVertex*>(rc.pointer );
185184}
186185
186+ void pcms_set_overlap_mask (PcmsClientHandle client_handle, const char * name,
187+ in_overlap_function in_overlap)
188+ {
189+ auto * app =
190+ reinterpret_cast <pcms::ApplicationComm*>(client_handle.appPointer );
191+ PCMS_ALWAYS_ASSERT (app != nullptr );
192+ PCMS_ALWAYS_ASSERT (in_overlap != nullptr );
193+ // Fields registered through the C API use their name as the layout name.
194+ app->SetLayoutOverlapMask (name,
195+ std::make_unique<pcms::OverlapMask>(in_overlap));
196+ }
197+
187198PcmsFieldHandle pcms_add_field (PcmsClientHandle client_handle, const char * name,
188199 PcmsFieldAdapterHandle adapter_handle,
189200 int participates)
@@ -248,11 +259,10 @@ template <typename T>
248259void pcms_create_xgc_field_adapter_t (
249260 const char * /* name */ , MPI_Comm comm, void * data, int size,
250261 const pcms::ReverseClassificationVertex& reverse_classification,
251- in_overlap_function in_overlap, pcms::FieldAdapterVariant& field_adapter)
262+ pcms::FieldAdapterVariant& field_adapter)
252263{
253264 PCMS_ALWAYS_ASSERT ((size > 0 ) ? (data != nullptr ) : true );
254- auto function_space =
255- pcms::XGCFieldFactory (reverse_classification, in_overlap, size);
265+ auto function_space = pcms::XGCFieldFactory (reverse_classification, size);
256266 pcms::Rank1View<T, pcms::HostMemorySpace> data_view (
257267 reinterpret_cast <T*>(data), size);
258268 field_adapter.emplace <pcms::detail::XGCFieldRegistration<T>>(
@@ -261,7 +271,7 @@ void pcms_create_xgc_field_adapter_t(
261271
262272PcmsFieldAdapterHandle pcms_create_xgc_field_adapter (
263273 const char * name, MPI_Comm comm, void * data, int size, PcmsType data_type,
264- const PcmsReverseClassificationHandle rc, in_overlap_function in_overlap )
274+ const PcmsReverseClassificationHandle rc)
265275{
266276 auto * field_adapter = new pcms::FieldAdapterVariant{};
267277 PCMS_ALWAYS_ASSERT (rc.pointer != nullptr );
@@ -270,24 +280,20 @@ PcmsFieldAdapterHandle pcms_create_xgc_field_adapter(
270280 PCMS_ALWAYS_ASSERT (reverse_classification != nullptr );
271281 switch (data_type) {
272282 case PCMS_DOUBLE :
273- pcms_create_xgc_field_adapter_t <double >(name, comm, data, size,
274- *reverse_classification,
275- in_overlap, *field_adapter);
283+ pcms_create_xgc_field_adapter_t <double >(
284+ name, comm, data, size, *reverse_classification, *field_adapter);
276285 break ;
277286 case PCMS_FLOAT :
278- pcms_create_xgc_field_adapter_t <float >(name, comm, data, size,
279- *reverse_classification,
280- in_overlap, *field_adapter);
287+ pcms_create_xgc_field_adapter_t <float >(
288+ name, comm, data, size, *reverse_classification, *field_adapter);
281289 break ;
282290 case PCMS_INT :
283- pcms_create_xgc_field_adapter_t <int >(name, comm, data, size,
284- *reverse_classification, in_overlap,
285- *field_adapter);
291+ pcms_create_xgc_field_adapter_t <int >(
292+ name, comm, data, size, *reverse_classification, *field_adapter);
286293 break ;
287294 case PCMS_LONG_INT :
288- pcms_create_xgc_field_adapter_t <pcms::GO >(name, comm, data, size,
289- *reverse_classification,
290- in_overlap, *field_adapter);
295+ pcms_create_xgc_field_adapter_t <pcms::GO >(
296+ name, comm, data, size, *reverse_classification, *field_adapter);
291297 break ;
292298 default :
293299 PCMS_ALWAYS_ASSERT (false , MPI_COMM_WORLD ,
0 commit comments