From d71e3cbd408f968ad94198cfbc66fc9e6551d9ff Mon Sep 17 00:00:00 2001 From: RevathiJambunathan Date: Tue, 26 Nov 2024 11:06:01 -0800 Subject: [PATCH] var beta for 1D --- Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp | 12 +++++- Src/LinearSolvers/MLMG/AMReX_MLCurlCurl_K.H | 41 +++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp index c8f51d3fc58..3e500351c91 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp @@ -367,7 +367,17 @@ void MLCurlCurl::smooth1D (int amrlev, int mglev, MF& sol, MF const& rhs, rhs[0].DistributionMap(), 1, 0, MFInfo().SetAlloc(false)); if (m_bcoefs[amrlev][mglev][0]) { - amrex::Abort("xxxxx"); // TODO + auto const& bcx = m_bcoefs[amrlev][mglev][0]->const_arrays(); + auto const& bcy = m_bcoefs[amrlev][mglev][1]->const_arrays(); + auto const& bcz = m_bcoefs[amrlev][mglev][2]->const_arrays(); + ParallelFor( nmf, [=] AMREX_GPU_DEVICE(int bno, int i, int j, int k) + { + mlcurlcurl_1D(i,j,k,ex[bno],ey[bno],ez[bno], + rhsx[bno],rhsy[bno],rhsz[bno], + bcx[bno],bcy[bno],bcz[bno], + adxinv,color,dinfo); + }); + Gpu::streamSynchronize(); } else { ParallelFor( nmf, [=] AMREX_GPU_DEVICE(int bno, int i, int j, int k) { diff --git a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl_K.H b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl_K.H index 4a1e5bc93ec..53d1e912dcc 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl_K.H +++ b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl_K.H @@ -495,6 +495,47 @@ void mlcurlcurl_1D (int i, int j, int k, ez(i,j,k) += res_z/gamma_z; } } + + +AMREX_GPU_DEVICE AMREX_FORCE_INLINE +void mlcurlcurl_1D (int i, int j, int k, + Array4 const& ex, + Array4 const& ey, + Array4 const& ez, + Array4 const& rhsx, + Array4 const& rhsy, + Array4 const& rhsz, + Array4 const& betax, + Array4 const& betay, + Array4 const& betaz, + GpuArray const& adxinv, + int color, + CurlCurlDirichletInfo const& dinfo) +{ + if (dinfo.is_dirichlet_node(i,j,k)) {return; } + Real dxx = adxinv[0] * adxinv[0]; + + int my_color = i%2; + + if (my_color == color) + { + ex(i,j,k) = rhsx(i,j,k) / betax(i,j,k); + + Real gamma_y = dxx * Real(2.0) + betay(i,j,k); + Real ccey = - dxx * (ey(i-1,j ,k ) + + ey(i+1,j ,k ) ); + Real res_y = rhsy(i,j,k) - ( gamma_y * ey(i,j,k) + ccey ); + ey(i,j,k) += res_y/gamma_y; + + Real gamma_z = dxx * Real(2.0) + betaz(i,j,k); + Real ccez = -dxx * (ez(i-1,j ,k ) + + ez(i+1,j ,k ) ); + Real res_z = rhsz(i,j,k) - ( gamma_z * ez(i,j,k) + ccez ); + ez(i,j,k) += res_z/gamma_z; + } +} + + #endif #if (AMREX_SPACEDIM > 1)