1*06ad1575SMatthew G. Knepley static char help[] = "Tests for PetscWeakForm.\n\n"; 2*06ad1575SMatthew G. Knepley 3*06ad1575SMatthew G. Knepley #include <petscds.h> 4*06ad1575SMatthew G. Knepley 5*06ad1575SMatthew G. Knepley static void f0(PetscInt dim, PetscInt Nf, PetscInt NfAux, 6*06ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 7*06ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 8*06ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 9*06ad1575SMatthew G. Knepley { 10*06ad1575SMatthew G. Knepley f0[0] = 0.0; 11*06ad1575SMatthew G. Knepley } 12*06ad1575SMatthew G. Knepley 13*06ad1575SMatthew G. Knepley static void f1(PetscInt dim, PetscInt Nf, PetscInt NfAux, 14*06ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 15*06ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 16*06ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 17*06ad1575SMatthew G. Knepley { 18*06ad1575SMatthew G. Knepley f0[0] = 0.0; 19*06ad1575SMatthew G. Knepley } 20*06ad1575SMatthew G. Knepley 21*06ad1575SMatthew G. Knepley static void f2(PetscInt dim, PetscInt Nf, PetscInt NfAux, 22*06ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 23*06ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 24*06ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 25*06ad1575SMatthew G. Knepley { 26*06ad1575SMatthew G. Knepley f0[0] = 0.0; 27*06ad1575SMatthew G. Knepley } 28*06ad1575SMatthew G. Knepley 29*06ad1575SMatthew G. Knepley static void f3(PetscInt dim, PetscInt Nf, PetscInt NfAux, 30*06ad1575SMatthew G. Knepley const PetscInt uOff[], const PetscInt uOff_x[], const PetscScalar u[], const PetscScalar u_t[], const PetscScalar u_x[], 31*06ad1575SMatthew G. Knepley const PetscInt aOff[], const PetscInt aOff_x[], const PetscScalar a[], const PetscScalar a_t[], const PetscScalar a_x[], 32*06ad1575SMatthew G. Knepley PetscReal t, const PetscReal x[], PetscInt numConstants, const PetscScalar constants[], PetscScalar f0[]) 33*06ad1575SMatthew G. Knepley { 34*06ad1575SMatthew G. Knepley f0[0] = 0.0; 35*06ad1575SMatthew G. Knepley } 36*06ad1575SMatthew G. Knepley 37*06ad1575SMatthew G. Knepley static PetscErrorCode CheckResidual(PetscWeakForm wf, PetscFormKey key, PetscInt in0, PetscPointFunc if0[], PetscInt in1, PetscPointFunc if1[]) 38*06ad1575SMatthew G. Knepley { 39*06ad1575SMatthew G. Knepley PetscPointFunc *f0, *f1; 40*06ad1575SMatthew G. Knepley PetscInt n0, n1, i; 41*06ad1575SMatthew G. Knepley PetscErrorCode ierr; 42*06ad1575SMatthew G. Knepley 43*06ad1575SMatthew G. Knepley PetscFunctionBegin; 44*06ad1575SMatthew G. Knepley ierr = PetscWeakFormGetResidual(wf, key.label, key.value, key.field, key.part, &n0, &f0, &n1, &f1);CHKERRQ(ierr); 45*06ad1575SMatthew G. Knepley if (n0 != in0) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f0 functions != %D functions input", n0, in0); 46*06ad1575SMatthew G. Knepley for (i = 0; i < n0; ++i) {if (f0[i] != if0[i]) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f0[%D] != input f0[%D]", i, i);} 47*06ad1575SMatthew G. Knepley if (n1 != in1) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "Found %D f1 functions != %D functions input", n0, in0); 48*06ad1575SMatthew G. Knepley for (i = 0; i < n1; ++i) {if (f1[i] != if1[i]) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "f1[%D] != input f1[%D]", i, i);} 49*06ad1575SMatthew G. Knepley PetscFunctionReturn(0); 50*06ad1575SMatthew G. Knepley } 51*06ad1575SMatthew G. Knepley 52*06ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndex(PetscWeakForm wf) 53*06ad1575SMatthew G. Knepley { 54*06ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 55*06ad1575SMatthew G. Knepley DMLabel label; 56*06ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 57*06ad1575SMatthew G. Knepley PetscFormKey key; 58*06ad1575SMatthew G. Knepley PetscInt i, j, k, l; 59*06ad1575SMatthew G. Knepley PetscErrorCode ierr; 60*06ad1575SMatthew G. Knepley 61*06ad1575SMatthew G. Knepley PetscFunctionBegin; 62*06ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 63*06ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 64*06ad1575SMatthew G. Knepley /* Check f0 */ 65*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 66*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 67*06ad1575SMatthew G. Knepley if (j == i) continue; 68*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 69*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 70*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 71*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 72*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], 0, NULL);CHKERRQ(ierr); 73*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], 0, NULL);CHKERRQ(ierr); 74*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], 0, NULL);CHKERRQ(ierr); 75*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], 0, NULL);CHKERRQ(ierr); 76*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 77*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 78*06ad1575SMatthew G. Knepley } 79*06ad1575SMatthew G. Knepley } 80*06ad1575SMatthew G. Knepley } 81*06ad1575SMatthew G. Knepley } 82*06ad1575SMatthew G. Knepley /* Check f1 */ 83*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 84*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 85*06ad1575SMatthew G. Knepley if (j == i) continue; 86*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 87*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 88*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 89*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 90*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, i, f[i]);CHKERRQ(ierr); 91*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, j, f[j]);CHKERRQ(ierr); 92*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, k, f[k]);CHKERRQ(ierr); 93*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, l, f[l]);CHKERRQ(ierr); 94*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 95*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 96*06ad1575SMatthew G. Knepley } 97*06ad1575SMatthew G. Knepley } 98*06ad1575SMatthew G. Knepley } 99*06ad1575SMatthew G. Knepley } 100*06ad1575SMatthew G. Knepley /* Check f0 and f1 */ 101*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 102*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 103*06ad1575SMatthew G. Knepley if (j == i) continue; 104*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 105*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 106*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 107*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 108*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], i, f[i]);CHKERRQ(ierr); 109*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], j, f[j]);CHKERRQ(ierr); 110*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], k, f[k]);CHKERRQ(ierr); 111*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], l, f[l]);CHKERRQ(ierr); 112*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 4, f);CHKERRQ(ierr); 113*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 114*06ad1575SMatthew G. Knepley } 115*06ad1575SMatthew G. Knepley } 116*06ad1575SMatthew G. Knepley } 117*06ad1575SMatthew G. Knepley } 118*06ad1575SMatthew G. Knepley /* Check f0 and f1 in different orders */ 119*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 120*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 121*06ad1575SMatthew G. Knepley if (j == i) continue; 122*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 123*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 124*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 125*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 126*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, l, f[l], i, f[i]);CHKERRQ(ierr); 127*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, k, f[k], j, f[j]);CHKERRQ(ierr); 128*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, j, f[j], k, f[k]);CHKERRQ(ierr); 129*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, i, f[i], l, f[l]);CHKERRQ(ierr); 130*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 4, f);CHKERRQ(ierr); 131*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 132*06ad1575SMatthew G. Knepley } 133*06ad1575SMatthew G. Knepley } 134*06ad1575SMatthew G. Knepley } 135*06ad1575SMatthew G. Knepley } 136*06ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 137*06ad1575SMatthew G. Knepley PetscFunctionReturn(0); 138*06ad1575SMatthew G. Knepley } 139*06ad1575SMatthew G. Knepley 140*06ad1575SMatthew G. Knepley static PetscErrorCode TestAdd(PetscWeakForm wf) 141*06ad1575SMatthew G. Knepley { 142*06ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}, fp[4]; 143*06ad1575SMatthew G. Knepley DMLabel label; 144*06ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 145*06ad1575SMatthew G. Knepley PetscFormKey key; 146*06ad1575SMatthew G. Knepley PetscInt i, j, k, l; 147*06ad1575SMatthew G. Knepley PetscErrorCode ierr; 148*06ad1575SMatthew G. Knepley 149*06ad1575SMatthew G. Knepley PetscFunctionBegin; 150*06ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 151*06ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 152*06ad1575SMatthew G. Knepley /* Check f0 */ 153*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 154*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 155*06ad1575SMatthew G. Knepley if (j == i) continue; 156*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 157*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 158*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 159*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 160*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], NULL);CHKERRQ(ierr); 161*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], NULL);CHKERRQ(ierr); 162*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], NULL);CHKERRQ(ierr); 163*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], NULL);CHKERRQ(ierr); 164*06ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 165*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, fp, 0, NULL);CHKERRQ(ierr); 166*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 167*06ad1575SMatthew G. Knepley } 168*06ad1575SMatthew G. Knepley } 169*06ad1575SMatthew G. Knepley } 170*06ad1575SMatthew G. Knepley } 171*06ad1575SMatthew G. Knepley /* Check f1 */ 172*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 173*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 174*06ad1575SMatthew G. Knepley if (j == i) continue; 175*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 176*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 177*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 178*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 179*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[i]);CHKERRQ(ierr); 180*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[j]);CHKERRQ(ierr); 181*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[k]);CHKERRQ(ierr); 182*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[l]);CHKERRQ(ierr); 183*06ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 184*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, fp);CHKERRQ(ierr); 185*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 186*06ad1575SMatthew G. Knepley } 187*06ad1575SMatthew G. Knepley } 188*06ad1575SMatthew G. Knepley } 189*06ad1575SMatthew G. Knepley } 190*06ad1575SMatthew G. Knepley /* Check f0 and f1 */ 191*06ad1575SMatthew G. Knepley for (i = 0; i < 4; ++i) { 192*06ad1575SMatthew G. Knepley for (j = 0; j < 4; ++j) { 193*06ad1575SMatthew G. Knepley if (j == i) continue; 194*06ad1575SMatthew G. Knepley for (k = 0; k < 4; ++k) { 195*06ad1575SMatthew G. Knepley if ((k == i) || (k == j)) continue; 196*06ad1575SMatthew G. Knepley for (l = 0; l < 4; ++l) { 197*06ad1575SMatthew G. Knepley if ((l == i) || (l == j) || (l == k)) continue; 198*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[i], f[i]);CHKERRQ(ierr); 199*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[j], f[j]);CHKERRQ(ierr); 200*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[k], f[k]);CHKERRQ(ierr); 201*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[l], f[l]);CHKERRQ(ierr); 202*06ad1575SMatthew G. Knepley fp[0] = f[i]; fp[1] = f[j]; fp[2] = f[k]; fp[3] = f[l]; 203*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, fp, 4, fp);CHKERRQ(ierr); 204*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 205*06ad1575SMatthew G. Knepley } 206*06ad1575SMatthew G. Knepley } 207*06ad1575SMatthew G. Knepley } 208*06ad1575SMatthew G. Knepley } 209*06ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 210*06ad1575SMatthew G. Knepley PetscFunctionReturn(0); 211*06ad1575SMatthew G. Knepley } 212*06ad1575SMatthew G. Knepley 213*06ad1575SMatthew G. Knepley static PetscErrorCode TestSetIndexAdd(PetscWeakForm wf) 214*06ad1575SMatthew G. Knepley { 215*06ad1575SMatthew G. Knepley PetscPointFunc f[4] = {f0, f1, f2, f3}; 216*06ad1575SMatthew G. Knepley DMLabel label; 217*06ad1575SMatthew G. Knepley const PetscInt value = 3, field = 1, part = 2; 218*06ad1575SMatthew G. Knepley PetscFormKey key; 219*06ad1575SMatthew G. Knepley PetscErrorCode ierr; 220*06ad1575SMatthew G. Knepley 221*06ad1575SMatthew G. Knepley PetscFunctionBegin; 222*06ad1575SMatthew G. Knepley ierr = DMLabelCreate(PETSC_COMM_SELF, "Test", &label);CHKERRQ(ierr); 223*06ad1575SMatthew G. Knepley key.label = label; key.value = value; key.field = field; key.part = part; 224*06ad1575SMatthew G. Knepley /* Check f0 */ 225*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 226*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL);CHKERRQ(ierr); 227*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 228*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL);CHKERRQ(ierr); 229*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 230*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 231*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 232*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 233*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL);CHKERRQ(ierr); 234*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[3], NULL);CHKERRQ(ierr); 235*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 236*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 237*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, f[0], 0, NULL);CHKERRQ(ierr); 238*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 239*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 240*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 241*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 242*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 243*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL);CHKERRQ(ierr); 244*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 1, f[1], 0, NULL);CHKERRQ(ierr); 245*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[2], NULL);CHKERRQ(ierr); 246*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 247*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 248*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 249*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[0], NULL);CHKERRQ(ierr); 250*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, f[1], NULL);CHKERRQ(ierr); 251*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 2, f[2], 0, NULL);CHKERRQ(ierr); 252*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 3, f[3], 0, NULL);CHKERRQ(ierr); 253*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 4, f, 0, NULL);CHKERRQ(ierr); 254*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 255*06ad1575SMatthew G. Knepley /* Check f1 */ 256*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 257*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1]);CHKERRQ(ierr); 258*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 259*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3]);CHKERRQ(ierr); 260*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 261*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 262*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 263*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 264*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2]);CHKERRQ(ierr); 265*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[3]);CHKERRQ(ierr); 266*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 267*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 268*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 0, f[0]);CHKERRQ(ierr); 269*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 270*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 271*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 272*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 273*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 274*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0]);CHKERRQ(ierr); 275*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 1, f[1]);CHKERRQ(ierr); 276*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[2]);CHKERRQ(ierr); 277*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 278*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 279*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 280*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[0]);CHKERRQ(ierr); 281*06ad1575SMatthew G. Knepley ierr = PetscWeakFormAddResidual(wf, key.label, key.value, key.field, key.part, NULL, f[1]);CHKERRQ(ierr); 282*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 2, f[2]);CHKERRQ(ierr); 283*06ad1575SMatthew G. Knepley ierr = PetscWeakFormSetIndexResidual(wf, key.label, key.value, key.field, key.part, 0, NULL, 3, f[3]);CHKERRQ(ierr); 284*06ad1575SMatthew G. Knepley ierr = CheckResidual(wf, key, 0, NULL, 4, f);CHKERRQ(ierr); 285*06ad1575SMatthew G. Knepley ierr = PetscWeakFormClear(wf);CHKERRQ(ierr); 286*06ad1575SMatthew G. Knepley 287*06ad1575SMatthew G. Knepley ierr = DMLabelDestroy(&label);CHKERRQ(ierr); 288*06ad1575SMatthew G. Knepley PetscFunctionReturn(0); 289*06ad1575SMatthew G. Knepley } 290*06ad1575SMatthew G. Knepley 291*06ad1575SMatthew G. Knepley int main(int argc,char **argv) 292*06ad1575SMatthew G. Knepley { 293*06ad1575SMatthew G. Knepley PetscWeakForm wf; 294*06ad1575SMatthew G. Knepley PetscErrorCode ierr; 295*06ad1575SMatthew G. Knepley 296*06ad1575SMatthew G. Knepley ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 297*06ad1575SMatthew G. Knepley ierr = PetscWeakFormCreate(PETSC_COMM_SELF, &wf);CHKERRQ(ierr); 298*06ad1575SMatthew G. Knepley ierr = TestSetIndex(wf);CHKERRQ(ierr); 299*06ad1575SMatthew G. Knepley ierr = TestAdd(wf);CHKERRQ(ierr); 300*06ad1575SMatthew G. Knepley ierr = TestSetIndexAdd(wf);CHKERRQ(ierr); 301*06ad1575SMatthew G. Knepley ierr = PetscWeakFormDestroy(&wf);CHKERRQ(ierr); 302*06ad1575SMatthew G. Knepley ierr = PetscFinalize(); 303*06ad1575SMatthew G. Knepley return ierr; 304*06ad1575SMatthew G. Knepley } 305*06ad1575SMatthew G. Knepley 306*06ad1575SMatthew G. Knepley /*TEST 307*06ad1575SMatthew G. Knepley 308*06ad1575SMatthew G. Knepley test: 309*06ad1575SMatthew G. Knepley suffix: 0 310*06ad1575SMatthew G. Knepley 311*06ad1575SMatthew G. Knepley TEST*/ 312