1414
1515#ifdef WITH_MPI
1616template <typename Phys>
17- void ConstrainedTransport<Phys>::ExchangeAll() {
18- if (data->mygrid ->nproc [IDIR ]>1 ) this ->ExchangeX1 ();
19- if (data->mygrid ->nproc [JDIR ]>1 ) this ->ExchangeX2 ();
20- if (data->mygrid ->nproc [KDIR ]>1 ) this ->ExchangeX3 ();
17+ void ConstrainedTransport<Phys>::ExchangeAll(IdefixArray3D<real> ex,
18+ IdefixArray3D<real> ey,
19+ IdefixArray3D<real> ez) {
20+ if (data->mygrid ->nproc [IDIR ]>1 ) this ->ExchangeX1 (ey,ez);
21+ if (data->mygrid ->nproc [JDIR ]>1 ) this ->ExchangeX2 (ex,ez);
22+ if (data->mygrid ->nproc [KDIR ]>1 ) this ->ExchangeX3 (ex,ey);
2123}
2224
2325
2426// Exchange EMFs in X1
2527template <typename Phys>
26- void ConstrainedTransport<Phys>::ExchangeX1() {
28+ void ConstrainedTransport<Phys>::ExchangeX1(IdefixArray3D<real> ey, IdefixArray3D<real> ez ) {
2729 idfx::pushRegion (" Emf::ExchangeX1" );
2830
2931
@@ -34,8 +36,6 @@ void ConstrainedTransport<Phys>::ExchangeX1() {
3436
3537 IdefixArray1D<real> BufferLeft=BufferSendX1[faceLeft];
3638 IdefixArray1D<real> BufferRight=BufferSendX1[faceRight];
37- IdefixArray3D<real> ey=this ->ey ;
38- IdefixArray3D<real> ez=this ->ez ;
3939
4040
4141 // If MPI Persistent, start receiving even before the buffers are filled
@@ -61,7 +61,6 @@ void ConstrainedTransport<Phys>::ExchangeX1() {
6161
6262 idefix_for (" LoadBufferX1Emfz" ,kbeg,kend,jbeg,jend+1 ,
6363 KOKKOS_LAMBDA (int k, int j) {
64- BufferLeft ( (j-jbeg) + (k-kbeg)*(ny+1 ) ) = ez (k,j,ileft);
6564 BufferRight ( (j-jbeg) + (k-kbeg)*(ny+1 ) ) = ez (k,j,iright);
6665 }
6766 );
@@ -70,7 +69,6 @@ void ConstrainedTransport<Phys>::ExchangeX1() {
7069
7170 idefix_for (" LoadBufferX1Emfy" ,kbeg,kend+1 ,jbeg,jend,
7271 KOKKOS_LAMBDA (int k, int j) {
73- BufferLeft ( (j-jbeg) + (k-kbeg)*ny + Vsindex ) = ey (k,j,ileft);
7472 BufferRight ( (j-jbeg) + (k-kbeg)*ny + Vsindex ) = ey (k,j,iright);
7573 }
7674 );
@@ -91,29 +89,21 @@ void ConstrainedTransport<Phys>::ExchangeX1() {
9189 BufferLeft=BufferRecvX1[faceLeft];
9290 BufferRight=BufferRecvX1[faceRight];
9391
94- // We average the edge emfs zones
92+ // Erase the emf with the one coming from the left process
93+
9594 idefix_for (" StoreBufferX1Emfz" ,kbeg,kend,jbeg,jend+1 ,
9695 KOKKOS_LAMBDA (int k, int j) {
9796 if (lbound == internal || lbound == periodic) {
98- ez (k,j,ileft) = HALF_F *(
99- BufferLeft ( (j-jbeg) + (k-kbeg)*(ny+1 ) ) + ez (k,j,ileft) );
100- }
101- if (rbound == internal || rbound == periodic) {
102- ez (k,j,iright) = HALF_F *(
103- BufferRight ( (j-jbeg) + (k-kbeg)*(ny+1 ) ) + ez (k,j,iright) );
97+ ez (k,j,ileft) = BufferLeft ( (j-jbeg) + (k-kbeg)*(ny+1 ));
10498 }
10599 });
100+
106101 #if DIMENSIONS == 3
107102 Vsindex = (ny+1 )*nz;
108103 idefix_for (" StoreBufferX1Emfy" ,kbeg,kend+1 ,jbeg,jend,
109104 KOKKOS_LAMBDA (int k, int j) {
110105 if (lbound == internal || lbound == periodic) {
111- ey (k,j,ileft) = HALF_F *(
112- BufferLeft ( (j-jbeg) + (k-kbeg)*ny +Vsindex) + ey (k,j,ileft) );
113- }
114- if (rbound == internal || rbound == periodic) {
115- ey (k,j,iright) = HALF_F *(
116- BufferRight ( (j-jbeg) + (k-kbeg)*ny +Vsindex) + ey (k,j,iright) );
106+ ey (k,j,ileft) = BufferLeft ( (j-jbeg) + (k-kbeg)*ny +Vsindex);
117107 }
118108 });
119109 #endif
@@ -124,7 +114,7 @@ void ConstrainedTransport<Phys>::ExchangeX1() {
124114
125115// Exchange EMFs in X2
126116template <typename Phys>
127- void ConstrainedTransport<Phys>::ExchangeX2() {
117+ void ConstrainedTransport<Phys>::ExchangeX2(IdefixArray3D<real> ex, IdefixArray3D<real> ez ) {
128118 idfx::pushRegion (" Emf::ExchangeX2" );
129119
130120 // Load the buffers with data
@@ -133,8 +123,6 @@ void ConstrainedTransport<Phys>::ExchangeX2() {
133123 [[maybe_unused]] int nz;
134124 IdefixArray1D<real> BufferLeft=BufferSendX2[faceLeft];
135125 IdefixArray1D<real> BufferRight=BufferSendX2[faceRight];
136- IdefixArray3D<real> ex=this ->ex ;
137- IdefixArray3D<real> ez=this ->ez ;
138126
139127 // If MPI Persistent, start receiving even before the buffers are filled
140128 double tStart = MPI_Wtime ();
@@ -158,7 +146,6 @@ void ConstrainedTransport<Phys>::ExchangeX2() {
158146
159147 idefix_for (" LoadBufferX2Emfz" ,kbeg,kend,ibeg,iend+1 ,
160148 KOKKOS_LAMBDA (int k, int i) {
161- BufferLeft ( (i-ibeg) + (k-kbeg)*(nx+1 ) ) = ez (k,jleft,i);
162149 BufferRight ( (i-ibeg) + (k-kbeg)*(nx+1 ) ) = ez (k,jright,i);
163150 }
164151 );
@@ -167,7 +154,6 @@ void ConstrainedTransport<Phys>::ExchangeX2() {
167154
168155 idefix_for (" LoadBufferX1Emfx" ,kbeg,kend+1 ,ibeg,iend,
169156 KOKKOS_LAMBDA (int k, int i) {
170- BufferLeft ( (i-ibeg) + (k-kbeg)*nx + Vsindex ) = ex (k,jleft,i);
171157 BufferRight ( (i-ibeg) + (k-kbeg)*nx + Vsindex ) = ex (k,jright,i);
172158 }
173159 );
@@ -191,25 +177,15 @@ void ConstrainedTransport<Phys>::ExchangeX2() {
191177 idefix_for (" StoreBufferX2Emfz" ,kbeg,kend,ibeg,iend+1 ,
192178 KOKKOS_LAMBDA (int k, int i) {
193179 if (lbound == internal || lbound == periodic) {
194- ez (k,jleft,i) = HALF_F *(
195- BufferLeft ( (i-ibeg) + (k-kbeg)*(nx+1 ) ) + ez (k,jleft,i) );
196- }
197- if (rbound == internal || rbound == periodic) {
198- ez (k,jright,i) = HALF_F *(
199- BufferRight ( (i-ibeg) + (k-kbeg)*(nx+1 ) ) + ez (k,jright,i) );
180+ ez (k,jleft,i) = BufferLeft ( (i-ibeg) + (k-kbeg)*(nx+1 ) );
200181 }
201182 });
202183 #if DIMENSIONS == 3
203184 Vsindex = (nx+1 )*nz;
204185 idefix_for (" StoreBufferX1Emfy" ,kbeg,kend+1 ,ibeg,iend,
205186 KOKKOS_LAMBDA (int k, int i) {
206187 if (lbound == internal || lbound == periodic) {
207- ex (k,jleft,i) = HALF_F *(
208- BufferLeft ( (i-ibeg) + (k-kbeg)*nx +Vsindex) + ex (k,jleft,i) );
209- }
210- if (rbound == internal || rbound == periodic) {
211- ex (k,jright,i) = HALF_F *(
212- BufferRight ( (i-ibeg) + (k-kbeg)*nx +Vsindex) + ex (k,jright,i) );
188+ ex (k,jleft,i) = BufferLeft ( (i-ibeg) + (k-kbeg)*nx +Vsindex);
213189 }
214190 });
215191 #endif
@@ -220,7 +196,7 @@ void ConstrainedTransport<Phys>::ExchangeX2() {
220196
221197// Exchange EMFs in X3
222198template <typename Phys>
223- void ConstrainedTransport<Phys>::ExchangeX3() {
199+ void ConstrainedTransport<Phys>::ExchangeX3(IdefixArray3D<real> ex, IdefixArray3D<real> ey ) {
224200 idfx::pushRegion (" Emf::ExchangeX3" );
225201
226202
@@ -229,8 +205,6 @@ void ConstrainedTransport<Phys>::ExchangeX3() {
229205 int nx,ny;
230206 IdefixArray1D<real> BufferLeft=BufferSendX3[faceLeft];
231207 IdefixArray1D<real> BufferRight=BufferSendX3[faceRight];
232- IdefixArray3D<real> ex=this ->ex ;
233- IdefixArray3D<real> ey=this ->ey ;
234208
235209 int Vsindex = 0 ;
236210
@@ -259,15 +233,13 @@ void ConstrainedTransport<Phys>::ExchangeX3() {
259233
260234 idefix_for (" LoadBufferX3Emfx" ,jbeg,jend+1 ,ibeg,iend,
261235 KOKKOS_LAMBDA (int j, int i) {
262- BufferLeft ( (i-ibeg) + (j-jbeg)*nx ) = ex (kleft,j,i);
263236 BufferRight ( (i-ibeg) + (j-jbeg)*nx ) = ex (kright,j,i);
264237 }
265238 );
266239 Vsindex = nx*(ny+1 );
267240
268241 idefix_for (" LoadBufferX3Emfy" ,jbeg,jend,ibeg,iend+1 ,
269242 KOKKOS_LAMBDA (int j, int i) {
270- BufferLeft ( (i-ibeg) + (j-jbeg)*(nx+1 ) + Vsindex ) = ey (kleft,j,i);
271243 BufferRight ( (i-ibeg) + (j-jbeg)*(nx+1 ) + Vsindex ) = ey (kright,j,i);
272244 }
273245 );
@@ -290,29 +262,17 @@ void ConstrainedTransport<Phys>::ExchangeX3() {
290262 idefix_for (" StoreBufferX3Emfx" ,jbeg,jend+1 ,ibeg,iend,
291263 KOKKOS_LAMBDA (int j, int i) {
292264 if (lbound == internal || lbound == periodic) {
293- ex (kleft,j,i) = HALF_F *(
294- BufferLeft ( (i-ibeg) + (j-jbeg)*nx ) + ex (kleft,j,i) );
295- }
296- if (rbound == internal || rbound == periodic) {
297- ex (kright,j,i) = HALF_F *(
298- BufferRight ( (i-ibeg) + (j-jbeg)*nx ) + ex (kright,j,i) );
265+ ex (kleft,j,i) = BufferLeft ( (i-ibeg) + (j-jbeg)*nx );
299266 }
300267 });
301268
302269 Vsindex = nx*(ny+1 );
303270 idefix_for (" StoreBufferX3Emfy" ,jbeg,jend,ibeg,iend+1 ,
304271 KOKKOS_LAMBDA (int j, int i) {
305272 if (lbound == internal || lbound == periodic) {
306- ey (kleft,j,i) = HALF_F *(
307- BufferLeft ( (i-ibeg) + (j-jbeg)*(nx+1 ) + Vsindex ) + ey (kleft,j,i) );
308- }
309- if (rbound == internal || rbound == periodic) {
310- ey (kright,j,i) = HALF_F *(
311- BufferRight ( (i-ibeg) + (j-jbeg)*(nx+1 ) + Vsindex ) + ey (kright,j,i) );
273+ ey (kleft,j,i) = BufferLeft ( (i-ibeg) + (j-jbeg)*(nx+1 ) + Vsindex );
312274 }
313275 });
314-
315-
316276 idfx::popRegion ();
317277}
318278
0 commit comments