Changeset 13446


Ignore:
Timestamp:
09/26/12 08:02:20 (12 years ago)
Author:
utke
Message:

CHG : for solver invocations with changing sizes let adol-c track the maximal needed size and allocate accordingly

File:
1 edited

Legend:

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

    r13432 r13446  
    2020        int         num_independents;
    2121        IssmDouble *axp                = NULL;
    22         int         configuration_type;
    23         int         solveSize;
    24         int         edf_n                ,edf_m;
    2522        double     *xp                 = NULL;
    2623        int         anIndepNum;
     
    4845                        }
    4946
    50                         /* get the dimension for the solverx arguments*/
    51                         parameters->FindParam(&configuration_type,ConfigurationTypeEnum);
    52                         solveSize=nodes->NumberOfDofs(configuration_type,FsetEnum);
    53                         edf_n=solveSize*(solveSize+1);
    54                         edf_m=solveSize;
    55 
    5647                        /*get the EDF pointer:*/
    5748                        ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
     
    6556                       
    6657                        /*allocate the space for the parameters to invoke the forward methods:*/
    67                         anEDF_for_solverx_p->dp_x=xNew<double>(edf_n);
    68                         anEDF_for_solverx_p->dp_X=xNew<double>(edf_n);
    69                         anEDF_for_solverx_p->dpp_X=xNew<double>(edf_n, num_independents);
    70                         anEDF_for_solverx_p->dp_y=xNew<double>(edf_m);
    71                         anEDF_for_solverx_p->dp_Y=xNew<double>(edf_m);
    72                         anEDF_for_solverx_p->dpp_Y=xNew<double>(edf_m, num_independents);
    73                         anEDF_for_solverx_p->dp_U=xNew<double>(edf_m);
    74                         anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,edf_m);
    75                         anEDF_for_solverx_p->dp_Z=xNew<double>(edf_n);
    76                         anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,edf_n);
     58                        anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
     59                        anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
     60                        anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, num_independents);
     61                        anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
     62                        anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
     63                        anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, num_independents);
     64                        anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
     65                        anEDF_for_solverx_p->dpp_U=xNew<double>(num_dependents,anEDF_for_solverx_p->max_m);
     66                        anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
     67                        anEDF_for_solverx_p->dpp_Z=xNew<double>(num_dependents,anEDF_for_solverx_p->max_n);
    7768
    7869                        /* Call AD driver:*/
Note: See TracChangeset for help on using the changeset viewer.