16 PetscFunctionBeginUser;
17 if (!user->
Phi) PetscCall(DMCreateGlobalVector(user->
da, &user->
Phi));
18 if (!user->
lPhi) PetscCall(DMCreateLocalVector(user->
da, &user->
lPhi));
19 if (!user->
Aj) PetscCall(DMCreateGlobalVector(user->
da, &user->
Aj));
20 if (!user->
lAj) PetscCall(DMCreateLocalVector(user->
da, &user->
lAj));
23 PetscFunctionReturn(0);
34 PetscFunctionBeginUser;
37 PetscCall(VecSet(user->
P, 1.0));
38 PetscCall(VecSet(user->
Phi, 0.25));
44 PetscFunctionReturn(0);
56 PetscFunctionBeginUser;
61 PetscCall(VecSet(user->
Ucont, 0.0));
62 PetscCall(VecSet(user->
Nvert, 0.0));
63 PetscCall(VecSet(user->
Aj, 1.0));
64 PetscCall(DMGlobalToLocalBegin(user->
fda, user->
Ucont, INSERT_VALUES, user->
lUcont));
65 PetscCall(DMGlobalToLocalEnd(user->
fda, user->
Ucont, INSERT_VALUES, user->
lUcont));
66 PetscCall(DMGlobalToLocalBegin(user->
da, user->
Nvert, INSERT_VALUES, user->
lNvert));
67 PetscCall(DMGlobalToLocalEnd(user->
da, user->
Nvert, INSERT_VALUES, user->
lNvert));
68 PetscCall(DMGlobalToLocalBegin(user->
da, user->
Aj, INSERT_VALUES, user->
lAj));
69 PetscCall(DMGlobalToLocalEnd(user->
da, user->
Aj, INSERT_VALUES, user->
lAj));
71 PetscCall(VecDuplicate(user->
P, &B));
73 PetscCall(
PicurvAssertVecConstant(B, 0.0, 1.0e-12,
"zero velocity divergence should produce zero Poisson RHS"));
76 PetscCall(VecDestroy(&B));
78 PetscFunctionReturn(0);
91 PetscFunctionBeginUser;
93 PetscCall(VecDuplicate(user->
Ucont, &rct));
94 PetscCall(VecZeroEntries(rct));
104 PetscCall(DMDAVecGetArrayRead(user->
fda, rct, &rct_arr));
105 PetscCall(
PicurvAssertRealNear(1.5, rct_arr[1][1][1].x, 1.0e-12,
"ComputeBodyForces should apply driven-channel source"));
106 PetscCall(
PicurvAssertRealNear(0.0, rct_arr[1][1][1].y, 1.0e-12,
"ComputeBodyForces should keep y unchanged"));
107 PetscCall(
PicurvAssertRealNear(0.0, rct_arr[1][1][1].z, 1.0e-12,
"ComputeBodyForces should keep z unchanged"));
108 PetscCall(DMDAVecRestoreArrayRead(user->
fda, rct, &rct_arr));
110 PetscCall(VecDestroy(&rct));
112 PetscFunctionReturn(0);
122 PetscReal ***diff_arr = NULL;
124 PetscFunctionBeginUser;
130 simCtx->
les = PETSC_FALSE;
131 simCtx->
rans = PETSC_FALSE;
135 PetscCall(DMDAVecGetArrayRead(user->
da, user->
Diffusivity, &diff_arr));
136 PetscCall(
PicurvAssertRealNear(0.125, diff_arr[1][1][1], 1.0e-12,
"molecular diffusivity interior value"));
137 PetscCall(DMDAVecRestoreArrayRead(user->
da, user->
Diffusivity, &diff_arr));
140 PetscFunctionReturn(0);
156 ierr = PetscInitialize(&argc, &argv, NULL,
"PICurv Poisson/RHS tests");
161 ierr =
PicurvRunTests(
"unit-poisson-rhs", cases,
sizeof(cases) /
sizeof(cases[0]));
167 ierr = PetscFinalize();
PetscErrorCode UpdatePressure(UserCtx *user)
Updates the pressure field P with the pressure correction Phi computed by the Poisson solver.
PetscErrorCode PoissonRHS(UserCtx *user, Vec B)
Computes the Right-Hand-Side (RHS) of the Poisson equation, which is the divergence of the intermedia...
PetscErrorCode ComputeBodyForces(UserCtx *user, Vec Rct)
General dispatcher for applying all active body forces (momentum sources).
PetscErrorCode ComputeEulerianDiffusivity(UserCtx *user)
Computes the effective diffusivity scalar field (Gamma_eff) on the Eulerian grid.
static PetscErrorCode TestComputeEulerianDiffusivityMolecularOnly(void)
Test-local routine.
int main(int argc, char **argv)
Entry point for this unit-test binary.
static PetscErrorCode TestComputeBodyForcesDispatcher(void)
Test-local routine.
static PetscErrorCode TestUpdatePressureAddsPhi(void)
Test-local routine.
static PetscErrorCode TestPoissonRHSZeroDivergence(void)
Test-local routine.
static PetscErrorCode EnsurePoissonAndRhsVectors(UserCtx *user)
Test-local routine.
PetscErrorCode PicurvCreateMinimalContexts(SimCtx **simCtx_out, UserCtx **user_out, PetscInt mx, PetscInt my, PetscInt mz)
Shared test-support routine.
PetscErrorCode PicurvAssertRealNear(PetscReal expected, PetscReal actual, PetscReal tol, const char *context)
Shared test-support routine.
PetscErrorCode PicurvDestroyMinimalContexts(SimCtx **simCtx_ptr, UserCtx **user_ptr)
Shared test-support routine.
PetscErrorCode PicurvRunTests(const char *suite_name, const PicurvTestCase *cases, size_t case_count)
Shared test-support routine.
PetscErrorCode PicurvAssertVecConstant(Vec vec, PetscScalar expected, PetscReal tol, const char *context)
Shared test-support routine.
C test module for PICurv.
Named test case descriptor consumed by PicurvRunTests.
BoundaryFaceConfig boundary_faces[6]
PetscReal forceScalingFactor
@ BC_HANDLER_PERIODIC_DRIVEN_CONSTANT_FLUX
BCHandlerType handler_type
PetscReal bulkVelocityCorrection
PetscReal drivingForceMagnitude
A 3D point or vector with PetscScalar components.
The master context for the entire simulation.
User-defined context containing data specific to a single computational grid level.