Changeset 13333


Ignore:
Timestamp:
09/11/12 16:02:12 (13 years ago)
Author:
Eric.Larour
Message:

CHG: cosmetics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp

    r13328 r13333  
    1717        parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
    1818        if(isautodiff){
    19                 #ifdef _HAVE_ADOLC_
    20                 int  num_dependents;
    21                 parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
    22                 int  num_independents;
    23                 parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
    24                 if(!(num_dependents*num_independents)) return;
    25                 int  numberofvertices;
    26                 parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
    27                 /*retrieve state variable: */
    28                 IssmDouble  *axp  = NULL;
    29                 parameters->FindParam(&axp,&num_independents,AutodiffXpEnum);
    30                 /* driver argument */
    31                 double *xp=xNew<double>(num_independents);
    32                 for(int i=0;i<num_independents;i++){
    33                         xp[i]=reCast<double,IssmDouble>(axp[i]);
    34                 }
    35                 /* get the dimension for the solverx arguments*/
    36                 int configuration_type;
    37                 parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
    38                 int solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
    39                 int edf_n=solveSize*(solveSize+1), edf_m=solveSize;
     19                #ifdef _HAVE_ADOLC_
     20                        int  num_dependents;
     21                        parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
     22                        int  num_independents;
     23                        parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
     24                        if(!(num_dependents*num_independents)) return;
     25                        int  numberofvertices;
     26                        parameters->FindParam(&numberofvertices,MeshNumberofverticesEnum);
     27                        /*retrieve state variable: */
     28                        IssmDouble  *axp  = NULL;
     29                        parameters->FindParam(&axp,&num_independents,AutodiffXpEnum);
     30                        /* driver argument */
     31                        double *xp=xNew<double>(num_independents);
     32                        for(int i=0;i<num_independents;i++){
     33                                xp[i]=reCast<double,IssmDouble>(axp[i]);
     34                        }
     35                        /* get the dimension for the solverx arguments*/
     36                        int configuration_type;
     37                        parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
     38                        int solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
     39                        int edf_n=solveSize*(solveSize+1), edf_m=solveSize;
    4040
    41                 /*get the EDF pointer:*/
    42                 ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
    43                
    44                 /*set the forward method function pointers: */
    45                 anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
    46                 anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
    47                 anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
    48                 anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
    49                 // anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
    50                 /*allocate the space for the parameters to invoke the forward methods:*/
    51                 anEDF_for_solverx_p->dp_x=xNew<double>(edf_n);
    52                 anEDF_for_solverx_p->dp_X=xNew<double>(edf_n);
    53                 anEDF_for_solverx_p->dpp_X=xNew<double>(edf_n, num_independents);
    54                 anEDF_for_solverx_p->dp_y=xNew<double>(edf_m);
    55                 anEDF_for_solverx_p->dp_Y=xNew<double>(edf_m);
    56                 anEDF_for_solverx_p->dpp_Y=xNew<double>(edf_m, num_independents);
    57                 anEDF_for_solverx_p->dp_U=xNew<double>(edf_m);
    58                 anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,edf_m);
    59                 anEDF_for_solverx_p->dp_Z=xNew<double>(edf_n);
    60                 anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,edf_n);
    61                 /* Call AD driver:*/
    62                 // single direction:
    63                 double *tangentDir=xNewZeroInit<double>(num_independents);
    64                 unsigned int anIndepNum=55; // <---------- make this selectable via config
    65                 tangentDir[anIndepNum]=1.0;
    66                 double *theJacVecProduct=xNew<double>(num_dependents);
    67                 double *theOutput=xNew<double>(num_dependents);
    68                 for (int i=0; i<num_independents; ++i) {
    69                   std::cout << "fos_forward xp[" << i << "]=" << xp[i] << std::endl;
    70                 }
    71                 if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, theJacVecProduct ))
    72                   _error_("fos_forward returned non-zero error code");
    73                 results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,theJacVecProduct,num_dependents,1,1,0.0));
     41                        /*get the EDF pointer:*/
     42                        ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
     43
     44                        /*set the forward method function pointers: */
     45                        anEDF_for_solverx_p->zos_forward=EDF_for_solverx;
     46                        anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
     47                        anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
     48                        anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
     49                        // anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
     50                        /*allocate the space for the parameters to invoke the forward methods:*/
     51                        anEDF_for_solverx_p->dp_x=xNew<double>(edf_n);
     52                        anEDF_for_solverx_p->dp_X=xNew<double>(edf_n);
     53                        anEDF_for_solverx_p->dpp_X=xNew<double>(edf_n, num_independents);
     54                        anEDF_for_solverx_p->dp_y=xNew<double>(edf_m);
     55                        anEDF_for_solverx_p->dp_Y=xNew<double>(edf_m);
     56                        anEDF_for_solverx_p->dpp_Y=xNew<double>(edf_m, num_independents);
     57                        anEDF_for_solverx_p->dp_U=xNew<double>(edf_m);
     58                        anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,edf_m);
     59                        anEDF_for_solverx_p->dp_Z=xNew<double>(edf_n);
     60                        anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,edf_n);
     61                        /* Call AD driver:*/
     62                        // single direction:
     63                        double *tangentDir=xNewZeroInit<double>(num_independents);
     64                        unsigned int anIndepNum=55; // <---------- make this selectable via config
     65                        tangentDir[anIndepNum]=1.0;
     66                        double *theJacVecProduct=xNew<double>(num_dependents);
     67                        double *theOutput=xNew<double>(num_dependents);
     68                        for (int i=0; i<num_independents; ++i) {
     69                                std::cout << "fos_forward xp[" << i << "]=" << xp[i] << std::endl;
     70                        }
     71                        if (fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, theJacVecProduct ))
     72                                _error_("fos_forward returned non-zero error code");
     73                        results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,theJacVecProduct,num_dependents,1,1,0.0));
    7474
    7575#if 0
    76                 double **J=xNew<double>(num_dependents,num_independents);
    77                 jacobian(1,num_dependents,num_independents,xp,J);
    78                 results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*J,num_independents,num_dependents,1,1,0.0));
    79                 xDelete(J);
     76                        double **J=xNew<double>(num_dependents,num_independents);
     77                        jacobian(1,num_dependents,num_independents,xp,J);
     78                        results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*J,num_independents,num_dependents,1,1,0.0));
     79                        xDelete(J);
    8080#endif
    8181
    82                 /* delete the allocated space for the parameters:*/
    83                 xDelete(anEDF_for_solverx_p->dp_x);
    84                 xDelete(anEDF_for_solverx_p->dp_X);
    85                 xDelete(anEDF_for_solverx_p->dpp_X);
    86                 xDelete(anEDF_for_solverx_p->dp_y);
    87                 xDelete(anEDF_for_solverx_p->dp_Y);
    88                 xDelete(anEDF_for_solverx_p->dpp_Y);
    89                 xDelete(anEDF_for_solverx_p->dp_U);
    90                 xDelete(anEDF_for_solverx_p->dpp_U);
    91                 xDelete(anEDF_for_solverx_p->dp_Z);
    92                 xDelete(anEDF_for_solverx_p->dpp_Z);
    93                 /*Free ressources: */
    94                 xDelete(xp);
    95                 xDelete(axp); // did we allocate this?
     82                        /* delete the allocated space for the parameters:*/
     83                        xDelete(anEDF_for_solverx_p->dp_x);
     84                        xDelete(anEDF_for_solverx_p->dp_X);
     85                        xDelete(anEDF_for_solverx_p->dpp_X);
     86                        xDelete(anEDF_for_solverx_p->dp_y);
     87                        xDelete(anEDF_for_solverx_p->dp_Y);
     88                        xDelete(anEDF_for_solverx_p->dpp_Y);
     89                        xDelete(anEDF_for_solverx_p->dp_U);
     90                        xDelete(anEDF_for_solverx_p->dpp_U);
     91                        xDelete(anEDF_for_solverx_p->dp_Z);
     92                        xDelete(anEDF_for_solverx_p->dpp_Z);
     93                        /*Free ressources: */
     94                        xDelete(xp);
     95                        xDelete(axp); // did we allocate this?
    9696                #else
    97                 _error_("Should not be requesting AD drivers when an AD library is not available!");
     97                        _error_("Should not be requesting AD drivers when an AD library is not available!");
    9898                #endif
    9999        }
Note: See TracChangeset for help on using the changeset viewer.