106ad1575SMatthew G. Knepley static char help[] = "Tests for PetscWeakForm.\n\n"; 206ad1575SMatthew G. Knepley 306ad1575SMatthew G. Knepley #include <petscds.h> 406ad1575SMatthew G. Knepley 506ad1575SMatthew G. Knepley static void f0(PetscInt dim, PetscInt Nf, PetscInt NfAux, 606ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 706ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 806ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 906ad1575SMatthew G. Knepley { 1006ad1575SMatthew G. Knepley f0[0] = 0.0; 1106ad1575SMatthew G. Knepley } 1206ad1575SMatthew G. Knepley 1306ad1575SMatthew G. Knepley static void f1(PetscInt dim, PetscInt Nf, PetscInt NfAux, 1406ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 1506ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 1606ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 1706ad1575SMatthew G. Knepley { 1806ad1575SMatthew G. Knepley f0[0] = 0.0; 1906ad1575SMatthew G. Knepley } 2006ad1575SMatthew G. Knepley 2106ad1575SMatthew G. Knepley static void f2(PetscInt dim, PetscInt Nf, PetscInt NfAux, 2206ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 2306ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 2406ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 2506ad1575SMatthew G. Knepley { 2606ad1575SMatthew G. Knepley f0[0] = 0.0; 2706ad1575SMatthew G. Knepley } 2806ad1575SMatthew G. Knepley 2906ad1575SMatthew G. Knepley static void f3(PetscInt dim, PetscInt Nf, PetscInt NfAux, 3006ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 3106ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 3206ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 3306ad1575SMatthew G. Knepley { 3406ad1575SMatthew G. Knepley f0[0] = 0.0; 3506ad1575SMatthew G. Knepley } 3606ad1575SMatthew G. Knepley 3706ad1575SMatthew G. Knepley static PetscErrorCode CheckResidual(PetscWeakForm wf, PetscFormKey key, PetscInt in0, PetscPointFunc if0[], PetscInt in1, PetscPointFunc if1[]) 3806ad1575SMatthew G. Knepley { 3906ad1575SMatthew G. Knepley PetscPointFunc *f0, *f1; 4006ad1575SMatthew G. Knepley PetscInt n0, n1, i; 4106ad1575SMatthew G. Knepley 4206ad1575SMatthew G. Knepley PetscFunctionBegin; 439566063dSJacob Faibussowitsch PetscCall(PetscWeakFormGetResidual(wf, key.label, key.value, key.field, key.part, &n0, &f0, &n1, &f1)); 4463a3b9bcSJacob Faibussowitsch PetscCheck(n0 == in0,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %" PetscInt_FMT " f0 functions != %" PetscInt_FMT " functions input", n0, in0); 4563a3b9bcSJacob Faibussowitsch for (i = 0; i < n0; ++i) {PetscCheck(f0[i] == if0[i],PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f0[%" PetscInt_FMT "] != input f0[%" PetscInt_FMT "]", i, i);} 4663a3b9bcSJacob Faibussowitsch PetscCheck(n1 == in1,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %" PetscInt_FMT " f1 functions != %" PetscInt_FMT " functions input", n0, in0); 4763a3b9bcSJacob Faibussowitsch for (i = 0; i < n1; ++i) {PetscCheck(f1[i] == if1[i],PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f1[%" PetscInt_FMT "] != input f1[%" PetscInt_FMT "]", i, i);} 4806ad1575SMatthew G. Knepley PetscFunctionReturn(0); 4906ad1575SMatthew G. Knepley } 5006ad1575SMatthew G. Knepley 5106ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndex(PetscWeakForm wf) 5206ad1575SMatthew G. Knepley { 5306ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 5406ad1575SMatthew G. Knepley DMLabel label; 5506ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 5606ad1575SMatthew G. Knepley PetscFormKey key; 5706ad1575SMatthew G. Knepley PetscInt i, j, k, l; 5806ad1575SMatthew G. Knepley 5906ad1575SMatthew G. Knepley PetscFunctionBegin; 609566063dSJacob Faibussowitsch PetscCall(DMLabelCreate(PETSC_COMM_SELF, "Test", &label)); 6106ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 6206ad1575SMatthew G. Knepley /* Check f0 */ 6306ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 6406ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 6506ad1575SMatthew G. Knepley if (j == i) continue; 6606ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 6706ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 6806ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 6906ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 709566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], 0, NULL)); 719566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], 0, NULL)); 729566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], 0, NULL)); 739566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], 0, NULL)); 749566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 759566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 7606ad1575SMatthew G. Knepley } 7706ad1575SMatthew G. Knepley } 7806ad1575SMatthew G. Knepley } 7906ad1575SMatthew G. Knepley } 8006ad1575SMatthew G. Knepley /* Check f1 */ 8106ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 8206ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 8306ad1575SMatthew G. Knepley if (j == i) continue; 8406ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 8506ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 8606ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 8706ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 889566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, i, f[i])); 899566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, j, f[j])); 909566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, k, f[k])); 919566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, l, f[l])); 929566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 939566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 9406ad1575SMatthew G. Knepley } 9506ad1575SMatthew G. Knepley } 9606ad1575SMatthew G. Knepley } 9706ad1575SMatthew G. Knepley } 9806ad1575SMatthew G. Knepley /* Check f0 and f1 */ 9906ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 10006ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 10106ad1575SMatthew G. Knepley if (j == i) continue; 10206ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 10306ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 10406ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 10506ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 1069566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], i, f[i])); 1079566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], j, f[j])); 1089566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], k, f[k])); 1099566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], l, f[l])); 1109566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 4, f)); 1119566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 11206ad1575SMatthew G. Knepley } 11306ad1575SMatthew G. Knepley } 11406ad1575SMatthew G. Knepley } 11506ad1575SMatthew G. Knepley } 11606ad1575SMatthew G. Knepley /* Check f0 and f1 in different orders */ 11706ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 11806ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 11906ad1575SMatthew G. Knepley if (j == i) continue; 12006ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 12106ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 12206ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 12306ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 1249566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], i, f[i])); 1259566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], j, f[j])); 1269566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], k, f[k])); 1279566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], l, f[l])); 1289566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 4, f)); 1299566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 13006ad1575SMatthew G. Knepley } 13106ad1575SMatthew G. Knepley } 13206ad1575SMatthew G. Knepley } 13306ad1575SMatthew G. Knepley } 1349566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label)); 13506ad1575SMatthew G. Knepley PetscFunctionReturn(0); 13606ad1575SMatthew G. Knepley } 13706ad1575SMatthew G. Knepley 13806ad1575SMatthew G. Knepley static PetscErrorCode TestAdd(PetscWeakForm wf) 13906ad1575SMatthew G. Knepley { 14006ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}, fp[4]; 14106ad1575SMatthew G. Knepley DMLabel label; 14206ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 14306ad1575SMatthew G. Knepley PetscFormKey key; 14406ad1575SMatthew G. Knepley PetscInt i, j, k, l; 14506ad1575SMatthew G. Knepley 14606ad1575SMatthew G. Knepley PetscFunctionBegin; 1479566063dSJacob Faibussowitsch PetscCall(DMLabelCreate(PETSC_COMM_SELF, "Test", &label)); 14806ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 14906ad1575SMatthew G. Knepley /* Check f0 */ 15006ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 15106ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 15206ad1575SMatthew G. Knepley if (j == i) continue; 15306ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 15406ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 15506ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 15606ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 1579566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], NULL)); 1589566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], NULL)); 1599566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], NULL)); 1609566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], NULL)); 16106ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 1629566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, fp, 0, NULL)); 1639566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 16406ad1575SMatthew G. Knepley } 16506ad1575SMatthew G. Knepley } 16606ad1575SMatthew G. Knepley } 16706ad1575SMatthew G. Knepley } 16806ad1575SMatthew G. Knepley /* Check f1 */ 16906ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 17006ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 17106ad1575SMatthew G. Knepley if (j == i) continue; 17206ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 17306ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 17406ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 17506ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 1769566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[i])); 1779566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[j])); 1789566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[k])); 1799566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[l])); 18006ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 1819566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, fp)); 1829566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 18306ad1575SMatthew G. Knepley } 18406ad1575SMatthew G. Knepley } 18506ad1575SMatthew G. Knepley } 18606ad1575SMatthew G. Knepley } 18706ad1575SMatthew G. Knepley /* Check f0 and f1 */ 18806ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 18906ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 19006ad1575SMatthew G. Knepley if (j == i) continue; 19106ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 19206ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 19306ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 19406ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 1959566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], f[i])); 1969566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], f[j])); 1979566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], f[k])); 1989566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], f[l])); 19906ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 2009566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, fp, 4, fp)); 2019566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 20206ad1575SMatthew G. Knepley } 20306ad1575SMatthew G. Knepley } 20406ad1575SMatthew G. Knepley } 20506ad1575SMatthew G. Knepley } 2069566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label)); 20706ad1575SMatthew G. Knepley PetscFunctionReturn(0); 20806ad1575SMatthew G. Knepley } 20906ad1575SMatthew G. Knepley 21006ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndexAdd(PetscWeakForm wf) 21106ad1575SMatthew G. Knepley { 21206ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 21306ad1575SMatthew G. Knepley DMLabel label; 21406ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 21506ad1575SMatthew G. Knepley PetscFormKey key; 21606ad1575SMatthew G. Knepley 21706ad1575SMatthew G. Knepley PetscFunctionBegin; 2189566063dSJacob Faibussowitsch PetscCall(DMLabelCreate(PETSC_COMM_SELF, "Test", &label)); 21906ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 22006ad1575SMatthew G. Knepley /* Check f0 */ 2219566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2229566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL)); 2239566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2249566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL)); 2259566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 2269566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2279566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2289566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2299566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL)); 2309566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL)); 2319566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 2329566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2339566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2349566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2359566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2369566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2379566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 2389566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2399566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL)); 2409566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL)); 2419566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2429566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2439566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 2449566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2459566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL)); 2469566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2479566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL)); 2489566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2499566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 4, f, 0, NULL)); 2509566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 25106ad1575SMatthew G. Knepley /* Check f1 */ 2529566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2539566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1])); 2549566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2559566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3])); 2569566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 2579566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2589566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2599566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2609566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2])); 2619566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3])); 2629566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 2639566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2649566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2659566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2669566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2679566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2689566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 2699566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2709566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0])); 2719566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1])); 2729566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2739566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2749566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 2759566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 2769566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0])); 2779566063dSJacob Faibussowitsch PetscCall(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2789566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2])); 2799566063dSJacob Faibussowitsch PetscCall(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2809566063dSJacob Faibussowitsch PetscCall(CheckResidual(wf, key, 0, NULL, 4, f)); 2819566063dSJacob Faibussowitsch PetscCall(PetscWeakFormClear(wf)); 28206ad1575SMatthew G. Knepley 2839566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label)); 28406ad1575SMatthew G. Knepley PetscFunctionReturn(0); 28506ad1575SMatthew G. Knepley } 28606ad1575SMatthew G. Knepley 28706ad1575SMatthew G. Knepley int main(int argc,char **argv) 28806ad1575SMatthew G. Knepley { 28906ad1575SMatthew G. Knepley PetscWeakForm wf; 29006ad1575SMatthew G. Knepley 291*327415f7SBarry Smith PetscFunctionBeginUser; 2929566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 2939566063dSJacob Faibussowitsch PetscCall(PetscWeakFormCreate(PETSC_COMM_SELF, &wf)); 2949566063dSJacob Faibussowitsch PetscCall(TestSetIndex(wf)); 2959566063dSJacob Faibussowitsch PetscCall(TestAdd(wf)); 2969566063dSJacob Faibussowitsch PetscCall(TestSetIndexAdd(wf)); 2979566063dSJacob Faibussowitsch PetscCall(PetscWeakFormDestroy(&wf)); 2989566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 299b122ec5aSJacob Faibussowitsch return 0; 30006ad1575SMatthew G. Knepley } 30106ad1575SMatthew G. Knepley 30206ad1575SMatthew G. Knepley /*TEST 30306ad1575SMatthew G. Knepley 30406ad1575SMatthew G. Knepley test: 30506ad1575SMatthew G. Knepley suffix: 0 30606ad1575SMatthew G. Knepley 30706ad1575SMatthew G. Knepley TEST*/ 308