Changeset 24836


Ignore:
Timestamp:
05/09/20 15:18:11 (5 years ago)
Author:
Eric.Larour
Message:

CHG: introducing new partition vector in the normal_uncertain and uniform_uncertain
classes.

Location:
issm/trunk-jpl
Files:
1 added
15 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m

    r24830 r24836  
    2929                        self.mean=getfieldvalue(options,'mean');
    3030                        self.stddev=getfieldvalue(options,'stddev');
    31                         self.partition=getfieldvalue(options,'partition',[]); %default not used.
     31                       
     32                        %if the variable is scaled,  a partition vector should have been supplied, and
     33                        %that partition vector should have as many partitions as the mean and stddev
     34                        %vectors:
     35                        if self.isscaled(),
     36                                self.partition=getfieldvalue(options,'partition');
     37                                npart=partition_npart(self.partition);
     38                                if npart~=length(self.mean),
     39                                        error(['normal_uncertain constructor: for the scaled variable' self.descriptor ' the mean field is not currently a vector of values for all the partitions described in the partition vector']);
     40                                end
     41                                if npart~=length(self.stddev),
     42                                        error(['normal_uncertain constructor: for the scaled variable' self.described ' the stddev field is not currently a vector of values for all the partitions described in the partition vector']);
     43                                end
     44                        end
     45
    3246
    3347                end %}}}
     
    4862                md = checkfield(md,'field',self.mean,'fieldname','normal_uncertain.mean','NaN',1,'Inf',1,'>=',0);
    4963                md = checkfield(md,'field',self.stddev,'fieldname','normal_uncertain.stddev','NaN',1,'Inf',1,'>=',0,'numel',length(self.mean));
    50                 if ~isempty(self.partition),
     64                if self.isscaled(),
     65                        if isempty(self.partition),
     66                                error('normal_uncertain is a scaled variable, but it''s missing a partition vector');
     67                        end
     68                        %better have a partition vector that has as many partitions as stddev's size:
     69                        if  length(self.stddev)~=partition_npart(self.partition),
     70                                error('normal_uncertain error message: stddev and partition should be vectors of identical size');
     71                        end
     72                        if  length(self.mean)~=partition_npart(self.partition),
     73                                error('normal_uncertain error message: mean and partition should be vectors of identical size');
     74                        end
     75
    5176                        md = checkfield(md,'field',self.partition,'fieldname','normal_uncertain.partition','NaN',1,'Inf',1,'>=',-1,'numel',[md.mesh.numberofvertices,md.mesh.numberofelements]);
    52                         if size(self.partition,1)>1,
     77                        if size(self.partition,2)>1,
    5378                                error('normal_uncertain error message: partition should be a column vector');
    5479                        end
     
    6388                                error('normal_uncertain error message: partition vector''s values cannot go over the number of vertices or elements');
    6489                        end
    65 
    6690                end
    6791        end % }}}
     
    123147                scale=[];
    124148        end % }}}
    125     end
     149        %new methods:
     150        function scaled =isscaled(self) % {{{
     151                if strncmp(self.descriptor,'scaled_',7),
     152                        scaled=1;
     153                else
     154                        scaled=0;
     155                end
     156        end % }}}
     157        end
    126158    methods (Static)
    127159        function []=dakota_write(fidi,dvar) % {{{
  • issm/trunk-jpl/src/m/classes/qmu/uniform_uncertain.m

    r24830 r24836  
    2929                        self.upper=getfieldvalue(options,'upper');
    3030                        self.lower=getfieldvalue(options,'lower');
    31                         self.partition=getfieldvalue(options,'partition',[]); %default not used.
     31
     32                        %if the variable is scaled,  a partition vector should have been supplied, and
     33                        %that partition vector should have as many partitions as the lower and upper
     34                        %vectors:
     35                        if self.isscaled(),
     36                                self.partition=getfieldvalue(options,'partition');
     37                                npart=partition_npart(self.partition);
     38                                if npart~=length(self.upper),
     39                                        error(['uniform_uncertain constructor: for the scaled variable' self.descriptor ' the upper field is not currently a vector of values for all the partitions described in the partition vector']);
     40                                end
     41                                if npart~=length(self.lower),
     42                                        error(['uniform_uncertain constructor: for the scaled variable' self.described ' the lower field is not currently a vector of values for all the partitions described in the partition vector']);
     43                                end
     44                        end
    3245
    3346                end %}}}
     
    4558                function md=checkconsistency(self,md,solution,analyses) % {{{
    4659
    47                         md = checkfield(md,'field',self.upper,'fieldname','uniform_uncertain.upper','NaN',1,'Inf',1);
    48                         md = checkfield(md,'field',self.lower,'fieldname','uniform_uncertain.lower','NaN',1,'Inf',1);
    49                         if ~isempty(self.partition),
    50                                 md = checkfield(md,'field',self.partition,'fieldname','uniform_uncertain.partition','NaN',1,'Inf',1,'>=',-1,'numel',[md.mesh.numberofvertices,md.mesh.numberofelements]);
    51                                 if size(self.partition,1)>1,
    52                                         error('uniform_uncertain error message: partition should be a column vector');
    53                                 end
    54                                 partcheck=unique(self.partition);
    55                                 partmin=min(partcheck);
    56                                 partmax=max(partcheck);
    57                                 if partmax<-1,
    58                                         error('uniform_uncertain error message: partition vector''s min value should be -1 (for no partition), or start at 0');
    59                                 end
    60                                 nmax=max(md.mesh.numberofelements,md.mesh.numberofvertices);
    61                                 if partmax>nmax,
    62                                         error('uniform_uncertain error message: partition vector''s values cannot go over the number of vertices or elements');
    63                                 end
     60                md = checkfield(md,'field',self.upper,'fieldname','uniform_uncertain.upper','NaN',1,'Inf',1,'>',self.lower,'numel',length(self.lower));
     61                md = checkfield(md,'field',self.lower,'fieldname','uniform_uncertain.lower','NaN',1,'Inf',1,'<',self.upper,'numel',length(self.upper));
     62                if self.isscaled(),
     63                        if isempty(self.partition),
     64                                error('normal_uncertain is a scaled variable, but it''s missing a partition vector');
     65                        end
     66                        %better have a partition vector that has as many partitions as stddev's size:
     67                        if  length(self.upper)~=partition_npart(self.partition),
     68                                error('uniform_uncertain error message: upper and partition should be vectors of identical size');
     69                        end
     70                        if  length(self.lower)~=partition_npart(self.partition),
     71                                error('uniform_uncertain error message: lower and partition should be vectors of identical size');
     72                        end
    6473
     74                        md = checkfield(md,'field',self.partition,'fieldname','normal_uncertain.partition','NaN',1,'Inf',1,'>=',-1,'numel',[md.mesh.numberofvertices,md.mesh.numberofelements]);
     75                        if size(self.partition,2)>1,
     76                                error('uniform_uncertain error message: partition should be a column vector');
    6577                        end
    66                 end % }}}
     78                        partcheck=unique(self.partition);
     79                        partmin=min(partcheck);
     80                        partmax=max(partcheck);
     81                        if partmax<-1,
     82                                error('uniform_uncertain error message: partition vector''s min value should be -1 (for no partition), or start at 0');
     83                        end
     84                        nmax=max(md.mesh.numberofelements,md.mesh.numberofvertices);
     85                        if partmax>nmax,
     86                                error('uniform_uncertain error message: partition vector''s values cannot go over the number of vertices or elements');
     87                        end
     88                end
     89        end % }}}
    6790        %virtual functions needed by qmu processing algorithms:
    6891        %implemented:
     
    82105                        desc=allempty(desc);
    83106                end %}}}
    84                 function [lower] =prop_lower(uuv) %{{{
     107                function [lower] =prop_lower(uuv) % {{{
    85108                        lower=zeros(1,numel(uuv));
    86109                        for i=1:numel(uuv)
     
    89112                        lower=allequal(lower,-Inf);
    90113                end %}}}
    91                 function [upper] =prop_upper(uuv) %{{{
     114                function [upper] =prop_upper(uuv) % {{{
    92115                        upper=zeros(1,numel(uuv));
    93116                        for i=1:numel(uuv)
     
    121144                                counts=[];
    122145                                end % }}}
    123                                 function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
    124                                 pairs_per_variable=[];
    125                                 end % }}}
     146        function [pairs_per_variable] =prop_pairs_per_variable(hbu) % {{{
     147                pairs_per_variable=[];
     148        end % }}}
     149        %new methods:
     150        function scaled =isscaled(self) % {{{
     151                if strncmp(self.descriptor,'scaled_',7),
     152                        scaled=1;
     153                else
     154                        scaled=0;
     155                end
     156        end % }}}
    126157    end
    127158        methods (Static)
  • issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m

    r13646 r24836  
    3838                                dvar(end  ).stddev=variables.stddev(j);
    3939                        end
     40                        if length(variables.mean)>1,
     41                                dvar(end  ).mean=variables.mean(j);
     42                        end
     43
    4044                end
    4145        end
  • issm/trunk-jpl/test/NightlyRun/test218.m

    r24819 r24836  
    6060
    6161%variables
    62 md.qmu.variables.rheology_B=normal_uncertain('descriptor','scaled_MaterialsRheologyB','mean',1,'stddev',.05);
     62md.qmu.variables.rheology_B=normal_uncertain('descriptor','scaled_MaterialsRheologyB',...
     63        'mean',ones(md.mesh.numberofvertices,1),...
     64        'stddev',.05*ones(md.mesh.numberofvertices,1),...
     65        'partition',md.qmu.vpartition);
    6366
    6467%responses
  • issm/trunk-jpl/test/NightlyRun/test234.m

    r24819 r24836  
    2727
    2828%variables
    29 md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance','mean',1,'stddev',.1);
     29md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance',...
     30        'mean',ones(md.qmu.numberofpartitions,1),...
     31        'stddev',.1*ones(md.qmu.numberofpartitions,1),...
     32        'partition',md.qmu.vpartition);
    3033
    3134%responses
  • issm/trunk-jpl/test/NightlyRun/test235.m

    r24819 r24836  
    2727
    2828%variables
    29 md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance','mean',1,'stddev',100);
     29md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance',...
     30        'mean',ones(md.qmu.numberofpartitions,1),...
     31        'stddev',100*ones(md.qmu.numberofpartitions,1),...
     32        'partition',md.qmu.vpartition);
     33        );
    3034
    3135%responses
  • issm/trunk-jpl/test/NightlyRun/test244.m

    r24833 r24836  
    5151
    5252%variables
    53 md.qmu.variables.surface_mass_balanceC=normal_uncertain('descriptor','scaled_SmbC','mean',1,'stddev',.5);
     53md.qmu.variables.surface_mass_balanceC=normal_uncertain('descriptor','scaled_SmbC',...
     54        'mean',1*ones(md.mesh.numberofelements,1),...
     55        'stddev',.5*ones(md.mesh.numberofelements,1),...
     56        'partition',md.qmu.epartition);
    5457
    5558Tmin=273;
     
    6467end
    6568mint_on_partition(isnan(mint_on_partition)) = 10^-10;
    66 md.qmu.variables.surface_mass_balanceTa=uniform_uncertain('descriptor','scaled_SmbTa','upper',1,'lower',0.05);
    67 md.qmu.variables.surface_mass_balanceTa.lower=0.95;
    68 md.qmu.variables.surface_mass_balanceTa.upper=max(min(max(1.05,mint_on_partition),0.9999),0.0001);
     69md.qmu.variables.surface_mass_balanceTa=uniform_uncertain('descriptor','scaled_SmbTa',...
     70        'lower',.95*ones(md.mesh.numberofelements,1),...
     71        'upper',max(min(max(1.05,mint_on_partition),0.9999),0.0001),...
     72        'partition',md.qmu.epartition);
    6973
    7074%responses
  • issm/trunk-jpl/test/NightlyRun/test250.m

    r24819 r24836  
    2727
    2828%variables
    29 md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance','mean',1,'stddev',.1);
     29md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance',...
     30        'mean',ones(md.qmu.numberofpartitions,1),...
     31        'stddev',ones(md.qmu.numberofpartitions,1),...
     32        'partition',md.qmu.vpartition);
    3033
    3134%responses
  • issm/trunk-jpl/test/NightlyRun/test251.m

    r24819 r24836  
    2727
    2828%variables
    29 md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance','mean',1,'stddev',100);
     29md.qmu.variables.surface_mass_balance=normal_uncertain('descriptor','scaled_SmbMassBalance',...
     30        'mean',ones(md.mesh.numberofvertices,1),...
     31        'stddev',100*ones(md.mesh.numberofvertices,1),...
     32        'partition',md.qmu.vpartition);
    3033
    3134%responses
  • issm/trunk-jpl/test/NightlyRun/test412.m

    r24821 r24836  
    1919
    2020%variables
    21 md.qmu.variables.rho_ice=normal_uncertain('descriptor','MaterialsRhoIce','mean',md.materials.rho_ice,'stddev',.01);
    22 md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient','mean',1,'stddev',.01);
    23 
     21md.qmu.variables.rho_ice=normal_uncertain('descriptor','MaterialsRhoIce', 'mean',md.materials.rho_ice,'stddev',.01);
     22md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient',...
     23        'mean',ones(md.mesh.numberofvertices,1),...
     24        'stddev',.01*ones(md.mesh.numberofvertices,1),...
     25        'partition',md.qmu.vpartition);
    2426
    2527%responses
  • issm/trunk-jpl/test/NightlyRun/test413.m

    r24821 r24836  
    1818%variables
    1919md.qmu.variables.rho_ice=normal_uncertain('descriptor','MaterialsRhoIce','mean',md.materials.rho_ice,'stddev',.01);
    20 md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient','mean',1,'stddev',.01);
    21 
     20md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient',...
     21        'mean',ones(md.qmu.numberofpartitions,1),...
     22        'stddev',.01*ones(md.qmu.numberofpartitions,1),...
     23        'partition',md.qmu.vpartition);
    2224
    2325%responses
  • issm/trunk-jpl/test/NightlyRun/test414.m

    r24819 r24836  
    2525
    2626%variables
    27 md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient','mean',1,'stddev',.01);
     27md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient',...
     28        'mean',ones(md.qmu.numberofpartitions,1),...
     29        'stddev',.01*ones(md.qmu.numberofpartitions,1),...
     30        'partition',md.qmu.vpartition);
    2831
    2932%responses
  • issm/trunk-jpl/test/NightlyRun/test417.m

    r24819 r24836  
    1919version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version);
    2020
    21 md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient','mean',1,'stddev',.01);
     21%partitioning
     22md.qmu.numberofpartitions=20;
     23md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
     24md.qmu.vpartition=md.qmu.vpartition-1;
     25md.qmu.isdakota=1;
     26
     27md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_FrictionCoefficient',...
     28        'mean',ones(md.qmu.numberofpartitions,1),...
     29        'stddev',.01*ones(md.qmu.numberofpartitions,1),...
     30        'partition',md.qmu.vpartition);
    2231
    2332md.qmu.responses.MaxVel=response_function('MaxVel',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
     
    5867
    5968
    60 %partitioning
    61 md.qmu.numberofpartitions=20;
    62 md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
    63 md.qmu.vpartition=md.qmu.vpartition-1;
    64 md.qmu.isdakota=1;
    6569
    6670md.stressbalance.reltol=10^-5; %tighten for qmu analyses
  • issm/trunk-jpl/test/NightlyRun/test444.m

    r24819 r24836  
    4949version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version);
    5050
    51 md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_BasalforcingsFloatingiceMeltingRate','mean',1,'stddev',.1);
     51%partitioning
     52md.qmu.numberofpartitions=10;
     53md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
     54md.qmu.vpartition=md.qmu.vpartition-1;
     55md.qmu.isdakota=1;
     56
     57md.qmu.variables.drag_coefficient=normal_uncertain('descriptor','scaled_BasalforcingsFloatingiceMeltingRate',...
     58        'mean',ones(md.qmu.numberofpartitions,1),...
     59        'stddev',.1*ones(md.qmu.numberofpartitions,1),...
     60        'partition',md.qmu.vpartition);
    5261
    5362md.qmu.responses.IceMass1=response_function('Outputdefinition5',[],[0.0001 0.001 0.01 0.25 0.5 0.75 0.99 0.999 0.9999]);
     
    8392end
    8493
    85 %partitioning
    86 md.qmu.numberofpartitions=10;
    87 md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
    88 md.qmu.vpartition=md.qmu.vpartition-1;
    89 md.qmu.isdakota=1;
    9094
    9195md.stressbalance.reltol=10^-5; %tighten for qmu analyses
  • issm/trunk-jpl/test/NightlyRun/test445.m

    r24819 r24836  
    1818version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version);
    1919
     20%partitioning
     21md.qmu.numberofpartitions=10;
     22md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
     23md.qmu.vpartition=md.qmu.vpartition-1;
     24md.qmu.isdakota=1;
     25
    2026%variables
    21 md.qmu.variables.neff=normal_uncertain('descriptor','scaled_FrictionEffectivePressure','mean',1,'stddev',.05);
    22 md.qmu.variables.neff=normal_uncertain('descriptor','scaled_BasalforcingsGeothermalflux','mean',1,'stddev',.05);
     27md.qmu.variables.neff=normal_uncertain('descriptor','scaled_FrictionEffectivePressure',...
     28        'mean',ones(md.qmu.numberofpartitions,1),...
     29        'stddev',.05*ones(md.qmu.numberofpartitions,1),...
     30        'partition',md.qmu.vpartition);
     31md.qmu.variables.neff=normal_uncertain('descriptor','scaled_BasalforcingsGeothermalflux',...
     32        'mean',ones(md.qmu.numberofpartitions,1),...
     33        'stddev',.05*ones(md.qmu.numberofpartitions,1),...
     34        'partition',md.qmu.vpartition);
    2335
    2436%responses
     
    5668end
    5769
    58 %partitioning
    59 md.qmu.numberofpartitions=10;
    60 md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,'weighting','on');
    61 md.qmu.vpartition=md.qmu.vpartition-1;
    62 md.qmu.isdakota=1;
    6370
    6471md.stressbalance.reltol=10^-5; %tighten for qmu analyses
Note: See TracChangeset for help on using the changeset viewer.