|
16 | 16 | #include "synchronizer_pool.hpp" |
17 | 17 | #include "amr/data/field/coarsening/field_coarsen_operator.hpp" |
18 | 18 | #include "amr/data/field/coarsening/default_field_coarsener.hpp" |
19 | | -#include "amr/data/field/coarsening/magnetic_field_coarsener.hpp" |
20 | 19 | #include "amr/data/field/coarsening/electric_field_coarsener.hpp" |
21 | 20 | #include "amr/data/field/refine/field_refiner.hpp" |
22 | 21 | #include "amr/data/field/refine/magnetic_field_refiner.hpp" |
@@ -117,7 +116,6 @@ namespace amr |
117 | 116 |
|
118 | 117 | template<typename Policy> |
119 | 118 | using BaseCoarsenOp = FieldCoarsenOperator<GridLayoutT, GridT, Policy>; |
120 | | - using MagneticCoarsenOp = BaseCoarsenOp<MagneticFieldCoarsener<dimension>>; |
121 | 119 | using DefaultCoarsenOp = BaseCoarsenOp<DefaultFieldCoarsener<dimension>>; |
122 | 120 | using ElectricFieldCoarsenOp = BaseCoarsenOp<ElectricFieldCoarsener<dimension>>; |
123 | 121 |
|
@@ -343,22 +341,6 @@ namespace amr |
343 | 341 | domainParticlesRefiners_.regrid(hierarchy, levelNumber, oldLevel, initDataTime); |
344 | 342 |
|
345 | 343 |
|
346 | | - // regriding will fill the new level wherever it has points that overlap |
347 | | - // old level. This will include its level border points. |
348 | | - // These new level border points will thus take values that where previous |
349 | | - // domain values. Magnetic flux is thus not necessarily consistent with |
350 | | - // the Loring et al. method to sync the induction between coarse and fine faces. |
351 | | - // Specifically, we need all fine faces to have equal magnetic field and also |
352 | | - // equal to that of the shared coarse face. |
353 | | - // This means that we now need to fill ghosts and border included |
354 | | - |
355 | | - if (!isRegriddingL0) |
356 | | - { |
357 | | - auto& E = hybridModel.state.electromag.E; |
358 | | - |
359 | | - elecGhostsRefiners_.fill(E, levelNumber, initDataTime); |
360 | | - } |
361 | | - |
362 | 344 | // we now call only levelGhostParticlesOld.fill() and not .regrid() |
363 | 345 | // regrid() would refine from next coarser in regions of level not overlaping |
364 | 346 | // oldLevel, but copy from domain particles of oldLevel where there is an |
@@ -703,19 +685,23 @@ namespace amr |
703 | 685 | for (auto& patch : level) |
704 | 686 | { |
705 | 687 | auto dataOnPatch = resourcesManager_->setOnPatch( |
706 | | - *patch, hybridModel.state.J, hybridModel.state.ions, Jold_, NiOld_, ViOld_); |
| 688 | + *patch, hybridModel.state.electromag, hybridModel.state.J, |
| 689 | + hybridModel.state.ions, Jold_, NiOld_, ViOld_, Eold_); |
707 | 690 |
|
708 | 691 | resourcesManager_->setTime(Jold_, *patch, currentTime); |
709 | 692 | resourcesManager_->setTime(NiOld_, *patch, currentTime); |
710 | 693 | resourcesManager_->setTime(ViOld_, *patch, currentTime); |
| 694 | + resourcesManager_->setTime(Eold_, *patch, currentTime); |
711 | 695 |
|
712 | 696 | auto& J = hybridModel.state.J; |
713 | 697 | auto& Vi = hybridModel.state.ions.velocity(); |
714 | 698 | auto& Ni = hybridModel.state.ions.chargeDensity(); |
| 699 | + auto& E = hybridModel.state.electromag.E; |
715 | 700 |
|
716 | 701 | Jold_.copyData(J); |
717 | 702 | ViOld_.copyData(Vi); |
718 | 703 | NiOld_.copyData(Ni); |
| 704 | + Eold_.copyData(E); |
719 | 705 | } |
720 | 706 | } |
721 | 707 |
|
@@ -768,7 +754,7 @@ namespace amr |
768 | 754 | double const syncTime) override |
769 | 755 | { |
770 | 756 | refluxSchedules[fineLevelNumber]->coarsenData(); |
771 | | - ghostRefluxedSchedules[coarserLevelNumber]->fillData(syncTime); |
| 757 | + patchGhostRefluxedSchedules[coarserLevelNumber]->fillData(syncTime); |
772 | 758 | } |
773 | 759 |
|
774 | 760 | // after coarsening, domain nodes have been updated and therefore patch ghost nodes |
@@ -877,9 +863,6 @@ namespace amr |
877 | 863 |
|
878 | 864 | void registerSyncComms(std::unique_ptr<HybridMessengerInfo> const& info) |
879 | 865 | { |
880 | | - magnetoSynchronizers_.add(info->modelMagnetic, magneticCoarseningOp_, |
881 | | - info->modelMagnetic.vecName); |
882 | | - |
883 | 866 | electroSynchronizers_.add(info->modelElectric, electricFieldCoarseningOp_, |
884 | 867 | info->modelElectric.vecName); |
885 | 868 |
|
@@ -1120,6 +1103,7 @@ namespace amr |
1120 | 1103 | VecFieldT Jold_{stratName + "_Jold", core::HybridQuantity::Vector::J}; |
1121 | 1104 | VecFieldT ViOld_{stratName + "_VBulkOld", core::HybridQuantity::Vector::V}; |
1122 | 1105 | FieldT NiOld_{stratName + "_NiOld", core::HybridQuantity::Scalar::rho}; |
| 1106 | + VecFieldT Eold_{stratName + "_Eold", core::HybridQuantity::Vector::E}; |
1123 | 1107 |
|
1124 | 1108 | TensorFieldT sumTensor_{"PHARE_sumTensor", core::HybridQuantity::Tensor::M}; |
1125 | 1109 | VecFieldT sumVec_{"PHARE_sumVec", core::HybridQuantity::Vector::V}; |
@@ -1222,7 +1206,6 @@ namespace amr |
1222 | 1206 |
|
1223 | 1207 | using CoarsenOperator_ptr = std::shared_ptr<SAMRAI::hier::CoarsenOperator>; |
1224 | 1208 | CoarsenOperator_ptr fieldCoarseningOp_{std::make_shared<DefaultCoarsenOp>()}; |
1225 | | - CoarsenOperator_ptr magneticCoarseningOp_{std::make_shared<MagneticCoarsenOp>()}; |
1226 | 1209 | CoarsenOperator_ptr electricFieldCoarseningOp_{std::make_shared<ElectricFieldCoarsenOp>()}; |
1227 | 1210 |
|
1228 | 1211 | MagneticRefinePatchStrategy<ResourcesManagerT, FieldDataT> magneticRefinePatchStrategy_{ |
|
0 commit comments