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 PetscErrorCode ierr; 4206ad1575SMatthew G. Knepley 4306ad1575SMatthew G. Knepley PetscFunctionBegin; 4406ad1575SMatthew G. Knepley ierr = PetscWeakFormGetResidual(wf, key.label, key.value, key.field, key.part, &n0, &f0, &n1, &f1);CHKERRQ(ierr); 45*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(n0 != in0,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f0 functions != %D functions input", n0, in0); 46*2c71b3e2SJacob 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);} 47*2c71b3e2SJacob Faibussowitsch PetscCheckFalse(n1 != in1,PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f1 functions != %D functions input", n0, in0); 48*2c71b3e2SJacob 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);} 4906ad1575SMatthew G. Knepley PetscFunctionReturn(0); 5006ad1575SMatthew G. Knepley } 5106ad1575SMatthew G. Knepley 5206ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndex(PetscWeakForm wf) 5306ad1575SMatthew G. Knepley { 5406ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 5506ad1575SMatthew G. Knepley DMLabel label; 5606ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 5706ad1575SMatthew G. Knepley PetscFormKey key; 5806ad1575SMatthew G. Knepley PetscInt i, j, k, l; 5906ad1575SMatthew G. Knepley PetscErrorCode ierr; 6006ad1575SMatthew G. Knepley 6106ad1575SMatthew G. Knepley PetscFunctionBegin; 6206ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 6306ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 6406ad1575SMatthew G. Knepley /* Check f0 */ 6506ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 6606ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 6706ad1575SMatthew G. Knepley if (j == i) continue; 6806ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 6906ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 7006ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 7106ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 7206ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], 0, NULL);CHKERRQ(ierr); 7306ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], 0, NULL);CHKERRQ(ierr); 7406ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], 0, NULL);CHKERRQ(ierr); 7506ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], 0, NULL);CHKERRQ(ierr); 7606ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 7706ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 7806ad1575SMatthew G. Knepley } 7906ad1575SMatthew G. Knepley } 8006ad1575SMatthew G. Knepley } 8106ad1575SMatthew G. Knepley } 8206ad1575SMatthew G. Knepley /* Check f1 */ 8306ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 8406ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 8506ad1575SMatthew G. Knepley if (j == i) continue; 8606ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 8706ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 8806ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 8906ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 9006ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, i, f[i]);CHKERRQ(ierr); 9106ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, j, f[j]);CHKERRQ(ierr); 9206ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, k, f[k]);CHKERRQ(ierr); 9306ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, l, f[l]);CHKERRQ(ierr); 9406ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 9506ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 9606ad1575SMatthew G. Knepley } 9706ad1575SMatthew G. Knepley } 9806ad1575SMatthew G. Knepley } 9906ad1575SMatthew G. Knepley } 10006ad1575SMatthew G. Knepley /* Check f0 and f1 */ 10106ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 10206ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 10306ad1575SMatthew G. Knepley if (j == i) continue; 10406ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 10506ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 10606ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 10706ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 10806ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], i, f[i]);CHKERRQ(ierr); 10906ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], j, f[j]);CHKERRQ(ierr); 11006ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], k, f[k]);CHKERRQ(ierr); 11106ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], l, f[l]);CHKERRQ(ierr); 11206ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 4, f);CHKERRQ(ierr); 11306ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 11406ad1575SMatthew G. Knepley } 11506ad1575SMatthew G. Knepley } 11606ad1575SMatthew G. Knepley } 11706ad1575SMatthew G. Knepley } 11806ad1575SMatthew G. Knepley /* Check f0 and f1 in different orders */ 11906ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 12006ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 12106ad1575SMatthew G. Knepley if (j == i) continue; 12206ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 12306ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 12406ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 12506ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 12606ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], i, f[i]);CHKERRQ(ierr); 12706ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], j, f[j]);CHKERRQ(ierr); 12806ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], k, f[k]);CHKERRQ(ierr); 12906ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], l, f[l]);CHKERRQ(ierr); 13006ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 4, f);CHKERRQ(ierr); 13106ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 13206ad1575SMatthew G. Knepley } 13306ad1575SMatthew G. Knepley } 13406ad1575SMatthew G. Knepley } 13506ad1575SMatthew G. Knepley } 13606ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 13706ad1575SMatthew G. Knepley PetscFunctionReturn(0); 13806ad1575SMatthew G. Knepley } 13906ad1575SMatthew G. Knepley 14006ad1575SMatthew G. Knepley static PetscErrorCode TestAdd(PetscWeakForm wf) 14106ad1575SMatthew G. Knepley { 14206ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}, fp[4]; 14306ad1575SMatthew G. Knepley DMLabel label; 14406ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 14506ad1575SMatthew G. Knepley PetscFormKey key; 14606ad1575SMatthew G. Knepley PetscInt i, j, k, l; 14706ad1575SMatthew G. Knepley PetscErrorCode ierr; 14806ad1575SMatthew G. Knepley 14906ad1575SMatthew G. Knepley PetscFunctionBegin; 15006ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 15106ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 15206ad1575SMatthew G. Knepley /* Check f0 */ 15306ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 15406ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 15506ad1575SMatthew G. Knepley if (j == i) continue; 15606ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 15706ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 15806ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 15906ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 16006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], NULL);CHKERRQ(ierr); 16106ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], NULL);CHKERRQ(ierr); 16206ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], NULL);CHKERRQ(ierr); 16306ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], NULL);CHKERRQ(ierr); 16406ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 16506ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, fp, 0, NULL);CHKERRQ(ierr); 16606ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 16706ad1575SMatthew G. Knepley } 16806ad1575SMatthew G. Knepley } 16906ad1575SMatthew G. Knepley } 17006ad1575SMatthew G. Knepley } 17106ad1575SMatthew G. Knepley /* Check f1 */ 17206ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 17306ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 17406ad1575SMatthew G. Knepley if (j == i) continue; 17506ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 17606ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 17706ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 17806ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 17906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[i]);CHKERRQ(ierr); 18006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[j]);CHKERRQ(ierr); 18106ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[k]);CHKERRQ(ierr); 18206ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[l]);CHKERRQ(ierr); 18306ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 18406ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, fp);CHKERRQ(ierr); 18506ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 18606ad1575SMatthew G. Knepley } 18706ad1575SMatthew G. Knepley } 18806ad1575SMatthew G. Knepley } 18906ad1575SMatthew G. Knepley } 19006ad1575SMatthew G. Knepley /* Check f0 and f1 */ 19106ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 19206ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 19306ad1575SMatthew G. Knepley if (j == i) continue; 19406ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 19506ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 19606ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 19706ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 19806ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], f[i]);CHKERRQ(ierr); 19906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], f[j]);CHKERRQ(ierr); 20006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], f[k]);CHKERRQ(ierr); 20106ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], f[l]);CHKERRQ(ierr); 20206ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 20306ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, fp, 4, fp);CHKERRQ(ierr); 20406ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 20506ad1575SMatthew G. Knepley } 20606ad1575SMatthew G. Knepley } 20706ad1575SMatthew G. Knepley } 20806ad1575SMatthew G. Knepley } 20906ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 21006ad1575SMatthew G. Knepley PetscFunctionReturn(0); 21106ad1575SMatthew G. Knepley } 21206ad1575SMatthew G. Knepley 21306ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndexAdd(PetscWeakForm wf) 21406ad1575SMatthew G. Knepley { 21506ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 21606ad1575SMatthew G. Knepley DMLabel label; 21706ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 21806ad1575SMatthew G. Knepley PetscFormKey key; 21906ad1575SMatthew G. Knepley PetscErrorCode ierr; 22006ad1575SMatthew G. Knepley 22106ad1575SMatthew G. Knepley PetscFunctionBegin; 22206ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 22306ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 22406ad1575SMatthew G. Knepley /* Check f0 */ 22506ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 22606ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL);CHKERRQ(ierr); 22706ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 22806ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL);CHKERRQ(ierr); 22906ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 23006ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 23106ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 23206ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 23306ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL);CHKERRQ(ierr); 23406ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL);CHKERRQ(ierr); 23506ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 23606ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 23706ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 23806ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 23906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 24006ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 24106ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 24206ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 24306ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL);CHKERRQ(ierr); 24406ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL);CHKERRQ(ierr); 24506ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 24606ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 24706ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 24806ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 24906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL);CHKERRQ(ierr); 25006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 25106ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL);CHKERRQ(ierr); 25206ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 25306ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 25406ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 25506ad1575SMatthew G. Knepley /* Check f1 */ 25606ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 25706ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1]);CHKERRQ(ierr); 25806ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 25906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3]);CHKERRQ(ierr); 26006ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 26106ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 26206ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 26306ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 26406ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2]);CHKERRQ(ierr); 26506ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3]);CHKERRQ(ierr); 26606ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 26706ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 26806ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 26906ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 27006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 27106ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 27206ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 27306ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 27406ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0]);CHKERRQ(ierr); 27506ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1]);CHKERRQ(ierr); 27606ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 27706ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 27806ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 27906ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 28006ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0]);CHKERRQ(ierr); 28106ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 28206ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2]);CHKERRQ(ierr); 28306ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 28406ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 28506ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 28606ad1575SMatthew G. Knepley 28706ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 28806ad1575SMatthew G. Knepley PetscFunctionReturn(0); 28906ad1575SMatthew G. Knepley } 29006ad1575SMatthew G. Knepley 29106ad1575SMatthew G. Knepley int main(int argc,char **argv) 29206ad1575SMatthew G. Knepley { 29306ad1575SMatthew G. Knepley PetscWeakForm wf; 29406ad1575SMatthew G. Knepley PetscErrorCode ierr; 29506ad1575SMatthew G. Knepley 29606ad1575SMatthew G. Knepley ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 29706ad1575SMatthew G. Knepley ierr = PetscWeakFormCreate(PETSC_COMM_SELF, &wf);CHKERRQ(ierr); 29806ad1575SMatthew G. Knepley ierr = TestSetIndex(wf);CHKERRQ(ierr); 29906ad1575SMatthew G. Knepley ierr = TestAdd(wf);CHKERRQ(ierr); 30006ad1575SMatthew G. Knepley ierr = TestSetIndexAdd(wf);CHKERRQ(ierr); 30106ad1575SMatthew G. Knepley ierr = PetscWeakFormDestroy(&wf);CHKERRQ(ierr); 30206ad1575SMatthew G. Knepley ierr = PetscFinalize(); 30306ad1575SMatthew G. Knepley return ierr; 30406ad1575SMatthew G. Knepley } 30506ad1575SMatthew G. Knepley 30606ad1575SMatthew G. Knepley /*TEST 30706ad1575SMatthew G. Knepley 30806ad1575SMatthew G. Knepley test: 30906ad1575SMatthew G. Knepley suffix: 0 31006ad1575SMatthew G. Knepley 31106ad1575SMatthew G. Knepley TEST*/ 312