Bug Summary

File:ts/characteristic/interface/characteristic.c
Warning:line 521, column 38
1st function call argument is an uninitialized value

Annotated Source Code

[?] Use j/k keys for keyboard navigation

1
2#include <petsc/private/characteristicimpl.h> /*I "petsccharacteristic.h" I*/
3#include <petscdmda.h>
4#include <petscviewer.h>
5
6PetscClassId CHARACTERISTIC_CLASSID;
7PetscLogEvent CHARACTERISTIC_SetUp, CHARACTERISTIC_Solve, CHARACTERISTIC_QueueSetup, CHARACTERISTIC_DAUpdate;
8PetscLogEvent CHARACTERISTIC_HalfTimeLocal, CHARACTERISTIC_HalfTimeRemote, CHARACTERISTIC_HalfTimeExchange;
9PetscLogEvent CHARACTERISTIC_FullTimeLocal, CHARACTERISTIC_FullTimeRemote, CHARACTERISTIC_FullTimeExchange;
10/*
11 Contains the list of registered characteristic routines
12*/
13PetscFunctionList CharacteristicList = NULL((void*)0);
14PetscBool CharacteristicRegisterAllCalled = PETSC_FALSE;
15
16PetscErrorCode DMDAGetNeighborsRank(DM, PetscMPIInt []);
17PetscInt DMDAGetNeighborRelative(DM, PetscReal, PetscReal);
18PetscErrorCode DMDAMapToPeriodicDomain(DM, PetscScalar []);
19
20PetscErrorCode CharacteristicHeapSort(Characteristic, Queue, PetscInt);
21PetscErrorCode CharacteristicSiftDown(Characteristic, Queue, PetscInt, PetscInt);
22
23PetscErrorCode CharacteristicView(Characteristic c, PetscViewer viewer)
24{
25 PetscBool iascii;
26 PetscErrorCode ierr;
27
28 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 28; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
29 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1)do { if (!c) return PetscError(((MPI_Comm)0x44000001),29,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(c,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),29,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(c))->classid != CHARACTERISTIC_CLASSID
) { if (((PetscObject)(c))->classid == -1) return PetscError
(((MPI_Comm)0x44000001),29,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),29,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
30 if (!viewer) {
31 ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)c),&viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),31,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
32 }
33 PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2)do { if (!viewer) return PetscError(((MPI_Comm)0x44000001),33
,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",2); if (
!PetscCheckPointer(viewer,PETSC_OBJECT)) return PetscError(((
MPI_Comm)0x44000001),33,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,2); if (((PetscObject)(viewer))->classid != PETSC_VIEWER_CLASSID
) { if (((PetscObject)(viewer))->classid == -1) return PetscError
(((MPI_Comm)0x44000001),33,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,2); else return PetscError(((MPI_Comm)0x44000001),33,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,2); } } while (0)
;
34 PetscCheckSameComm(c, 1, viewer, 2)do { PetscErrorCode _6_ierr,__flag; _6_ierr = MPI_Comm_compare
(PetscObjectComm((PetscObject)c),PetscObjectComm((PetscObject
)viewer),&__flag);do {if (__builtin_expect(!!(_6_ierr),0)
) return PetscError(((MPI_Comm)0x44000001),34,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,_6_ierr,PETSC_ERROR_REPEAT," ");} while (0); if (__flag != 1
&& __flag != 0) return PetscError(((MPI_Comm)0x44000001
),34,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,80,PETSC_ERROR_INITIAL,"Different communicators in the two objects: Argument # %d and %d flag %d"
,1,2,__flag); } while (0)
;
35
36 ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERASCII"ascii", &iascii);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),36,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
37 if (!iascii) {
38 if (c->ops->view) {
39 ierr = (*c->ops->view)(c, viewer);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),39,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
40 }
41 }
42 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
43}
44
45PetscErrorCode CharacteristicDestroy(Characteristic *c)
46{
47 PetscErrorCode ierr;
48
49 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 49; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
50 if (!*c) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
51 PetscValidHeaderSpecific(*c, CHARACTERISTIC_CLASSID, 1)do { if (!*c) return PetscError(((MPI_Comm)0x44000001),51,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(*c,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),51,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(*c))->classid != CHARACTERISTIC_CLASSID
) { if (((PetscObject)(*c))->classid == -1) return PetscError
(((MPI_Comm)0x44000001),51,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),51,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
52 if (--((PetscObject)(*c))->refct > 0) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
53
54 if ((*c)->ops->destroy) {
55 ierr = (*(*c)->ops->destroy)((*c));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),55,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
56 }
57 ierr = MPI_Type_free(&(*c)->itemType);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),57,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
58 ierr = PetscFree((*c)->queue)((*PetscTrFree)((void*)((*c)->queue),58,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->queue) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),58,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
59 ierr = PetscFree((*c)->queueLocal)((*PetscTrFree)((void*)((*c)->queueLocal),59,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->queueLocal) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),59,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
60 ierr = PetscFree((*c)->queueRemote)((*PetscTrFree)((void*)((*c)->queueRemote),60,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->queueRemote) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),60,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
61 ierr = PetscFree((*c)->neighbors)((*PetscTrFree)((void*)((*c)->neighbors),61,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->neighbors) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),61,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
62 ierr = PetscFree((*c)->needCount)((*PetscTrFree)((void*)((*c)->needCount),62,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->needCount) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),62,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
63 ierr = PetscFree((*c)->localOffsets)((*PetscTrFree)((void*)((*c)->localOffsets),63,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->localOffsets) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),63,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
64 ierr = PetscFree((*c)->fillCount)((*PetscTrFree)((void*)((*c)->fillCount),64,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->fillCount) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),64,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
65 ierr = PetscFree((*c)->remoteOffsets)((*PetscTrFree)((void*)((*c)->remoteOffsets),65,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->remoteOffsets) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),65,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
66 ierr = PetscFree((*c)->request)((*PetscTrFree)((void*)((*c)->request),66,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->request) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),66,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
67 ierr = PetscFree((*c)->status)((*PetscTrFree)((void*)((*c)->status),67,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || (((*c)->status) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),67,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
68 ierr = PetscHeaderDestroy(c)(PetscHeaderDestroy_Private((PetscObject)(*c)) || ((*PetscTrFree
)((void*)(*c),68,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((*c) = 0,0)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),68,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
69 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
70}
71
72PetscErrorCode CharacteristicCreate(MPI_Comm comm, Characteristic *c)
73{
74 Characteristic newC;
75 PetscErrorCode ierr;
76
77 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 77; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
78 PetscValidPointer(c, 2)do { if (!c) return PetscError(((MPI_Comm)0x44000001),78,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(c,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),78,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0)
;
79 *c = NULL((void*)0);
80 ierr = CharacteristicInitializePackage();CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),80,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
81
82 ierr = PetscHeaderCreate(newC, CHARACTERISTIC_CLASSID, "Characteristic", "Characteristic", "Characteristic", comm, CharacteristicDestroy, CharacteristicView)(PetscMallocA(1,PETSC_TRUE,82,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(1)*sizeof(**((&(newC)))),((&(newC)))) || PetscHeaderCreate_Private
((PetscObject)newC,CHARACTERISTIC_CLASSID,"Characteristic","Characteristic"
,"Characteristic",comm,(PetscObjectDestroyFunction)CharacteristicDestroy
,(PetscObjectViewFunction)CharacteristicView) || ((PetscLogPHC
) ? (*PetscLogPHC)((PetscObject)(newC)) : 0) || PetscLogObjectMemory
((PetscObject)newC,sizeof(*(newC))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),82,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
83 *c = newC;
84
85 newC->structured = PETSC_TRUE;
86 newC->numIds = 0;
87 newC->velocityDA = NULL((void*)0);
88 newC->velocity = NULL((void*)0);
89 newC->velocityOld = NULL((void*)0);
90 newC->numVelocityComp = 0;
91 newC->velocityComp = NULL((void*)0);
92 newC->velocityInterp = NULL((void*)0);
93 newC->velocityInterpLocal = NULL((void*)0);
94 newC->velocityCtx = NULL((void*)0);
95 newC->fieldDA = NULL((void*)0);
96 newC->field = NULL((void*)0);
97 newC->numFieldComp = 0;
98 newC->fieldComp = NULL((void*)0);
99 newC->fieldInterp = NULL((void*)0);
100 newC->fieldInterpLocal = NULL((void*)0);
101 newC->fieldCtx = NULL((void*)0);
102 newC->itemType = 0;
103 newC->queue = NULL((void*)0);
104 newC->queueSize = 0;
105 newC->queueMax = 0;
106 newC->queueLocal = NULL((void*)0);
107 newC->queueLocalSize = 0;
108 newC->queueLocalMax = 0;
109 newC->queueRemote = NULL((void*)0);
110 newC->queueRemoteSize = 0;
111 newC->queueRemoteMax = 0;
112 newC->numNeighbors = 0;
113 newC->neighbors = NULL((void*)0);
114 newC->needCount = NULL((void*)0);
115 newC->localOffsets = NULL((void*)0);
116 newC->fillCount = NULL((void*)0);
117 newC->remoteOffsets = NULL((void*)0);
118 newC->request = NULL((void*)0);
119 newC->status = NULL((void*)0);
120 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
121}
122
123/*@C
124 CharacteristicSetType - Builds Characteristic for a particular solver.
125
126 Logically Collective on Characteristic
127
128 Input Parameters:
129+ c - the method of characteristics context
130- type - a known method
131
132 Options Database Key:
133. -characteristic_type <method> - Sets the method; use -help for a list
134 of available methods
135
136 Notes:
137 See "include/petsccharacteristic.h" for available methods
138
139 Normally, it is best to use the CharacteristicSetFromOptions() command and
140 then set the Characteristic type from the options database rather than by using
141 this routine. Using the options database provides the user with
142 maximum flexibility in evaluating the many different Krylov methods.
143 The CharacteristicSetType() routine is provided for those situations where it
144 is necessary to set the iterative solver independently of the command
145 line or options database. This might be the case, for example, when
146 the choice of iterative solver changes during the execution of the
147 program, and the user's application is taking responsibility for
148 choosing the appropriate method. In other words, this routine is
149 not for beginners.
150
151 Level: intermediate
152
153.keywords: Characteristic, set, method
154
155.seealso: CharacteristicType
156
157@*/
158PetscErrorCode CharacteristicSetType(Characteristic c, CharacteristicType type)
159{
160 PetscErrorCode ierr, (*r)(Characteristic);
161 PetscBool match;
162
163 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 163; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
164 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1)do { if (!c) return PetscError(((MPI_Comm)0x44000001),164,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(c,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),164,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(c))->classid != CHARACTERISTIC_CLASSID
) { if (((PetscObject)(c))->classid == -1) return PetscError
(((MPI_Comm)0x44000001),164,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),164,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
165 PetscValidCharPointer(type, 2)do { if (!type) return PetscError(((MPI_Comm)0x44000001),165,
__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(type,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),165,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to char: Parameter # %d"
,2); } while (0)
;
166
167 ierr = PetscObjectTypeCompare((PetscObject) c, type, &match);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),167,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
168 if (match) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
169
170 if (c->data) {
171 /* destroy the old private Characteristic context */
172 ierr = (*c->ops->destroy)(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),172,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
173 c->ops->destroy = NULL((void*)0);
174 c->data = 0;
175 }
176
177 ierr = PetscFunctionListFind(CharacteristicList,type,&r)PetscFunctionListFind_Private((CharacteristicList),(type),(PetscVoidFunction
*)(&r))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),177,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
178 if (!r) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_UNKNOWN_TYPE, "Unknown Characteristic type given: %s", type)return PetscError(((MPI_Comm)0x44000001),178,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,86,PETSC_ERROR_INITIAL,"Unknown Characteristic type given: %s"
,type)
;
179 c->setupcalled = 0;
180 ierr = (*r)(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),180,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
181 ierr = PetscObjectChangeTypeName((PetscObject) c, type);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),181,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
182 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
183}
184
185/*@
186 CharacteristicSetUp - Sets up the internal data structures for the
187 later use of an iterative solver.
188
189 Collective on Characteristic
190
191 Input Parameter:
192. ksp - iterative context obtained from CharacteristicCreate()
193
194 Level: developer
195
196.keywords: Characteristic, setup
197
198.seealso: CharacteristicCreate(), CharacteristicSolve(), CharacteristicDestroy()
199@*/
200PetscErrorCode CharacteristicSetUp(Characteristic c)
201{
202 PetscErrorCode ierr;
203
204 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 204; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
205 PetscValidHeaderSpecific(c, CHARACTERISTIC_CLASSID, 1)do { if (!c) return PetscError(((MPI_Comm)0x44000001),205,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(c,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),205,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(c))->classid != CHARACTERISTIC_CLASSID
) { if (((PetscObject)(c))->classid == -1) return PetscError
(((MPI_Comm)0x44000001),205,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),205,__func__
,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
206
207 if (!((PetscObject)c)->type_name) {
208 ierr = CharacteristicSetType(c, CHARACTERISTICDA"da");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),208,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
209 }
210
211 if (c->setupcalled == 2) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
212
213 ierr = PetscLogEventBegin(CHARACTERISTIC_SetUp,c,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_SetUp].active) ? (*PetscLogPLB)((CHARACTERISTIC_SetUp
),0,(PetscObject)(c),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),213,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
214 if (!c->setupcalled) {
215 ierr = (*c->ops->setup)(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),215,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
216 }
217 ierr = PetscLogEventEnd(CHARACTERISTIC_SetUp,c,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_SetUp].active) ? (*PetscLogPLE)((CHARACTERISTIC_SetUp
),0,(PetscObject)(c),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),217,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
218 c->setupcalled = 2;
219 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
220}
221
222/*@C
223 CharacteristicRegister - Adds a solver to the method of characteristics package.
224
225 Not Collective
226
227 Input Parameters:
228+ name_solver - name of a new user-defined solver
229- routine_create - routine to create method context
230
231 Sample usage:
232.vb
233 CharacteristicRegister("my_char", MyCharCreate);
234.ve
235
236 Then, your Characteristic type can be chosen with the procedural interface via
237.vb
238 CharacteristicCreate(MPI_Comm, Characteristic* &char);
239 CharacteristicSetType(char,"my_char");
240.ve
241 or at runtime via the option
242.vb
243 -characteristic_type my_char
244.ve
245
246 Notes:
247 CharacteristicRegister() may be called multiple times to add several user-defined solvers.
248
249.keywords: Characteristic, register
250
251.seealso: CharacteristicRegisterAll(), CharacteristicRegisterDestroy()
252
253 Level: advanced
254@*/
255PetscErrorCode CharacteristicRegister(const char sname[],PetscErrorCode (*function)(Characteristic))
256{
257 PetscErrorCode ierr;
258
259 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 259; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
260 ierr = CharacteristicInitializePackage();CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),260,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
261 ierr = PetscFunctionListAdd(&CharacteristicList,sname,function)PetscFunctionListAdd_Private((&CharacteristicList),(sname
),(PetscVoidFunction)(function))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),261,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
262 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
263}
264
265PetscErrorCode CharacteristicSetVelocityInterpolation(Characteristic c, DM da, Vec v, Vec vOld, PetscInt numComponents, PetscInt components[], PetscErrorCode (*interp)(Vec, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void*), void *ctx)
266{
267 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 267; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
268 c->velocityDA = da;
269 c->velocity = v;
270 c->velocityOld = vOld;
271 c->numVelocityComp = numComponents;
272 c->velocityComp = components;
273 c->velocityInterp = interp;
274 c->velocityCtx = ctx;
275 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
276}
277
278PetscErrorCode CharacteristicSetVelocityInterpolationLocal(Characteristic c, DM da, Vec v, Vec vOld, PetscInt numComponents, PetscInt components[], PetscErrorCode (*interp)(void*, PetscReal [], PetscInt, PetscInt[], PetscScalar[], void*), void *ctx)
279{
280 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 280; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
281 c->velocityDA = da;
282 c->velocity = v;
283 c->velocityOld = vOld;
284 c->numVelocityComp = numComponents;
285 c->velocityComp = components;
286 c->velocityInterpLocal = interp;
287 c->velocityCtx = ctx;
288 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
289}
290
291PetscErrorCode CharacteristicSetFieldInterpolation(Characteristic c, DM da, Vec v, PetscInt numComponents, PetscInt components[], PetscErrorCode (*interp)(Vec, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void*), void *ctx)
292{
293 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 293; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
294#if 0
295 if (numComponents > 2) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP, "Fields with more than 2 components are not supported. Send mail to [email protected].")return PetscError(((MPI_Comm)0x44000001),295,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,56,PETSC_ERROR_INITIAL,"Fields with more than 2 components are not supported. Send mail to [email protected]."
)
;
296#endif
297 c->fieldDA = da;
298 c->field = v;
299 c->numFieldComp = numComponents;
300 c->fieldComp = components;
301 c->fieldInterp = interp;
302 c->fieldCtx = ctx;
303 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
304}
305
306PetscErrorCode CharacteristicSetFieldInterpolationLocal(Characteristic c, DM da, Vec v, PetscInt numComponents, PetscInt components[], PetscErrorCode (*interp)(void*, PetscReal[], PetscInt, PetscInt[], PetscScalar [], void*), void *ctx)
307{
308 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 308; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
309#if 0
310 if (numComponents > 2) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP, "Fields with more than 2 components are not supported. Send mail to [email protected].")return PetscError(((MPI_Comm)0x44000001),310,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,56,PETSC_ERROR_INITIAL,"Fields with more than 2 components are not supported. Send mail to [email protected]."
)
;
311#endif
312 c->fieldDA = da;
313 c->field = v;
314 c->numFieldComp = numComponents;
315 c->fieldComp = components;
316 c->fieldInterpLocal = interp;
317 c->fieldCtx = ctx;
318 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
319}
320
321PetscErrorCode CharacteristicSolve(Characteristic c, PetscReal dt, Vec solution)
322{
323 CharacteristicPointDA2D Qi;
324 DM da = c->velocityDA;
325 Vec velocityLocal, velocityLocalOld;
326 Vec fieldLocal;
327 DMDALocalInfo info;
328 PetscScalar **solArray;
329 void *velocityArray;
330 void *velocityArrayOld;
331 void *fieldArray;
1
'fieldArray' declared without an initial value
332 PetscScalar *interpIndices;
333 PetscScalar *velocityValues, *velocityValuesOld;
334 PetscScalar *fieldValues;
335 PetscMPIInt rank;
336 PetscInt dim;
337 PetscMPIInt neighbors[9];
338 PetscInt dof;
339 PetscInt gx, gy;
340 PetscInt n, is, ie, js, je, comp;
341 PetscErrorCode ierr;
342
343 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 343; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
344 c->queueSize = 0;
345 ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),345,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
346 ierr = DMDAGetNeighborsRank(da, neighbors);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),346,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
347 ierr = CharacteristicSetNeighbors(c, 9, neighbors);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),347,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
348 ierr = CharacteristicSetUp(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),348,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
349 /* global and local grid info */
350 ierr = DMDAGetInfo(da, &dim, &gx, &gy, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),350,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
351 ierr = DMDAGetLocalInfo(da, &info);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),351,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
352 is = info.xs; ie = info.xs+info.xm;
353 js = info.ys; je = info.ys+info.ym;
354 /* Allocation */
355 ierr = PetscMalloc1(dim, &interpIndices)PetscMallocA(1,PETSC_FALSE,355,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(dim)*sizeof(**(&interpIndices)),(&interpIndices
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),355,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
356 ierr = PetscMalloc1(c->numVelocityComp, &velocityValues)PetscMallocA(1,PETSC_FALSE,356,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(c->numVelocityComp)*sizeof(**(&velocityValues
)),(&velocityValues))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),356,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
357 ierr = PetscMalloc1(c->numVelocityComp, &velocityValuesOld)PetscMallocA(1,PETSC_FALSE,357,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(c->numVelocityComp)*sizeof(**(&velocityValuesOld
)),(&velocityValuesOld))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),357,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
358 ierr = PetscMalloc1(c->numFieldComp, &fieldValues)PetscMallocA(1,PETSC_FALSE,358,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(c->numFieldComp)*sizeof(**(&fieldValues)),(&
fieldValues))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),358,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
359 ierr = PetscLogEventBegin(CHARACTERISTIC_Solve,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_Solve].active) ? (*PetscLogPLB)((CHARACTERISTIC_Solve
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),359,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
360
361 /* -----------------------------------------------------------------------
362 PART 1, AT t-dt/2
363 -----------------------------------------------------------------------*/
364 ierr = PetscLogEventBegin(CHARACTERISTIC_QueueSetup,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_QueueSetup].active) ? (*PetscLogPLB)((CHARACTERISTIC_QueueSetup
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),364,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
365 /* GET POSITION AT HALF TIME IN THE PAST */
366 if (c->velocityInterpLocal) {
2
Assuming the condition is false
3
Taking false branch
367 ierr = DMGetLocalVector(c->velocityDA, &velocityLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),367,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
368 ierr = DMGetLocalVector(c->velocityDA, &velocityLocalOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),368,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
369 ierr = DMGlobalToLocalBegin(c->velocityDA, c->velocity, INSERT_VALUES, velocityLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),369,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
370 ierr = DMGlobalToLocalEnd(c->velocityDA, c->velocity, INSERT_VALUES, velocityLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),370,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
371 ierr = DMGlobalToLocalBegin(c->velocityDA, c->velocityOld, INSERT_VALUES, velocityLocalOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),371,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
372 ierr = DMGlobalToLocalEnd(c->velocityDA, c->velocityOld, INSERT_VALUES, velocityLocalOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),372,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
373 ierr = DMDAVecGetArray(c->velocityDA, velocityLocal, &velocityArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),373,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
374 ierr = DMDAVecGetArray(c->velocityDA, velocityLocalOld, &velocityArrayOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),374,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
375 }
376 ierr = PetscInfo(NULL, "Calculating position at t_{n - 1/2}\n")PetscInfo_Private(__func__,((void*)0),"Calculating position at t_{n - 1/2}\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),376,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
377 for (Qi.j = js; Qi.j < je; Qi.j++) {
4
Loop condition is false. Execution continues on line 394
378 for (Qi.i = is; Qi.i < ie; Qi.i++) {
379 interpIndices[0] = Qi.i;
380 interpIndices[1] = Qi.j;
381 if (c->velocityInterpLocal) {ierr = c->velocityInterpLocal(velocityArray, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),381,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
382 else {ierr = c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),382,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
383 Qi.x = Qi.i - velocityValues[0]*dt/2.0;
384 Qi.y = Qi.j - velocityValues[1]*dt/2.0;
385
386 /* Determine whether the position at t - dt/2 is local */
387 Qi.proc = DMDAGetNeighborRelative(da, Qi.x, Qi.y);
388
389 /* Check for Periodic boundaries and move all periodic points back onto the domain */
390 ierr = DMDAMapCoordsToPeriodicDomain(da,&(Qi.x),&(Qi.y));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),390,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
391 ierr = CharacteristicAddPoint(c, &Qi);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),391,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
392 }
393 }
394 ierr = PetscLogEventEnd(CHARACTERISTIC_QueueSetup,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_QueueSetup].active) ? (*PetscLogPLE)((CHARACTERISTIC_QueueSetup
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),394,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
395
396 ierr = PetscLogEventBegin(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),396,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
397 ierr = CharacteristicSendCoordinatesBegin(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),397,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
398 ierr = PetscLogEventEnd(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),398,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
399
400 ierr = PetscLogEventBegin(CHARACTERISTIC_HalfTimeLocal,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeLocal].active) ? (*PetscLogPLB)((CHARACTERISTIC_HalfTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),400,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
401 /* Calculate velocity at t_n+1/2 (local values) */
402 ierr = PetscInfo(NULL, "Calculating local velocities at t_{n - 1/2}\n")PetscInfo_Private(__func__,((void*)0),"Calculating local velocities at t_{n - 1/2}\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),402,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
403 for (n = 0; n < c->queueSize; n++) {
5
Assuming the condition is false
6
Loop condition is false. Execution continues on line 420
404 Qi = c->queue[n];
405 if (c->neighbors[Qi.proc] == rank) {
406 interpIndices[0] = Qi.x;
407 interpIndices[1] = Qi.y;
408 if (c->velocityInterpLocal) {
409 ierr = c->velocityInterpLocal(velocityArray, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),409,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
410 ierr = c->velocityInterpLocal(velocityArrayOld, interpIndices, c->numVelocityComp, c->velocityComp, velocityValuesOld, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),410,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
411 } else {
412 ierr = c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),412,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
413 ierr = c->velocityInterp(c->velocityOld, interpIndices, c->numVelocityComp, c->velocityComp, velocityValuesOld, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),413,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
414 }
415 Qi.x = 0.5*(velocityValues[0] + velocityValuesOld[0]);
416 Qi.y = 0.5*(velocityValues[1] + velocityValuesOld[1]);
417 }
418 c->queue[n] = Qi;
419 }
420 ierr = PetscLogEventEnd(CHARACTERISTIC_HalfTimeLocal,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeLocal].active) ? (*PetscLogPLE)((CHARACTERISTIC_HalfTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),420,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
421
422 ierr = PetscLogEventBegin(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),422,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
423 ierr = CharacteristicSendCoordinatesEnd(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),423,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
424 ierr = PetscLogEventEnd(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),424,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
425
426
427 /* Calculate velocity at t_n+1/2 (fill remote requests) */
428 ierr = PetscLogEventBegin(CHARACTERISTIC_HalfTimeRemote,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeRemote].active) ? (*PetscLogPLB)((CHARACTERISTIC_HalfTimeRemote
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),428,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
429 ierr = PetscInfo1(NULL, "Calculating %d remote velocities at t_{n - 1/2}\n", c->queueRemoteSize)PetscInfo_Private(__func__,((void*)0),"Calculating %d remote velocities at t_{n - 1/2}\n"
,c->queueRemoteSize)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),429,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
430 for (n = 0; n < c->queueRemoteSize; n++) {
7
Assuming the condition is false
8
Loop condition is false. Execution continues on line 445
431 Qi = c->queueRemote[n];
432 interpIndices[0] = Qi.x;
433 interpIndices[1] = Qi.y;
434 if (c->velocityInterpLocal) {
435 ierr = c->velocityInterpLocal(velocityArray, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),435,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
436 ierr = c->velocityInterpLocal(velocityArrayOld, interpIndices, c->numVelocityComp, c->velocityComp, velocityValuesOld, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),436,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
437 } else {
438 ierr = c->velocityInterp(c->velocity, interpIndices, c->numVelocityComp, c->velocityComp, velocityValues, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),438,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
439 ierr = c->velocityInterp(c->velocityOld, interpIndices, c->numVelocityComp, c->velocityComp, velocityValuesOld, c->velocityCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),439,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
440 }
441 Qi.x = 0.5*(velocityValues[0] + velocityValuesOld[0]);
442 Qi.y = 0.5*(velocityValues[1] + velocityValuesOld[1]);
443 c->queueRemote[n] = Qi;
444 }
445 ierr = PetscLogEventEnd(CHARACTERISTIC_HalfTimeRemote,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeRemote].active) ? (*PetscLogPLE)((CHARACTERISTIC_HalfTimeRemote
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),445,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
446 ierr = PetscLogEventBegin(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),446,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
447 ierr = CharacteristicGetValuesBegin(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),447,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
448 ierr = CharacteristicGetValuesEnd(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),448,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
449 if (c->velocityInterpLocal) {
9
Assuming the condition is false
10
Taking false branch
450 ierr = DMDAVecRestoreArray(c->velocityDA, velocityLocal, &velocityArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),450,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
451 ierr = DMDAVecRestoreArray(c->velocityDA, velocityLocalOld, &velocityArrayOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),451,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
452 ierr = DMRestoreLocalVector(c->velocityDA, &velocityLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),452,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
453 ierr = DMRestoreLocalVector(c->velocityDA, &velocityLocalOld);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),453,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
454 }
455 ierr = PetscLogEventEnd(CHARACTERISTIC_HalfTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_HalfTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_HalfTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),455,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
456
457 /* -----------------------------------------------------------------------
458 PART 2, AT t-dt
459 -----------------------------------------------------------------------*/
460
461 /* GET POSITION AT t_n (local values) */
462 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeLocal,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeLocal].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),462,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
463 ierr = PetscInfo(NULL, "Calculating position at t_{n}\n")PetscInfo_Private(__func__,((void*)0),"Calculating position at t_{n}\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),463,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
464 for (n = 0; n < c->queueSize; n++) {
11
Loop condition is false. Execution continues on line 477
465 Qi = c->queue[n];
466 Qi.x = Qi.i - Qi.x*dt;
467 Qi.y = Qi.j - Qi.y*dt;
468
469 /* Determine whether the position at t-dt is local */
470 Qi.proc = DMDAGetNeighborRelative(da, Qi.x, Qi.y);
471
472 /* Check for Periodic boundaries and move all periodic points back onto the domain */
473 ierr = DMDAMapCoordsToPeriodicDomain(da,&(Qi.x),&(Qi.y));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),473,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
474
475 c->queue[n] = Qi;
476 }
477 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeLocal,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeLocal].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),477,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
478
479 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),479,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
480 ierr = CharacteristicSendCoordinatesBegin(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),480,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
481 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),481,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
482
483 /* GET VALUE AT FULL TIME IN THE PAST (LOCAL REQUESTS) */
484 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeLocal,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeLocal].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),484,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
485 if (c->fieldInterpLocal) {
12
Assuming the condition is false
13
Taking false branch
486 ierr = DMGetLocalVector(c->fieldDA, &fieldLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),486,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
487 ierr = DMGlobalToLocalBegin(c->fieldDA, c->field, INSERT_VALUES, fieldLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),487,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
488 ierr = DMGlobalToLocalEnd(c->fieldDA, c->field, INSERT_VALUES, fieldLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),488,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
489 ierr = DMDAVecGetArray(c->fieldDA, fieldLocal, &fieldArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),489,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
490 }
491 ierr = PetscInfo(NULL, "Calculating local field at t_{n}\n")PetscInfo_Private(__func__,((void*)0),"Calculating local field at t_{n}\n"
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),491,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
492 for (n = 0; n < c->queueSize; n++) {
14
Assuming the condition is true
15
Loop condition is true. Entering loop body
17
Assuming the condition is true
18
Loop condition is true. Entering loop body
20
Assuming the condition is true
21
Loop condition is true. Entering loop body
23
Assuming the condition is false
24
Loop condition is false. Execution continues on line 501
493 if (c->neighbors[c->queue[n].proc] == rank) {
16
Taking false branch
19
Taking false branch
22
Taking false branch
494 interpIndices[0] = c->queue[n].x;
495 interpIndices[1] = c->queue[n].y;
496 if (c->fieldInterpLocal) {ierr = c->fieldInterpLocal(fieldArray, interpIndices, c->numFieldComp, c->fieldComp, fieldValues, c->fieldCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),496,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
497 else {ierr = c->fieldInterp(c->field, interpIndices, c->numFieldComp, c->fieldComp, fieldValues, c->fieldCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),497,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
498 for (comp = 0; comp < c->numFieldComp; comp++) c->queue[n].field[comp] = fieldValues[comp];
499 }
500 }
501 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeLocal,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeLocal].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeLocal
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),501,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
502
503 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),503,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
504 ierr = CharacteristicSendCoordinatesEnd(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),504,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
505 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),505,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
506
507 /* GET VALUE AT FULL TIME IN THE PAST (REMOTE REQUESTS) */
508 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeRemote,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeRemote].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeRemote
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),508,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
509 ierr = PetscInfo1(NULL, "Calculating %d remote field points at t_{n}\n", c->queueRemoteSize)PetscInfo_Private(__func__,((void*)0),"Calculating %d remote field points at t_{n}\n"
,c->queueRemoteSize)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),509,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
510 for (n = 0; n < c->queueRemoteSize; n++) {
25
Assuming the condition is true
26
Loop condition is true. Entering loop body
511 interpIndices[0] = c->queueRemote[n].x;
512 interpIndices[1] = c->queueRemote[n].y;
513
514 /* for debugging purposes */
515 if (1) { /* hacked bounds test...let's do better */
27
Taking true branch
516 PetscScalar im = interpIndices[0]; PetscScalar jm = interpIndices[1];
517
518 if ((im < (PetscScalar) is - 1.) || (im > (PetscScalar) ie) || (jm < (PetscScalar) js - 1.) || (jm > (PetscScalar) je)) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_LIB, "Nonlocal point: (%g,%g)", im, jm)return PetscError(((MPI_Comm)0x44000001),518,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,76,PETSC_ERROR_INITIAL,"Nonlocal point: (%g,%g)",im,jm)
;
28
Taking false branch
519 }
520
521 if (c->fieldInterpLocal) {ierr = c->fieldInterpLocal(fieldArray, interpIndices, c->numFieldComp, c->fieldComp, fieldValues, c->fieldCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),521,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
29
Assuming the condition is true
30
Taking true branch
31
1st function call argument is an uninitialized value
522 else {ierr = c->fieldInterp(c->field, interpIndices, c->numFieldComp, c->fieldComp, fieldValues, c->fieldCtx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),522,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
523 for (comp = 0; comp < c->numFieldComp; comp++) c->queueRemote[n].field[comp] = fieldValues[comp];
524 }
525 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeRemote,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeRemote].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeRemote
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),525,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
526
527 ierr = PetscLogEventBegin(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLB)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),527,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
528 ierr = CharacteristicGetValuesBegin(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),528,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
529 ierr = CharacteristicGetValuesEnd(c);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),529,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
530 if (c->fieldInterpLocal) {
531 ierr = DMDAVecRestoreArray(c->fieldDA, fieldLocal, &fieldArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),531,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
532 ierr = DMRestoreLocalVector(c->fieldDA, &fieldLocal);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),532,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
533 }
534 ierr = PetscLogEventEnd(CHARACTERISTIC_FullTimeExchange,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_FullTimeExchange].active) ? (*PetscLogPLE)((CHARACTERISTIC_FullTimeExchange
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),534,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
535
536 /* Return field of characteristics at t_n-1 */
537 ierr = PetscLogEventBegin(CHARACTERISTIC_DAUpdate,0,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_DAUpdate].active) ? (*PetscLogPLB)((CHARACTERISTIC_DAUpdate
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),537,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
538 ierr = DMDAGetInfo(c->fieldDA,0,0,0,0,0,0,0,&dof,0,0,0,0,0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),538,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
539 ierr = DMDAVecGetArray(c->fieldDA, solution, &solArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),539,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
540 for (n = 0; n < c->queueSize; n++) {
541 Qi = c->queue[n];
542 for (comp = 0; comp < c->numFieldComp; comp++) solArray[Qi.j][Qi.i*dof+c->fieldComp[comp]] = Qi.field[comp];
543 }
544 ierr = DMDAVecRestoreArray(c->fieldDA, solution, &solArray);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),544,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
545 ierr = PetscLogEventEnd(CHARACTERISTIC_DAUpdate,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_DAUpdate].active) ? (*PetscLogPLE)((CHARACTERISTIC_DAUpdate
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),545,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
546 ierr = PetscLogEventEnd(CHARACTERISTIC_Solve,0,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[CHARACTERISTIC_Solve].active) ? (*PetscLogPLE)((CHARACTERISTIC_Solve
),0,(PetscObject)(0),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),546,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
547
548 /* Cleanup */
549 ierr = PetscFree(interpIndices)((*PetscTrFree)((void*)(interpIndices),549,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((interpIndices) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),549,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
550 ierr = PetscFree(velocityValues)((*PetscTrFree)((void*)(velocityValues),550,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((velocityValues) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),550,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
551 ierr = PetscFree(velocityValuesOld)((*PetscTrFree)((void*)(velocityValuesOld),551,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((velocityValuesOld) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),551,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
552 ierr = PetscFree(fieldValues)((*PetscTrFree)((void*)(fieldValues),552,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((fieldValues) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),552,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
553 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
554}
555
556PetscErrorCode CharacteristicSetNeighbors(Characteristic c, PetscInt numNeighbors, PetscMPIInt neighbors[])
557{
558 PetscErrorCode ierr;
559
560 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 560; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
561 c->numNeighbors = numNeighbors;
562 ierr = PetscFree(c->neighbors)((*PetscTrFree)((void*)(c->neighbors),562,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((c->neighbors) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),562,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
563 ierr = PetscMalloc1(numNeighbors, &c->neighbors)PetscMallocA(1,PETSC_FALSE,563,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(numNeighbors)*sizeof(**(&c->neighbors)),(&
c->neighbors))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),563,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
564 ierr = PetscMemcpy(c->neighbors, neighbors, numNeighbors * sizeof(PetscMPIInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),564,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
565 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
566}
567
568PetscErrorCode CharacteristicAddPoint(Characteristic c, CharacteristicPointDA2D *point)
569{
570 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 570; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
571 if (c->queueSize >= c->queueMax) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE, "Exceeeded maximum queue size %d", c->queueMax)return PetscError(((MPI_Comm)0x44000001),571,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,63,PETSC_ERROR_INITIAL,"Exceeeded maximum queue size %d",c->
queueMax)
;
572 c->queue[c->queueSize++] = *point;
573 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
574}
575
576int CharacteristicSendCoordinatesBegin(Characteristic c)
577{
578 PetscMPIInt rank, tag = 121;
579 PetscInt i, n;
580 PetscErrorCode ierr;
581
582 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 582; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
583 ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),583,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
584 ierr = CharacteristicHeapSort(c, c->queue, c->queueSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),584,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
585 ierr = PetscMemzero(c->needCount, c->numNeighbors * sizeof(PetscInt));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),585,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
586 for (i = 0; i < c->queueSize; i++) c->needCount[c->queue[i].proc]++;
587 c->fillCount[0] = 0;
588 for (n = 1; n < c->numNeighbors; n++) {
589 ierr = MPI_Irecv(&(c->fillCount[n]), 1, MPIU_INT, c->neighbors[n], tag, PetscObjectComm((PetscObject)c), &(c->request[n-1]))((petsc_irecv_ct++,0) || PetscMPITypeSize(&(petsc_irecv_len
),(1),(((MPI_Datatype)0x4c000405))) || MPI_Irecv((&(c->
fillCount[n])),(1),(((MPI_Datatype)0x4c000405)),(c->neighbors
[n]),(tag),(PetscObjectComm((PetscObject)c)),(&(c->request
[n-1]))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),589,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
590 }
591 for (n = 1; n < c->numNeighbors; n++) {
592 ierr = MPI_Send(&(c->needCount[n]), 1, MPIU_INT, c->neighbors[n], tag, PetscObjectComm((PetscObject)c))((petsc_send_ct++,0) || PetscMPITypeSize((&petsc_send_len
),(1),(((MPI_Datatype)0x4c000405))) || MPI_Send((&(c->
needCount[n])),(1),(((MPI_Datatype)0x4c000405)),(c->neighbors
[n]),(tag),(PetscObjectComm((PetscObject)c))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),592,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
593 }
594 ierr = MPI_Waitall(c->numNeighbors-1, c->request, c->status)((petsc_wait_all_ct++,petsc_sum_of_waits_ct += (PetscLogDouble
) (c->numNeighbors-1),0) || MPI_Waitall((c->numNeighbors
-1),(c->request),(c->status)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),594,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
595 /* Initialize the remote queue */
596 c->queueLocalMax = c->localOffsets[0] = 0;
597 c->queueRemoteMax = c->remoteOffsets[0] = 0;
598 for (n = 1; n < c->numNeighbors; n++) {
599 c->remoteOffsets[n] = c->queueRemoteMax;
600 c->queueRemoteMax += c->fillCount[n];
601 c->localOffsets[n] = c->queueLocalMax;
602 c->queueLocalMax += c->needCount[n];
603 }
604 /* HACK BEGIN */
605 for (n = 1; n < c->numNeighbors; n++) c->localOffsets[n] += c->needCount[0];
606 c->needCount[0] = 0;
607 /* HACK END */
608 if (c->queueRemoteMax) {
609 ierr = PetscMalloc1(c->queueRemoteMax, &c->queueRemote)PetscMallocA(1,PETSC_FALSE,609,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(c->queueRemoteMax)*sizeof(**(&c->queueRemote
)),(&c->queueRemote))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),609,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
610 } else c->queueRemote = NULL((void*)0);
611 c->queueRemoteSize = c->queueRemoteMax;
612
613 /* Send and Receive requests for values at t_n+1/2, giving the coordinates for interpolation */
614 for (n = 1; n < c->numNeighbors; n++) {
615 ierr = PetscInfo2(NULL, "Receiving %d requests for values from proc %d\n", c->fillCount[n], c->neighbors[n])PetscInfo_Private(__func__,((void*)0),"Receiving %d requests for values from proc %d\n"
,c->fillCount[n],c->neighbors[n])
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),615,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
616 ierr = MPI_Irecv(&(c->queueRemote[c->remoteOffsets[n]]), c->fillCount[n], c->itemType, c->neighbors[n], tag, PetscObjectComm((PetscObject)c), &(c->request[n-1]))((petsc_irecv_ct++,0) || PetscMPITypeSize(&(petsc_irecv_len
),(c->fillCount[n]),(c->itemType)) || MPI_Irecv((&(
c->queueRemote[c->remoteOffsets[n]])),(c->fillCount[
n]),(c->itemType),(c->neighbors[n]),(tag),(PetscObjectComm
((PetscObject)c)),(&(c->request[n-1]))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),616,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
617 }
618 for (n = 1; n < c->numNeighbors; n++) {
619 ierr = PetscInfo2(NULL, "Sending %d requests for values from proc %d\n", c->needCount[n], c->neighbors[n])PetscInfo_Private(__func__,((void*)0),"Sending %d requests for values from proc %d\n"
,c->needCount[n],c->neighbors[n])
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),619,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
620 ierr = MPI_Send(&(c->queue[c->localOffsets[n]]), c->needCount[n], c->itemType, c->neighbors[n], tag, PetscObjectComm((PetscObject)c))((petsc_send_ct++,0) || PetscMPITypeSize((&petsc_send_len
),(c->needCount[n]),(c->itemType)) || MPI_Send((&(c
->queue[c->localOffsets[n]])),(c->needCount[n]),(c->
itemType),(c->neighbors[n]),(tag),(PetscObjectComm((PetscObject
)c))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),620,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
621 }
622 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
623}
624
625PetscErrorCode CharacteristicSendCoordinatesEnd(Characteristic c)
626{
627#if 0
628 PetscMPIInt rank;
629 PetscInt n;
630#endif
631 PetscErrorCode ierr;
632
633 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 633; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
634 ierr = MPI_Waitall(c->numNeighbors-1, c->request, c->status)((petsc_wait_all_ct++,petsc_sum_of_waits_ct += (PetscLogDouble
) (c->numNeighbors-1),0) || MPI_Waitall((c->numNeighbors
-1),(c->request),(c->status)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),634,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
635#if 0
636 ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)c), &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),636,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
637 for (n = 0; n < c->queueRemoteSize; n++) {
638 if (c->neighbors[c->queueRemote[n].proc] == rank) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_PLIB, "This is messed up, n = %d proc = %d", n, c->queueRemote[n].proc)return PetscError(((MPI_Comm)0x44000001),638,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,77,PETSC_ERROR_INITIAL,"This is messed up, n = %d proc = %d"
,n,c->queueRemote[n].proc)
;
639 }
640#endif
641 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
642}
643
644PetscErrorCode CharacteristicGetValuesBegin(Characteristic c)
645{
646 PetscMPIInt tag = 121;
647 PetscInt n;
648 PetscErrorCode ierr;
649
650 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 650; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
651 /* SEND AND RECIEVE FILLED REQUESTS for velocities at t_n+1/2 */
652 for (n = 1; n < c->numNeighbors; n++) {
653 ierr = MPI_Irecv(&(c->queue[c->localOffsets[n]]), c->needCount[n], c->itemType, c->neighbors[n], tag, PetscObjectComm((PetscObject)c), &(c->request[n-1]))((petsc_irecv_ct++,0) || PetscMPITypeSize(&(petsc_irecv_len
),(c->needCount[n]),(c->itemType)) || MPI_Irecv((&(
c->queue[c->localOffsets[n]])),(c->needCount[n]),(c->
itemType),(c->neighbors[n]),(tag),(PetscObjectComm((PetscObject
)c)),(&(c->request[n-1]))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),653,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
654 }
655 for (n = 1; n < c->numNeighbors; n++) {
656 ierr = MPI_Send(&(c->queueRemote[c->remoteOffsets[n]]), c->fillCount[n], c->itemType, c->neighbors[n], tag, PetscObjectComm((PetscObject)c))((petsc_send_ct++,0) || PetscMPITypeSize((&petsc_send_len
),(c->fillCount[n]),(c->itemType)) || MPI_Send((&(c
->queueRemote[c->remoteOffsets[n]])),(c->fillCount[n
]),(c->itemType),(c->neighbors[n]),(tag),(PetscObjectComm
((PetscObject)c))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),656,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
657 }
658 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
659}
660
661PetscErrorCode CharacteristicGetValuesEnd(Characteristic c)
662{
663 PetscErrorCode ierr;
664
665 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 665; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
666 ierr = MPI_Waitall(c->numNeighbors-1, c->request, c->status)((petsc_wait_all_ct++,petsc_sum_of_waits_ct += (PetscLogDouble
) (c->numNeighbors-1),0) || MPI_Waitall((c->numNeighbors
-1),(c->request),(c->status)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),666,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
667 /* Free queue of requests from other procs */
668 ierr = PetscFree(c->queueRemote)((*PetscTrFree)((void*)(c->queueRemote),668,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((c->queueRemote) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),668,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
669 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
670}
671
672/*---------------------------------------------------------------------*/
673/*
674 Based on code from http://linux.wku.edu/~lamonml/algor/sort/heap.html
675*/
676PetscErrorCode CharacteristicHeapSort(Characteristic c, Queue queue, PetscInt size)
677/*---------------------------------------------------------------------*/
678{
679 PetscErrorCode ierr;
680 CharacteristicPointDA2D temp;
681 PetscInt n;
682
683 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 683; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
684 if (0) { /* Check the order of the queue before sorting */
685 ierr = PetscInfo(NULL, "Before Heap sort\n")PetscInfo_Private(__func__,((void*)0),"Before Heap sort\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),685,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
686 for (n=0; n<size; n++) {
687 ierr = PetscInfo2(NULL,"%d %d\n",n,queue[n].proc)PetscInfo_Private(__func__,((void*)0),"%d %d\n",n,queue[n].proc
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),687,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
688 }
689 }
690
691 /* SORTING PHASE */
692 for (n = (size / 2)-1; n >= 0; n--) {
693 ierr = CharacteristicSiftDown(c, queue, n, size-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),693,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; /* Rich had size-1 here, Matt had size*/
694 }
695 for (n = size-1; n >= 1; n--) {
696 temp = queue[0];
697 queue[0] = queue[n];
698 queue[n] = temp;
699 ierr = CharacteristicSiftDown(c, queue, 0, n-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),699,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
700 }
701 if (0) { /* Check the order of the queue after sorting */
702 ierr = PetscInfo(NULL, "Avter Heap sort\n")PetscInfo_Private(__func__,((void*)0),"Avter Heap sort\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),702,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
703 for (n=0; n<size; n++) {
704 ierr = PetscInfo2(NULL,"%d %d\n",n,queue[n].proc)PetscInfo_Private(__func__,((void*)0),"%d %d\n",n,queue[n].proc
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),704,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
705 }
706 }
707 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
708}
709
710/*---------------------------------------------------------------------*/
711/*
712 Based on code from http://linux.wku.edu/~lamonml/algor/sort/heap.html
713*/
714PetscErrorCode CharacteristicSiftDown(Characteristic c, Queue queue, PetscInt root, PetscInt bottom)
715/*---------------------------------------------------------------------*/
716{
717 PetscBool done = PETSC_FALSE;
718 PetscInt maxChild;
719 CharacteristicPointDA2D temp;
720
721 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 721; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
722 while ((root*2 <= bottom) && (!done)) {
723 if (root*2 == bottom) maxChild = root * 2;
724 else if (queue[root*2].proc > queue[root*2+1].proc) maxChild = root * 2;
725 else maxChild = root * 2 + 1;
726
727 if (queue[root].proc < queue[maxChild].proc) {
728 temp = queue[root];
729 queue[root] = queue[maxChild];
730 queue[maxChild] = temp;
731 root = maxChild;
732 } else done = PETSC_TRUE;
733 }
734 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
735}
736
737/* [center, left, top-left, top, top-right, right, bottom-right, bottom, bottom-left] */
738PetscErrorCode DMDAGetNeighborsRank(DM da, PetscMPIInt neighbors[])
739{
740 DMBoundaryType bx, by;
741 PetscBool IPeriodic = PETSC_FALSE, JPeriodic = PETSC_FALSE;
742 MPI_Comm comm;
743 PetscMPIInt rank;
744 PetscInt **procs,pi,pj,pim,pip,pjm,pjp,PI,PJ;
745 PetscErrorCode ierr;
746
747 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
; petscstack->line[petscstack->currentsize] = 747; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
748 ierr = PetscObjectGetComm((PetscObject) da, &comm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),748,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
749 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),749,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
750 ierr = DMDAGetInfo(da, 0, 0, 0, 0, &PI,&PJ, 0, 0, 0, &bx, &by,0, 0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),750,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
751
752 if (bx == DM_BOUNDARY_PERIODIC) IPeriodic = PETSC_TRUE;
753 if (by == DM_BOUNDARY_PERIODIC) JPeriodic = PETSC_TRUE;
754
755 neighbors[0] = rank;
756 rank = 0;
757 ierr = PetscMalloc1(PJ,&procs)PetscMallocA(1,PETSC_FALSE,757,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(PJ)*sizeof(**(&procs)),(&procs))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),757,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
758 for (pj=0; pj<PJ; pj++) {
759 ierr = PetscMalloc1(PI,&(procs[pj]))PetscMallocA(1,PETSC_FALSE,759,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,(size_t)(PI)*sizeof(**(&(procs[pj]))),(&(procs[pj]))
)
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),759,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
760 for (pi=0; pi<PI; pi++) {
761 procs[pj][pi] = rank;
762 rank++;
763 }
764 }
765
766 pi = neighbors[0] % PI;
767 pj = neighbors[0] / PI;
768 pim = pi-1; if (pim<0) pim=PI-1;
769 pip = (pi+1)%PI;
770 pjm = pj-1; if (pjm<0) pjm=PJ-1;
771 pjp = (pj+1)%PJ;
772
773 neighbors[1] = procs[pj] [pim];
774 neighbors[2] = procs[pjp][pim];
775 neighbors[3] = procs[pjp][pi];
776 neighbors[4] = procs[pjp][pip];
777 neighbors[5] = procs[pj] [pip];
778 neighbors[6] = procs[pjm][pip];
779 neighbors[7] = procs[pjm][pi];
780 neighbors[8] = procs[pjm][pim];
781
782 if (!IPeriodic) {
783 if (pi==0) neighbors[1]=neighbors[2]=neighbors[8]=neighbors[0];
784 if (pi==PI-1) neighbors[4]=neighbors[5]=neighbors[6]=neighbors[0];
785 }
786
787 if (!JPeriodic) {
788 if (pj==0) neighbors[6]=neighbors[7]=neighbors[8]=neighbors[0];
789 if (pj==PJ-1) neighbors[2]=neighbors[3]=neighbors[4]=neighbors[0];
790 }
791
792 for (pj = 0; pj < PJ; pj++) {
793 ierr = PetscFree(procs[pj])((*PetscTrFree)((void*)(procs[pj]),793,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((procs[pj]) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),793,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
794 }
795 ierr = PetscFree(procs)((*PetscTrFree)((void*)(procs),795,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
) || ((procs) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),795,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
796 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
797}
798
799/*
800 SUBDOMAIN NEIGHBORHOOD PROCESS MAP:
801 2 | 3 | 4
802 __|___|__
803 1 | 0 | 5
804 __|___|__
805 8 | 7 | 6
806 | |
807*/
808PetscInt DMDAGetNeighborRelative(DM da, PetscReal ir, PetscReal jr)
809{
810 DMDALocalInfo info;
811 PetscReal is,ie,js,je;
812 PetscErrorCode ierr;
813
814 ierr = DMDAGetLocalInfo(da, &info);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),814,__func__,"/sandbox/petsc/petsc.next-tmp/src/ts/characteristic/interface/characteristic.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
815 is = (PetscReal) info.xs - 0.5; ie = (PetscReal) info.xs + info.xm - 0.5;
816 js = (PetscReal) info.ys - 0.5; je = (PetscReal) info.ys + info.ym - 0.5;
817
818 if (ir >= is && ir <= ie) { /* center column */
819 if (jr >= js && jr <= je) return 0;
820 else if (jr < js) return 7;
821 else return 3;
822 } else if (ir < is) { /* left column */
823 if (jr >= js && jr <= je) return 1;
824 else if (jr < js) return 8;
825 else return 2;
826 } else { /* right column */
827 if (jr >= js && jr <= je) return 5;
828 else if (jr < js) return 6;
829 else return 4;
830 }
831}