Changeset 18565
- Timestamp:
- 10/03/14 08:36:31 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 4 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.cpp
r18476 r18565 45 45 }/*}}}*/ 46 46 ElementVector* AdjointBalancethickness2Analysis::CreatePVector(Element* element){/*{{{*/ 47 _error_("Not implemented yet"); 47 48 /*Intermediaries */ 49 int num_responses,i; 50 IssmDouble vx,vy,vel,Jdet; 51 IssmDouble surface,surfaceobs,weight; 52 int *responses = NULL; 53 IssmDouble *xyz_list = NULL; 54 55 /*Fetch number of nodes and dof for this finite element*/ 56 int numnodes = element->GetNumberOfNodes(); 57 58 /*Initialize Element vector and vectors*/ 59 ElementVector* pe = element->NewElementVector(SSAApproximationEnum); 60 IssmDouble* basis = xNew<IssmDouble>(numnodes); 61 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 62 63 /*Retrieve all inputs and parameters*/ 64 element->GetVerticesCoordinates(&xyz_list); 65 element->FindParam(&num_responses,InversionNumCostFunctionsEnum); 66 element->FindParam(&responses,NULL,InversionCostFunctionsEnum); 67 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 68 Input* surfaceobs_input = element->GetInput(InversionSurfaceObsEnum); _assert_(surfaceobs_input); 69 Input* weights_input = element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 70 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 71 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input); 72 73 /* Start looping on the number of gaussian points: */ 74 Gauss* gauss=element->NewGauss(2); 75 for(int ig=gauss->begin();ig<gauss->end();ig++){ 76 gauss->GaussPoint(ig); 77 78 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 79 element->NodalFunctions(basis,gauss); 80 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 81 82 surface_input->GetInputValue(&surface, gauss); 83 surfaceobs_input->GetInputValue(&surfaceobs, gauss); 84 85 /*Loop over all requested responses*/ 86 for(int resp=0;resp<num_responses;resp++){ 87 weights_input->GetInputValue(&weight,gauss,responses[resp]); 88 89 switch(responses[resp]){ 90 case SurfaceAbsMisfitEnum: 91 for(i=0;i<numnodes;i++) pe->values[i]+=(surfaceobs-surface)*weight*Jdet*gauss->weight*basis[i]; 92 break; 93 default: 94 _error_("response " << EnumToStringx(responses[resp]) << " not supported yet"); 95 } 96 } 97 } 98 99 /*Clean up and return*/ 100 xDelete<int>(responses); 101 xDelete<IssmDouble>(xyz_list); 102 xDelete<IssmDouble>(basis); 103 xDelete<IssmDouble>(dbasis); 104 delete gauss; 105 return pe; 48 106 49 107 }/*}}}*/ … … 71 129 /*Deal with first part (partial derivative a J with respect to k)*/ 72 130 for(resp=0;resp<num_responses;resp++) switch(responses[resp]){ 73 case Balancethickness2MisfitEnum:131 case SurfaceAbsMisfitEnum: 74 132 /*Nothing, \partial J/\partial k = 0*/ 75 133 break; … … 79 137 /*Deal with second term*/ 80 138 switch(control_type){ 139 case BalancethicknessOmegaEnum: GradientJOmega(element,gradient,control_index); break; 81 140 default: _error_("control type not supported yet: " << EnumToStringx(control_type)); 82 141 } … … 86 145 87 146 }/*}}}*/ 88 void AdjointBalancethickness2Analysis::GradientJ Adot(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/147 void AdjointBalancethickness2Analysis::GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index){/*{{{*/ 89 148 90 149 /*Intermediaries*/ 91 IssmDouble lambda,Jdet;150 IssmDouble dlambda[2],ds[2],D0,Jdet; 92 151 IssmDouble *xyz_list= NULL; 93 152 … … 103 162 element->GetVerticesCoordinates(&xyz_list); 104 163 element->GradientIndexing(&vertexpidlist[0],control_index); 105 Input* adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input); 164 Input* adjoint_input = element->GetInput(AdjointEnum); _assert_(adjoint_input); 165 Input* s_input = element->GetInput(SurfaceEnum); _assert_(s_input); 166 Input* D0_input = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input); 106 167 107 168 Gauss* gauss=element->NewGauss(2); … … 111 172 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 112 173 element->NodalFunctionsP1(basis,gauss); 113 adjoint_input->GetInputValue(&lambda,gauss); 174 175 D0_input->GetInputValue(&D0,gauss); 176 adjoint_input->GetInputDerivativeValue(&dlambda[0],xyz_list,gauss); 177 s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss); 114 178 115 179 /*Build gradient vector (actually -dJ/da): */ 116 180 for(int i=0;i<numvertices;i++){ 117 ge[i]+= - Jdet*gauss->weight*basis[i]*lambda;181 ge[i]+= Jdet*gauss->weight*basis[i]*(ds[0]*dlambda[0] + ds[1]*dlambda[1]); 118 182 _assert_(!xIsNan<IssmDouble>(ge[i])); 119 183 } -
issm/trunk-jpl/src/c/analyses/AdjointBalancethickness2Analysis.h
r18476 r18565 28 28 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 29 29 void GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index); 30 void GradientJ Adot(Element* element,Vector<IssmDouble>* gradient,int control_index);30 void GradientJOmega(Element* element,Vector<IssmDouble>* gradient,int control_index); 31 31 void InputUpdateFromSolution(IssmDouble* solution,Element* element); 32 32 void UpdateConstraints(FemModel* femmodel); -
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
r18551 r18565 15 15 /*Finite element type*/ 16 16 int finiteelement = P1Enum; 17 18 /*Load variables in element*/ 19 iomodel->FetchDataToInput(elements,ThicknessEnum); 20 iomodel->FetchDataToInput(elements,SurfaceEnum); 21 iomodel->FetchDataToInput(elements,BaseEnum); 22 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 23 iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum); 24 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum); 25 iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum); 26 iomodel->FetchDataToInput(elements,BalancethicknessOmegaEnum); 17 27 18 28 /*Update elements: */ … … 22 32 Element* element=(Element*)elements->GetObjectByOffset(counter); 23 33 element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement); 34 24 35 counter++; 25 36 } 26 37 } 27 38 28 iomodel->FetchDataToInput(elements,ThicknessEnum);29 iomodel->FetchDataToInput(elements,SurfaceEnum);30 iomodel->FetchDataToInput(elements,BaseEnum);31 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum);32 iomodel->FetchDataToInput(elements,FrictionCoefficientEnum);33 iomodel->FetchDataToInput(elements,BasalforcingsGroundediceMeltingRateEnum);34 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);35 iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);36 iomodel->FetchDataToInput(elements,BalancethicknessCmuEnum);37 39 }/*}}}*/ 38 40 void Balancethickness2Analysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ … … 66 68 67 69 /*Intermediaries */ 68 IssmDouble Jdet,D ;70 IssmDouble Jdet,D0,omega; 69 71 IssmDouble* xyz_list = NULL; 70 72 … … 76 78 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes); 77 79 78 /*Create input D*/79 this->CreateDiffusionCoefficient(element);80 81 80 /*Retrieve all inputs and parameters*/ 82 81 element->GetVerticesCoordinates(&xyz_list); 83 Input* D_input = element->GetInput(BalancethicknessDiffusionCoefficientEnum); _assert_(D_input); 82 Input* omega_input = element->GetInput(BalancethicknessOmegaEnum); _assert_(omega_input); 83 Input* D0_input = element->GetInput(BalancethicknessD0Enum); 84 if(!D0_input){ 85 this->CreateD0(element); 86 D0_input = element->GetInput(BalancethicknessD0Enum); _assert_(D0_input); 87 } 84 88 85 89 /* Start looping on the number of gaussian points: */ … … 89 93 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 90 94 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 91 D_input->GetInputValue(&D,gauss); 95 D0_input->GetInputValue(&D0,gauss); 96 omega_input->GetInputValue(&omega,gauss); 92 97 93 98 for(int i=0;i<numnodes;i++){ 94 99 for(int j=0;j<numnodes;j++){ 95 Ke->values[i*numnodes+j] += D *gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]);100 Ke->values[i*numnodes+j] += D0*omega*gauss->weight*Jdet*(dbasis[0*numnodes+i]*dbasis[0*numnodes+j] + dbasis[1*numnodes+i]*dbasis[1*numnodes+j]); 96 101 } 97 102 } … … 107 112 108 113 /*Intermediaries */ 109 IssmDouble dhdt,mb,ms, D,db[2],Jdet;114 IssmDouble dhdt,mb,ms,Jdet; 110 115 IssmDouble* xyz_list = NULL; 111 116 … … 116 121 ElementVector* pe = element->NewElementVector(); 117 122 IssmDouble* basis = xNew<IssmDouble>(numnodes); 118 IssmDouble* dbasis = xNew<IssmDouble>(2*numnodes);119 123 120 124 /*Retrieve all inputs and parameters*/ … … 123 127 Input* mb_input = element->GetInput(BasalforcingsGroundediceMeltingRateEnum); _assert_(mb_input); 124 128 Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 125 Input* D_input = element->GetInput(BalancethicknessDiffusionCoefficientEnum); _assert_(D_input);126 Input* bed_input = element->GetInput(BaseEnum); _assert_(bed_input);127 129 128 130 /* Start looping on the number of gaussian points: */ … … 133 135 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 134 136 element->NodalFunctions(basis,gauss); 135 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);136 137 137 138 ms_input->GetInputValue(&ms,gauss); 138 139 mb_input->GetInputValue(&mb,gauss); 139 140 dhdt_input->GetInputValue(&dhdt,gauss); 140 D_input->GetInputValue(&D,gauss);141 bed_input->GetInputDerivativeValue(&db[0],xyz_list,gauss);142 //db[0]=0.;143 //db[1]=0.;144 141 145 142 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*( 146 143 (ms-mb-dhdt)*basis[i] 147 //-D*db[0]*dbasis[0*numnodes+i] - D*db[1]*dbasis[1*numnodes+i]148 144 ); 149 145 } … … 220 216 221 217 /*Specifics*/ 222 void Balancethickness2Analysis::CreateD iffusionCoefficient(Element* element){/*{{{*/218 void Balancethickness2Analysis::CreateD0(Element* element){/*{{{*/ 223 219 224 220 /*Intermediaries */ … … 231 227 /*Fetch number of vertices and allocate output*/ 232 228 int numnodes = element->GetNumberOfNodes(); 233 IssmDouble* D = xNew<IssmDouble>(numnodes); 234 IssmDouble* Dgradb = xNew<IssmDouble>(numnodes); 229 IssmDouble* D0 = xNew<IssmDouble>(numnodes); 235 230 236 231 /*retrieve what we need: */ 237 232 element->GetVerticesCoordinates(&xyz_list); 238 Input* bed_input = element->GetInput(BaseEnum); _assert_(bed_input);239 233 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 240 234 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 241 Input* k_input = element->GetInput(FrictionCoefficientEnum);_assert_(k_input);242 Input* Cmu_input = element->GetInput(BalancethicknessCmuEnum);_assert_(Cmu_input);243 235 IssmDouble rhog = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum); 244 236 … … 249 241 250 242 B_input->GetInputValue(&B,gauss); 251 k_input->GetInputValue(&k,gauss);252 //thickness_input->GetInputValue(&h,gauss);253 243 surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss); 254 surface_input->GetInputValue(&s,gauss);255 bed_input->GetInputValue(&b,gauss);256 h = s-b;257 244 258 245 mu0 = pow(2.,(1-3*n)/(2.*n)) * B; 259 246 Gamma = pow(rhog,n) * pow(Hstar,2*(n+1)) * pow(Hstar/Lstar,2*(n+1)) * 1./pow(mu0,n); 260 //Cmu = pow(mu0,n)/Hstar/(k*k); 261 Cmu_input->GetInputValue(&Cmu,gauss); 262 263 D[i] = Gamma*pow(ds[0]*ds[0]+ds[1]*ds[1],(n-1)/2)*pow(h,n+1)*(1./(n+2.)*h + Cmu); 247 248 D0[i] = Gamma*pow(ds[0]*ds[0]+ds[1]*ds[1],(n-1)/2)/(n+2); 264 249 } 265 250 266 251 /*Add input*/ 267 element->AddInput(BalancethicknessD iffusionCoefficientEnum,D,element->GetElementType());252 element->AddInput(BalancethicknessD0Enum,D0,element->GetElementType()); 268 253 269 254 /*Clean up and return*/ 270 xDelete<IssmDouble>(D );255 xDelete<IssmDouble>(D0); 271 256 delete gauss; 272 257 }/*}}}*/ -
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h
r18476 r18565 32 32 33 33 /*Specifics*/ 34 void CreateD iffusionCoefficient(Element* element);34 void CreateD0(Element* element); 35 35 }; 36 36 #endif -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r18534 r18565 1034 1034 /*No yts conversion*/ 1035 1035 case ThicknessEnum: 1036 case BalancethicknessOmegaEnum: 1036 1037 case FrictionCoefficientEnum: 1037 1038 if(iomodel->Data(control)){ -
issm/trunk-jpl/src/c/classes/FemModel.cpp
r18530 r18565 641 641 case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(responses, elements,nodes, vertices, loads, materials, parameters); break; 642 642 case BalancethicknessMisfitEnum: BalancethicknessMisfitx(responses); break; 643 case Balancethickness2MisfitEnum: Balancethickness2Misfitx(responses); break;644 643 case TotalSmbEnum: this->TotalSmbx(responses); break; 645 644 case MaterialsRheologyBbarEnum: this->ElementResponsex(responses,MaterialsRheologyBbarEnum); break; … … 719 718 case DragCoefficientAbsGradientEnum:DragCoefficientAbsGradientx(&double_result,elements,nodes,vertices,loads,materials,parameters); break; 720 719 case BalancethicknessMisfitEnum: BalancethicknessMisfitx(&double_result); break; 721 case Balancethickness2MisfitEnum: Balancethickness2Misfitx(&double_result); break;720 case SurfaceAbsMisfitEnum: SurfaceAbsMisfitx(&double_result); break; 722 721 723 722 /*Vector */ … … 1444 1443 1445 1444 }/*}}}*/ 1446 void FemModel:: Balancethickness2Misfitx(IssmDouble* presponse){/*{{{*/1445 void FemModel::SurfaceAbsMisfitx(IssmDouble* presponse){/*{{{*/ 1447 1446 1448 1447 /*output: */ … … 1450 1449 IssmDouble J_sum; 1451 1450 1452 IssmDouble weight,thicknessobs,thickness,potential,dpotential[2]; 1453 IssmDouble vx,vy,vxbar,vybar,vxobs,vyobs,vxbarobs,vybarobs,nu; 1451 IssmDouble surface,surfaceobs,weight; 1454 1452 IssmDouble Jdet; 1455 1453 IssmDouble* xyz_list = NULL; … … 1461 1459 /*If on water, return 0: */ 1462 1460 if(!element->IsIceInElement()) continue; 1463 _error_("Not implemented"); 1461 1462 /* Get node coordinates*/ 1463 element->GetVerticesCoordinates(&xyz_list); 1464 1465 /*Retrieve all inputs we will be needing: */ 1466 Input* weights_input =element->GetInput(InversionCostFunctionsCoefficientsEnum); _assert_(weights_input); 1467 Input* surface_input =element->GetInput(SurfaceEnum); _assert_(surface_input); 1468 Input* surfaceobs_input=element->GetInput(InversionSurfaceObsEnum); _assert_(surfaceobs_input); 1469 1470 /* Start looping on the number of gaussian points: */ 1471 Gauss* gauss=element->NewGauss(2); 1472 for(int ig=gauss->begin();ig<gauss->end();ig++){ 1473 1474 gauss->GaussPoint(ig); 1475 1476 /* Get Jacobian determinant: */ 1477 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 1478 1479 /*Get all parameters at gaussian point*/ 1480 weights_input->GetInputValue(&weight,gauss,SurfaceAbsMisfitEnum); 1481 surface_input->GetInputValue(&surface,gauss); 1482 surfaceobs_input->GetInputValue(&surfaceobs,gauss); 1483 1484 /*Compute SurfaceAbsMisfitEnum*/ 1485 J+=0.5*(surface-surfaceobs)*(surface-surfaceobs)*weight*Jdet*gauss->weight; 1486 } 1464 1487 1465 1488 } -
issm/trunk-jpl/src/c/classes/FemModel.h
r18529 r18565 81 81 void ElementResponsex(IssmDouble* presponse,int response_enum); 82 82 void BalancethicknessMisfitx(IssmDouble* pV); 83 void Balancethickness2Misfitx(IssmDouble* pV);84 83 #ifdef _HAVE_DAKOTA_ 85 84 void DakotaResponsesx(double* d_responses,char** responses_descriptors,int numresponsedescriptors,int d_numresponses); … … 93 92 void CostFunctionx(IssmDouble* pJ,IssmDouble** pJlist,int* pn); 94 93 void ThicknessAbsGradientx( IssmDouble* pJ); 94 void SurfaceAbsMisfitx( IssmDouble* pJ); 95 95 #ifdef _HAVE_GIA_ 96 96 void Deflection(Vector<IssmDouble>* wg,Vector<IssmDouble>* dwgdt, IssmDouble* x, IssmDouble* y); -
issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp
r18551 r18565 22 22 23 23 if(VerboseSolution()) _printf0_("call computational core:\n"); 24 //solutionsequence_linear(femmodel);25 solutionsequence_nonlinear(femmodel,false);24 solutionsequence_linear(femmodel); 25 //solutionsequence_nonlinear(femmodel,false); 26 26 27 27 if(save_results){ 28 28 if(VerboseSolution()) _printf0_(" saving results\n"); 29 const int numoutputs = 5; 30 //int outputs[numoutputs] = {ThicknessEnum}; 31 int outputs[numoutputs] = {SurfaceEnum,VxEnum,VyEnum,VelEnum,BalancethicknessDiffusionCoefficientEnum}; 29 const int numoutputs = 4; 30 int outputs[numoutputs] = {SurfaceEnum,VxEnum,VyEnum,VelEnum}; 32 31 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],numoutputs); 33 32 } -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
r18476 r18565 29 29 iomodel->FetchDataToInput(elements,InversionVyObsEnum,0.); 30 30 iomodel->FetchDataToInput(elements,InversionThicknessObsEnum,0.); 31 iomodel->FetchDataToInput(elements,InversionSurfaceObsEnum,0.); 31 32 32 33 iomodel->FetchData(5,InversionControlParametersEnum,InversionCostFunctionsEnum,InversionCostFunctionsCoefficientsEnum,InversionMinParametersEnum,InversionMaxParametersEnum); … … 42 43 case FrictionCoefficientEnum: 43 44 case BalancethicknessApparentMassbalanceEnum: 45 case BalancethicknessOmegaEnum: 44 46 iomodel->FetchData(1,control); 45 47 break; -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r18553 r18565 165 165 InversionStepThresholdEnum, 166 166 InversionThicknessObsEnum, 167 InversionSurfaceObsEnum, 167 168 InversionVxObsEnum, 168 169 InversionVyObsEnum, … … 307 308 BalancethicknessDiffusionCoefficientEnum, 308 309 BalancethicknessCmuEnum, 310 BalancethicknessOmegaEnum, 311 BalancethicknessD0Enum, 309 312 /*}}}*/ 310 313 /*Surfaceforcings{{{*/ … … 527 530 TemperaturePicardEnum, 528 531 ThicknessAbsMisfitEnum, 532 SurfaceAbsMisfitEnum, 529 533 VelEnum, 530 534 VelocityEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r18553 r18565 173 173 case InversionStepThresholdEnum : return "InversionStepThreshold"; 174 174 case InversionThicknessObsEnum : return "InversionThicknessObs"; 175 case InversionSurfaceObsEnum : return "InversionSurfaceObs"; 175 176 case InversionVxObsEnum : return "InversionVxObs"; 176 177 case InversionVyObsEnum : return "InversionVyObs"; … … 315 316 case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient"; 316 317 case BalancethicknessCmuEnum : return "BalancethicknessCmu"; 318 case BalancethicknessOmegaEnum : return "BalancethicknessOmega"; 319 case BalancethicknessD0Enum : return "BalancethicknessD0"; 317 320 case SurfaceforcingsEnum : return "Surfaceforcings"; 318 321 case SMBEnum : return "SMB"; … … 518 521 case TemperaturePicardEnum : return "TemperaturePicard"; 519 522 case ThicknessAbsMisfitEnum : return "ThicknessAbsMisfit"; 523 case SurfaceAbsMisfitEnum : return "SurfaceAbsMisfit"; 520 524 case VelEnum : return "Vel"; 521 525 case VelocityEnum : return "Velocity"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r18553 r18565 176 176 else if (strcmp(name,"InversionStepThreshold")==0) return InversionStepThresholdEnum; 177 177 else if (strcmp(name,"InversionThicknessObs")==0) return InversionThicknessObsEnum; 178 else if (strcmp(name,"InversionSurfaceObs")==0) return InversionSurfaceObsEnum; 178 179 else if (strcmp(name,"InversionVxObs")==0) return InversionVxObsEnum; 179 180 else if (strcmp(name,"InversionVyObs")==0) return InversionVyObsEnum; … … 259 260 else if (strcmp(name,"QmuIsdakota")==0) return QmuIsdakotaEnum; 260 261 else if (strcmp(name,"MassFluxSegments")==0) return MassFluxSegmentsEnum; 261 else if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum; 265 if (strcmp(name,"MassFluxSegmentsPresent")==0) return MassFluxSegmentsPresentEnum; 266 else if (strcmp(name,"QmuMassFluxSegmentsPresent")==0) return QmuMassFluxSegmentsPresentEnum; 266 267 else if (strcmp(name,"QmuNumberofpartitions")==0) return QmuNumberofpartitionsEnum; 267 268 else if (strcmp(name,"QmuNumberofresponses")==0) return QmuNumberofresponsesEnum; … … 321 322 else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum; 322 323 else if (strcmp(name,"BalancethicknessCmu")==0) return BalancethicknessCmuEnum; 324 else if (strcmp(name,"BalancethicknessOmega")==0) return BalancethicknessOmegaEnum; 325 else if (strcmp(name,"BalancethicknessD0")==0) return BalancethicknessD0Enum; 323 326 else if (strcmp(name,"Surfaceforcings")==0) return SurfaceforcingsEnum; 324 327 else if (strcmp(name,"SMB")==0) return SMBEnum; … … 380 383 else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum; 381 384 else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum; 382 else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;383 else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;384 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 388 if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum; 389 else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum; 390 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 391 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 389 392 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 390 393 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; … … 503 506 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 504 507 else if (strcmp(name,"Boundary")==0) return BoundaryEnum; 505 else if (strcmp(name,"Converged")==0) return ConvergedEnum;506 else if (strcmp(name,"Fill")==0) return FillEnum;507 else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"Friction")==0) return FrictionEnum; 511 if (strcmp(name,"Converged")==0) return ConvergedEnum; 512 else if (strcmp(name,"Fill")==0) return FillEnum; 513 else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum; 514 else if (strcmp(name,"Friction")==0) return FrictionEnum; 512 515 else if (strcmp(name,"Internal")==0) return InternalEnum; 513 516 else if (strcmp(name,"MassFlux")==0) return MassFluxEnum; … … 530 533 else if (strcmp(name,"TemperaturePicard")==0) return TemperaturePicardEnum; 531 534 else if (strcmp(name,"ThicknessAbsMisfit")==0) return ThicknessAbsMisfitEnum; 535 else if (strcmp(name,"SurfaceAbsMisfit")==0) return SurfaceAbsMisfitEnum; 532 536 else if (strcmp(name,"Vel")==0) return VelEnum; 533 537 else if (strcmp(name,"Velocity")==0) return VelocityEnum; … … 625 629 else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum; 626 630 else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum; 627 else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum; 628 635 else if (strcmp(name,"MisfitName")==0) return MisfitNameEnum; 629 636 else if (strcmp(name,"MisfitModelEnum")==0) return MisfitModelEnumEnum; 630 637 else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum; 638 else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum; 635 639 else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum; 636 640 else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum; … … 748 752 else if (strcmp(name,"SurfaceforcingsAirQuadDragCoef")==0) return SurfaceforcingsAirQuadDragCoefEnum; 749 753 else if (strcmp(name,"SurfaceforcingsWindVx")==0) return SurfaceforcingsWindVxEnum; 750 else if (strcmp(name,"SurfaceforcingsWindVy")==0) return SurfaceforcingsWindVyEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"SurfaceforcingsWindVy")==0) return SurfaceforcingsWindVyEnum; 751 758 else if (strcmp(name,"Matseaice")==0) return MatseaiceEnum; 752 759 else if (strcmp(name,"MaterialsPoisson")==0) return MaterialsPoissonEnum; 753 760 else if (strcmp(name,"MaterialsYoungModulus")==0) return MaterialsYoungModulusEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"MaterialsTimeRelaxationStress")==0) return MaterialsTimeRelaxationStressEnum; 761 else if (strcmp(name,"MaterialsTimeRelaxationStress")==0) return MaterialsTimeRelaxationStressEnum; 758 762 else if (strcmp(name,"MaterialsTimeRelaxationDamage")==0) return MaterialsTimeRelaxationDamageEnum; 759 763 else if (strcmp(name,"MaterialsRidgingExponent")==0) return MaterialsRidgingExponentEnum; -
issm/trunk-jpl/src/m/classes/balancethickness.m
r18555 r18565 10 10 stabilization = 0; 11 11 12 Cmu= NaN;12 omega = NaN; 13 13 end 14 14 methods … … 35 35 md = checkfield(md,'fieldname','balancethickness.stabilization','size',[1 1],'values',[0 1 2 3]); 36 36 37 %md = checkfield(md,'fieldname','balancethickness. Cmu','size',[md.mesh.numberofvertices 1],'NaN',1,'>=',0);37 %md = checkfield(md,'fieldname','balancethickness.omega','size',[md.mesh.numberofvertices 1],'NaN',1,'>=',0); 38 38 end % }}} 39 39 function disp(obj) % {{{ … … 53 53 WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer'); 54 54 55 WriteData(fid,'object',obj,'fieldname',' Cmu','format','DoubleMat','mattype',1);55 WriteData(fid,'object',obj,'fieldname','omega','format','DoubleMat','mattype',1); 56 56 end % }}} 57 57 end -
issm/trunk-jpl/src/m/classes/m1qn3inversion.m
r18476 r18565 22 22 vel_obs = NaN 23 23 thickness_obs = NaN 24 surface_obs = NaN 24 25 25 26 end … … 72 73 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',... 73 74 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar',... 74 'Vx' 'Vy' 'Thickness' 'Balancethickness Nu' 'BalancethicknessApparentMassbalance'});75 'Vx' 'Vy' 'Thickness' 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance'}); 75 76 md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0); 76 77 md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0); … … 84 85 if solution==BalancethicknessSolutionEnum() 85 86 md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 87 md = checkfield(md,'fieldname','inversion.surface_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 86 88 elseif solution==BalancethicknessSoftSolutionEnum() 87 89 md = checkfield(md,'fieldname','inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1); … … 110 112 fielddisplay(obj,'vel_obs','observed velocity magnitude [m/yr]'); 111 113 fielddisplay(obj,'thickness_obs','observed thickness [m]'); 114 fielddisplay(obj,'surface_obs','observed surface elevation [m]'); 112 115 disp('Available cost functions:'); 113 116 disp(' 101: SurfaceAbsVelMisfit'); … … 145 148 end 146 149 WriteData(fid,'object',obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype); 150 WriteData(fid,'object',obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype); 147 151 148 152 %process control parameters … … 170 174 pos=find(obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum(); 171 175 pos=find(obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum(); 176 pos=find(obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum(); 172 177 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 173 178 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r18553 r18565 165 165 def InversionStepThresholdEnum(): return StringToEnum("InversionStepThreshold")[0] 166 166 def InversionThicknessObsEnum(): return StringToEnum("InversionThicknessObs")[0] 167 def InversionSurfaceObsEnum(): return StringToEnum("InversionSurfaceObs")[0] 167 168 def InversionVxObsEnum(): return StringToEnum("InversionVxObs")[0] 168 169 def InversionVyObsEnum(): return StringToEnum("InversionVyObs")[0] … … 307 308 def BalancethicknessDiffusionCoefficientEnum(): return StringToEnum("BalancethicknessDiffusionCoefficient")[0] 308 309 def BalancethicknessCmuEnum(): return StringToEnum("BalancethicknessCmu")[0] 310 def BalancethicknessOmegaEnum(): return StringToEnum("BalancethicknessOmega")[0] 311 def BalancethicknessD0Enum(): return StringToEnum("BalancethicknessD0")[0] 309 312 def SurfaceforcingsEnum(): return StringToEnum("Surfaceforcings")[0] 310 313 def SMBEnum(): return StringToEnum("SMB")[0] … … 510 513 def TemperaturePicardEnum(): return StringToEnum("TemperaturePicard")[0] 511 514 def ThicknessAbsMisfitEnum(): return StringToEnum("ThicknessAbsMisfit")[0] 515 def SurfaceAbsMisfitEnum(): return StringToEnum("SurfaceAbsMisfit")[0] 512 516 def VelEnum(): return StringToEnum("Vel")[0] 513 517 def VelocityEnum(): return StringToEnum("Velocity")[0]
Note:
See TracChangeset
for help on using the changeset viewer.