Changeset 13268


Ignore:
Timestamp:
09/05/12 14:47:20 (13 years ago)
Author:
Eric.Larour
Message:

CHG: introducing the autodiff matlab API.

Location:
issm/trunk-jpl/src
Files:
6 added
12 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r13215 r13268  
    1313        /*Model fields {{{1*/
    1414        AutodiffIsautodiffEnum,
     15        AutodiffDependentsEnum,
     16        AutodiffNumDependentsEnum,
     17        AutodiffIndependentsEnum,
     18        AutodiffNumIndependentsEnum,
    1519        BalancethicknessSpcthicknessEnum,
    1620        BalancethicknessStabilizationEnum,
  • issm/trunk-jpl/src/c/Makefile.am

    r13220 r13268  
    429429                                          ./modules/ModelProcessorx/Control/CreateParametersControl.cpp\
    430430                                          ./modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp\
     431                                          ./modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp\
    431432                                          ./modules/InputControlUpdatex/InputControlUpdatex.h\
    432433                                          ./modules/InputControlUpdatex/InputControlUpdatex.cpp\
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r13267 r13268  
    889889                case 3: {//IssmDouble
    890890                                        GenericOption<IssmDouble>* option;
    891                                         IssmPDouble value;
     891                                        IssmDouble value;
    892892                                        FetchData(&value,index+1);
    893893                                        option = new GenericOption<IssmDouble>();
  • issm/trunk-jpl/src/c/classes/IoModel.h

    r12835 r13268  
    6464                void        LastIndex(int *pindex);
    6565                FILE*       SetFilePointerToData(int* pcode,int* pvector_type, int data_enum);
     66                #ifdef _HAVE_ADOLC_
     67                void        FetchIndependentVariable(IssmDouble**  pscalarmatrix,int* pM,int* pN,int data_enum);
     68                #endif
    6669};
    6770
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r13216 r13268  
    1818
    1919                case AutodiffIsautodiffEnum : return "AutodiffIsautodiff";
     20                case AutodiffDependentsEnum : return "AutodiffDependents";
     21                case AutodiffNumDependentsEnum : return "AutodiffNumDependents";
     22                case AutodiffIndependentsEnum : return "AutodiffIndependents";
     23                case AutodiffNumIndependentsEnum : return "AutodiffNumIndependents";
    2024                case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
    2125                case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r13083 r13268  
    9292        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIsdelta18oEnum));
    9393        parameters->AddObject(iomodel->CopyConstantObject(SurfaceforcingsIssmbgradientsEnum));
     94        parameters->AddObject(iomodel->CopyConstantObject(AutodiffIsautodiffEnum));
    9495
    9596        iomodel->Constant(&isdelta18o,SurfaceforcingsIsdelta18oEnum);
     
    145146        #endif
    146147
     148        #ifdef _HAVE_ADOLC_
     149        CreateParametersAutodiff(&parameters,iomodel,solution_type,analysis_type);
     150        #endif
     151
    147152        /*Go through all parameters, and convert units to SI: */
    148153        parameters->UnitConversion(ExtToIuEnum);
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r13216 r13268  
    2323void  CreateParametersControl(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
    2424void  CreateParametersDakota(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
     25void  CreateParametersAutodiff(Parameters** pparameters,IoModel* iomodel,int solution_type,int analysis_type);
    2526void  UpdateElementsAndMaterialsControl(Elements* elements,Materials* materials, IoModel* iomodel);
    2627
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r13216 r13268  
    1919   if(stage==1){
    2020              if (strcmp(name,"AutodiffIsautodiff")==0) return AutodiffIsautodiffEnum;
     21              else if (strcmp(name,"AutodiffDependents")==0) return AutodiffDependentsEnum;
     22              else if (strcmp(name,"AutodiffNumDependents")==0) return AutodiffNumDependentsEnum;
     23              else if (strcmp(name,"AutodiffIndependents")==0) return AutodiffIndependentsEnum;
     24              else if (strcmp(name,"AutodiffNumIndependents")==0) return AutodiffNumIndependentsEnum;
    2125              else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
    2226              else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
     
    134138              else if (strcmp(name,"MeshX")==0) return MeshXEnum;
    135139              else if (strcmp(name,"MeshY")==0) return MeshYEnum;
    136               else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
     140         else stage=2;
     141   }
     142   if(stage==2){
     143              if (strcmp(name,"MeshZ")==0) return MeshZEnum;
    137144              else if (strcmp(name,"MiscellaneousName")==0) return MiscellaneousNameEnum;
    138145              else if (strcmp(name,"PrognosticHydrostaticAdjustment")==0) return PrognosticHydrostaticAdjustmentEnum;
    139146              else if (strcmp(name,"PrognosticMinThickness")==0) return PrognosticMinThicknessEnum;
    140          else stage=2;
    141    }
    142    if(stage==2){
    143               if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
     147              else if (strcmp(name,"PrognosticPenaltyFactor")==0) return PrognosticPenaltyFactorEnum;
    144148              else if (strcmp(name,"PrognosticSpcthickness")==0) return PrognosticSpcthicknessEnum;
    145149              else if (strcmp(name,"PrognosticStabilization")==0) return PrognosticStabilizationEnum;
     
    257261              else if (strcmp(name,"Parameters")==0) return ParametersEnum;
    258262              else if (strcmp(name,"Vertices")==0) return VerticesEnum;
    259               else if (strcmp(name,"Results")==0) return ResultsEnum;
     263         else stage=3;
     264   }
     265   if(stage==3){
     266              if (strcmp(name,"Results")==0) return ResultsEnum;
    260267              else if (strcmp(name,"AdolcParam")==0) return AdolcParamEnum;
    261268              else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
    262269              else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
    263          else stage=3;
    264    }
    265    if(stage==3){
    266               if (strcmp(name,"Contour")==0) return ContourEnum;
     270              else if (strcmp(name,"Contour")==0) return ContourEnum;
    267271              else if (strcmp(name,"ControlInput")==0) return ControlInputEnum;
    268272              else if (strcmp(name,"DatasetInput")==0) return DatasetInputEnum;
     
    380384              else if (strcmp(name,"VzPicard")==0) return VzPicardEnum;
    381385              else if (strcmp(name,"VzStokes")==0) return VzStokesEnum;
    382               else if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
     386         else stage=4;
     387   }
     388   if(stage==4){
     389              if (strcmp(name,"VxMesh")==0) return VxMeshEnum;
    383390              else if (strcmp(name,"VyMesh")==0) return VyMeshEnum;
    384391              else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
    385392              else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum;
    386          else stage=4;
    387    }
    388    if(stage==4){
    389               if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
     393              else if (strcmp(name,"EnthalpyPicard")==0) return EnthalpyPicardEnum;
    390394              else if (strcmp(name,"ThicknessAbsGradient")==0) return ThicknessAbsGradientEnum;
    391395              else if (strcmp(name,"ThicknessAlongGradient")==0) return ThicknessAlongGradientEnum;
  • issm/trunk-jpl/src/c/solutions/issm.cpp

    r13185 r13268  
    124124        femmodel->parameters->AddObject(theAdolcEDF_p);
    125125        if(autodiff) trace_on(1);
     126        #else
     127        if(autodiff) _error_("ISSM was not compiled with ADOLC support, cannot carry out autodiff analysis!");
    126128        #endif
    127129
  • issm/trunk-jpl/src/m/classes/autodiff.m

    r13083 r13268  
    77        properties (SetAccess=public)
    88                isautodiff = false;
     9                dependents = {''};
     10                independents = {''};
    911        end
    1012        methods
     
    2527                function disp(obj) % {{{
    2628                        disp(sprintf('   automatic differentiation parameters:'));
    27 
    2829                        fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
    29 
     30                        fielddisplay(obj,'dependents','list of dependent variables ; ex: {''Thickness'',''FrictionCoefficient''}');
     31                        fielddisplay(obj,'independents','list of independent variables ; ex: {''IceVolume'',''MassFlux''}');
    3032                end % }}}
    3133                function marshall(obj,fid) % {{{
    3234                        WriteData(fid,'object',obj,'fieldname','isautodiff','format','Boolean');
     35                       
     36                        %process dependent variables
     37                        num_dependents=numel(obj.dependents);
     38                        data=zeros(1,num_dependents);
     39                        for i=1:num_dependents,
     40                                data(i)=StringToEnum(obj.dependents{i});
     41                        end
     42                        WriteData(fid,'data',data,'enum',AutodiffDependentsEnum(),'format','DoubleMat','mattype',3);
     43                        WriteData(fid,'data',num_dependents,'enum',AutodiffNumDependentsEnum(),'format','Integer');
     44                       
     45                        %process independent variables
     46                        num_independents=numel(obj.independents);
     47                        data=zeros(1,num_independents);
     48                        for i=1:num_independents,
     49                                data(i)=StringToEnum(obj.independents{i});
     50                        end
     51                        WriteData(fid,'data',data,'enum',AutodiffIndependentsEnum(),'format','DoubleMat','mattype',3);
     52                        WriteData(fid,'data',num_independents,'enum',AutodiffNumIndependentsEnum(),'format','Integer');
     53
    3354                end % }}}
    3455        end
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r13215 r13268  
    1919        return StringToEnum('AutodiffIsautodiff')[0]
    2020
     21def AutodiffDependentsEnum():
     22        """
     23        AUTODIFFDEPENDENTSENUM - Enum of AutodiffDependents
     24
     25           Usage:
     26              macro=AutodiffDependentsEnum()
     27        """
     28
     29        return StringToEnum('AutodiffDependents')[0]
     30
     31def AutodiffNumDependentsEnum():
     32        """
     33        AUTODIFFNUMDEPENDENTSENUM - Enum of AutodiffNumDependents
     34
     35           Usage:
     36              macro=AutodiffNumDependentsEnum()
     37        """
     38
     39        return StringToEnum('AutodiffNumDependents')[0]
     40
     41def AutodiffIndependentsEnum():
     42        """
     43        AUTODIFFINDEPENDENTSENUM - Enum of AutodiffIndependents
     44
     45           Usage:
     46              macro=AutodiffIndependentsEnum()
     47        """
     48
     49        return StringToEnum('AutodiffIndependents')[0]
     50
     51def AutodiffNumIndependentsEnum():
     52        """
     53        AUTODIFFNUMINDEPENDENTSENUM - Enum of AutodiffNumIndependents
     54
     55           Usage:
     56              macro=AutodiffNumIndependentsEnum()
     57        """
     58
     59        return StringToEnum('AutodiffNumIndependents')[0]
     60
    2161def BalancethicknessSpcthicknessEnum():
    2262        """
     
    46774717        """
    46784718
    4679         return 466
    4680 
     4719        return 470
     4720
  • issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m

    r13215 r13268  
    99%      macro=MaximumNumberOfEnums()
    1010
    11 macro=466;
     11macro=470;
Note: See TracChangeset for help on using the changeset viewer.