16528b96dSMatthew G. Knepley #include <petsc/private/petscdsimpl.h> /*I "petscds.h" I*/ 26528b96dSMatthew G. Knepley 36528b96dSMatthew G. Knepley PetscClassId PETSCWEAKFORM_CLASSID = 0; 46528b96dSMatthew G. Knepley 56528b96dSMatthew G. Knepley static PetscErrorCode PetscChunkBufferCreate(size_t unitbytes, size_t expected, PetscChunkBuffer **buffer) 66528b96dSMatthew G. Knepley { 76528b96dSMatthew G. Knepley PetscErrorCode ierr; 86528b96dSMatthew G. Knepley 96528b96dSMatthew G. Knepley PetscFunctionBegin; 106528b96dSMatthew G. Knepley ierr = PetscNew(buffer);CHKERRQ(ierr); 116528b96dSMatthew G. Knepley ierr = PetscCalloc1(expected*unitbytes, &(*buffer)->array);CHKERRQ(ierr); 126528b96dSMatthew G. Knepley (*buffer)->size = expected; 136528b96dSMatthew G. Knepley (*buffer)->unitbytes = unitbytes; 146528b96dSMatthew G. Knepley (*buffer)->alloc = expected*unitbytes; 156528b96dSMatthew G. Knepley PetscFunctionReturn(0); 166528b96dSMatthew G. Knepley } 176528b96dSMatthew G. Knepley 18*45480ffeSMatthew G. Knepley static PetscErrorCode PetscChunkBufferDuplicate(PetscChunkBuffer *buffer, PetscChunkBuffer **bufferNew) 19*45480ffeSMatthew G. Knepley { 20*45480ffeSMatthew G. Knepley PetscErrorCode ierr; 21*45480ffeSMatthew G. Knepley 22*45480ffeSMatthew G. Knepley PetscFunctionBegin; 23*45480ffeSMatthew G. Knepley ierr = PetscNew(bufferNew);CHKERRQ(ierr); 24*45480ffeSMatthew G. Knepley ierr = PetscCalloc1(buffer->size*buffer->unitbytes, &(*bufferNew)->array);CHKERRQ(ierr); 25*45480ffeSMatthew G. Knepley ierr = PetscMemcpy((*bufferNew)->array, buffer->array, buffer->size*buffer->unitbytes);CHKERRQ(ierr); 26*45480ffeSMatthew G. Knepley (*bufferNew)->size = buffer->size; 27*45480ffeSMatthew G. Knepley (*bufferNew)->unitbytes = buffer->unitbytes; 28*45480ffeSMatthew G. Knepley (*bufferNew)->alloc = buffer->size*buffer->unitbytes; 29*45480ffeSMatthew G. Knepley PetscFunctionReturn(0); 30*45480ffeSMatthew G. Knepley } 31*45480ffeSMatthew G. Knepley 326528b96dSMatthew G. Knepley static PetscErrorCode PetscChunkBufferDestroy(PetscChunkBuffer **buffer) 336528b96dSMatthew G. Knepley { 346528b96dSMatthew G. Knepley PetscErrorCode ierr; 356528b96dSMatthew G. Knepley 366528b96dSMatthew G. Knepley PetscFunctionBegin; 376528b96dSMatthew G. Knepley ierr = PetscFree((*buffer)->array);CHKERRQ(ierr); 386528b96dSMatthew G. Knepley ierr = PetscFree(*buffer);CHKERRQ(ierr); 396528b96dSMatthew G. Knepley PetscFunctionReturn(0); 406528b96dSMatthew G. Knepley } 416528b96dSMatthew G. Knepley 426528b96dSMatthew G. Knepley static PetscErrorCode PetscChunkBufferCreateChunk(PetscChunkBuffer *buffer, PetscInt size, PetscChunk *chunk) 436528b96dSMatthew G. Knepley { 446528b96dSMatthew G. Knepley PetscErrorCode ierr; 456528b96dSMatthew G. Knepley 466528b96dSMatthew G. Knepley PetscFunctionBegin; 476528b96dSMatthew G. Knepley if ((buffer->size + size)*buffer->unitbytes > buffer->alloc) { 486528b96dSMatthew G. Knepley char *tmp; 496528b96dSMatthew G. Knepley 506528b96dSMatthew G. Knepley if (!buffer->alloc) buffer->alloc = (buffer->size + size)*buffer->unitbytes; 516528b96dSMatthew G. Knepley while ((buffer->size + size)*buffer->unitbytes > buffer->alloc) buffer->alloc *= 2; 526528b96dSMatthew G. Knepley ierr = PetscMalloc(buffer->alloc, &tmp);CHKERRQ(ierr); 536528b96dSMatthew G. Knepley ierr = PetscMemcpy(tmp, buffer->array, buffer->size*buffer->unitbytes);CHKERRQ(ierr); 546528b96dSMatthew G. Knepley ierr = PetscFree(buffer->array);CHKERRQ(ierr); 556528b96dSMatthew G. Knepley buffer->array = tmp; 566528b96dSMatthew G. Knepley } 572baeeceeSMatthew G. Knepley chunk->start = buffer->size*buffer->unitbytes; 586528b96dSMatthew G. Knepley chunk->size = size; 596528b96dSMatthew G. Knepley chunk->reserved = size; 606528b96dSMatthew G. Knepley buffer->size += size; 616528b96dSMatthew G. Knepley PetscFunctionReturn(0); 626528b96dSMatthew G. Knepley } 636528b96dSMatthew G. Knepley 646528b96dSMatthew G. Knepley static PetscErrorCode PetscChunkBufferEnlargeChunk(PetscChunkBuffer *buffer, PetscInt size, PetscChunk *chunk) 656528b96dSMatthew G. Knepley { 666528b96dSMatthew G. Knepley size_t siz = size; 676528b96dSMatthew G. Knepley PetscErrorCode ierr; 686528b96dSMatthew G. Knepley 696528b96dSMatthew G. Knepley PetscFunctionBegin; 706528b96dSMatthew G. Knepley if (chunk->size + size > chunk->reserved) { 716528b96dSMatthew G. Knepley PetscChunk newchunk; 726528b96dSMatthew G. Knepley PetscInt reserved = chunk->size; 736528b96dSMatthew G. Knepley 746528b96dSMatthew G. Knepley /* TODO Here if we had a chunk list, we could update them all to reclaim unused space */ 756528b96dSMatthew G. Knepley while (reserved < chunk->size+size) reserved *= 2; 766528b96dSMatthew G. Knepley ierr = PetscChunkBufferCreateChunk(buffer, (size_t) reserved, &newchunk);CHKERRQ(ierr); 776528b96dSMatthew G. Knepley newchunk.size = chunk->size+size; 786528b96dSMatthew G. Knepley ierr = PetscMemcpy(&buffer->array[newchunk.start], &buffer->array[chunk->start], chunk->size * buffer->unitbytes);CHKERRQ(ierr); 796528b96dSMatthew G. Knepley *chunk = newchunk; 806528b96dSMatthew G. Knepley } else { 816528b96dSMatthew G. Knepley chunk->size += siz; 826528b96dSMatthew G. Knepley } 836528b96dSMatthew G. Knepley PetscFunctionReturn(0); 846528b96dSMatthew G. Knepley } 856528b96dSMatthew G. Knepley 866528b96dSMatthew G. Knepley /*@C 876528b96dSMatthew G. Knepley PetscHashFormKeySort - Sorts an array of PetscHashFormKey in place in increasing order. 886528b96dSMatthew G. Knepley 896528b96dSMatthew G. Knepley Not Collective 906528b96dSMatthew G. Knepley 916528b96dSMatthew G. Knepley Input Parameters: 926528b96dSMatthew G. Knepley + n - number of values 936528b96dSMatthew G. Knepley - X - array of PetscHashFormKey 946528b96dSMatthew G. Knepley 956528b96dSMatthew G. Knepley Level: intermediate 966528b96dSMatthew G. Knepley 976528b96dSMatthew G. Knepley .seealso: PetscIntSortSemiOrdered(), PetscSortInt() 986528b96dSMatthew G. Knepley @*/ 996528b96dSMatthew G. Knepley PetscErrorCode PetscHashFormKeySort(PetscInt n, PetscHashFormKey arr[]) 1006528b96dSMatthew G. Knepley { 1016528b96dSMatthew G. Knepley PetscErrorCode ierr; 1026528b96dSMatthew G. Knepley 1036528b96dSMatthew G. Knepley PetscFunctionBegin; 1046528b96dSMatthew G. Knepley if (n <= 1) PetscFunctionReturn(0); 1056528b96dSMatthew G. Knepley PetscValidPointer(arr, 2); 1066528b96dSMatthew G. Knepley ierr = PetscTimSort(n, arr, sizeof(PetscHashFormKey), Compare_PetscHashFormKey_Private, NULL);CHKERRQ(ierr); 1076528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1086528b96dSMatthew G. Knepley } 1096528b96dSMatthew G. Knepley 1106528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetFunction_Private(PetscWeakForm wf, PetscHMapForm ht, DMLabel label, PetscInt value, PetscInt f, PetscInt *n, void (***func)()) 1116528b96dSMatthew G. Knepley { 1126528b96dSMatthew G. Knepley PetscHashFormKey key; 1136528b96dSMatthew G. Knepley PetscChunk chunk; 1146528b96dSMatthew G. Knepley PetscErrorCode ierr; 1156528b96dSMatthew G. Knepley 1166528b96dSMatthew G. Knepley PetscFunctionBegin; 1176528b96dSMatthew G. Knepley key.label = label; key.value = value; key.field = f; 1186528b96dSMatthew G. Knepley ierr = PetscHMapFormGet(ht, key, &chunk);CHKERRQ(ierr); 1196528b96dSMatthew G. Knepley if (chunk.size < 0) {*n = 0; *func = NULL;} 1202baeeceeSMatthew G. Knepley else {*n = chunk.size; *func = (void (**)()) &wf->funcs->array[chunk.start];} 1216528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1226528b96dSMatthew G. Knepley } 1236528b96dSMatthew G. Knepley 1246528b96dSMatthew G. Knepley /* A NULL argument for func causes this to clear the key */ 1256528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetFunction_Private(PetscWeakForm wf, PetscHMapForm ht, DMLabel label, PetscInt value, PetscInt f, PetscInt n, void (**func)()) 1266528b96dSMatthew G. Knepley { 1276528b96dSMatthew G. Knepley PetscHashFormKey key; 1286528b96dSMatthew G. Knepley PetscChunk chunk; 1296528b96dSMatthew G. Knepley PetscInt i; 1306528b96dSMatthew G. Knepley PetscErrorCode ierr; 1316528b96dSMatthew G. Knepley 1326528b96dSMatthew G. Knepley PetscFunctionBegin; 1336528b96dSMatthew G. Knepley key.label = label; key.value = value; key.field = f; 1346528b96dSMatthew G. Knepley if (!func) { 1356528b96dSMatthew G. Knepley ierr = PetscHMapFormDel(ht, key);CHKERRQ(ierr); 1366528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1376528b96dSMatthew G. Knepley } else { 1386528b96dSMatthew G. Knepley ierr = PetscHMapFormGet(ht, key, &chunk);CHKERRQ(ierr); 1396528b96dSMatthew G. Knepley } 1406528b96dSMatthew G. Knepley if (chunk.size < 0) { 1416528b96dSMatthew G. Knepley ierr = PetscChunkBufferCreateChunk(wf->funcs, n, &chunk);CHKERRQ(ierr); 1426528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 1436528b96dSMatthew G. Knepley } else if (chunk.size <= n) { 1446528b96dSMatthew G. Knepley ierr = PetscChunkBufferEnlargeChunk(wf->funcs, n - chunk.size, &chunk);CHKERRQ(ierr); 1456528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 1466528b96dSMatthew G. Knepley } 1472baeeceeSMatthew G. Knepley for (i = 0; i < n; ++i) ((void (**)()) &wf->funcs->array[chunk.start])[i] = func[i]; 1486528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1496528b96dSMatthew G. Knepley } 1506528b96dSMatthew G. Knepley 1516528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddFunction_Private(PetscWeakForm wf, PetscHMapForm ht, DMLabel label, PetscInt value, PetscInt f, void (*func)()) 1526528b96dSMatthew G. Knepley { 1536528b96dSMatthew G. Knepley PetscHashFormKey key; 1546528b96dSMatthew G. Knepley PetscChunk chunk; 1556528b96dSMatthew G. Knepley PetscErrorCode ierr; 1566528b96dSMatthew G. Knepley 1576528b96dSMatthew G. Knepley PetscFunctionBegin; 1586528b96dSMatthew G. Knepley if (!func) PetscFunctionReturn(0); 1596528b96dSMatthew G. Knepley key.label = label; key.value = value; key.field = f; 1606528b96dSMatthew G. Knepley ierr = PetscHMapFormGet(ht, key, &chunk);CHKERRQ(ierr); 1616528b96dSMatthew G. Knepley if (chunk.size < 0) { 1626528b96dSMatthew G. Knepley ierr = PetscChunkBufferCreateChunk(wf->funcs, 1, &chunk);CHKERRQ(ierr); 1636528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 1642baeeceeSMatthew G. Knepley ((void (**)()) &wf->funcs->array[chunk.start])[0] = func; 1656528b96dSMatthew G. Knepley } else { 1666528b96dSMatthew G. Knepley ierr = PetscChunkBufferEnlargeChunk(wf->funcs, 1, &chunk);CHKERRQ(ierr); 1676528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 1682baeeceeSMatthew G. Knepley ((void (**)()) &wf->funcs->array[chunk.start])[chunk.size-1] = func; 1696528b96dSMatthew G. Knepley } 1706528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1716528b96dSMatthew G. Knepley } 1726528b96dSMatthew G. Knepley 1736528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetIndexFunction_Private(PetscWeakForm wf, PetscHMapForm ht, DMLabel label, PetscInt value, PetscInt f, PetscInt ind, void (**func)()) 1746528b96dSMatthew G. Knepley { 1756528b96dSMatthew G. Knepley PetscHashFormKey key; 1766528b96dSMatthew G. Knepley PetscChunk chunk; 1776528b96dSMatthew G. Knepley PetscErrorCode ierr; 1786528b96dSMatthew G. Knepley 1796528b96dSMatthew G. Knepley PetscFunctionBegin; 1806528b96dSMatthew G. Knepley key.label = label; key.value = value; key.field = f; 1816528b96dSMatthew G. Knepley ierr = PetscHMapFormGet(ht, key, &chunk);CHKERRQ(ierr); 1826528b96dSMatthew G. Knepley if (chunk.size < 0) {*func = NULL;} 1836528b96dSMatthew G. Knepley else { 1846528b96dSMatthew G. Knepley if (ind >= chunk.size) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Index %D not in [0, %D)", ind, chunk.size); 1852baeeceeSMatthew G. Knepley *func = ((void (**)()) &wf->funcs->array[chunk.start])[ind]; 1866528b96dSMatthew G. Knepley } 1876528b96dSMatthew G. Knepley PetscFunctionReturn(0); 1886528b96dSMatthew G. Knepley } 1896528b96dSMatthew G. Knepley 1906528b96dSMatthew G. Knepley /* A NULL argument for func causes this to clear the slot, and if there is nothing else, clear the key */ 1916528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexFunction_Private(PetscWeakForm wf, PetscHMapForm ht, DMLabel label, PetscInt value, PetscInt f, PetscInt ind, void (*func)()) 1926528b96dSMatthew G. Knepley { 1936528b96dSMatthew G. Knepley PetscHashFormKey key; 1946528b96dSMatthew G. Knepley PetscChunk chunk; 1956528b96dSMatthew G. Knepley PetscErrorCode ierr; 1966528b96dSMatthew G. Knepley 1976528b96dSMatthew G. Knepley PetscFunctionBegin; 1986528b96dSMatthew G. Knepley key.label = label; key.value = value; key.field = f; 1996528b96dSMatthew G. Knepley ierr = PetscHMapFormGet(ht, key, &chunk);CHKERRQ(ierr); 2006528b96dSMatthew G. Knepley if (chunk.size < 0) { 2016528b96dSMatthew G. Knepley if (!func) PetscFunctionReturn(0); 2026528b96dSMatthew G. Knepley ierr = PetscChunkBufferCreateChunk(wf->funcs, ind+1, &chunk);CHKERRQ(ierr); 2036528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 2046528b96dSMatthew G. Knepley } else if (!func && !ind && chunk.size == 1) { 2056528b96dSMatthew G. Knepley ierr = PetscHMapFormDel(ht, key);CHKERRQ(ierr); 2066528b96dSMatthew G. Knepley PetscFunctionReturn(0); 2076528b96dSMatthew G. Knepley } else if (chunk.size <= ind) { 2086528b96dSMatthew G. Knepley ierr = PetscChunkBufferEnlargeChunk(wf->funcs, ind - chunk.size + 1, &chunk);CHKERRQ(ierr); 2096528b96dSMatthew G. Knepley ierr = PetscHMapFormSet(ht, key, chunk);CHKERRQ(ierr); 2106528b96dSMatthew G. Knepley } 2112baeeceeSMatthew G. Knepley ((void (**)()) &wf->funcs->array[chunk.start])[ind] = func; 2126528b96dSMatthew G. Knepley PetscFunctionReturn(0); 2136528b96dSMatthew G. Knepley } 2146528b96dSMatthew G. Knepley 215*45480ffeSMatthew G. Knepley /*@ 216*45480ffeSMatthew G. Knepley PetscWeakFormCopy - Copy the pointwise functions to another PetscWeakForm 217*45480ffeSMatthew G. Knepley 218*45480ffeSMatthew G. Knepley Not Collective 219*45480ffeSMatthew G. Knepley 220*45480ffeSMatthew G. Knepley Input Parameter: 221*45480ffeSMatthew G. Knepley . wf - The original PetscWeakForm 222*45480ffeSMatthew G. Knepley 223*45480ffeSMatthew G. Knepley Output Parameter: 224*45480ffeSMatthew G. Knepley . wfNew - The copy PetscWeakForm 225*45480ffeSMatthew G. Knepley 226*45480ffeSMatthew G. Knepley Level: intermediate 227*45480ffeSMatthew G. Knepley 228*45480ffeSMatthew G. Knepley .seealso: PetscWeakFormCreate(), PetscWeakFormDestroy() 229*45480ffeSMatthew G. Knepley @*/ 230*45480ffeSMatthew G. Knepley PetscErrorCode PetscWeakFormCopy(PetscWeakForm wf, PetscWeakForm wfNew) 231*45480ffeSMatthew G. Knepley { 232*45480ffeSMatthew G. Knepley PetscErrorCode ierr; 233*45480ffeSMatthew G. Knepley 234*45480ffeSMatthew G. Knepley PetscFunctionBegin; 235*45480ffeSMatthew G. Knepley wfNew->Nf = wf->Nf; 236*45480ffeSMatthew G. Knepley ierr = PetscChunkBufferDestroy(&wfNew->funcs);CHKERRQ(ierr); 237*45480ffeSMatthew G. Knepley ierr = PetscChunkBufferDuplicate(wf->funcs, &wfNew->funcs);CHKERRQ(ierr); 238*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->obj);CHKERRQ(ierr); 239*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->obj, &wfNew->obj);CHKERRQ(ierr); 240*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->f0);CHKERRQ(ierr); 241*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->f0, &wfNew->f0);CHKERRQ(ierr); 242*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->f1);CHKERRQ(ierr); 243*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->f1, &wfNew->f1);CHKERRQ(ierr); 244*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->g0);CHKERRQ(ierr); 245*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->g0, &wfNew->g0);CHKERRQ(ierr); 246*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->g1);CHKERRQ(ierr); 247*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->g1, &wfNew->g1);CHKERRQ(ierr); 248*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->g2);CHKERRQ(ierr); 249*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->g2, &wfNew->g2);CHKERRQ(ierr); 250*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->g3);CHKERRQ(ierr); 251*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->g3, &wfNew->g3);CHKERRQ(ierr); 252*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gp0);CHKERRQ(ierr); 253*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gp0, &wfNew->gp0);CHKERRQ(ierr); 254*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gp1);CHKERRQ(ierr); 255*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gp1, &wfNew->gp1);CHKERRQ(ierr); 256*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gp2);CHKERRQ(ierr); 257*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gp2, &wfNew->gp2);CHKERRQ(ierr); 258*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gp3);CHKERRQ(ierr); 259*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gp3, &wfNew->gp3);CHKERRQ(ierr); 260*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gt0);CHKERRQ(ierr); 261*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gt0, &wfNew->gt0);CHKERRQ(ierr); 262*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gt1);CHKERRQ(ierr); 263*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gt1, &wfNew->gt1);CHKERRQ(ierr); 264*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gt2);CHKERRQ(ierr); 265*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gt2, &wfNew->gt2);CHKERRQ(ierr); 266*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->gt3);CHKERRQ(ierr); 267*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->gt3, &wfNew->gt3);CHKERRQ(ierr); 268*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdf0);CHKERRQ(ierr); 269*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdf0, &wfNew->bdf0);CHKERRQ(ierr); 270*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdf1);CHKERRQ(ierr); 271*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdf1, &wfNew->bdf1);CHKERRQ(ierr); 272*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdg0);CHKERRQ(ierr); 273*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdg0, &wfNew->bdg0);CHKERRQ(ierr); 274*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdg1);CHKERRQ(ierr); 275*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdg1, &wfNew->bdg1);CHKERRQ(ierr); 276*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdg2);CHKERRQ(ierr); 277*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdg2, &wfNew->bdg2);CHKERRQ(ierr); 278*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdg3);CHKERRQ(ierr); 279*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdg3, &wfNew->bdg3);CHKERRQ(ierr); 280*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdgp0);CHKERRQ(ierr); 281*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdgp0, &wfNew->bdgp0);CHKERRQ(ierr); 282*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdgp1);CHKERRQ(ierr); 283*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdgp1, &wfNew->bdgp1);CHKERRQ(ierr); 284*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdgp2);CHKERRQ(ierr); 285*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdgp2, &wfNew->bdgp2);CHKERRQ(ierr); 286*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->bdgp3);CHKERRQ(ierr); 287*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->bdgp3, &wfNew->bdgp3);CHKERRQ(ierr); 288*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDestroy(&wfNew->r);CHKERRQ(ierr); 289*45480ffeSMatthew G. Knepley ierr = PetscHMapFormDuplicate(wf->r, &wfNew->r);CHKERRQ(ierr); 290*45480ffeSMatthew G. Knepley PetscFunctionReturn(0); 291*45480ffeSMatthew G. Knepley } 292*45480ffeSMatthew G. Knepley 293*45480ffeSMatthew G. Knepley static PetscErrorCode PetscWeakFormRewriteKeys_Internal(PetscWeakForm wf, PetscHMapForm hmap, DMLabel label, PetscInt Nv, const PetscInt values[]) 294*45480ffeSMatthew G. Knepley { 295*45480ffeSMatthew G. Knepley PetscHashFormKey *keys; 296*45480ffeSMatthew G. Knepley PetscInt n, i, v, off = 0; 297*45480ffeSMatthew G. Knepley PetscErrorCode ierr; 298*45480ffeSMatthew G. Knepley 299*45480ffeSMatthew G. Knepley PetscFunctionBegin; 300*45480ffeSMatthew G. Knepley ierr = PetscHMapFormGetSize(hmap, &n);CHKERRQ(ierr); 301*45480ffeSMatthew G. Knepley ierr = PetscMalloc1(n, &keys);CHKERRQ(ierr); 302*45480ffeSMatthew G. Knepley ierr = PetscHMapFormGetKeys(hmap, &off, keys);CHKERRQ(ierr); 303*45480ffeSMatthew G. Knepley for (i = 0; i < n; ++i) { 304*45480ffeSMatthew G. Knepley if (keys[i].label == label) { 305*45480ffeSMatthew G. Knepley PetscBool clear = PETSC_TRUE; 306*45480ffeSMatthew G. Knepley void (**funcs)(); 307*45480ffeSMatthew G. Knepley PetscInt Nf; 308*45480ffeSMatthew G. Knepley 309*45480ffeSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, hmap, keys[i].label, keys[i].value, keys[i].field, &Nf, &funcs);CHKERRQ(ierr); 310*45480ffeSMatthew G. Knepley for (v = 0; v < Nv; ++v) { 311*45480ffeSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, hmap, keys[i].label, values[v], keys[i].field, Nf, funcs);CHKERRQ(ierr); 312*45480ffeSMatthew G. Knepley if (values[v] == keys[i].value) clear = PETSC_FALSE; 313*45480ffeSMatthew G. Knepley } 314*45480ffeSMatthew G. Knepley if (clear) {ierr = PetscWeakFormSetFunction_Private(wf, hmap, keys[i].label, keys[i].value, keys[i].field, 0, NULL);CHKERRQ(ierr);} 315*45480ffeSMatthew G. Knepley } 316*45480ffeSMatthew G. Knepley } 317*45480ffeSMatthew G. Knepley ierr = PetscFree(keys);CHKERRQ(ierr); 318*45480ffeSMatthew G. Knepley PetscFunctionReturn(0); 319*45480ffeSMatthew G. Knepley } 320*45480ffeSMatthew G. Knepley 321*45480ffeSMatthew G. Knepley /*@C 322*45480ffeSMatthew G. Knepley PetscWeakFormRewriteKeys - Change any key on the given label to use the new set of label values 323*45480ffeSMatthew G. Knepley 324*45480ffeSMatthew G. Knepley Not Collective 325*45480ffeSMatthew G. Knepley 326*45480ffeSMatthew G. Knepley Input Parameters: 327*45480ffeSMatthew G. Knepley + wf - The original PetscWeakForm 328*45480ffeSMatthew G. Knepley . label - The label to change keys for 329*45480ffeSMatthew G. Knepley . Nv - The number of new label values 330*45480ffeSMatthew G. Knepley - values - The set of new values to relabel keys with 331*45480ffeSMatthew G. Knepley 332*45480ffeSMatthew G. Knepley Note: This is used internally when boundary label values are specified from the command line. 333*45480ffeSMatthew G. Knepley 334*45480ffeSMatthew G. Knepley Level: intermediate 335*45480ffeSMatthew G. Knepley 336*45480ffeSMatthew G. Knepley .seealso: PetscWeakFormCreate(), PetscWeakFormDestroy() 337*45480ffeSMatthew G. Knepley @*/ 338*45480ffeSMatthew G. Knepley PetscErrorCode PetscWeakFormRewriteKeys(PetscWeakForm wf, DMLabel label, PetscInt Nv, const PetscInt values[]) 339*45480ffeSMatthew G. Knepley { 340*45480ffeSMatthew G. Knepley PetscErrorCode ierr; 341*45480ffeSMatthew G. Knepley 342*45480ffeSMatthew G. Knepley PetscFunctionBegin; 343*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->obj, label, Nv, values);CHKERRQ(ierr); 344*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->f0, label, Nv, values);CHKERRQ(ierr); 345*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->f1, label, Nv, values);CHKERRQ(ierr); 346*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->g0, label, Nv, values);CHKERRQ(ierr); 347*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->g1, label, Nv, values);CHKERRQ(ierr); 348*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->g2, label, Nv, values);CHKERRQ(ierr); 349*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->g3, label, Nv, values);CHKERRQ(ierr); 350*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gp0, label, Nv, values);CHKERRQ(ierr); 351*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gp1, label, Nv, values);CHKERRQ(ierr); 352*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gp2, label, Nv, values);CHKERRQ(ierr); 353*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gp3, label, Nv, values);CHKERRQ(ierr); 354*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gt0, label, Nv, values);CHKERRQ(ierr); 355*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gt1, label, Nv, values);CHKERRQ(ierr); 356*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gt2, label, Nv, values);CHKERRQ(ierr); 357*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->gt3, label, Nv, values);CHKERRQ(ierr); 358*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdf0, label, Nv, values);CHKERRQ(ierr); 359*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdf1, label, Nv, values);CHKERRQ(ierr); 360*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdg0, label, Nv, values);CHKERRQ(ierr); 361*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdg1, label, Nv, values);CHKERRQ(ierr); 362*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdg2, label, Nv, values);CHKERRQ(ierr); 363*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdg3, label, Nv, values);CHKERRQ(ierr); 364*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdgp0, label, Nv, values);CHKERRQ(ierr); 365*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdgp1, label, Nv, values);CHKERRQ(ierr); 366*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdgp2, label, Nv, values);CHKERRQ(ierr); 367*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->bdgp3, label, Nv, values);CHKERRQ(ierr); 368*45480ffeSMatthew G. Knepley ierr = PetscWeakFormRewriteKeys_Internal(wf, wf->r, label, Nv, values);CHKERRQ(ierr); 369*45480ffeSMatthew G. Knepley PetscFunctionReturn(0); 370*45480ffeSMatthew G. Knepley } 371*45480ffeSMatthew G. Knepley 3726528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetObjective(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt *n, 3736528b96dSMatthew G. Knepley void (***obj)(PetscInt, PetscInt, PetscInt, 3746528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 3756528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 3766528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 3776528b96dSMatthew G. Knepley { 3786528b96dSMatthew G. Knepley PetscErrorCode ierr; 3796528b96dSMatthew G. Knepley 3806528b96dSMatthew G. Knepley PetscFunctionBegin; 3816528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->obj, label, val, f, n, (void (***)(void)) obj);CHKERRQ(ierr); 3826528b96dSMatthew G. Knepley PetscFunctionReturn(0); 3836528b96dSMatthew G. Knepley } 3846528b96dSMatthew G. Knepley 3856528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetObjective(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt n, 3866528b96dSMatthew G. Knepley void (**obj)(PetscInt, PetscInt, PetscInt, 3876528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 3886528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 3896528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 3906528b96dSMatthew G. Knepley { 3916528b96dSMatthew G. Knepley PetscErrorCode ierr; 3926528b96dSMatthew G. Knepley 3936528b96dSMatthew G. Knepley PetscFunctionBegin; 3946528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->obj, label, val, f, n, (void (**)(void)) obj);CHKERRQ(ierr); 3956528b96dSMatthew G. Knepley PetscFunctionReturn(0); 3966528b96dSMatthew G. Knepley } 3976528b96dSMatthew G. Knepley 3986528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddObjective(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 3996528b96dSMatthew G. Knepley void (*obj)(PetscInt, PetscInt, PetscInt, 4006528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4016528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4026528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4036528b96dSMatthew G. Knepley { 4046528b96dSMatthew G. Knepley PetscErrorCode ierr; 4056528b96dSMatthew G. Knepley 4066528b96dSMatthew G. Knepley PetscFunctionBegin; 4076528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->obj, label, val, f, (void (*)(void)) obj);CHKERRQ(ierr); 4086528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4096528b96dSMatthew G. Knepley } 4106528b96dSMatthew G. Knepley 4116528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetIndexObjective(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt ind, 4126528b96dSMatthew G. Knepley void (**obj)(PetscInt, PetscInt, PetscInt, 4136528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4146528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4156528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4166528b96dSMatthew G. Knepley { 4176528b96dSMatthew G. Knepley PetscErrorCode ierr; 4186528b96dSMatthew G. Knepley 4196528b96dSMatthew G. Knepley PetscFunctionBegin; 4206528b96dSMatthew G. Knepley ierr = PetscWeakFormGetIndexFunction_Private(wf, wf->obj, label, val, f, ind, (void (**)(void)) obj);CHKERRQ(ierr); 4216528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4226528b96dSMatthew G. Knepley } 4236528b96dSMatthew G. Knepley 4246528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexObjective(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt ind, 4256528b96dSMatthew G. Knepley void (*obj)(PetscInt, PetscInt, PetscInt, 4266528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4276528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4286528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4296528b96dSMatthew G. Knepley { 4306528b96dSMatthew G. Knepley PetscErrorCode ierr; 4316528b96dSMatthew G. Knepley 4326528b96dSMatthew G. Knepley PetscFunctionBegin; 4336528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->obj, label, val, f, ind, (void (*)(void)) obj);CHKERRQ(ierr); 4346528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4356528b96dSMatthew G. Knepley } 4366528b96dSMatthew G. Knepley 4376528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 4386528b96dSMatthew G. Knepley PetscInt *n0, 4396528b96dSMatthew G. Knepley void (***f0)(PetscInt, PetscInt, PetscInt, 4406528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4416528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4426528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 4436528b96dSMatthew G. Knepley PetscInt *n1, 4446528b96dSMatthew G. Knepley void (***f1)(PetscInt, PetscInt, PetscInt, 4456528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4466528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4476528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4486528b96dSMatthew G. Knepley { 4496528b96dSMatthew G. Knepley PetscErrorCode ierr; 4506528b96dSMatthew G. Knepley 4516528b96dSMatthew G. Knepley PetscFunctionBegin; 4526528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->f0, label, val, f, n0, (void (***)(void)) f0);CHKERRQ(ierr); 4536528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->f1, label, val, f, n1, (void (***)(void)) f1);CHKERRQ(ierr); 4546528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4556528b96dSMatthew G. Knepley } 4566528b96dSMatthew G. Knepley 4576528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 4586528b96dSMatthew G. Knepley void (*f0)(PetscInt, PetscInt, PetscInt, 4596528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4606528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4616528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 4626528b96dSMatthew G. Knepley void (*f1)(PetscInt, PetscInt, PetscInt, 4636528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4646528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4656528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4666528b96dSMatthew G. Knepley { 4676528b96dSMatthew G. Knepley PetscErrorCode ierr; 4686528b96dSMatthew G. Knepley 4696528b96dSMatthew G. Knepley PetscFunctionBegin; 4706528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->f0, label, val, f, (void (*)(void)) f0);CHKERRQ(ierr); 4716528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->f1, label, val, f, (void (*)(void)) f1);CHKERRQ(ierr); 4726528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4736528b96dSMatthew G. Knepley } 4746528b96dSMatthew G. Knepley 4756528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 4766528b96dSMatthew G. Knepley PetscInt n0, 4776528b96dSMatthew G. Knepley void (**f0)(PetscInt, PetscInt, PetscInt, 4786528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4796528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4806528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 4816528b96dSMatthew G. Knepley PetscInt n1, 4826528b96dSMatthew G. Knepley void (**f1)(PetscInt, PetscInt, PetscInt, 4836528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4846528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4856528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 4866528b96dSMatthew G. Knepley { 4876528b96dSMatthew G. Knepley PetscErrorCode ierr; 4886528b96dSMatthew G. Knepley 4896528b96dSMatthew G. Knepley PetscFunctionBegin; 4906528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->f0, label, val, f, n0, (void (**)(void)) f0);CHKERRQ(ierr); 4916528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->f1, label, val, f, n1, (void (**)(void)) f1);CHKERRQ(ierr); 4926528b96dSMatthew G. Knepley PetscFunctionReturn(0); 4936528b96dSMatthew G. Knepley } 4946528b96dSMatthew G. Knepley 4956528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 4966528b96dSMatthew G. Knepley PetscInt i0, 4976528b96dSMatthew G. Knepley void (*f0)(PetscInt, PetscInt, PetscInt, 4986528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 4996528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5006528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 5016528b96dSMatthew G. Knepley PetscInt i1, 5026528b96dSMatthew G. Knepley void (*f1)(PetscInt, PetscInt, PetscInt, 5036528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5046528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5056528b96dSMatthew G. Knepley PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 5066528b96dSMatthew G. Knepley { 5076528b96dSMatthew G. Knepley PetscErrorCode ierr; 5086528b96dSMatthew G. Knepley 5096528b96dSMatthew G. Knepley PetscFunctionBegin; 5106528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->f0, label, val, f, i0, (void (*)(void)) f0);CHKERRQ(ierr); 5116528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->f1, label, val, f, i1, (void (*)(void)) f1);CHKERRQ(ierr); 5126528b96dSMatthew G. Knepley PetscFunctionReturn(0); 5136528b96dSMatthew G. Knepley } 5146528b96dSMatthew G. Knepley 5156528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetBdResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 5166528b96dSMatthew G. Knepley PetscInt *n0, 5176528b96dSMatthew G. Knepley void (***f0)(PetscInt, PetscInt, PetscInt, 5186528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5196528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5206528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 5216528b96dSMatthew G. Knepley PetscInt *n1, 5226528b96dSMatthew G. Knepley void (***f1)(PetscInt, PetscInt, PetscInt, 5236528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5246528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5256528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 5266528b96dSMatthew G. Knepley { 5276528b96dSMatthew G. Knepley PetscErrorCode ierr; 5286528b96dSMatthew G. Knepley 5296528b96dSMatthew G. Knepley PetscFunctionBegin; 5306528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdf0, label, val, f, n0, (void (***)(void)) f0);CHKERRQ(ierr); 5316528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdf1, label, val, f, n1, (void (***)(void)) f1);CHKERRQ(ierr); 5326528b96dSMatthew G. Knepley PetscFunctionReturn(0); 5336528b96dSMatthew G. Knepley } 5346528b96dSMatthew G. Knepley 5356528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddBdResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 5366528b96dSMatthew G. Knepley void (*f0)(PetscInt, PetscInt, PetscInt, 5376528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5386528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5396528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 5406528b96dSMatthew G. Knepley void (*f1)(PetscInt, PetscInt, PetscInt, 5416528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5426528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5436528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 5446528b96dSMatthew G. Knepley { 5456528b96dSMatthew G. Knepley PetscErrorCode ierr; 5466528b96dSMatthew G. Knepley 5476528b96dSMatthew G. Knepley PetscFunctionBegin; 5486528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdf0, label, val, f, (void (*)(void)) f0);CHKERRQ(ierr); 5496528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdf1, label, val, f, (void (*)(void)) f1);CHKERRQ(ierr); 5506528b96dSMatthew G. Knepley PetscFunctionReturn(0); 5516528b96dSMatthew G. Knepley } 5526528b96dSMatthew G. Knepley 5536528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetBdResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 5546528b96dSMatthew G. Knepley PetscInt n0, 5556528b96dSMatthew G. Knepley void (**f0)(PetscInt, PetscInt, PetscInt, 5566528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5576528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5586528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 5596528b96dSMatthew G. Knepley PetscInt n1, 5606528b96dSMatthew G. Knepley void (**f1)(PetscInt, PetscInt, PetscInt, 5616528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5626528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5636528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 5646528b96dSMatthew G. Knepley { 5656528b96dSMatthew G. Knepley PetscErrorCode ierr; 5666528b96dSMatthew G. Knepley 5676528b96dSMatthew G. Knepley PetscFunctionBegin; 5686528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdf0, label, val, f, n0, (void (**)(void)) f0);CHKERRQ(ierr); 5696528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdf1, label, val, f, n1, (void (**)(void)) f1);CHKERRQ(ierr); 5706528b96dSMatthew G. Knepley PetscFunctionReturn(0); 5716528b96dSMatthew G. Knepley } 5726528b96dSMatthew G. Knepley 5736528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexBdResidual(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 5746528b96dSMatthew G. Knepley PetscInt i0, 5756528b96dSMatthew G. Knepley void (*f0)(PetscInt, PetscInt, PetscInt, 5766528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5776528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5786528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 5796528b96dSMatthew G. Knepley PetscInt i1, 5806528b96dSMatthew G. Knepley void (*f1)(PetscInt, PetscInt, PetscInt, 5816528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5826528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 5836528b96dSMatthew G. Knepley PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 5846528b96dSMatthew G. Knepley { 5856528b96dSMatthew G. Knepley PetscErrorCode ierr; 5866528b96dSMatthew G. Knepley 5876528b96dSMatthew G. Knepley PetscFunctionBegin; 5886528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdf0, label, val, f, i0, (void (*)(void)) f0);CHKERRQ(ierr); 5896528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdf1, label, val, f, i1, (void (*)(void)) f1);CHKERRQ(ierr); 5906528b96dSMatthew G. Knepley PetscFunctionReturn(0); 5916528b96dSMatthew G. Knepley } 5926528b96dSMatthew G. Knepley 5936528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormHasJacobian(PetscWeakForm wf, PetscBool *hasJac) 5946528b96dSMatthew G. Knepley { 5956528b96dSMatthew G. Knepley PetscInt n0, n1, n2, n3; 5966528b96dSMatthew G. Knepley PetscErrorCode ierr; 5976528b96dSMatthew G. Knepley 5986528b96dSMatthew G. Knepley PetscFunctionBegin; 5996528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 6006528b96dSMatthew G. Knepley PetscValidBoolPointer(hasJac, 2); 6016528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->g0, &n0);CHKERRQ(ierr); 6026528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->g1, &n1);CHKERRQ(ierr); 6036528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->g2, &n2);CHKERRQ(ierr); 6046528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->g3, &n3);CHKERRQ(ierr); 6056528b96dSMatthew G. Knepley *hasJac = n0+n1+n2+n3 ? PETSC_TRUE : PETSC_FALSE; 6066528b96dSMatthew G. Knepley PetscFunctionReturn(0); 6076528b96dSMatthew G. Knepley } 6086528b96dSMatthew G. Knepley 6096528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 6106528b96dSMatthew G. Knepley PetscInt *n0, 6116528b96dSMatthew G. Knepley void (***g0)(PetscInt, PetscInt, PetscInt, 6126528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6136528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6146528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6156528b96dSMatthew G. Knepley PetscInt *n1, 6166528b96dSMatthew G. Knepley void (***g1)(PetscInt, PetscInt, PetscInt, 6176528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6186528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6196528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6206528b96dSMatthew G. Knepley PetscInt *n2, 6216528b96dSMatthew G. Knepley void (***g2)(PetscInt, PetscInt, PetscInt, 6226528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6236528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6246528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6256528b96dSMatthew G. Knepley PetscInt *n3, 6266528b96dSMatthew G. Knepley void (***g3)(PetscInt, PetscInt, PetscInt, 6276528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6286528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6296528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 6306528b96dSMatthew G. Knepley { 6316528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 6326528b96dSMatthew G. Knepley PetscErrorCode ierr; 6336528b96dSMatthew G. Knepley 6346528b96dSMatthew G. Knepley PetscFunctionBegin; 6356528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->g0, label, val, find, n0, (void (***)(void)) g0);CHKERRQ(ierr); 6366528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->g1, label, val, find, n1, (void (***)(void)) g1);CHKERRQ(ierr); 6376528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->g2, label, val, find, n2, (void (***)(void)) g2);CHKERRQ(ierr); 6386528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->g3, label, val, find, n3, (void (***)(void)) g3);CHKERRQ(ierr); 6396528b96dSMatthew G. Knepley PetscFunctionReturn(0); 6406528b96dSMatthew G. Knepley } 6416528b96dSMatthew G. Knepley 6426528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 6436528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 6446528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6456528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6466528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6476528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 6486528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6496528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6506528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6516528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 6526528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6536528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6546528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6556528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 6566528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6576528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6586528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 6596528b96dSMatthew G. Knepley { 6606528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 6616528b96dSMatthew G. Knepley PetscErrorCode ierr; 6626528b96dSMatthew G. Knepley 6636528b96dSMatthew G. Knepley PetscFunctionBegin; 6646528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->g0, label, val, find, (void (*)(void)) g0);CHKERRQ(ierr); 6656528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->g1, label, val, find, (void (*)(void)) g1);CHKERRQ(ierr); 6666528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->g2, label, val, find, (void (*)(void)) g2);CHKERRQ(ierr); 6676528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->g3, label, val, find, (void (*)(void)) g3);CHKERRQ(ierr); 6686528b96dSMatthew G. Knepley PetscFunctionReturn(0); 6696528b96dSMatthew G. Knepley } 6706528b96dSMatthew G. Knepley 6716528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 6726528b96dSMatthew G. Knepley PetscInt n0, 6736528b96dSMatthew G. Knepley void (**g0)(PetscInt, PetscInt, PetscInt, 6746528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6756528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6766528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6776528b96dSMatthew G. Knepley PetscInt n1, 6786528b96dSMatthew G. Knepley void (**g1)(PetscInt, PetscInt, PetscInt, 6796528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6806528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6816528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6826528b96dSMatthew G. Knepley PetscInt n2, 6836528b96dSMatthew G. Knepley void (**g2)(PetscInt, PetscInt, PetscInt, 6846528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6856528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6866528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 6876528b96dSMatthew G. Knepley PetscInt n3, 6886528b96dSMatthew G. Knepley void (**g3)(PetscInt, PetscInt, PetscInt, 6896528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6906528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 6916528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 6926528b96dSMatthew G. Knepley { 6936528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 6946528b96dSMatthew G. Knepley PetscErrorCode ierr; 6956528b96dSMatthew G. Knepley 6966528b96dSMatthew G. Knepley PetscFunctionBegin; 6976528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->g0, label, val, find, n0, (void (**)(void)) g0);CHKERRQ(ierr); 6986528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->g1, label, val, find, n1, (void (**)(void)) g1);CHKERRQ(ierr); 6996528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->g2, label, val, find, n2, (void (**)(void)) g2);CHKERRQ(ierr); 7006528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->g3, label, val, find, n3, (void (**)(void)) g3);CHKERRQ(ierr); 7016528b96dSMatthew G. Knepley PetscFunctionReturn(0); 7026528b96dSMatthew G. Knepley } 7036528b96dSMatthew G. Knepley 7046528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 7056528b96dSMatthew G. Knepley PetscInt i0, 7066528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 7076528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7086528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7096528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7106528b96dSMatthew G. Knepley PetscInt i1, 7116528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 7126528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7136528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7146528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7156528b96dSMatthew G. Knepley PetscInt i2, 7166528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 7176528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7186528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7196528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7206528b96dSMatthew G. Knepley PetscInt i3, 7216528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 7226528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7236528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7246528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 7256528b96dSMatthew G. Knepley { 7266528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 7276528b96dSMatthew G. Knepley PetscErrorCode ierr; 7286528b96dSMatthew G. Knepley 7296528b96dSMatthew G. Knepley PetscFunctionBegin; 7306528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->g0, label, val, find, i0, (void (*)(void)) g0);CHKERRQ(ierr); 7316528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->g1, label, val, find, i1, (void (*)(void)) g1);CHKERRQ(ierr); 7326528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->g2, label, val, find, i2, (void (*)(void)) g2);CHKERRQ(ierr); 7336528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->g3, label, val, find, i3, (void (*)(void)) g3);CHKERRQ(ierr); 7346528b96dSMatthew G. Knepley PetscFunctionReturn(0); 7356528b96dSMatthew G. Knepley } 7366528b96dSMatthew G. Knepley 7376528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormHasJacobianPreconditioner(PetscWeakForm wf, PetscBool *hasJacPre) 7386528b96dSMatthew G. Knepley { 7396528b96dSMatthew G. Knepley PetscInt n0, n1, n2, n3; 7406528b96dSMatthew G. Knepley PetscErrorCode ierr; 7416528b96dSMatthew G. Knepley 7426528b96dSMatthew G. Knepley PetscFunctionBegin; 7436528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 7446528b96dSMatthew G. Knepley PetscValidBoolPointer(hasJacPre, 2); 7456528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gp0, &n0);CHKERRQ(ierr); 7466528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gp1, &n1);CHKERRQ(ierr); 7476528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gp2, &n2);CHKERRQ(ierr); 7486528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gp3, &n3);CHKERRQ(ierr); 7496528b96dSMatthew G. Knepley *hasJacPre = n0+n1+n2+n3 ? PETSC_TRUE : PETSC_FALSE; 7506528b96dSMatthew G. Knepley PetscFunctionReturn(0); 7516528b96dSMatthew G. Knepley } 7526528b96dSMatthew G. Knepley 7536528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 7546528b96dSMatthew G. Knepley PetscInt *n0, 7556528b96dSMatthew G. Knepley void (***g0)(PetscInt, PetscInt, PetscInt, 7566528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7576528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7586528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7596528b96dSMatthew G. Knepley PetscInt *n1, 7606528b96dSMatthew G. Knepley void (***g1)(PetscInt, PetscInt, PetscInt, 7616528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7626528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7636528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7646528b96dSMatthew G. Knepley PetscInt *n2, 7656528b96dSMatthew G. Knepley void (***g2)(PetscInt, PetscInt, PetscInt, 7666528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7676528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7686528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7696528b96dSMatthew G. Knepley PetscInt *n3, 7706528b96dSMatthew G. Knepley void (***g3)(PetscInt, PetscInt, PetscInt, 7716528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7726528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7736528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 7746528b96dSMatthew G. Knepley { 7756528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 7766528b96dSMatthew G. Knepley PetscErrorCode ierr; 7776528b96dSMatthew G. Knepley 7786528b96dSMatthew G. Knepley PetscFunctionBegin; 7796528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gp0, label, val, find, n0, (void (***)(void)) g0);CHKERRQ(ierr); 7806528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gp1, label, val, find, n1, (void (***)(void)) g1);CHKERRQ(ierr); 7816528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gp2, label, val, find, n2, (void (***)(void)) g2);CHKERRQ(ierr); 7826528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gp3, label, val, find, n3, (void (***)(void)) g3);CHKERRQ(ierr); 7836528b96dSMatthew G. Knepley PetscFunctionReturn(0); 7846528b96dSMatthew G. Knepley } 7856528b96dSMatthew G. Knepley 7866528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 7876528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 7886528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7896528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7906528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7916528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 7926528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7936528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7946528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7956528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 7966528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7976528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 7986528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 7996528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 8006528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8016528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8026528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 8036528b96dSMatthew G. Knepley { 8046528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 8056528b96dSMatthew G. Knepley PetscErrorCode ierr; 8066528b96dSMatthew G. Knepley 8076528b96dSMatthew G. Knepley PetscFunctionBegin; 8086528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gp0, label, val, find, (void (*)(void)) g0);CHKERRQ(ierr); 8096528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gp1, label, val, find, (void (*)(void)) g1);CHKERRQ(ierr); 8106528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gp2, label, val, find, (void (*)(void)) g2);CHKERRQ(ierr); 8116528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gp3, label, val, find, (void (*)(void)) g3);CHKERRQ(ierr); 8126528b96dSMatthew G. Knepley PetscFunctionReturn(0); 8136528b96dSMatthew G. Knepley } 8146528b96dSMatthew G. Knepley 8156528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 8166528b96dSMatthew G. Knepley PetscInt n0, 8176528b96dSMatthew G. Knepley void (**g0)(PetscInt, PetscInt, PetscInt, 8186528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8196528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8206528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8216528b96dSMatthew G. Knepley PetscInt n1, 8226528b96dSMatthew G. Knepley void (**g1)(PetscInt, PetscInt, PetscInt, 8236528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8246528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8256528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8266528b96dSMatthew G. Knepley PetscInt n2, 8276528b96dSMatthew G. Knepley void (**g2)(PetscInt, PetscInt, PetscInt, 8286528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8296528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8306528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8316528b96dSMatthew G. Knepley PetscInt n3, 8326528b96dSMatthew G. Knepley void (**g3)(PetscInt, PetscInt, PetscInt, 8336528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8346528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8356528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 8366528b96dSMatthew G. Knepley { 8376528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 8386528b96dSMatthew G. Knepley PetscErrorCode ierr; 8396528b96dSMatthew G. Knepley 8406528b96dSMatthew G. Knepley PetscFunctionBegin; 8416528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gp0, label, val, find, n0, (void (**)(void)) g0);CHKERRQ(ierr); 8426528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gp1, label, val, find, n1, (void (**)(void)) g1);CHKERRQ(ierr); 8436528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gp2, label, val, find, n2, (void (**)(void)) g2);CHKERRQ(ierr); 8446528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gp3, label, val, find, n3, (void (**)(void)) g3);CHKERRQ(ierr); 8456528b96dSMatthew G. Knepley PetscFunctionReturn(0); 8466528b96dSMatthew G. Knepley } 8476528b96dSMatthew G. Knepley 8486528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 8496528b96dSMatthew G. Knepley PetscInt i0, 8506528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 8516528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8526528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8536528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8546528b96dSMatthew G. Knepley PetscInt i1, 8556528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 8566528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8576528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8586528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8596528b96dSMatthew G. Knepley PetscInt i2, 8606528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 8616528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8626528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8636528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 8646528b96dSMatthew G. Knepley PetscInt i3, 8656528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 8666528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8676528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 8686528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 8696528b96dSMatthew G. Knepley { 8706528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 8716528b96dSMatthew G. Knepley PetscErrorCode ierr; 8726528b96dSMatthew G. Knepley 8736528b96dSMatthew G. Knepley PetscFunctionBegin; 8746528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gp0, label, val, find, i0, (void (*)(void)) g0);CHKERRQ(ierr); 8756528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gp1, label, val, find, i1, (void (*)(void)) g1);CHKERRQ(ierr); 8766528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gp2, label, val, find, i2, (void (*)(void)) g2);CHKERRQ(ierr); 8776528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gp3, label, val, find, i3, (void (*)(void)) g3);CHKERRQ(ierr); 8786528b96dSMatthew G. Knepley PetscFunctionReturn(0); 8796528b96dSMatthew G. Knepley } 8806528b96dSMatthew G. Knepley 8816528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormHasBdJacobian(PetscWeakForm wf, PetscBool *hasJac) 8826528b96dSMatthew G. Knepley { 8836528b96dSMatthew G. Knepley PetscInt n0, n1, n2, n3; 8846528b96dSMatthew G. Knepley PetscErrorCode ierr; 8856528b96dSMatthew G. Knepley 8866528b96dSMatthew G. Knepley PetscFunctionBegin; 8876528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 8886528b96dSMatthew G. Knepley PetscValidBoolPointer(hasJac, 2); 8896528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdg0, &n0);CHKERRQ(ierr); 8906528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdg1, &n1);CHKERRQ(ierr); 8916528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdg2, &n2);CHKERRQ(ierr); 8926528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdg3, &n3);CHKERRQ(ierr); 8936528b96dSMatthew G. Knepley *hasJac = n0+n1+n2+n3 ? PETSC_TRUE : PETSC_FALSE; 8946528b96dSMatthew G. Knepley PetscFunctionReturn(0); 8956528b96dSMatthew G. Knepley } 8966528b96dSMatthew G. Knepley 8976528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetBdJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 8986528b96dSMatthew G. Knepley PetscInt *n0, 8996528b96dSMatthew G. Knepley void (***g0)(PetscInt, PetscInt, PetscInt, 9006528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9016528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9026528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9036528b96dSMatthew G. Knepley PetscInt *n1, 9046528b96dSMatthew G. Knepley void (***g1)(PetscInt, PetscInt, PetscInt, 9056528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9066528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9076528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9086528b96dSMatthew G. Knepley PetscInt *n2, 9096528b96dSMatthew G. Knepley void (***g2)(PetscInt, PetscInt, PetscInt, 9106528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9116528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9126528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9136528b96dSMatthew G. Knepley PetscInt *n3, 9146528b96dSMatthew G. Knepley void (***g3)(PetscInt, PetscInt, PetscInt, 9156528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9166528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9176528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 9186528b96dSMatthew G. Knepley { 9196528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 9206528b96dSMatthew G. Knepley PetscErrorCode ierr; 9216528b96dSMatthew G. Knepley 9226528b96dSMatthew G. Knepley PetscFunctionBegin; 9236528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdg0, label, val, find, n0, (void (***)(void)) g0);CHKERRQ(ierr); 9246528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdg1, label, val, find, n1, (void (***)(void)) g1);CHKERRQ(ierr); 9256528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdg2, label, val, find, n2, (void (***)(void)) g2);CHKERRQ(ierr); 9266528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdg3, label, val, find, n3, (void (***)(void)) g3);CHKERRQ(ierr); 9276528b96dSMatthew G. Knepley PetscFunctionReturn(0); 9286528b96dSMatthew G. Knepley } 9296528b96dSMatthew G. Knepley 9306528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddBdJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 9316528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 9326528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9336528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9346528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9356528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 9366528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9376528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9386528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9396528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 9406528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9416528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9426528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9436528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 9446528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9456528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9466528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 9476528b96dSMatthew G. Knepley { 9486528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 9496528b96dSMatthew G. Knepley PetscErrorCode ierr; 9506528b96dSMatthew G. Knepley 9516528b96dSMatthew G. Knepley PetscFunctionBegin; 9526528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdg0, label, val, find, (void (*)(void)) g0);CHKERRQ(ierr); 9536528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdg1, label, val, find, (void (*)(void)) g1);CHKERRQ(ierr); 9546528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdg2, label, val, find, (void (*)(void)) g2);CHKERRQ(ierr); 9556528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdg3, label, val, find, (void (*)(void)) g3);CHKERRQ(ierr); 9566528b96dSMatthew G. Knepley PetscFunctionReturn(0); 9576528b96dSMatthew G. Knepley } 9586528b96dSMatthew G. Knepley 9596528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetBdJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 9606528b96dSMatthew G. Knepley PetscInt n0, 9616528b96dSMatthew G. Knepley void (**g0)(PetscInt, PetscInt, PetscInt, 9626528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9636528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9646528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9656528b96dSMatthew G. Knepley PetscInt n1, 9666528b96dSMatthew G. Knepley void (**g1)(PetscInt, PetscInt, PetscInt, 9676528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9686528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9696528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9706528b96dSMatthew G. Knepley PetscInt n2, 9716528b96dSMatthew G. Knepley void (**g2)(PetscInt, PetscInt, PetscInt, 9726528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9736528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9746528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9756528b96dSMatthew G. Knepley PetscInt n3, 9766528b96dSMatthew G. Knepley void (**g3)(PetscInt, PetscInt, PetscInt, 9776528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9786528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9796528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 9806528b96dSMatthew G. Knepley { 9816528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 9826528b96dSMatthew G. Knepley PetscErrorCode ierr; 9836528b96dSMatthew G. Knepley 9846528b96dSMatthew G. Knepley PetscFunctionBegin; 9856528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdg0, label, val, find, n0, (void (**)(void)) g0);CHKERRQ(ierr); 9866528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdg1, label, val, find, n1, (void (**)(void)) g1);CHKERRQ(ierr); 9876528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdg2, label, val, find, n2, (void (**)(void)) g2);CHKERRQ(ierr); 9886528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdg3, label, val, find, n3, (void (**)(void)) g3);CHKERRQ(ierr); 9896528b96dSMatthew G. Knepley PetscFunctionReturn(0); 9906528b96dSMatthew G. Knepley } 9916528b96dSMatthew G. Knepley 9926528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexBdJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 9936528b96dSMatthew G. Knepley PetscInt i0, 9946528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 9956528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9966528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 9976528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 9986528b96dSMatthew G. Knepley PetscInt i1, 9996528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 10006528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10016528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10026528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10036528b96dSMatthew G. Knepley PetscInt i2, 10046528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 10056528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10066528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10076528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10086528b96dSMatthew G. Knepley PetscInt i3, 10096528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 10106528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10116528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10126528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 10136528b96dSMatthew G. Knepley { 10146528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 10156528b96dSMatthew G. Knepley PetscErrorCode ierr; 10166528b96dSMatthew G. Knepley 10176528b96dSMatthew G. Knepley PetscFunctionBegin; 10186528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdg0, label, val, find, i0, (void (*)(void)) g0);CHKERRQ(ierr); 10196528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdg1, label, val, find, i1, (void (*)(void)) g1);CHKERRQ(ierr); 10206528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdg2, label, val, find, i2, (void (*)(void)) g2);CHKERRQ(ierr); 10216528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdg3, label, val, find, i3, (void (*)(void)) g3);CHKERRQ(ierr); 10226528b96dSMatthew G. Knepley PetscFunctionReturn(0); 10236528b96dSMatthew G. Knepley } 10246528b96dSMatthew G. Knepley 10256528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormHasBdJacobianPreconditioner(PetscWeakForm wf, PetscBool *hasJacPre) 10266528b96dSMatthew G. Knepley { 10276528b96dSMatthew G. Knepley PetscInt n0, n1, n2, n3; 10286528b96dSMatthew G. Knepley PetscErrorCode ierr; 10296528b96dSMatthew G. Knepley 10306528b96dSMatthew G. Knepley PetscFunctionBegin; 10316528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 10326528b96dSMatthew G. Knepley PetscValidBoolPointer(hasJacPre, 2); 10336528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdgp0, &n0);CHKERRQ(ierr); 10346528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdgp1, &n1);CHKERRQ(ierr); 10356528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdgp2, &n2);CHKERRQ(ierr); 10366528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->bdgp3, &n3);CHKERRQ(ierr); 10376528b96dSMatthew G. Knepley *hasJacPre = n0+n1+n2+n3 ? PETSC_TRUE : PETSC_FALSE; 10386528b96dSMatthew G. Knepley PetscFunctionReturn(0); 10396528b96dSMatthew G. Knepley } 10406528b96dSMatthew G. Knepley 10416528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetBdJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 10426528b96dSMatthew G. Knepley PetscInt *n0, 10436528b96dSMatthew G. Knepley void (***g0)(PetscInt, PetscInt, PetscInt, 10446528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10456528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10466528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10476528b96dSMatthew G. Knepley PetscInt *n1, 10486528b96dSMatthew G. Knepley void (***g1)(PetscInt, PetscInt, PetscInt, 10496528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10506528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10516528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10526528b96dSMatthew G. Knepley PetscInt *n2, 10536528b96dSMatthew G. Knepley void (***g2)(PetscInt, PetscInt, PetscInt, 10546528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10556528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10566528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10576528b96dSMatthew G. Knepley PetscInt *n3, 10586528b96dSMatthew G. Knepley void (***g3)(PetscInt, PetscInt, PetscInt, 10596528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10606528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10616528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 10626528b96dSMatthew G. Knepley { 10636528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 10646528b96dSMatthew G. Knepley PetscErrorCode ierr; 10656528b96dSMatthew G. Knepley 10666528b96dSMatthew G. Knepley PetscFunctionBegin; 10676528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdgp0, label, val, find, n0, (void (***)(void)) g0);CHKERRQ(ierr); 10686528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdgp1, label, val, find, n1, (void (***)(void)) g1);CHKERRQ(ierr); 10696528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdgp2, label, val, find, n2, (void (***)(void)) g2);CHKERRQ(ierr); 10706528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->bdgp3, label, val, find, n3, (void (***)(void)) g3);CHKERRQ(ierr); 10716528b96dSMatthew G. Knepley PetscFunctionReturn(0); 10726528b96dSMatthew G. Knepley } 10736528b96dSMatthew G. Knepley 10746528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddBdJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 10756528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 10766528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10776528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10786528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10796528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 10806528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10816528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10826528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10836528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 10846528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10856528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10866528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 10876528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 10886528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10896528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 10906528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 10916528b96dSMatthew G. Knepley { 10926528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 10936528b96dSMatthew G. Knepley PetscErrorCode ierr; 10946528b96dSMatthew G. Knepley 10956528b96dSMatthew G. Knepley PetscFunctionBegin; 10966528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdgp0, label, val, find, (void (*)(void)) g0);CHKERRQ(ierr); 10976528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdgp1, label, val, find, (void (*)(void)) g1);CHKERRQ(ierr); 10986528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdgp2, label, val, find, (void (*)(void)) g2);CHKERRQ(ierr); 10996528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->bdgp3, label, val, find, (void (*)(void)) g3);CHKERRQ(ierr); 11006528b96dSMatthew G. Knepley PetscFunctionReturn(0); 11016528b96dSMatthew G. Knepley } 11026528b96dSMatthew G. Knepley 11036528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetBdJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 11046528b96dSMatthew G. Knepley PetscInt n0, 11056528b96dSMatthew G. Knepley void (**g0)(PetscInt, PetscInt, PetscInt, 11066528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11076528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11086528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11096528b96dSMatthew G. Knepley PetscInt n1, 11106528b96dSMatthew G. Knepley void (**g1)(PetscInt, PetscInt, PetscInt, 11116528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11126528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11136528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11146528b96dSMatthew G. Knepley PetscInt n2, 11156528b96dSMatthew G. Knepley void (**g2)(PetscInt, PetscInt, PetscInt, 11166528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11176528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11186528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11196528b96dSMatthew G. Knepley PetscInt n3, 11206528b96dSMatthew G. Knepley void (**g3)(PetscInt, PetscInt, PetscInt, 11216528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11226528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11236528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 11246528b96dSMatthew G. Knepley { 11256528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 11266528b96dSMatthew G. Knepley PetscErrorCode ierr; 11276528b96dSMatthew G. Knepley 11286528b96dSMatthew G. Knepley PetscFunctionBegin; 11296528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdgp0, label, val, find, n0, (void (**)(void)) g0);CHKERRQ(ierr); 11306528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdgp1, label, val, find, n1, (void (**)(void)) g1);CHKERRQ(ierr); 11316528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdgp2, label, val, find, n2, (void (**)(void)) g2);CHKERRQ(ierr); 11326528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->bdgp3, label, val, find, n3, (void (**)(void)) g3);CHKERRQ(ierr); 11336528b96dSMatthew G. Knepley PetscFunctionReturn(0); 11346528b96dSMatthew G. Knepley } 11356528b96dSMatthew G. Knepley 11366528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexBdJacobianPreconditioner(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 11376528b96dSMatthew G. Knepley PetscInt i0, 11386528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 11396528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11406528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11416528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11426528b96dSMatthew G. Knepley PetscInt i1, 11436528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 11446528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11456528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11466528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11476528b96dSMatthew G. Knepley PetscInt i2, 11486528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 11496528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11506528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11516528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11526528b96dSMatthew G. Knepley PetscInt i3, 11536528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 11546528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11556528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11566528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 11576528b96dSMatthew G. Knepley { 11586528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 11596528b96dSMatthew G. Knepley PetscErrorCode ierr; 11606528b96dSMatthew G. Knepley 11616528b96dSMatthew G. Knepley PetscFunctionBegin; 11626528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdgp0, label, val, find, i0, (void (*)(void)) g0);CHKERRQ(ierr); 11636528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdgp1, label, val, find, i1, (void (*)(void)) g1);CHKERRQ(ierr); 11646528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdgp2, label, val, find, i2, (void (*)(void)) g2);CHKERRQ(ierr); 11656528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->bdgp3, label, val, find, i3, (void (*)(void)) g3);CHKERRQ(ierr); 11666528b96dSMatthew G. Knepley PetscFunctionReturn(0); 11676528b96dSMatthew G. Knepley } 11686528b96dSMatthew G. Knepley 11696528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormHasDynamicJacobian(PetscWeakForm wf, PetscBool *hasDynJac) 11706528b96dSMatthew G. Knepley { 11716528b96dSMatthew G. Knepley PetscInt n0, n1, n2, n3; 11726528b96dSMatthew G. Knepley PetscErrorCode ierr; 11736528b96dSMatthew G. Knepley 11746528b96dSMatthew G. Knepley PetscFunctionBegin; 11756528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 11766528b96dSMatthew G. Knepley PetscValidBoolPointer(hasDynJac, 2); 11776528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gt0, &n0);CHKERRQ(ierr); 11786528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gt1, &n1);CHKERRQ(ierr); 11796528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gt2, &n2);CHKERRQ(ierr); 11806528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(wf->gt3, &n3);CHKERRQ(ierr); 11816528b96dSMatthew G. Knepley *hasDynJac = n0+n1+n2+n3 ? PETSC_TRUE : PETSC_FALSE; 11826528b96dSMatthew G. Knepley PetscFunctionReturn(0); 11836528b96dSMatthew G. Knepley } 11846528b96dSMatthew G. Knepley 11856528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetDynamicJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 11866528b96dSMatthew G. Knepley PetscInt *n0, 11876528b96dSMatthew G. Knepley void (***g0)(PetscInt, PetscInt, PetscInt, 11886528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11896528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11906528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11916528b96dSMatthew G. Knepley PetscInt *n1, 11926528b96dSMatthew G. Knepley void (***g1)(PetscInt, PetscInt, PetscInt, 11936528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11946528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11956528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 11966528b96dSMatthew G. Knepley PetscInt *n2, 11976528b96dSMatthew G. Knepley void (***g2)(PetscInt, PetscInt, PetscInt, 11986528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 11996528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12006528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12016528b96dSMatthew G. Knepley PetscInt *n3, 12026528b96dSMatthew G. Knepley void (***g3)(PetscInt, PetscInt, PetscInt, 12036528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12046528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12056528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 12066528b96dSMatthew G. Knepley { 12076528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 12086528b96dSMatthew G. Knepley PetscErrorCode ierr; 12096528b96dSMatthew G. Knepley 12106528b96dSMatthew G. Knepley PetscFunctionBegin; 12116528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gt0, label, val, find, n0, (void (***)(void)) g0);CHKERRQ(ierr); 12126528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gt1, label, val, find, n1, (void (***)(void)) g1);CHKERRQ(ierr); 12136528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gt2, label, val, find, n2, (void (***)(void)) g2);CHKERRQ(ierr); 12146528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->gt3, label, val, find, n3, (void (***)(void)) g3);CHKERRQ(ierr); 12156528b96dSMatthew G. Knepley PetscFunctionReturn(0); 12166528b96dSMatthew G. Knepley } 12176528b96dSMatthew G. Knepley 12186528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormAddDynamicJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 12196528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 12206528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12216528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12226528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12236528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 12246528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12256528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12266528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12276528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 12286528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12296528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12306528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12316528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 12326528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12336528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12346528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 12356528b96dSMatthew G. Knepley { 12366528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 12376528b96dSMatthew G. Knepley PetscErrorCode ierr; 12386528b96dSMatthew G. Knepley 12396528b96dSMatthew G. Knepley PetscFunctionBegin; 12406528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gt0, label, val, find, (void (*)(void)) g0);CHKERRQ(ierr); 12416528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gt1, label, val, find, (void (*)(void)) g1);CHKERRQ(ierr); 12426528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gt2, label, val, find, (void (*)(void)) g2);CHKERRQ(ierr); 12436528b96dSMatthew G. Knepley ierr = PetscWeakFormAddFunction_Private(wf, wf->gt3, label, val, find, (void (*)(void)) g3);CHKERRQ(ierr); 12446528b96dSMatthew G. Knepley PetscFunctionReturn(0); 12456528b96dSMatthew G. Knepley } 12466528b96dSMatthew G. Knepley 12476528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetDynamicJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 12486528b96dSMatthew G. Knepley PetscInt n0, 12496528b96dSMatthew G. Knepley void (**g0)(PetscInt, PetscInt, PetscInt, 12506528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12516528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12526528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12536528b96dSMatthew G. Knepley PetscInt n1, 12546528b96dSMatthew G. Knepley void (**g1)(PetscInt, PetscInt, PetscInt, 12556528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12566528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12576528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12586528b96dSMatthew G. Knepley PetscInt n2, 12596528b96dSMatthew G. Knepley void (**g2)(PetscInt, PetscInt, PetscInt, 12606528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12616528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12626528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12636528b96dSMatthew G. Knepley PetscInt n3, 12646528b96dSMatthew G. Knepley void (**g3)(PetscInt, PetscInt, PetscInt, 12656528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12666528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12676528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 12686528b96dSMatthew G. Knepley { 12696528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 12706528b96dSMatthew G. Knepley PetscErrorCode ierr; 12716528b96dSMatthew G. Knepley 12726528b96dSMatthew G. Knepley PetscFunctionBegin; 12736528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gt0, label, val, find, n0, (void (**)(void)) g0);CHKERRQ(ierr); 12746528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gt1, label, val, find, n1, (void (**)(void)) g1);CHKERRQ(ierr); 12756528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gt2, label, val, find, n2, (void (**)(void)) g2);CHKERRQ(ierr); 12766528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->gt3, label, val, find, n3, (void (**)(void)) g3);CHKERRQ(ierr); 12776528b96dSMatthew G. Knepley PetscFunctionReturn(0); 12786528b96dSMatthew G. Knepley } 12796528b96dSMatthew G. Knepley 12806528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexDynamicJacobian(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt g, 12816528b96dSMatthew G. Knepley PetscInt i0, 12826528b96dSMatthew G. Knepley void (*g0)(PetscInt, PetscInt, PetscInt, 12836528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12846528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12856528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12866528b96dSMatthew G. Knepley PetscInt i1, 12876528b96dSMatthew G. Knepley void (*g1)(PetscInt, PetscInt, PetscInt, 12886528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12896528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12906528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12916528b96dSMatthew G. Knepley PetscInt i2, 12926528b96dSMatthew G. Knepley void (*g2)(PetscInt, PetscInt, PetscInt, 12936528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12946528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12956528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]), 12966528b96dSMatthew G. Knepley PetscInt i3, 12976528b96dSMatthew G. Knepley void (*g3)(PetscInt, PetscInt, PetscInt, 12986528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 12996528b96dSMatthew G. Knepley const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], 13006528b96dSMatthew G. Knepley PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[])) 13016528b96dSMatthew G. Knepley { 13026528b96dSMatthew G. Knepley PetscInt find = f*wf->Nf + g; 13036528b96dSMatthew G. Knepley PetscErrorCode ierr; 13046528b96dSMatthew G. Knepley 13056528b96dSMatthew G. Knepley PetscFunctionBegin; 13066528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gt0, label, val, find, i0, (void (*)(void)) g0);CHKERRQ(ierr); 13076528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gt1, label, val, find, i1, (void (*)(void)) g1);CHKERRQ(ierr); 13086528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gt2, label, val, find, i2, (void (*)(void)) g2);CHKERRQ(ierr); 13096528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->gt3, label, val, find, i3, (void (*)(void)) g3);CHKERRQ(ierr); 13106528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13116528b96dSMatthew G. Knepley } 13126528b96dSMatthew G. Knepley 13136528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetRiemannSolver(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, PetscInt *n, 13146528b96dSMatthew G. Knepley void (***r)(PetscInt, PetscInt, const PetscReal[], const PetscReal[], const PetscScalar[], const PetscScalar[], PetscInt, const PetscScalar[], PetscScalar[], void *)) 13156528b96dSMatthew G. Knepley { 13166528b96dSMatthew G. Knepley PetscErrorCode ierr; 13176528b96dSMatthew G. Knepley 13186528b96dSMatthew G. Knepley PetscFunctionBegin; 13196528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, wf->r, label, val, f, n, (void (***)(void)) r);CHKERRQ(ierr); 13206528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13216528b96dSMatthew G. Knepley } 13226528b96dSMatthew G. Knepley 13236528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetRiemannSolver(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 13246528b96dSMatthew G. Knepley PetscInt n, 13256528b96dSMatthew G. Knepley void (**r)(PetscInt, PetscInt, const PetscReal[], const PetscReal[], const PetscScalar[], const PetscScalar[], PetscInt, const PetscScalar[], PetscScalar[], void *)) 13266528b96dSMatthew G. Knepley { 13276528b96dSMatthew G. Knepley PetscErrorCode ierr; 13286528b96dSMatthew G. Knepley 13296528b96dSMatthew G. Knepley PetscFunctionBegin; 13306528b96dSMatthew G. Knepley ierr = PetscWeakFormSetFunction_Private(wf, wf->r, label, val, f, n, (void (**)(void)) r);CHKERRQ(ierr); 13316528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13326528b96dSMatthew G. Knepley } 13336528b96dSMatthew G. Knepley 13346528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetIndexRiemannSolver(PetscWeakForm wf, DMLabel label, PetscInt val, PetscInt f, 13356528b96dSMatthew G. Knepley PetscInt i, 13366528b96dSMatthew G. Knepley void (*r)(PetscInt, PetscInt, const PetscReal[], const PetscReal[], const PetscScalar[], const PetscScalar[], PetscInt, const PetscScalar[], PetscScalar[], void *)) 13376528b96dSMatthew G. Knepley { 13386528b96dSMatthew G. Knepley PetscErrorCode ierr; 13396528b96dSMatthew G. Knepley 13406528b96dSMatthew G. Knepley PetscFunctionBegin; 13416528b96dSMatthew G. Knepley ierr = PetscWeakFormSetIndexFunction_Private(wf, wf->r, label, val, f, i, (void (*)(void)) r);CHKERRQ(ierr); 13426528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13436528b96dSMatthew G. Knepley } 13446528b96dSMatthew G. Knepley 13456528b96dSMatthew G. Knepley /*@ 13466528b96dSMatthew G. Knepley PetscWeakFormGetNumFields - Returns the number of fields 13476528b96dSMatthew G. Knepley 13486528b96dSMatthew G. Knepley Not collective 13496528b96dSMatthew G. Knepley 13506528b96dSMatthew G. Knepley Input Parameter: 13516528b96dSMatthew G. Knepley . wf - The PetscWeakForm object 13526528b96dSMatthew G. Knepley 13536528b96dSMatthew G. Knepley Output Parameter: 13546528b96dSMatthew G. Knepley . Nf - The nubmer of fields 13556528b96dSMatthew G. Knepley 13566528b96dSMatthew G. Knepley Level: beginner 13576528b96dSMatthew G. Knepley 13586528b96dSMatthew G. Knepley .seealso: PetscWeakFormSetNumFields(), PetscWeakFormCreate() 13596528b96dSMatthew G. Knepley @*/ 13606528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormGetNumFields(PetscWeakForm wf, PetscInt *Nf) 13616528b96dSMatthew G. Knepley { 13626528b96dSMatthew G. Knepley PetscFunctionBegin; 13636528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 13646528b96dSMatthew G. Knepley PetscValidPointer(Nf, 2); 13656528b96dSMatthew G. Knepley *Nf = wf->Nf; 13666528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13676528b96dSMatthew G. Knepley } 13686528b96dSMatthew G. Knepley 13696528b96dSMatthew G. Knepley /*@ 13706528b96dSMatthew G. Knepley PetscWeakFormSetNumFields - Sets the number of fields 13716528b96dSMatthew G. Knepley 13726528b96dSMatthew G. Knepley Not collective 13736528b96dSMatthew G. Knepley 13746528b96dSMatthew G. Knepley Input Parameters: 13756528b96dSMatthew G. Knepley + wf - The PetscWeakForm object 13766528b96dSMatthew G. Knepley - Nf - The number of fields 13776528b96dSMatthew G. Knepley 13786528b96dSMatthew G. Knepley Level: beginner 13796528b96dSMatthew G. Knepley 13806528b96dSMatthew G. Knepley .seealso: PetscWeakFormGetNumFields(), PetscWeakFormCreate() 13816528b96dSMatthew G. Knepley @*/ 13826528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormSetNumFields(PetscWeakForm wf, PetscInt Nf) 13836528b96dSMatthew G. Knepley { 13846528b96dSMatthew G. Knepley PetscFunctionBegin; 13856528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 13866528b96dSMatthew G. Knepley wf->Nf = Nf; 13876528b96dSMatthew G. Knepley PetscFunctionReturn(0); 13886528b96dSMatthew G. Knepley } 13896528b96dSMatthew G. Knepley 13906528b96dSMatthew G. Knepley /*@ 13916528b96dSMatthew G. Knepley PetscWeakFormDestroy - Destroys a PetscWeakForm object 13926528b96dSMatthew G. Knepley 13936528b96dSMatthew G. Knepley Collective on wf 13946528b96dSMatthew G. Knepley 13956528b96dSMatthew G. Knepley Input Parameter: 13966528b96dSMatthew G. Knepley . wf - the PetscWeakForm object to destroy 13976528b96dSMatthew G. Knepley 13986528b96dSMatthew G. Knepley Level: developer 13996528b96dSMatthew G. Knepley 14006528b96dSMatthew G. Knepley .seealso PetscWeakFormCreate(), PetscWeakFormView() 14016528b96dSMatthew G. Knepley @*/ 14026528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormDestroy(PetscWeakForm *wf) 14036528b96dSMatthew G. Knepley { 14046528b96dSMatthew G. Knepley PetscErrorCode ierr; 14056528b96dSMatthew G. Knepley 14066528b96dSMatthew G. Knepley PetscFunctionBegin; 14076528b96dSMatthew G. Knepley if (!*wf) PetscFunctionReturn(0); 14086528b96dSMatthew G. Knepley PetscValidHeaderSpecific((*wf), PETSCWEAKFORM_CLASSID, 1); 14096528b96dSMatthew G. Knepley 14106528b96dSMatthew G. Knepley if (--((PetscObject)(*wf))->refct > 0) {*wf = NULL; PetscFunctionReturn(0);} 14116528b96dSMatthew G. Knepley ((PetscObject) (*wf))->refct = 0; 14126528b96dSMatthew G. Knepley ierr = PetscChunkBufferDestroy(&(*wf)->funcs);CHKERRQ(ierr); 14136528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->obj);CHKERRQ(ierr); 14146528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->f0);CHKERRQ(ierr); 14156528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->f1);CHKERRQ(ierr); 14166528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->g0);CHKERRQ(ierr); 14176528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->g1);CHKERRQ(ierr); 14186528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->g2);CHKERRQ(ierr); 14196528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->g3);CHKERRQ(ierr); 14206528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gp0);CHKERRQ(ierr); 14216528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gp1);CHKERRQ(ierr); 14226528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gp2);CHKERRQ(ierr); 14236528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gp3);CHKERRQ(ierr); 14246528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gt0);CHKERRQ(ierr); 14256528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gt1);CHKERRQ(ierr); 14266528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gt2);CHKERRQ(ierr); 14276528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->gt3);CHKERRQ(ierr); 14286528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdf0);CHKERRQ(ierr); 14296528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdf1);CHKERRQ(ierr); 14306528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdg0);CHKERRQ(ierr); 14316528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdg1);CHKERRQ(ierr); 14326528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdg2);CHKERRQ(ierr); 14336528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdg3);CHKERRQ(ierr); 14346528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdgp0);CHKERRQ(ierr); 14356528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdgp1);CHKERRQ(ierr); 14366528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdgp2);CHKERRQ(ierr); 14376528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->bdgp3);CHKERRQ(ierr); 14386528b96dSMatthew G. Knepley ierr = PetscHMapFormDestroy(&(*wf)->r);CHKERRQ(ierr); 14396528b96dSMatthew G. Knepley ierr = PetscHeaderDestroy(wf);CHKERRQ(ierr); 14406528b96dSMatthew G. Knepley PetscFunctionReturn(0); 14416528b96dSMatthew G. Knepley } 14426528b96dSMatthew G. Knepley 1443*45480ffeSMatthew G. Knepley static PetscErrorCode PetscWeakFormViewTable_Ascii(PetscWeakForm wf, PetscViewer viewer, PetscBool splitField, const char tableName[], PetscHMapForm map) 14446528b96dSMatthew G. Knepley { 1445*45480ffeSMatthew G. Knepley PetscInt Nf = wf->Nf, Nk, k; 14466528b96dSMatthew G. Knepley PetscErrorCode ierr; 14476528b96dSMatthew G. Knepley 14486528b96dSMatthew G. Knepley PetscFunctionBegin; 14496528b96dSMatthew G. Knepley ierr = PetscHMapFormGetSize(map, &Nk);CHKERRQ(ierr); 14506528b96dSMatthew G. Knepley if (Nk) { 14516528b96dSMatthew G. Knepley PetscHashFormKey *keys; 14526528b96dSMatthew G. Knepley void (**funcs)(void); 14536528b96dSMatthew G. Knepley const char *name; 14546528b96dSMatthew G. Knepley PetscInt off = 0, n, i; 14556528b96dSMatthew G. Knepley 14566528b96dSMatthew G. Knepley ierr = PetscMalloc1(Nk, &keys);CHKERRQ(ierr); 14576528b96dSMatthew G. Knepley ierr = PetscHMapFormGetKeys(map, &off, keys);CHKERRQ(ierr); 14586528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPrintf(viewer, "%s\n", tableName);CHKERRQ(ierr); 14596528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr); 14606528b96dSMatthew G. Knepley for (k = 0; k < Nk; ++k) { 1461*45480ffeSMatthew G. Knepley if (keys[k].label) { 1462*45480ffeSMatthew G. Knepley ierr = PetscObjectGetName((PetscObject) keys[k].label, &name);CHKERRQ(ierr); 1463*45480ffeSMatthew G. Knepley ierr = PetscViewerASCIIPrintf(viewer, "(%s, %D) ", name, keys[k].value);CHKERRQ(ierr); 1464*45480ffeSMatthew G. Knepley } else {ierr = PetscViewerASCIIPrintf(viewer, "");CHKERRQ(ierr);} 14656528b96dSMatthew G. Knepley ierr = PetscViewerASCIIUseTabs(viewer, PETSC_FALSE);CHKERRQ(ierr); 1466*45480ffeSMatthew G. Knepley if (splitField) {ierr = PetscViewerASCIIPrintf(viewer, "(%D, %D) ", keys[k].field/Nf, keys[k].field%Nf);CHKERRQ(ierr);} 1467*45480ffeSMatthew G. Knepley else {ierr = PetscViewerASCIIPrintf(viewer, "(%D) ", keys[k].field);CHKERRQ(ierr);} 14686528b96dSMatthew G. Knepley ierr = PetscWeakFormGetFunction_Private(wf, map, keys[k].label, keys[k].value, keys[k].field, &n, &funcs);CHKERRQ(ierr); 14696528b96dSMatthew G. Knepley for (i = 0; i < n; ++i) { 14706528b96dSMatthew G. Knepley if (i > 0) {ierr = PetscViewerASCIIPrintf(viewer, ", ");CHKERRQ(ierr);} 14716528b96dSMatthew G. Knepley ierr = PetscDLAddr(funcs[i], &name);CHKERRQ(ierr); 14726528b96dSMatthew G. Knepley if (name) {ierr = PetscViewerASCIIPrintf(viewer, "%s", name);CHKERRQ(ierr);} 14736528b96dSMatthew G. Knepley else {ierr = PetscViewerASCIIPrintf(viewer, "%p", funcs[i]);CHKERRQ(ierr);} 14746528b96dSMatthew G. Knepley } 14756528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPrintf(viewer, "\n");CHKERRQ(ierr); 14766528b96dSMatthew G. Knepley ierr = PetscViewerASCIIUseTabs(viewer, PETSC_TRUE);CHKERRQ(ierr); 14776528b96dSMatthew G. Knepley } 14786528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr); 14796528b96dSMatthew G. Knepley ierr = PetscFree(keys);CHKERRQ(ierr); 14806528b96dSMatthew G. Knepley } 14816528b96dSMatthew G. Knepley PetscFunctionReturn(0); 14826528b96dSMatthew G. Knepley } 14836528b96dSMatthew G. Knepley 14846528b96dSMatthew G. Knepley static PetscErrorCode PetscWeakFormView_Ascii(PetscWeakForm wf, PetscViewer viewer) 14856528b96dSMatthew G. Knepley { 14866528b96dSMatthew G. Knepley PetscViewerFormat format; 14876528b96dSMatthew G. Knepley PetscErrorCode ierr; 14886528b96dSMatthew G. Knepley 14896528b96dSMatthew G. Knepley PetscFunctionBegin; 14906528b96dSMatthew G. Knepley ierr = PetscViewerGetFormat(viewer, &format);CHKERRQ(ierr); 14916528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPrintf(viewer, "Weak Form System with %d fields\n", wf->Nf);CHKERRQ(ierr); 14926528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr); 1493*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Objective", wf->obj);CHKERRQ(ierr); 1494*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Residual f0", wf->f0);CHKERRQ(ierr); 1495*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Residual f1", wf->f1);CHKERRQ(ierr); 1496*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Boundary Residual f0", wf->bdf0);CHKERRQ(ierr); 1497*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Boundary Residual f1", wf->bdf1);CHKERRQ(ierr); 1498*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian g0", wf->g0);CHKERRQ(ierr); 1499*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian g1", wf->g1);CHKERRQ(ierr); 1500*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian g2", wf->g2);CHKERRQ(ierr); 1501*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian g3", wf->g3);CHKERRQ(ierr); 1502*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian Preconditioner g0", wf->gp0);CHKERRQ(ierr); 1503*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian Preconditioner g1", wf->gp1);CHKERRQ(ierr); 1504*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian Preconditioner g2", wf->gp2);CHKERRQ(ierr); 1505*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Jacobian Preconditioner g3", wf->gp3);CHKERRQ(ierr); 1506*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Dynamic Jacobian g0", wf->gt0);CHKERRQ(ierr); 1507*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Dynamic Jacobian g1", wf->gt1);CHKERRQ(ierr); 1508*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Dynamic Jacobian g2", wf->gt2);CHKERRQ(ierr); 1509*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Dynamic Jacobian g3", wf->gt3);CHKERRQ(ierr); 1510*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian g0", wf->bdg0);CHKERRQ(ierr); 1511*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian g1", wf->bdg1);CHKERRQ(ierr); 1512*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian g2", wf->bdg2);CHKERRQ(ierr); 1513*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian g3", wf->bdg3);CHKERRQ(ierr); 1514*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian Preconditioner g0", wf->bdgp0);CHKERRQ(ierr); 1515*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian Preconditioner g1", wf->bdgp1);CHKERRQ(ierr); 1516*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian Preconditioner g2", wf->bdgp2);CHKERRQ(ierr); 1517*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_TRUE, "Boundary Jacobian Preconditioner g3", wf->bdgp3);CHKERRQ(ierr); 1518*45480ffeSMatthew G. Knepley ierr = PetscWeakFormViewTable_Ascii(wf, viewer, PETSC_FALSE, "Riemann Solver", wf->r);CHKERRQ(ierr); 15196528b96dSMatthew G. Knepley ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr); 15206528b96dSMatthew G. Knepley PetscFunctionReturn(0); 15216528b96dSMatthew G. Knepley } 15226528b96dSMatthew G. Knepley 15236528b96dSMatthew G. Knepley /*@C 15246528b96dSMatthew G. Knepley PetscWeakFormView - Views a PetscWeakForm 15256528b96dSMatthew G. Knepley 15266528b96dSMatthew G. Knepley Collective on wf 15276528b96dSMatthew G. Knepley 15286528b96dSMatthew G. Knepley Input Parameter: 15296528b96dSMatthew G. Knepley + wf - the PetscWeakForm object to view 15306528b96dSMatthew G. Knepley - v - the viewer 15316528b96dSMatthew G. Knepley 15326528b96dSMatthew G. Knepley Level: developer 15336528b96dSMatthew G. Knepley 15346528b96dSMatthew G. Knepley .seealso PetscWeakFormDestroy(), PetscWeakFormCreate() 15356528b96dSMatthew G. Knepley @*/ 15366528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormView(PetscWeakForm wf, PetscViewer v) 15376528b96dSMatthew G. Knepley { 15386528b96dSMatthew G. Knepley PetscBool iascii; 15396528b96dSMatthew G. Knepley PetscErrorCode ierr; 15406528b96dSMatthew G. Knepley 15416528b96dSMatthew G. Knepley PetscFunctionBegin; 15426528b96dSMatthew G. Knepley PetscValidHeaderSpecific(wf, PETSCWEAKFORM_CLASSID, 1); 15436528b96dSMatthew G. Knepley if (!v) {ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject) wf), &v);CHKERRQ(ierr);} 15446528b96dSMatthew G. Knepley else {PetscValidHeaderSpecific(v, PETSC_VIEWER_CLASSID, 2);} 15456528b96dSMatthew G. Knepley ierr = PetscObjectTypeCompare((PetscObject) v, PETSCVIEWERASCII, &iascii);CHKERRQ(ierr); 15466528b96dSMatthew G. Knepley if (iascii) {ierr = PetscWeakFormView_Ascii(wf, v);CHKERRQ(ierr);} 15476528b96dSMatthew G. Knepley if (wf->ops->view) {ierr = (*wf->ops->view)(wf, v);CHKERRQ(ierr);} 15486528b96dSMatthew G. Knepley PetscFunctionReturn(0); 15496528b96dSMatthew G. Knepley } 15506528b96dSMatthew G. Knepley 15516528b96dSMatthew G. Knepley /*@ 15526528b96dSMatthew G. Knepley PetscWeakFormCreate - Creates an empty PetscWeakForm object. 15536528b96dSMatthew G. Knepley 15546528b96dSMatthew G. Knepley Collective 15556528b96dSMatthew G. Knepley 15566528b96dSMatthew G. Knepley Input Parameter: 15576528b96dSMatthew G. Knepley . comm - The communicator for the PetscWeakForm object 15586528b96dSMatthew G. Knepley 15596528b96dSMatthew G. Knepley Output Parameter: 15606528b96dSMatthew G. Knepley . wf - The PetscWeakForm object 15616528b96dSMatthew G. Knepley 15626528b96dSMatthew G. Knepley Level: beginner 15636528b96dSMatthew G. Knepley 15646528b96dSMatthew G. Knepley .seealso: PetscDS, PetscWeakFormDestroy() 15656528b96dSMatthew G. Knepley @*/ 15666528b96dSMatthew G. Knepley PetscErrorCode PetscWeakFormCreate(MPI_Comm comm, PetscWeakForm *wf) 15676528b96dSMatthew G. Knepley { 15686528b96dSMatthew G. Knepley PetscWeakForm p; 15696528b96dSMatthew G. Knepley PetscErrorCode ierr; 15706528b96dSMatthew G. Knepley 15716528b96dSMatthew G. Knepley PetscFunctionBegin; 15726528b96dSMatthew G. Knepley PetscValidPointer(wf, 2); 15736528b96dSMatthew G. Knepley *wf = NULL; 15746528b96dSMatthew G. Knepley ierr = PetscDSInitializePackage();CHKERRQ(ierr); 15756528b96dSMatthew G. Knepley 15766528b96dSMatthew G. Knepley ierr = PetscHeaderCreate(p, PETSCWEAKFORM_CLASSID, "PetscWeakForm", "Weak Form System", "PetscWeakForm", comm, PetscWeakFormDestroy, PetscWeakFormView);CHKERRQ(ierr); 15776528b96dSMatthew G. Knepley 15786528b96dSMatthew G. Knepley p->Nf = 0; 15796528b96dSMatthew G. Knepley ierr = PetscChunkBufferCreate(sizeof(&PetscWeakFormCreate), 2, &p->funcs);CHKERRQ(ierr); 15806528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->obj);CHKERRQ(ierr); 15816528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->f0);CHKERRQ(ierr); 15826528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->f1);CHKERRQ(ierr); 15836528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->g0);CHKERRQ(ierr); 15846528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->g1);CHKERRQ(ierr); 15856528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->g2);CHKERRQ(ierr); 15866528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->g3);CHKERRQ(ierr); 15876528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gp0);CHKERRQ(ierr); 15886528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gp1);CHKERRQ(ierr); 15896528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gp2);CHKERRQ(ierr); 15906528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gp3);CHKERRQ(ierr); 15916528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gt0);CHKERRQ(ierr); 15926528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gt1);CHKERRQ(ierr); 15936528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gt2);CHKERRQ(ierr); 15946528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->gt3);CHKERRQ(ierr); 15956528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdf0);CHKERRQ(ierr); 15966528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdf1);CHKERRQ(ierr); 15976528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdg0);CHKERRQ(ierr); 15986528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdg1);CHKERRQ(ierr); 15996528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdg2);CHKERRQ(ierr); 16006528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdg3);CHKERRQ(ierr); 16016528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdgp0);CHKERRQ(ierr); 16026528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdgp1);CHKERRQ(ierr); 16036528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdgp2);CHKERRQ(ierr); 16046528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->bdgp3);CHKERRQ(ierr); 16056528b96dSMatthew G. Knepley ierr = PetscHMapFormCreate(&p->r);CHKERRQ(ierr); 16066528b96dSMatthew G. Knepley *wf = p; 16076528b96dSMatthew G. Knepley PetscFunctionReturn(0); 16086528b96dSMatthew G. Knepley } 1609