Changeset 13429


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

NEW: new dependent and independent classes, added to autodiff class

Location:
issm/trunk-jpl/src/m/classes
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/m/classes/autodiff.m

    r13291 r13429  
    99                dependents   = {};
    1010                independents = {};
     11                driver       = 'fos_forward';
    1112        end
    1213        methods
     
    2425                function md = checkconsistency(obj,md,solution,analyses) % {{{
    2526
    26                 %Early return
    27                 if ~obj.isautodiff, return; end
     27                        %Early return
     28                        if ~obj.isautodiff, return; end
     29
     30                        %Driver value:
     31                        md = checkfield(md,'autodiff.driver','values',{'fos_forward'});
    2832
    2933                end % }}}
     
    3135                        disp(sprintf('   automatic differentiation parameters:'));
    3236                        fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated');
    33                         fielddisplay(obj,'dependents','list of dependent variables ; ex: {''Thickness'',''FrictionCoefficient''}');
    34                         fielddisplay(obj,'independents','list of independent variables ; ex: {''IceVolume'',''MassFlux''}');
     37                        fielddisplay(obj,'dependents','list of dependent variables');
     38                        fielddisplay(obj,'independents','list of independent variables');
     39                        fielddisplay(obj,'driver','ADOLC driver');
    3540                end % }}}
    3641                function marshall(obj,fid) % {{{
    3742
    3843                        WriteData(fid,'object',obj,'fieldname','isautodiff','format','Boolean');
     44                        WriteData(fid,'object',obj,'fieldname','driver','format','String');
    3945                       
    4046                        %early return
     
    4248
    4349                        %process dependent variables
    44                         num_dependents=numel(obj.dependents);
    45                         WriteData(fid,'data',num_dependents,'enum',AutodiffNumDependentsEnum(),'format','Integer');
    46                        
    47                         if(num_dependents),
    48                                 data=zeros(1,num_dependents);
    49                                 for i=1:num_dependents,
    50                                         data(i)=StringToEnum(obj.dependents{i});
     50                        num_dependent_objects=numel(obj.dependents);
     51                        WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer');
     52
     53                        if(num_dependent_objects),
     54                                names=zeros(num_dependent_objects,1);
     55                                types=zeros(num_dependent_objects,1);
     56
     57                                for i=1:num_dependent_objects,
     58                                        dep=obj.dependents{i};
     59
     60                                        names(i)=StringToEnum(dep.name);
     61                                        types(i)=dep.typetoscalar();
    5162                                end
    52                                 WriteData(fid,'data',data,'enum',AutodiffDependentsEnum(),'format','DoubleMat','mattype',3);
     63                                WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','IntMat','mattype',3);
     64                                WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3);
    5365                        end
    5466                       
     67                       
    5568                        %process independent variables
    56                         num_independents=numel(obj.independents);
    57                         WriteData(fid,'data',num_independents,'enum',AutodiffNumIndependentsEnum(),'format','Integer');
    58                        
    59                         if(num_independents)
    60                                 data=zeros(1,num_independents);
    61                                 for i=1:num_independents,
    62                                         data(i)=StringToEnum(obj.independents{i});
     69                        num_independent_objects=numel(obj.independents);
     70                        WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer');
     71
     72                        if(num_independent_objects),
     73                                names=zeros(num_independent_objects,1);
     74                                types=zeros(num_independent_objects,1);
     75
     76                                for i=1:num_independent_objects,
     77                                        indep=obj.independents{i};
     78
     79                                        names(i)=StringToEnum(indep.name);
     80                                        types(i)=indep.typetoscalar();
    6381                                end
    64                                 WriteData(fid,'data',data,'enum',AutodiffIndependentsEnum(),'format','DoubleMat','mattype',3);
     82                                WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3);
     83                                WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3);
    6584                        end
    6685
     86                        %if driver is fos_forward, build index:
     87                        if strcmpi(obj.driver,'fos_forward'),
     88                                index=0;
     89                               
     90                                for i=1:num_independent_objects,
     91                                        indep=obj.independents{i};
     92                                        if ~isnan(indep.fos_forward_index),
     93                                                index=index+indep.fos_forward_index;
     94                                                break;
     95                                        else
     96                                                if strcmpi(indep.type,'scalar'),
     97                                                        index=index+1;
     98                                                else
     99                                                        index=index+indep.nods;
     100                                                end
     101                                        end
     102                                end
     103                                WriteData(fid,'data',index-1,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); %c-index numbering.
     104                        end
    67105                end % }}}
    68106        end
Note: See TracChangeset for help on using the changeset viewer.