Lines Matching refs:c

21 static PetscErrorCode CharacteristicView(Characteristic c, PetscViewer viewer)  in CharacteristicView()  argument
26 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1); in CharacteristicView()
27 if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)c), &viewer)); in CharacteristicView()
29 PetscCheckSameComm(c, 1, viewer, 2); in CharacteristicView()
32 if (!isascii) PetscTryTypeMethod(c, view, viewer); in CharacteristicView()
48 PetscErrorCode CharacteristicDestroy(Characteristic *c) in CharacteristicDestroy() argument
51 if (!*c) PetscFunctionReturn(PETSC_SUCCESS); in CharacteristicDestroy()
52 PetscValidHeaderSpecific(*c, CHARACTERISTIC_CLASSID, 1); in CharacteristicDestroy()
53 if (--((PetscObject)*c)->refct > 0) PetscFunctionReturn(PETSC_SUCCESS); in CharacteristicDestroy()
55 PetscTryTypeMethod(*c, destroy); in CharacteristicDestroy()
56 PetscCallMPI(MPI_Type_free(&(*c)->itemType)); in CharacteristicDestroy()
57 PetscCall(PetscFree((*c)->queue)); in CharacteristicDestroy()
58 PetscCall(PetscFree((*c)->queueLocal)); in CharacteristicDestroy()
59 PetscCall(PetscFree((*c)->queueRemote)); in CharacteristicDestroy()
60 PetscCall(PetscFree((*c)->neighbors)); in CharacteristicDestroy()
61 PetscCall(PetscFree((*c)->needCount)); in CharacteristicDestroy()
62 PetscCall(PetscFree((*c)->localOffsets)); in CharacteristicDestroy()
63 PetscCall(PetscFree((*c)->fillCount)); in CharacteristicDestroy()
64 PetscCall(PetscFree((*c)->remoteOffsets)); in CharacteristicDestroy()
65 PetscCall(PetscFree((*c)->request)); in CharacteristicDestroy()
66 PetscCall(PetscFree((*c)->status)); in CharacteristicDestroy()
67 PetscCall(PetscHeaderDestroy(c)); in CharacteristicDestroy()
86 PetscErrorCode CharacteristicCreate(MPI_Comm comm, Characteristic *c) in CharacteristicCreate() argument
91 PetscAssertPointer(c, 2); in CharacteristicCreate()
92 *c = NULL; in CharacteristicCreate()
96 *c = newC; in CharacteristicCreate()
156 PetscErrorCode CharacteristicSetType(Characteristic c, CharacteristicType type) in CharacteristicSetType() argument
162 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1); in CharacteristicSetType()
165 PetscCall(PetscObjectTypeCompare((PetscObject)c, type, &match)); in CharacteristicSetType()
168 if (c->data) { in CharacteristicSetType()
170 PetscUseTypeMethod(c, destroy); in CharacteristicSetType()
171 c->ops->destroy = NULL; in CharacteristicSetType()
172 c->data = NULL; in CharacteristicSetType()
176 …PetscCheck(r, PetscObjectComm((PetscObject)c), PETSC_ERR_ARG_UNKNOWN_TYPE, "Unknown Characteristic… in CharacteristicSetType()
177 c->setupcalled = PETSC_FALSE; in CharacteristicSetType()
178 PetscCall((*r)(c)); in CharacteristicSetType()
179 PetscCall(PetscObjectChangeTypeName((PetscObject)c, type)); in CharacteristicSetType()
196 PetscErrorCode CharacteristicSetUp(Characteristic c) in CharacteristicSetUp() argument
199 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1); in CharacteristicSetUp()
201 if (!((PetscObject)c)->type_name) PetscCall(CharacteristicSetType(c, CHARACTERISTICDA)); in CharacteristicSetUp()
203 if (c->setupcalled) PetscFunctionReturn(PETSC_SUCCESS); in CharacteristicSetUp()
205 PetscCall(PetscLogEventBegin(CHARACTERISTIC_SetUp, c, NULL, NULL, NULL)); in CharacteristicSetUp()
206 if (!c->setupcalled) PetscUseTypeMethod(c, setup); in CharacteristicSetUp()
207 PetscCall(PetscLogEventEnd(CHARACTERISTIC_SetUp, c, NULL, NULL, NULL)); in CharacteristicSetUp()
208 c->setupcalled = PETSC_TRUE; in CharacteristicSetUp()
251 PetscErrorCode CharacteristicSetVelocityInterpolation(Characteristic c, DM da, Vec v, Vec vOld, Pet… in CharacteristicSetVelocityInterpolation() argument
254 c->velocityDA = da; in CharacteristicSetVelocityInterpolation()
255 c->velocity = v; in CharacteristicSetVelocityInterpolation()
256 c->velocityOld = vOld; in CharacteristicSetVelocityInterpolation()
257 c->numVelocityComp = numComponents; in CharacteristicSetVelocityInterpolation()
258 c->velocityComp = components; in CharacteristicSetVelocityInterpolation()
259 c->velocityInterp = interp; in CharacteristicSetVelocityInterpolation()
260 c->velocityCtx = ctx; in CharacteristicSetVelocityInterpolation()
264 PetscErrorCode CharacteristicSetVelocityInterpolationLocal(Characteristic c, DM da, Vec v, Vec vOld… in CharacteristicSetVelocityInterpolationLocal() argument
267 c->velocityDA = da; in CharacteristicSetVelocityInterpolationLocal()
268 c->velocity = v; in CharacteristicSetVelocityInterpolationLocal()
269 c->velocityOld = vOld; in CharacteristicSetVelocityInterpolationLocal()
270 c->numVelocityComp = numComponents; in CharacteristicSetVelocityInterpolationLocal()
271 c->velocityComp = components; in CharacteristicSetVelocityInterpolationLocal()
272 c->velocityInterpLocal = interp; in CharacteristicSetVelocityInterpolationLocal()
273 c->velocityCtx = ctx; in CharacteristicSetVelocityInterpolationLocal()
277 PetscErrorCode CharacteristicSetFieldInterpolation(Characteristic c, DM da, Vec v, PetscInt numComp… in CharacteristicSetFieldInterpolation() argument
283 c->fieldDA = da; in CharacteristicSetFieldInterpolation()
284 c->field = v; in CharacteristicSetFieldInterpolation()
285 c->numFieldComp = numComponents; in CharacteristicSetFieldInterpolation()
286 c->fieldComp = components; in CharacteristicSetFieldInterpolation()
287 c->fieldInterp = interp; in CharacteristicSetFieldInterpolation()
288 c->fieldCtx = ctx; in CharacteristicSetFieldInterpolation()
292 PetscErrorCode CharacteristicSetFieldInterpolationLocal(Characteristic c, DM da, Vec v, PetscInt nu… in CharacteristicSetFieldInterpolationLocal() argument
298 c->fieldDA = da; in CharacteristicSetFieldInterpolationLocal()
299 c->field = v; in CharacteristicSetFieldInterpolationLocal()
300 c->numFieldComp = numComponents; in CharacteristicSetFieldInterpolationLocal()
301 c->fieldComp = components; in CharacteristicSetFieldInterpolationLocal()
302 c->fieldInterpLocal = interp; in CharacteristicSetFieldInterpolationLocal()
303 c->fieldCtx = ctx; in CharacteristicSetFieldInterpolationLocal()
321 PetscErrorCode CharacteristicSolve(Characteristic c, PetscReal dt, Vec solution) in CharacteristicSolve() argument
324 DM da = c->velocityDA; in CharacteristicSolve()
343 c->queueSize = 0; in CharacteristicSolve()
344 PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank)); in CharacteristicSolve()
346 PetscCall(CharacteristicSetNeighbors(c, 9, neighbors)); in CharacteristicSolve()
347 PetscCall(CharacteristicSetUp(c)); in CharacteristicSolve()
357 PetscCall(PetscMalloc1(c->numVelocityComp, &velocityValues)); in CharacteristicSolve()
358 PetscCall(PetscMalloc1(c->numVelocityComp, &velocityValuesOld)); in CharacteristicSolve()
359 PetscCall(PetscMalloc1(c->numFieldComp, &fieldValues)); in CharacteristicSolve()
367 if (c->velocityInterpLocal) { in CharacteristicSolve()
368 PetscCall(DMGetLocalVector(c->velocityDA, &velocityLocal)); in CharacteristicSolve()
369 PetscCall(DMGetLocalVector(c->velocityDA, &velocityLocalOld)); in CharacteristicSolve()
370 PetscCall(DMGlobalToLocalBegin(c->velocityDA, c->velocity, INSERT_VALUES, velocityLocal)); in CharacteristicSolve()
371 PetscCall(DMGlobalToLocalEnd(c->velocityDA, c->velocity, INSERT_VALUES, velocityLocal)); in CharacteristicSolve()
372 PetscCall(DMGlobalToLocalBegin(c->velocityDA, c->velocityOld, INSERT_VALUES, velocityLocalOld)); in CharacteristicSolve()
373 PetscCall(DMGlobalToLocalEnd(c->velocityDA, c->velocityOld, INSERT_VALUES, velocityLocalOld)); in CharacteristicSolve()
374 PetscCall(DMDAVecGetArray(c->velocityDA, velocityLocal, &velocityArray)); in CharacteristicSolve()
375 PetscCall(DMDAVecGetArray(c->velocityDA, velocityLocalOld, &velocityArrayOld)); in CharacteristicSolve()
382 …if (c->velocityInterpLocal) PetscCall(c->velocityInterpLocal(velocityArray, interpIndices, c->numV… in CharacteristicSolve()
383 …else PetscCall(c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, … in CharacteristicSolve()
392 PetscCall(CharacteristicAddPoint(c, &Qi)); in CharacteristicSolve()
398 PetscCall(CharacteristicSendCoordinatesBegin(c)); in CharacteristicSolve()
404 for (n = 0; n < c->queueSize; n++) { in CharacteristicSolve()
405 Qi = c->queue[n]; in CharacteristicSolve()
406 if (c->neighbors[Qi.proc] == rank) { in CharacteristicSolve()
409 if (c->velocityInterpLocal) { in CharacteristicSolve()
410 …PetscCall(c->velocityInterpLocal(velocityArray, interpIndices, c->numVelocityComp, c->velocityComp… in CharacteristicSolve()
411 …PetscCall(c->velocityInterpLocal(velocityArrayOld, interpIndices, c->numVelocityComp, c->velocityC… in CharacteristicSolve()
413 …PetscCall(c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, veloc… in CharacteristicSolve()
414 …PetscCall(c->velocityInterp(c->velocityOld, interpIndices, c->numVelocityComp, c->velocityComp, ve… in CharacteristicSolve()
419 c->queue[n] = Qi; in CharacteristicSolve()
424 PetscCall(CharacteristicSendCoordinatesEnd(c)); in CharacteristicSolve()
429 …PetscCall(PetscInfo(NULL, "Calculating %" PetscInt_FMT " remote velocities at t_{n - 1/2}\n", c->q… in CharacteristicSolve()
430 for (n = 0; n < c->queueRemoteSize; n++) { in CharacteristicSolve()
431 Qi = c->queueRemote[n]; in CharacteristicSolve()
434 if (c->velocityInterpLocal) { in CharacteristicSolve()
435 …PetscCall(c->velocityInterpLocal(velocityArray, interpIndices, c->numVelocityComp, c->velocityComp… in CharacteristicSolve()
436 …PetscCall(c->velocityInterpLocal(velocityArrayOld, interpIndices, c->numVelocityComp, c->velocityC… in CharacteristicSolve()
438 …PetscCall(c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, veloc… in CharacteristicSolve()
439 …PetscCall(c->velocityInterp(c->velocityOld, interpIndices, c->numVelocityComp, c->velocityComp, ve… in CharacteristicSolve()
443 c->queueRemote[n] = Qi; in CharacteristicSolve()
447 PetscCall(CharacteristicGetValuesBegin(c)); in CharacteristicSolve()
448 PetscCall(CharacteristicGetValuesEnd(c)); in CharacteristicSolve()
449 if (c->velocityInterpLocal) { in CharacteristicSolve()
450 PetscCall(DMDAVecRestoreArray(c->velocityDA, velocityLocal, &velocityArray)); in CharacteristicSolve()
451 PetscCall(DMDAVecRestoreArray(c->velocityDA, velocityLocalOld, &velocityArrayOld)); in CharacteristicSolve()
452 PetscCall(DMRestoreLocalVector(c->velocityDA, &velocityLocal)); in CharacteristicSolve()
453 PetscCall(DMRestoreLocalVector(c->velocityDA, &velocityLocalOld)); in CharacteristicSolve()
464 for (n = 0; n < c->queueSize; n++) { in CharacteristicSolve()
465 Qi = c->queue[n]; in CharacteristicSolve()
475 c->queue[n] = Qi; in CharacteristicSolve()
480 PetscCall(CharacteristicSendCoordinatesBegin(c)); in CharacteristicSolve()
485 if (c->fieldInterpLocal) { in CharacteristicSolve()
486 PetscCall(DMGetLocalVector(c->fieldDA, &fieldLocal)); in CharacteristicSolve()
487 PetscCall(DMGlobalToLocalBegin(c->fieldDA, c->field, INSERT_VALUES, fieldLocal)); in CharacteristicSolve()
488 PetscCall(DMGlobalToLocalEnd(c->fieldDA, c->field, INSERT_VALUES, fieldLocal)); in CharacteristicSolve()
489 PetscCall(DMDAVecGetArray(c->fieldDA, fieldLocal, &fieldArray)); in CharacteristicSolve()
492 for (n = 0; n < c->queueSize; n++) { in CharacteristicSolve()
493 if (c->neighbors[c->queue[n].proc] == rank) { in CharacteristicSolve()
494 interpIndices[0] = c->queue[n].x; in CharacteristicSolve()
495 interpIndices[1] = c->queue[n].y; in CharacteristicSolve()
496 …if (c->fieldInterpLocal) PetscCall(c->fieldInterpLocal(fieldArray, interpIndices, c->numFieldComp,… in CharacteristicSolve()
497 …else PetscCall(c->fieldInterp(c->field, interpIndices, c->numFieldComp, c->fieldComp, fieldValues,… in CharacteristicSolve()
498 for (comp = 0; comp < c->numFieldComp; comp++) c->queue[n].field[comp] = fieldValues[comp]; in CharacteristicSolve()
504 PetscCall(CharacteristicSendCoordinatesEnd(c)); in CharacteristicSolve()
509 …PetscCall(PetscInfo(NULL, "Calculating %" PetscInt_FMT " remote field points at t_{n}\n", c->queue… in CharacteristicSolve()
510 for (n = 0; n < c->queueRemoteSize; n++) { in CharacteristicSolve()
511 interpIndices[0] = c->queueRemote[n].x; in CharacteristicSolve()
512 interpIndices[1] = c->queueRemote[n].y; in CharacteristicSolve()
522 …if (c->fieldInterpLocal) PetscCall(c->fieldInterpLocal(fieldArray, interpIndices, c->numFieldComp,… in CharacteristicSolve()
523 …else PetscCall(c->fieldInterp(c->field, interpIndices, c->numFieldComp, c->fieldComp, fieldValues,… in CharacteristicSolve()
524 … for (comp = 0; comp < c->numFieldComp; comp++) c->queueRemote[n].field[comp] = fieldValues[comp]; in CharacteristicSolve()
529 PetscCall(CharacteristicGetValuesBegin(c)); in CharacteristicSolve()
530 PetscCall(CharacteristicGetValuesEnd(c)); in CharacteristicSolve()
531 if (c->fieldInterpLocal) { in CharacteristicSolve()
532 PetscCall(DMDAVecRestoreArray(c->fieldDA, fieldLocal, &fieldArray)); in CharacteristicSolve()
533 PetscCall(DMRestoreLocalVector(c->fieldDA, &fieldLocal)); in CharacteristicSolve()
539 …PetscCall(DMDAGetInfo(c->fieldDA, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &dof, NULL, NULL, NULL… in CharacteristicSolve()
540 PetscCall(DMDAVecGetArray(c->fieldDA, solution, &solArray)); in CharacteristicSolve()
541 for (n = 0; n < c->queueSize; n++) { in CharacteristicSolve()
542 Qi = c->queue[n]; in CharacteristicSolve()
543 …for (comp = 0; comp < c->numFieldComp; comp++) solArray[Qi.j][Qi.i * dof + c->fieldComp[comp]] = Q… in CharacteristicSolve()
545 PetscCall(DMDAVecRestoreArray(c->fieldDA, solution, &solArray)); in CharacteristicSolve()
557 PetscErrorCode CharacteristicSetNeighbors(Characteristic c, PetscInt numNeighbors, PetscMPIInt neig… in CharacteristicSetNeighbors() argument
560 PetscCall(PetscMPIIntCast(numNeighbors, &c->numNeighbors)); in CharacteristicSetNeighbors()
561 PetscCall(PetscFree(c->neighbors)); in CharacteristicSetNeighbors()
562 PetscCall(PetscMalloc1(numNeighbors, &c->neighbors)); in CharacteristicSetNeighbors()
563 PetscCall(PetscArraycpy(c->neighbors, neighbors, numNeighbors)); in CharacteristicSetNeighbors()
567 PetscErrorCode CharacteristicAddPoint(Characteristic c, CharacteristicPointDA2D *point) in CharacteristicAddPoint() argument
570 …PetscCheck(c->queueSize < c->queueMax, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Exceeded maximu… in CharacteristicAddPoint()
571 c->queue[c->queueSize++] = *point; in CharacteristicAddPoint()
575 PetscErrorCode CharacteristicSendCoordinatesBegin(Characteristic c) in CharacteristicSendCoordinatesBegin() argument
581 PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank)); in CharacteristicSendCoordinatesBegin()
582 PetscCall(CharacteristicHeapSort(c, c->queue, c->queueSize)); in CharacteristicSendCoordinatesBegin()
583 PetscCall(PetscArrayzero(c->needCount, c->numNeighbors)); in CharacteristicSendCoordinatesBegin()
584 for (i = 0; i < c->queueSize; i++) c->needCount[c->queue[i].proc]++; in CharacteristicSendCoordinatesBegin()
585 c->fillCount[0] = 0; in CharacteristicSendCoordinatesBegin()
586 …= 1; n < c->numNeighbors; n++) PetscCallMPI(MPIU_Irecv(&c->fillCount[n], 1, MPIU_INT, c->neighbors… in CharacteristicSendCoordinatesBegin()
587 …(n = 1; n < c->numNeighbors; n++) PetscCallMPI(MPIU_Send(&c->needCount[n], 1, MPIU_INT, c->neighbo… in CharacteristicSendCoordinatesBegin()
588 PetscCallMPI(MPI_Waitall(c->numNeighbors - 1, c->request, c->status)); in CharacteristicSendCoordinatesBegin()
590 c->queueLocalMax = c->localOffsets[0] = 0; in CharacteristicSendCoordinatesBegin()
591 c->queueRemoteMax = c->remoteOffsets[0] = 0; in CharacteristicSendCoordinatesBegin()
592 for (n = 1; n < c->numNeighbors; n++) { in CharacteristicSendCoordinatesBegin()
593 c->remoteOffsets[n] = c->queueRemoteMax; in CharacteristicSendCoordinatesBegin()
594 c->queueRemoteMax += c->fillCount[n]; in CharacteristicSendCoordinatesBegin()
595 c->localOffsets[n] = c->queueLocalMax; in CharacteristicSendCoordinatesBegin()
596 c->queueLocalMax += c->needCount[n]; in CharacteristicSendCoordinatesBegin()
599 for (n = 1; n < c->numNeighbors; n++) c->localOffsets[n] += c->needCount[0]; in CharacteristicSendCoordinatesBegin()
600 c->needCount[0] = 0; in CharacteristicSendCoordinatesBegin()
602 if (c->queueRemoteMax) PetscCall(PetscMalloc1(c->queueRemoteMax, &c->queueRemote)); in CharacteristicSendCoordinatesBegin()
603 else c->queueRemote = NULL; in CharacteristicSendCoordinatesBegin()
604 c->queueRemoteSize = c->queueRemoteMax; in CharacteristicSendCoordinatesBegin()
607 for (n = 1; n < c->numNeighbors; n++) { in CharacteristicSendCoordinatesBegin()
608 … "Receiving %" PetscInt_FMT " requests for values from proc %d\n", c->fillCount[n], c->neighbors[n… in CharacteristicSendCoordinatesBegin()
609 …(MPIU_Irecv(&(c->queueRemote[c->remoteOffsets[n]]), c->fillCount[n], c->itemType, c->neighbors[n],… in CharacteristicSendCoordinatesBegin()
611 for (n = 1; n < c->numNeighbors; n++) { in CharacteristicSendCoordinatesBegin()
612 …L, "Sending %" PetscInt_FMT " requests for values from proc %d\n", c->needCount[n], c->neighbors[n… in CharacteristicSendCoordinatesBegin()
613 …CallMPI(MPIU_Send(&(c->queue[c->localOffsets[n]]), c->needCount[n], c->itemType, c->neighbors[n], … in CharacteristicSendCoordinatesBegin()
618 PetscErrorCode CharacteristicSendCoordinatesEnd(Characteristic c) in CharacteristicSendCoordinatesEnd() argument
626 PetscCallMPI(MPI_Waitall(c->numNeighbors - 1, c->request, c->status)); in CharacteristicSendCoordinatesEnd()
628 PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank)); in CharacteristicSendCoordinatesEnd()
629c->queueRemoteSize; n++) PetscCheck(c->neighbors[c->queueRemote[n].proc] != rank,PETSC_COMM_SELF,P… in CharacteristicSendCoordinatesEnd()
634 PetscErrorCode CharacteristicGetValuesBegin(Characteristic c) in CharacteristicGetValuesBegin() argument
641c->numNeighbors; n++) PetscCallMPI(MPIU_Irecv(&(c->queue[c->localOffsets[n]]), c->needCount[n], c-… in CharacteristicGetValuesBegin()
642c->numNeighbors; n++) PetscCallMPI(MPIU_Send(&(c->queueRemote[c->remoteOffsets[n]]), c->fillCount[… in CharacteristicGetValuesBegin()
646 PetscErrorCode CharacteristicGetValuesEnd(Characteristic c) in CharacteristicGetValuesEnd() argument
649 PetscCallMPI(MPI_Waitall(c->numNeighbors - 1, c->request, c->status)); in CharacteristicGetValuesEnd()
651 PetscCall(PetscFree(c->queueRemote)); in CharacteristicGetValuesEnd()
658 static PetscErrorCode CharacteristicHeapSort(Characteristic c, Queue queue, PetscInt size) in CharacteristicHeapSort() argument
670 …for (n = (size / 2) - 1; n >= 0; n--) PetscCall(CharacteristicSiftDown(c, queue, n, size - 1)); /*… in CharacteristicHeapSort()
675 PetscCall(CharacteristicSiftDown(c, queue, 0, n - 1)); in CharacteristicHeapSort()
687 static PetscErrorCode CharacteristicSiftDown(Characteristic c, Queue queue, PetscInt root, PetscInt… in CharacteristicSiftDown() argument