Changeset 13516


Ignore:
Timestamp:
10/03/12 09:09:23 (12 years ago)
Author:
Eric.Larour
Message:

CHG: modified the way we set keep for trace initialization in AD mode. This is now
decided by the AutodiffKeepEnum boolean, which is initialized by the autodiff class,
instead of this logic happening inside IoModel.cpp.
Also added test3020 which tests forward difference vs AD driver.

Location:
issm/trunk-jpl
Files:
4 added
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/configs/config-macosx64-larour-bothapis.sh

    r12157 r13516  
    1212        --with-python-dir=$ISSM_DIR/externalpackages/python/install\
    1313        --with-python-version=$pythonversion \
    14         --with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
     14        --with-python-numpy-dir=$ISSM_DIR/externalpackages/python/install/Library/Frameworks/Python.framework/Versions/$pythonversion/lib/python$pythonversion/site-packages/numpy/core/include/numpy\
    1515        --with-metis-dir=$ISSM_DIR/externalpackages/metis/install \
    1616        --with-mpi-include=$ISSM_DIR/externalpackages/mpich2/install/include  \
  • issm/trunk-jpl/src/c/EnumDefinitions/EnumDefinitions.h

    r13505 r13516  
    3131        AutodiffFosReverseIndexEnum,
    3232        AutodiffMassFluxSegmentsPresentEnum,
     33        AutodiffKeepEnum,
    3334        BalancethicknessSpcthicknessEnum,
    3435        BalancethicknessStabilizationEnum,
  • issm/trunk-jpl/src/c/classes/IoModel.cpp

    r13505 r13516  
    212212        int         numberofvertices;
    213213        int         dummy;
    214         char*       driver=NULL;
     214        bool        keep=false;
    215215
    216216
     
    226226                #ifdef _HAVE_ADOLC_
    227227
    228                 /*Start the trace:  {{{
    229                  * to do so, figure out what kind of driver we are running. Then, according to ADOLC documentation,
    230                  * we'll need to activate keep.
    231                  *
    232                  * From ADOLC userdoc:
    233                  * The optional integer argument keep of trace on determines whether the numerical values of all active variables are
    234                  * recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and
    235                  * prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse
    236                  * mode as described in the Section 4 and Section 5.
    237                  *
    238                  */
    239                 this->FetchData(&driver,AutodiffDriverEnum);
    240                 if (strlen(driver)<=3){
    241                         /*there is no "_reverse" string within the driver string: */
    242                         if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
    243                         trace_on(1);
    244                 }
    245                 else{
    246                         if (strncmp((const char*)(driver+3),"_reverse",8)==0){
    247                                 if(VerboseAutodiff())_pprintLine_("   trace activated with keep on");
    248                                 trace_on(1,1);
    249                         }
    250                         else{
    251                                 if(VerboseAutodiff())_pprintLine_("   trace activated with keep off");
    252                                 trace_on(1);
    253                         }
    254                 }
    255                 xDelete<char>(driver);
     228                /*Start trace: {{{*/
     229                this->FetchData(&keep,AutodiffKeepEnum);
     230                if(keep)trace_on(1,1);
     231                else    trace_on(1);
     232
    256233                /*}}}*/
    257234                /*build dataset made of independent objects: {{{*/
  • issm/trunk-jpl/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r13506 r13516  
    3636                case AutodiffFosReverseIndexEnum : return "AutodiffFosReverseIndex";
    3737                case AutodiffMassFluxSegmentsPresentEnum : return "AutodiffMassFluxSegmentsPresent";
     38                case AutodiffKeepEnum : return "AutodiffKeep";
    3839                case BalancethicknessSpcthicknessEnum : return "BalancethicknessSpcthickness";
    3940                case BalancethicknessStabilizationEnum : return "BalancethicknessStabilization";
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Autodiff/CreateParametersAutodiff.cpp

    r13509 r13516  
    3838       
    3939        if(autodiff_analysis){
     40       
     41                /*Copy some parameters from IoModel to parameters dataset: */
     42                parameters->AddObject(iomodel->CopyConstantObject(AutodiffKeepEnum));
    4043
    41                 /*retrieve driver: */
     44                /*retrieve driver: {{{*/
    4245                iomodel->Constant(&autodiff_driver,AutodiffDriverEnum);
    4346                parameters->AddObject(iomodel->CopyConstantObject(AutodiffDriverEnum));
     
    5558                        xDelete<int>(indices);
    5659                }
    57 
     60                /*}}}*/
    5861                /*Deal with dependents first: {{{*/
    5962                iomodel->Constant(&num_dependent_objects,AutodiffNumDependentObjectsEnum);
  • issm/trunk-jpl/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r13506 r13516  
    3737              else if (strcmp(name,"AutodiffFosReverseIndex")==0) return AutodiffFosReverseIndexEnum;
    3838              else if (strcmp(name,"AutodiffMassFluxSegmentsPresent")==0) return AutodiffMassFluxSegmentsPresentEnum;
     39              else if (strcmp(name,"AutodiffKeep")==0) return AutodiffKeepEnum;
    3940              else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
    4041              else if (strcmp(name,"BalancethicknessStabilization")==0) return BalancethicknessStabilizationEnum;
     
    137138              else if (strcmp(name,"MeshDimension")==0) return MeshDimensionEnum;
    138139              else if (strcmp(name,"MeshEdges")==0) return MeshEdgesEnum;
    139               else if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
    140140         else stage=2;
    141141   }
    142142   if(stage==2){
    143               if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
     143              if (strcmp(name,"MeshElementconnectivity")==0) return MeshElementconnectivityEnum;
     144              else if (strcmp(name,"MeshElementonbed")==0) return MeshElementonbedEnum;
    144145              else if (strcmp(name,"MeshElementonsurface")==0) return MeshElementonsurfaceEnum;
    145146              else if (strcmp(name,"MeshElements2d")==0) return MeshElements2dEnum;
     
    260261              else if (strcmp(name,"SurfaceSlopeAnalysis")==0) return SurfaceSlopeAnalysisEnum;
    261262              else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
    262               else if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
    263263         else stage=3;
    264264   }
    265265   if(stage==3){
    266               if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
     266              if (strcmp(name,"SurfaceSlopeXAnalysis")==0) return SurfaceSlopeXAnalysisEnum;
     267              else if (strcmp(name,"SurfaceSlopeYAnalysis")==0) return SurfaceSlopeYAnalysisEnum;
    267268              else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
    268269              else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum;
     
    383384              else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum;
    384385              else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;
    385               else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
    386386         else stage=4;
    387387   }
    388388   if(stage==4){
    389               if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
     389              if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum;
     390              else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum;
    390391              else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum;
    391392              else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
     
    506507              else if (strcmp(name,"Verbose")==0) return VerboseEnum;
    507508              else if (strcmp(name,"TriangleInterp")==0) return TriangleInterpEnum;
    508               else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
    509509         else stage=5;
    510510   }
    511511   if(stage==5){
    512               if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
     512              if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
     513              else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
    513514              else if (strcmp(name,"XY")==0) return XYEnum;
    514515              else if (strcmp(name,"XYZP")==0) return XYZPEnum;
  • issm/trunk-jpl/src/m/classes/autodiff.m

    r13509 r13516  
    5858                        if ~obj.isautodiff,
    5959                                WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
     60                                WriteData(fid,'data',false,'enum',AutodiffKeepEnum,'format','Boolean');
    6061                                return;
    6162                        end
     
    180181                        WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum,'format','Boolean');
    181182                        %}}}
     183                        %deal with trace keep on: {{{
     184                        keep=false;
     185
     186                        %From ADOLC userdoc:
     187                        % The optional integer argument keep of trace on determines whether the numerical values of all active variables are
     188                        % recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and
     189                        % prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse
     190                        % mode as described in the Section 4 and Section 5.
     191                        %
     192
     193                        if length(obj.driver)<=3,
     194                                keep=false; %there is no "_reverse" string within the driver string:
     195                        else
     196                                if strncmpi(obj.driver(4:end),'_reverse',8),
     197                                        keep=true;
     198                                else
     199                                        keep=false;
     200                                end
     201                        end
     202                        WriteData(fid,'data',keep,'enum',AutodiffKeepEnum,'format','Boolean');
     203                        %}}}
    182204
    183205                end % }}}
  • issm/trunk-jpl/src/m/classes/autodiff.py

    r13490 r13516  
    4040                WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
    4141                WriteData(fid,'data',False,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean');
     42                WriteData(fid,'data',False,'enum',AutodiffKeepEnum(),'format','Boolean');
    4243        # }}}
    4344
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r13505 r13516  
    199199        return StringToEnum('AutodiffMassFluxSegmentsPresent')[0]
    200200
     201def AutodiffKeepEnum():
     202        """
     203        AUTODIFFKEEPENUM - Enum of AutodiffKeep
     204
     205           Usage:
     206              macro=AutodiffKeepEnum()
     207        """
     208
     209        return StringToEnum('AutodiffKeep')[0]
     210
    201211def BalancethicknessSpcthicknessEnum():
    202212        """
     
    49374947        """
    49384948
    4939         return 492
    4940 
     4949        return 493
     4950
  • issm/trunk-jpl/src/m/enum/MaximumNumberOfEnums.m

    r13505 r13516  
    99%      macro=MaximumNumberOfEnums()
    1010
    11 macro=492;
     11macro=493;
  • issm/trunk-jpl/test/NightlyRun/test3019.m

    r13508 r13516  
     1%test reverse scalar vs forward vectorial drivers in ADOLC, using the test3009 setup, equivalent to test109 setup.
    12md=triangle(model,'../Exp/Square.exp',100000);
    23md=setmask(md,'all','');
Note: See TracChangeset for help on using the changeset viewer.