misc.c (777ff853944a0dbc06f7f09486fdf4674828e728) misc.c (b68a8d799acb1d44569fb95028e25f895284bc04)
1// Copyright (c) 2017, Lawrence Livermore National Security, LLC. Produced at
2// the Lawrence Livermore National Laboratory. LLNL-CODE-734707. All Rights
3// reserved. See files LICENSE and NOTICE for details.
4//
5// This file is part of CEED, a collection of benchmarks, miniapps, software
6// libraries and APIs for efficient high-order finite element and spectral
7// element discretizations for exascale applications. For more information and
8// source code availability see http://github.com/ceed.

--- 38 unchanged lines hidden (view full) ---

47 jacobianCtx->qf = ceedData->qfJacob;
48
49 // Ceed
50 jacobianCtx->ceed = ceed;
51
52 // Physics
53 jacobianCtx->ctxPhys = ctxPhys;
54 jacobianCtx->ctxPhysSmoother = ctxPhysSmoother;
1// Copyright (c) 2017, Lawrence Livermore National Security, LLC. Produced at
2// the Lawrence Livermore National Laboratory. LLNL-CODE-734707. All Rights
3// reserved. See files LICENSE and NOTICE for details.
4//
5// This file is part of CEED, a collection of benchmarks, miniapps, software
6// libraries and APIs for efficient high-order finite element and spectral
7// element discretizations for exascale applications. For more information and
8// source code availability see http://github.com/ceed.

--- 38 unchanged lines hidden (view full) ---

47 jacobianCtx->qf = ceedData->qfJacob;
48
49 // Ceed
50 jacobianCtx->ceed = ceed;
51
52 // Physics
53 jacobianCtx->ctxPhys = ctxPhys;
54 jacobianCtx->ctxPhysSmoother = ctxPhysSmoother;
55
56 // Get/Restore Array
57 jacobianCtx->memType = appCtx->memTypeRequested;
58 if (appCtx->memTypeRequested == CEED_MEM_HOST) {
59 jacobianCtx->VecGetArray = VecGetArray;
60 jacobianCtx->VecGetArrayRead = VecGetArrayRead;
61 jacobianCtx->VecRestoreArray = VecRestoreArray;
62 jacobianCtx->VecRestoreArrayRead = VecRestoreArrayRead;
63 } else {
64 jacobianCtx->VecGetArray = VecCUDAGetArray;
65 jacobianCtx->VecGetArrayRead = VecCUDAGetArrayRead;
66 jacobianCtx->VecRestoreArray = VecCUDARestoreArray;
67 jacobianCtx->VecRestoreArrayRead = VecCUDARestoreArrayRead;
68 }
69
70 PetscFunctionReturn(0);
71};
72
73// Setup context data for prolongation and restriction operators
74PetscErrorCode SetupProlongRestrictCtx(MPI_Comm comm, AppCtx appCtx, DM dmC,
75 DM dmF, Vec VF, Vec VlocC, Vec VlocF,
76 CeedData ceedDataC, CeedData ceedDataF,
77 Ceed ceed,

--- 12 unchanged lines hidden (view full) ---

90 prolongRestrCtx->ceedVecF = ceedDataF->xceed;
91
92 // libCEED operators
93 prolongRestrCtx->opProlong = ceedDataF->opProlong;
94 prolongRestrCtx->opRestrict = ceedDataF->opRestrict;
95
96 // Ceed
97 prolongRestrCtx->ceed = ceed;
55 PetscFunctionReturn(0);
56};
57
58// Setup context data for prolongation and restriction operators
59PetscErrorCode SetupProlongRestrictCtx(MPI_Comm comm, AppCtx appCtx, DM dmC,
60 DM dmF, Vec VF, Vec VlocC, Vec VlocF,
61 CeedData ceedDataC, CeedData ceedDataF,
62 Ceed ceed,

--- 12 unchanged lines hidden (view full) ---

75 prolongRestrCtx->ceedVecF = ceedDataF->xceed;
76
77 // libCEED operators
78 prolongRestrCtx->opProlong = ceedDataF->opProlong;
79 prolongRestrCtx->opRestrict = ceedDataF->opRestrict;
80
81 // Ceed
82 prolongRestrCtx->ceed = ceed;
98
99 // Get/Restore Array
100 prolongRestrCtx->memType = appCtx->memTypeRequested;
101 if (appCtx->memTypeRequested == CEED_MEM_HOST) {
102 prolongRestrCtx->VecGetArray = VecGetArray;
103 prolongRestrCtx->VecGetArrayRead = VecGetArrayRead;
104 prolongRestrCtx->VecRestoreArray = VecRestoreArray;
105 prolongRestrCtx->VecRestoreArrayRead = VecRestoreArrayRead;
106 } else {
107 prolongRestrCtx->VecGetArray = VecCUDAGetArray;
108 prolongRestrCtx->VecGetArrayRead = VecCUDAGetArrayRead;
109 prolongRestrCtx->VecRestoreArray = VecCUDARestoreArray;
110 prolongRestrCtx->VecRestoreArrayRead = VecCUDARestoreArrayRead;
111 }
112
113 PetscFunctionReturn(0);
114};
115
116// -----------------------------------------------------------------------------
117// Jacobian setup
118// -----------------------------------------------------------------------------
119PetscErrorCode FormJacobian(SNES snes, Vec U, Mat J, Mat Jpre, void *ctx) {
120 PetscErrorCode ierr;

--- 63 unchanged lines hidden (view full) ---

184// -----------------------------------------------------------------------------
185PetscErrorCode ViewDiagnosticQuantities(MPI_Comm comm, DM dmU,
186 UserMult user, Vec U,
187 CeedElemRestriction ErestrictDiagnostic) {
188 PetscErrorCode ierr;
189 Vec Diagnostic, Yloc, MultVec;
190 CeedVector Yceed;
191 CeedScalar *x, *y;
83 PetscFunctionReturn(0);
84};
85
86// -----------------------------------------------------------------------------
87// Jacobian setup
88// -----------------------------------------------------------------------------
89PetscErrorCode FormJacobian(SNES snes, Vec U, Mat J, Mat Jpre, void *ctx) {
90 PetscErrorCode ierr;

--- 63 unchanged lines hidden (view full) ---

154// -----------------------------------------------------------------------------
155PetscErrorCode ViewDiagnosticQuantities(MPI_Comm comm, DM dmU,
156 UserMult user, Vec U,
157 CeedElemRestriction ErestrictDiagnostic) {
158 PetscErrorCode ierr;
159 Vec Diagnostic, Yloc, MultVec;
160 CeedVector Yceed;
161 CeedScalar *x, *y;
162 PetscMemType xmemtype, ymemtype;
192 PetscInt lsz;
193 PetscViewer viewer;
194 const char *outputFilename = "diagnostic_quantities.vtu";
195
196 PetscFunctionBeginUser;
197
198 // ---------------------------------------------------------------------------
199 // PETSc and libCEED vectors

--- 11 unchanged lines hidden (view full) ---

211 ierr = VecZeroEntries(user->Xloc); CHKERRQ(ierr);
212 ierr = DMPlexInsertBoundaryValues(dmU, PETSC_TRUE, user->Xloc,
213 user->loadIncrement, NULL, NULL, NULL);
214 CHKERRQ(ierr);
215 ierr = DMGlobalToLocal(dmU, U, INSERT_VALUES, user->Xloc); CHKERRQ(ierr);
216 ierr = VecZeroEntries(Yloc); CHKERRQ(ierr);
217
218 // -- Setup CEED vectors
163 PetscInt lsz;
164 PetscViewer viewer;
165 const char *outputFilename = "diagnostic_quantities.vtu";
166
167 PetscFunctionBeginUser;
168
169 // ---------------------------------------------------------------------------
170 // PETSc and libCEED vectors

--- 11 unchanged lines hidden (view full) ---

182 ierr = VecZeroEntries(user->Xloc); CHKERRQ(ierr);
183 ierr = DMPlexInsertBoundaryValues(dmU, PETSC_TRUE, user->Xloc,
184 user->loadIncrement, NULL, NULL, NULL);
185 CHKERRQ(ierr);
186 ierr = DMGlobalToLocal(dmU, U, INSERT_VALUES, user->Xloc); CHKERRQ(ierr);
187 ierr = VecZeroEntries(Yloc); CHKERRQ(ierr);
188
189 // -- Setup CEED vectors
219 ierr = user->VecGetArrayRead(user->Xloc, (const PetscScalar **)&x);
220 CHKERRQ(ierr);
221 ierr = user->VecGetArray(Yloc, &y); CHKERRQ(ierr);
222 CeedVectorSetArray(user->Xceed, user->memType, CEED_USE_POINTER, x);
223 CeedVectorSetArray(Yceed, user->memType, CEED_USE_POINTER, y);
190 ierr = VecGetArrayReadAndMemType(user->Xloc, (const PetscScalar **)&x,
191 &xmemtype); CHKERRQ(ierr);
192 ierr = VecGetArrayAndMemType(Yloc, &y, &ymemtype); CHKERRQ(ierr);
193 CeedVectorSetArray(user->Xceed, MemTypeP2C(xmemtype), CEED_USE_POINTER, x);
194 CeedVectorSetArray(Yceed, MemTypeP2C(ymemtype), CEED_USE_POINTER, y);
224
225 // -- Apply CEED operator
226 CeedOperatorApply(user->op, user->Xceed, Yceed, CEED_REQUEST_IMMEDIATE);
227
195
196 // -- Apply CEED operator
197 CeedOperatorApply(user->op, user->Xceed, Yceed, CEED_REQUEST_IMMEDIATE);
198
228 // -- Restore PETSc vector
229 CeedVectorTakeArray(user->Xceed, user->memType, NULL);
230 ierr = user->VecRestoreArrayRead(user->Xloc, (const PetscScalar **)&x);
199 // -- Restore PETSc vector; keep Yceed viewing memory of Yloc for use below
200 CeedVectorTakeArray(user->Xceed, MemTypeP2C(xmemtype), NULL);
201 ierr = VecRestoreArrayReadAndMemType(user->Xloc, (const PetscScalar **)&x);
231 CHKERRQ(ierr);
232
233 // -- Local-to-global
234 ierr = VecZeroEntries(Diagnostic); CHKERRQ(ierr);
235 ierr = DMLocalToGlobal(user->dm, Yloc, ADD_VALUES, Diagnostic);
236 CHKERRQ(ierr);
237
238 // ---------------------------------------------------------------------------
239 // Scale for multiplicity
240 // ---------------------------------------------------------------------------
241 // -- Setup vectors
242 ierr = VecDuplicate(Diagnostic, &MultVec); CHKERRQ(ierr);
243 ierr = VecZeroEntries(Yloc); CHKERRQ(ierr);
244
245 // -- Compute multiplicity
246 CeedElemRestrictionGetMultiplicity(ErestrictDiagnostic, Yceed);
247
248 // -- Restore vectors
202 CHKERRQ(ierr);
203
204 // -- Local-to-global
205 ierr = VecZeroEntries(Diagnostic); CHKERRQ(ierr);
206 ierr = DMLocalToGlobal(user->dm, Yloc, ADD_VALUES, Diagnostic);
207 CHKERRQ(ierr);
208
209 // ---------------------------------------------------------------------------
210 // Scale for multiplicity
211 // ---------------------------------------------------------------------------
212 // -- Setup vectors
213 ierr = VecDuplicate(Diagnostic, &MultVec); CHKERRQ(ierr);
214 ierr = VecZeroEntries(Yloc); CHKERRQ(ierr);
215
216 // -- Compute multiplicity
217 CeedElemRestrictionGetMultiplicity(ErestrictDiagnostic, Yceed);
218
219 // -- Restore vectors
249 CeedVectorTakeArray(Yceed, user->memType, NULL);
250 ierr = user->VecRestoreArray(Yloc, &y); CHKERRQ(ierr);
220 CeedVectorTakeArray(Yceed, MemTypeP2C(ymemtype), NULL);
221 ierr = VecRestoreArrayAndMemType(Yloc, &y); CHKERRQ(ierr);
251
252 // -- Local-to-global
253 ierr = VecZeroEntries(MultVec); CHKERRQ(ierr);
254 ierr = DMLocalToGlobal(user->dm, Yloc, ADD_VALUES, MultVec);
255 CHKERRQ(ierr);
256
257 // -- Scale
258 ierr = VecReciprocal(MultVec); CHKERRQ(ierr);

--- 20 unchanged lines hidden ---
222
223 // -- Local-to-global
224 ierr = VecZeroEntries(MultVec); CHKERRQ(ierr);
225 ierr = DMLocalToGlobal(user->dm, Yloc, ADD_VALUES, MultVec);
226 CHKERRQ(ierr);
227
228 // -- Scale
229 ierr = VecReciprocal(MultVec); CHKERRQ(ierr);

--- 20 unchanged lines hidden ---