Actual source code: ad_utils.c
petsc-3.3-p7 2013-05-11
2: #include <petscsys.h>
3: #include <petscis.h>
5: #if defined(PETSC_HAVE_STDLIB_H)
6: #include <stdlib.h>
7: #endif
9: EXTERN_C_BEGIN
11: #include <ad_deriv.h>
13: void PetscADSetValueAndColor(DERIV_TYPE *vars,int n,ISColoringValue *colors,double *values)
14: {
15: int i,j;
16: PetscReal *d;
18: for (i=0; i<n; i++) {
19: DERIV_val(vars[i]) = values[i];
20: d = (PetscReal*)DERIV_grad(vars[i]);
21: for (j=0; j<ad_GRAD_MAX; j++) {
22: d[j] = 0.0;
23: }
24: d[colors[i]] = 1.0;
25: }
26: }
28: void PetscADResetIndep(void)
29: {
30: ad_AD_ResetIndep();
31: }
33: void PetscADSetValArray(DERIV_TYPE *var,int size,double *values)
34: {
35: ad_AD_SetValArray(var,size,values);
36: }
38: void PetscADSetIndepVector(DERIV_TYPE *var, int size,double *values)
39: {
40: ad_AD_SetIndepVector(var, size, values);
41: }
43: void PetscADSetIndepArrayColored(DERIV_TYPE *var,int size,int *coloring)
44: {
45: ad_AD_SetIndepArrayColored(var,size,coloring);
46: }
48: int PetscADIncrementTotalGradSize(int num)
49: {
50: ad_AD_IncrementTotalGradSize(num);
51: return(0);
52: }
54: void PetscADSetIndepDone(void)
55: {
56: ad_AD_SetIndepDone();
57: }
59: /* Note that we pass a pointer to DERIV_TYPE, then dereference to match ad_AD_ExtractGrad format */
60: void PetscADExtractGrad(double *grad, DERIV_TYPE *deriv)
61: {
62: ad_AD_ExtractGrad(grad,*deriv);
63: }
65: int PetscADGetDerivTypeSize(void)
66: {
67: return sizeof(DERIV_TYPE);
68: }
70: double *PetscADGetGradArray(DERIV_TYPE *deriv)
71: {
72: return deriv->grad;
73: }
75: void ad_AD_Init(int arg0) {
76: ad_AD_GradInit(arg0);
78: }
79: void ad_AD_Final() {
80: ad_AD_GradFinal();
82: }
84: void admf_AD_Init(int arg0) {
85: ad_AD_GradInit(arg0);
87: }
88: void admf_AD_Final() {
89: ad_AD_GradFinal();
91: }
93: EXTERN_C_END