| 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 --- |