Changeset 25019
- Timestamp:
- 06/11/20 17:02:35 (5 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
r24989 r25019 21 21 IssmDouble * variable_partition = NULL; 22 22 int * variable_partitions_npart = NULL; 23 int * variable_partitions_nt = NULL; 23 24 int variable_partitions_num; 24 25 int npart; 26 int nt; 25 27 int variablecount=0; 26 28 … … 33 35 femmodel->parameters->FindParam(&variable_partitions,&variable_partitions_num,NULL,NULL,QmuVariablePartitionsEnum); 34 36 femmodel->parameters->FindParam(&variable_partitions_npart,NULL,NULL,QmuVariablePartitionsNpartEnum); 37 femmodel->parameters->FindParam(&variable_partitions_nt,NULL,NULL,QmuVariablePartitionsNtEnum); 35 38 36 39 numberofvertices=femmodel->vertices->NumberOfVertices(); … … 49 52 variable_partition=variable_partitions[variablecount]; 50 53 npart=variable_partitions_npart[variablecount]; 54 nt=variable_partitions_nt[variablecount]; 51 55 52 56 /*Variable is scaled. Determine root name of variable (ex: scaled_DragCoefficient_1 -> DragCoefficient). Allocate distributed_values and fill the … … 57 61 *strstr(root,"_")='\0'; 58 62 59 distributed_values=xNew<double>(npart );60 for(j=0;j<npart ;j++){63 distributed_values=xNew<double>(npart*nt); 64 for(j=0;j<npart*nt;j++){ 61 65 distributed_values[j]=variables[i+j]; 62 66 } … … 72 76 //_printf_("nrows: " << nrows << " numberofvertices: " << numberofvertices << " numberofelements: " << numberofelements << "\n"); 73 77 74 if (nrows==numberofvertices || nrows==(numberofvertices+1)){ 75 for(k=0;k<numberofvertices;k++){ 76 if (variable_partition[k]==-1)continue; 77 else{ 78 for(l=0;l<ncols;l++){ 79 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]]; 78 if(ncols!=nt){ 79 /*we are trying to update a col sized transient input by scaling with a matrix of col size nt. This can only work if nt==1, otherwise, error out: */ 80 if (nt!=1) _error_("InputUpdateFromDakotax error message: transient input being updated should be the same col size as the number of time step in the qmu variable specificationi"); 81 } 82 83 if(nt==1){ 84 /*scale all the columns by the same vector:*/ 85 if (nrows==numberofvertices || nrows==(numberofvertices+1)){ 86 for(k=0;k<numberofvertices;k++){ 87 if (variable_partition[k]==-1)continue; 88 else{ 89 for(l=0;l<ncols;l++){ 90 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]]; 91 } 80 92 } 81 93 } 82 94 } 95 else if (nrows==numberofelements || nrows==(numberofelements+1)){ 96 for(k=0;k<numberofelements;k++){ 97 if (variable_partition[k]==-1)continue; 98 else{ 99 for(l=0;l<ncols;l++){ 100 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]]; 101 } 102 } 103 } 104 105 } 106 else _error_("partitioning vector should be either elements or vertex sized!"); 107 83 108 } 84 else if (nrows==numberofelements || nrows==(numberofelements+1)){ 85 for(k=0;k<numberofelements;k++){ 86 if (variable_partition[k]==-1)continue; 87 else{ 88 for(l=0;l<ncols;l++){ 89 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]]; 109 else{ 110 /*scale all the columns by the scalar matrix:*/ 111 if (nrows==numberofvertices || nrows==(numberofvertices+1)){ 112 for(k=0;k<numberofvertices;k++){ 113 if (variable_partition[k]==-1)continue; 114 else{ 115 for(l=0;l<ncols;l++){ 116 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]*nt+l]; 117 } 90 118 } 91 119 } 92 120 } 121 else if (nrows==numberofelements || nrows==(numberofelements+1)){ 122 for(k=0;k<numberofelements;k++){ 123 if (variable_partition[k]==-1)continue; 124 else{ 125 for(l=0;l<ncols;l++){ 126 *(parameter+ncols*k+l)=*(parameter+ncols*k+l)*distributed_values[(int)variable_partition[k]*nt+l]; 127 } 128 } 129 } 93 130 131 } 132 else _error_("partitioning vector should be either elements or vertex sized!"); 94 133 } 95 else _error_("partitioning vector should be either elements or vertex sized!");96 134 97 135 #ifdef _DEBUG_ … … 118 156 119 157 /*increment i to skip the distributed values just collected: */ 120 i+=npart -1; //careful, the for loop will add 1.158 i+=npart*nt-1; //careful, the for loop will add 1. 121 159 122 160 /*Free allocations: */ … … 143 181 } 144 182 xDelete<IssmDouble*>(variable_partitions); 183 xDelete<int>(variable_partitions_npart); 184 xDelete<int>(variable_partitions_nt); 145 185 146 186 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
r24998 r25019 78 78 iomodel->FetchData(&intarray,&M,&N,"md.qmu.variablepartitions_npart"); 79 79 parameters->AddObject(new IntMatParam(QmuVariablePartitionsNpartEnum,intarray,M,N)); 80 xDelete<int>(intarray); iomodel->FetchData(&intarray,&M,&N,"md.qmu.variablepartitions_nt"); 81 parameters->AddObject(new IntMatParam(QmuVariablePartitionsNtEnum,intarray,M,N)); 80 82 81 83 /*free arrays: {{{*/ -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r24998 r25019 297 297 syn keyword cConstant QmuVariablePartitionsEnum 298 298 syn keyword cConstant QmuVariablePartitionsNpartEnum 299 syn keyword cConstant QmuVariablePartitionsNtEnum 299 300 syn keyword cConstant QmuResponsePartitionsEnum 300 301 syn keyword cConstant QmuResponsePartitionsNpartEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r24998 r25019 291 291 QmuVariablePartitionsEnum, 292 292 QmuVariablePartitionsNpartEnum, 293 QmuVariablePartitionsNtEnum, 293 294 QmuResponsePartitionsEnum, 294 295 QmuResponsePartitionsNpartEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r24998 r25019 299 299 case QmuVariablePartitionsEnum : return "QmuVariablePartitions"; 300 300 case QmuVariablePartitionsNpartEnum : return "QmuVariablePartitionsNpart"; 301 case QmuVariablePartitionsNtEnum : return "QmuVariablePartitionsNt"; 301 302 case QmuResponsePartitionsEnum : return "QmuResponsePartitions"; 302 303 case QmuResponsePartitionsNpartEnum : return "QmuResponsePartitionsNpart"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r24998 r25019 305 305 else if (strcmp(name,"QmuVariablePartitions")==0) return QmuVariablePartitionsEnum; 306 306 else if (strcmp(name,"QmuVariablePartitionsNpart")==0) return QmuVariablePartitionsNpartEnum; 307 else if (strcmp(name,"QmuVariablePartitionsNt")==0) return QmuVariablePartitionsNtEnum; 307 308 else if (strcmp(name,"QmuResponsePartitions")==0) return QmuResponsePartitionsEnum; 308 309 else if (strcmp(name,"QmuResponsePartitionsNpart")==0) return QmuResponsePartitionsNpartEnum; … … 382 383 else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum; 383 384 else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum; 384 else if (strcmp(name,"SmbK")==0) return SmbKEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 388 if (strcmp(name,"SmbK")==0) return SmbKEnum; 389 else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum; 389 390 else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum; 390 391 else if (strcmp(name,"SmbRdl")==0) return SmbRdlEnum; … … 505 506 else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum; 506 507 else if (strcmp(name,"Bed")==0) return BedEnum; 507 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 511 if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; 512 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 512 513 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 513 514 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; … … 628 629 else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum; 629 630 else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum; 630 else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Ice")==0) return IceEnum; 634 if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum; 635 else if (strcmp(name,"Ice")==0) return IceEnum; 635 636 else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum; 636 637 else if (strcmp(name,"Input")==0) return InputEnum; … … 751 752 else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum; 752 753 else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum; 753 else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"SmbGsp")==0) return SmbGspEnum; 757 if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum; 758 else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum; 758 759 else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum; 759 760 else if (strcmp(name,"SmbHref")==0) return SmbHrefEnum; … … 874 875 else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum; 875 876 else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum; 876 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 880 if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 881 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 881 882 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; 882 883 else if (strcmp(name,"Outputdefinition1")==0) return Outputdefinition1Enum; … … 997 998 else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum; 998 999 else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; 999 else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; 1003 if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum; 1004 else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum; 1004 1005 else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum; 1005 1006 else if (strcmp(name,"BalancevelocityAnalysis")==0) return BalancevelocityAnalysisEnum; … … 1120 1121 else if (strcmp(name,"HydrologyPismAnalysis")==0) return HydrologyPismAnalysisEnum; 1121 1122 else if (strcmp(name,"HydrologyShaktiAnalysis")==0) return HydrologyShaktiAnalysisEnum; 1122 else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum; 1126 if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum; 1127 else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum; 1127 1128 else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum; 1128 1129 else if (strcmp(name,"Hydrologypism")==0) return HydrologypismEnum; … … 1243 1244 else if (strcmp(name,"P1xP4")==0) return P1xP4Enum; 1244 1245 else if (strcmp(name,"P2")==0) return P2Enum; 1245 else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum; 1249 if (strcmp(name,"P2bubble")==0) return P2bubbleEnum; 1250 else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum; 1250 1251 else if (strcmp(name,"P2xP1")==0) return P2xP1Enum; 1251 1252 else if (strcmp(name,"P2xP4")==0) return P2xP4Enum; … … 1366 1367 else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum; 1367 1368 else if (strcmp(name,"StrainRate")==0) return StrainRateEnum; 1368 else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 if(stage==12){ 1372 if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum; 1372 if (strcmp(name,"StressTensor")==0) return StressTensorEnum; 1373 else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum; 1373 1374 else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum; 1374 1375 else if (strcmp(name,"TimesteppingTimeAdapt")==0) return TimesteppingTimeAdaptEnum; -
issm/trunk-jpl/src/m/classes/qmu.m
r25006 r25019 17 17 variablepartitions = {}; 18 18 variablepartitions_npart = []; 19 variablepartitions_nt = []; 19 20 responsedescriptors = {}; 20 21 responsepartitions = {}; … … 174 175 fielddisplay(self,'variablepartitions',''); 175 176 fielddisplay(self,'variablepartitions_npart',''); 177 fielddisplay(self,'variablepartitions_nt',''); 176 178 fielddisplay(self,'variabledescriptors',''); 177 179 fielddisplay(self,'responsedescriptors',''); … … 195 197 WriteData(fid,prefix,'object',self,'fieldname','variablepartitions','format','MatArray'); 196 198 WriteData(fid,prefix,'object',self,'fieldname','variablepartitions_npart','format','IntMat','mattype',3); 199 WriteData(fid,prefix,'object',self,'fieldname','variablepartitions_nt','format','IntMat','mattype',3); 197 200 WriteData(fid,prefix,'object',self,'fieldname','responsedescriptors','format','StringArray'); 198 201 WriteData(fid,prefix,'object',self,'fieldname','responsepartitions','format','MatArray'); -
issm/trunk-jpl/src/m/classes/qmu/normal_uncertain.m
r24870 r25019 18 18 stddev = NaN; 19 19 partition = []; 20 nsteps = 0; 20 21 end 21 22 methods … … 35 36 if self.isscaled(), 36 37 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']); 38 self.nsteps=getfieldvalue(options,'nsteps',1); 39 npart=qmupart2npart(self.partition); 40 if npart~=size(self.mean,1), 41 error(['normal_uncertain constructor: for the scaled variable ' self.descriptor ' the row size of the mean field should be identifical to the number of partitions']); 40 42 end 41 if npart~= length(self.stddev),42 error(['normal_uncertain constructor: for the scaled variable ' self.descriptor ' the stddev field is not currently a vector of values for all the partitions described in the partition vector']);43 if npart~=size(self.stddev,1), 44 error(['normal_uncertain constructor: for the scaled variable ' self.descriptor ' the row size of the stddev field should be identifical to the number of partitions']); 43 45 end 46 if self.nsteps~=size(self.mean,2), 47 error(['normal_uncertain constructor: for the scaled variable ' self.descriptor ' the col size of the mean field should be identifical to the number of time steps']); 48 end 49 if npart~=size(self.stddev,1), 50 error(['normal_uncertain constructor: for the scaled variable ' self.descriptor ' the col size of the stddev field should be identifical to the number of time steps']); 51 end 52 44 53 end 45 46 54 47 55 end %}}} … … 54 62 fielddisplay(self,'partition','partition vector defining where sampling will occur'); 55 63 end 64 fielddisplay(self,'nsteps','number of time steps'); 56 65 end 57 66 %}}} … … 65 74 end 66 75 %better have a partition vector that has as many partitions as stddev's size: 67 if length(self.stddev)~=partition_npart(self.partition),68 error('normal_uncertain error message: stddev and partition should be vectors of identical size');76 if size(self.stddev,1)~=partition_npart(self.partition), 77 error('normal_uncertain error message: row size of stddev and partition size should be identical'); 69 78 end 70 if length(self.mean)~=partition_npart(self.partition), 71 error('normal_uncertain error message: mean and partition should be vectors of identical size'); 79 if size(self.mean,1)~=partition_npart(self.partition), 80 error('normal_uncertain error message: row size of mean and partition size should be identical'); 81 end 82 %we need as steps in stddev and mean as there are time steps: 83 if size(self.stddev,2)~=self.nsteps, 84 error('normal_uncertain error message: col size of stddev and number of time steps should be identical'); 85 end 86 if size(self.mean,2)~=self.nsteps, 87 error('normal_uncertain error message: col size of mean and number of time steps should be identical'); 72 88 end 73 89 -
issm/trunk-jpl/src/m/qmu/preqmu.m
r25015 r25019 88 88 89 89 %build a MatArray of variable partitions: 90 variable_fieldnames=fieldnames(md.qmu.variables(ivar)); 90 91 variablepartitions={}; 91 92 variablepartitions_npart=[]; 92 variable _fieldnames=fieldnames(md.qmu.variables(ivar));93 variablepartitions_nt=[]; 93 94 for i=1:length(variable_fieldnames), 94 95 field_name=variable_fieldnames{i}; … … 97 98 variablepartitions{end+1}=fieldvariable.partition; 98 99 variablepartitions_npart(end+1)=qmupart2npart(fieldvariable.partition); 100 variablepartitions_nt(end+1)=fieldvariable.nsteps; 99 101 else 100 102 variablepartitions{end+1}=[]; 101 103 variablepartitions_npart(end+1)=0; 104 variablepartitions_nt(end+1)=1; 102 105 end 103 106 end 104 107 105 108 %build a MatArray of response partitions: 109 response_fieldnames=fieldnames(md.qmu.responses(ivar)); 106 110 responsepartitions={}; 107 111 responsepartitions_npart=[]; 108 response_fieldnames=fieldnames(md.qmu.responses(iresp));109 112 for i=1:length(response_fieldnames), 110 113 field_name=response_fieldnames{i}; 111 fieldresponse=md.qmu.responses(i resp).(field_name);114 fieldresponse=md.qmu.responses(ivar).(field_name); 112 115 if fieldresponse.isscaled(); 113 116 responsepartitions{end+1}=fieldresponse.partition; … … 125 128 md.qmu.variablepartitions=variablepartitions; 126 129 md.qmu.variablepartitions_npart=variablepartitions_npart; 130 md.qmu.variablepartitions_nt=variablepartitions_nt; 127 131 md.qmu.responsedescriptors=responsedescriptors; 128 132 md.qmu.responsepartitions=responsepartitions; … … 132 136 %is a response, we need a profile of points. For a misfit, we need the observed velocity, etc ... 133 137 md=process_qmu_response_data(md); 138 -
issm/trunk-jpl/src/m/qmu/setupdesign/QmuSetupVariables.m
r24989 r25019 13 13 %figure out number of partitions: 14 14 npart=qmupart2npart(partition); 15 %figure out number of time steps: 16 nt=variables.nsteps; 15 17 16 18 if isa(variables,'uniform_uncertain'), … … 28 30 29 31 %ok, dealing with semi-discrete distributed variable. Distribute according to how many 30 %partitions we want 31 for j=1:npart, 32 dvar(end+1) =variables; 33 dvar(end ).descriptor=sprintf('%s_%d',variables.descriptor,j); 34 if isa(variables,'uniform_uncertain'), 35 dvar(end ).lower=variables.lower(j); 36 dvar(end ).upper=variables.upper(j); 37 elseif isa(variables,'normal_uncertain'), 38 dvar(end ).stddev=variables.stddev(j); 39 dvar(end ).mean=variables.mean(j); 32 %partitions we want, and number of time steps: 33 if nt==1, 34 for j=1:npart, 35 dvar(end+1) =variables; 36 dvar(end ).descriptor=sprintf('%s_%d',variables.descriptor,j); 37 if isa(variables,'uniform_uncertain'), 38 dvar(end ).lower=variables.lower(j); 39 dvar(end ).upper=variables.upper(j); 40 elseif isa(variables,'normal_uncertain'), 41 dvar(end ).stddev=variables.stddev(j); 42 dvar(end ).mean=variables.mean(j); 43 end 40 44 end 45 else 46 for j=1:npart, 47 for k=1:nt, 48 dvar(end+1) =variables; 49 dvar(end ).descriptor=sprintf('%s_%d_%d',variables.descriptor,j,k); 50 if isa(variables,'uniform_uncertain'), 51 dvar(end ).lower=variables.lower(j,k); 52 dvar(end ).upper=variables.upper(j,k); 53 elseif isa(variables,'normal_uncertain'), 54 dvar(end ).stddev=variables.stddev(j,k); 55 dvar(end ).mean=variables.mean(j,k); 56 end 57 end 58 end 59 41 60 end 42 61
Note:
See TracChangeset
for help on using the changeset viewer.