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