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; 435f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormGetResidual(wf, key.label, key.value, key.field, key.part, &n0, &f0, &n1, &f1)); 442c71b3e2SJacob Faibussowitsch PetscCheckFalse(n0 != in0,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f0 functions != %D functions input", n0, in0); 452c71b3e2SJacob Faibussowitsch for (i = 0; i < n0; ++i) {PetscCheckFalse(f0[i] != if0[i],PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f0[%D] != input f0[%D]", i, i);} 462c71b3e2SJacob Faibussowitsch PetscCheckFalse(n1 != in1,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f1 functions != %D functions input", n0, in0); 472c71b3e2SJacob Faibussowitsch for (i = 0; i < n1; ++i) {PetscCheckFalse(f1[i] != if1[i],PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f1[%D] != input f1[%D]", 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; 605f80ce2aSJacob Faibussowitsch CHKERRQ(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; 705f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], 0, NULL)); 715f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], 0, NULL)); 725f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], 0, NULL)); 735f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], 0, NULL)); 745f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 755f80ce2aSJacob Faibussowitsch CHKERRQ(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; 885f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, i, f[i])); 895f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, j, f[j])); 905f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, k, f[k])); 915f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, l, f[l])); 925f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 935f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1065f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], i, f[i])); 1075f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], j, f[j])); 1085f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], k, f[k])); 1095f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], l, f[l])); 1105f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 4, f)); 1115f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1245f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], i, f[i])); 1255f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], j, f[j])); 1265f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], k, f[k])); 1275f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], l, f[l])); 1285f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 4, f)); 1295f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 13006ad1575SMatthew G. Knepley } 13106ad1575SMatthew G. Knepley } 13206ad1575SMatthew G. Knepley } 13306ad1575SMatthew G. Knepley } 1345f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1475f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1575f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], NULL)); 1585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], NULL)); 1595f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], NULL)); 1605f80ce2aSJacob Faibussowitsch CHKERRQ(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]; 1625f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, fp, 0, NULL)); 1635f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1765f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[i])); 1775f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[j])); 1785f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[k])); 1795f80ce2aSJacob Faibussowitsch CHKERRQ(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]; 1815f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, fp)); 1825f80ce2aSJacob Faibussowitsch CHKERRQ(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; 1955f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], f[i])); 1965f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], f[j])); 1975f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], f[k])); 1985f80ce2aSJacob Faibussowitsch CHKERRQ(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]; 2005f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, fp, 4, fp)); 2015f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 20206ad1575SMatthew G. Knepley } 20306ad1575SMatthew G. Knepley } 20406ad1575SMatthew G. Knepley } 20506ad1575SMatthew G. Knepley } 2065f80ce2aSJacob Faibussowitsch CHKERRQ(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; 2185f80ce2aSJacob Faibussowitsch CHKERRQ(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 */ 2215f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL)); 2235f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2245f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL)); 2255f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 2265f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2275f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2285f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2295f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL)); 2305f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL)); 2315f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 2325f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2335f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL)); 2345f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2365f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2375f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 2385f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2395f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL)); 2405f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL)); 2415f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL)); 2425f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2435f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 2445f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2455f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL)); 2465f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL)); 2475f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL)); 2485f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL)); 2495f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 4, f, 0, NULL)); 2505f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 25106ad1575SMatthew G. Knepley /* Check f1 */ 2525f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2535f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1])); 2545f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2555f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3])); 2565f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 2575f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2595f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2605f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2])); 2615f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3])); 2625f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 2635f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2645f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0])); 2655f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2665f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2675f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2685f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 2695f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2705f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0])); 2715f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1])); 2725f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2])); 2735f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2745f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 2755f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 2765f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0])); 2775f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1])); 2785f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2])); 2795f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3])); 2805f80ce2aSJacob Faibussowitsch CHKERRQ(CheckResidual(wf, key, 0, NULL, 4, f)); 2815f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormClear(wf)); 28206ad1575SMatthew G. Knepley 2835f80ce2aSJacob Faibussowitsch CHKERRQ(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*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc, &argv, NULL, help)); 2925f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormCreate(PETSC_COMM_SELF, &wf)); 2935f80ce2aSJacob Faibussowitsch CHKERRQ(TestSetIndex(wf)); 2945f80ce2aSJacob Faibussowitsch CHKERRQ(TestAdd(wf)); 2955f80ce2aSJacob Faibussowitsch CHKERRQ(TestSetIndexAdd(wf)); 2965f80ce2aSJacob Faibussowitsch CHKERRQ(PetscWeakFormDestroy(&wf)); 297*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 298*b122ec5aSJacob Faibussowitsch return 0; 29906ad1575SMatthew G. Knepley } 30006ad1575SMatthew G. Knepley 30106ad1575SMatthew G. Knepley /*TEST 30206ad1575SMatthew G. Knepley 30306ad1575SMatthew G. Knepley test: 30406ad1575SMatthew G. Knepley suffix: 0 30506ad1575SMatthew G. Knepley 30606ad1575SMatthew G. Knepley TEST*/ 307