Changeset 17850
- Timestamp:
- 04/25/14 13:51:31 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 8 added
- 2 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp ¶
r17839 r17850 26 26 } 27 27 28 iomodel->FetchDataToInput(elements,BalancethicknessApparentMassbalanceEnum); 29 iomodel->FetchDataToInput(elements,BalancethicknessNuxEnum); 30 iomodel->FetchDataToInput(elements,BalancethicknessNuyEnum); 31 iomodel->FetchDataToInput(elements,BalancethicknessVxObsEnum); 32 iomodel->FetchDataToInput(elements,BalancethicknessVyObsEnum); 33 iomodel->FetchDataToInput(elements,BalancethicknessThicknessObsEnum); 34 iomodel->FetchDataToInput(elements,MeshVertexonboundaryEnum); 28 35 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 29 iomodel->FetchDataToInput(elements,VxEnum);30 iomodel->FetchDataToInput(elements,VyEnum);31 iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum);32 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum);33 iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum);34 iomodel->FetchDataToInput(elements,MeshVertexonboundaryEnum);35 iomodel->FetchDataToInput(elements,ThicknessEnum);36 36 }/*}}}*/ 37 37 void Balancethickness2Analysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ … … 42 42 void Balancethickness2Analysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ 43 43 44 /*Do not add constraints in DG*/ 45 IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcthicknessEnum,Balancethickness2AnalysisEnum,P1Enum); 44 45 int finiteelement = P1Enum; 46 IoModelToConstraintsx(constraints,iomodel,BalancethicknessSpcpotentialEnum,Balancethickness2AnalysisEnum,finiteelement); 46 47 47 48 }/*}}}*/ … … 72 73 /*Initialize Element vector and other vectors*/ 73 74 ElementMatrix* Ke = element->NewElementMatrix(); 74 IssmDouble* B = xNew<IssmDouble>(2*numnodes);75 IssmDouble D[2][2];76 75 77 76 /*Retrieve all inputs and parameters*/ … … 83 82 gauss->GaussPoint(ig); 84 83 85 element->JacobianDeterminant(&Jdet,xyz_list,gauss);86 87 84 IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes); 88 85 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 86 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 89 87 90 88 for(int i=0;i<numnodes;i++){ … … 93 91 } 94 92 } 95 //GetB(B,element,xyz_list,gauss); 96 97 //D_scalar=gauss->weight*Jdet; 98 99 //D[0][0]=D_scalar; 100 //D[0][1]=0.; 101 //D[1][0]=0.; 102 //D[1][1]=D_scalar; 103 //TripleMultiply(B,2,numnodes,1, 104 // &D[0][0],2,2,0, 105 // B,2,numnodes,0, 106 // &Ke->values[0],1); 107 } 108 109 /*Clean up and return*/ 110 xDelete<IssmDouble>(xyz_list); 111 xDelete<IssmDouble>(B); 93 } 94 95 /*Clean up and return*/ 96 xDelete<IssmDouble>(xyz_list); 112 97 delete gauss; 113 98 return Ke; … … 128 113 129 114 /*Intermediaries */ 130 IssmDouble dhdt,mb,ms,Jdet;115 IssmDouble adot,Jdet; 131 116 IssmDouble* xyz_list = NULL; 132 117 … … 140 125 /*Retrieve all inputs and parameters*/ 141 126 element->GetVerticesCoordinates(&xyz_list); 142 Input* mb_input = element->GetInput(BasalforcingsMeltingRateEnum); _assert_(mb_input); 143 Input* ms_input = element->GetInput(SurfaceforcingsMassBalanceEnum); _assert_(ms_input); 144 Input* dhdt_input = element->GetInput(BalancethicknessThickeningRateEnum); _assert_(dhdt_input); 145 146 /*Initialize mb_correction to 0, do not forget!:*/ 127 Input* adot_input = element->GetInput(BalancethicknessApparentMassbalanceEnum); _assert_(adot_input); 128 147 129 /* Start looping on the number of gaussian points: */ 148 130 Gauss* gauss=element->NewGauss(2); … … 152 134 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 153 135 element->NodalFunctions(basis,gauss); 154 155 ms_input->GetInputValue(&ms,gauss); 156 mb_input->GetInputValue(&mb,gauss); 157 dhdt_input->GetInputValue(&dhdt,gauss); 158 159 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*(ms-mb-dhdt)*basis[i]; 136 adot_input->GetInputValue(&adot,gauss); 137 138 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*adot*basis[i]; 160 139 } 161 140 … … 185 164 186 165 /*Retrieve all inputs and parameters*/ 187 Input* thickness_input = element->GetInput( ThicknessEnum); _assert_(thickness_input);188 Input* vx_input = element->GetInput( VxEnum); _assert_(vx_input);189 Input* vy_input = element->GetInput( VyEnum); _assert_(vy_input);166 Input* thickness_input = element->GetInput(BalancethicknessThicknessObsEnum); _assert_(thickness_input); 167 Input* vx_input = element->GetInput(BalancethicknessVxObsEnum); _assert_(vx_input); 168 Input* vy_input = element->GetInput(BalancethicknessVyObsEnum); _assert_(vy_input); 190 169 191 170 element->GetVerticesCoordinates(&xyz_list); … … 204 183 element->NodalFunctions(basis,gauss); 205 184 206 for(int i=0;i<numnodes;i++) pe->values[i] += Jdet*gauss->weight*thickness*(vx*normal[0] + vy*normal[1])*basis[i];185 for(int i=0;i<numnodes;i++) pe->values[i] += - Jdet*gauss->weight*thickness*(vx*normal[0] + vy*normal[1])*basis[i]; 207 186 } 208 187 … … 214 193 return pe; 215 194 }/*}}}*/ 216 void Balancethickness2Analysis::GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/217 /*Compute B' matrix. B'=[B1' B2' B3'] where Bi' is of size 3*NDOF2.218 * For node i, Bi can be expressed in the actual coordinate system219 * by:220 * Bi=[ dN/dx ]221 * [ dN/dy ]222 * where N is the finiteelement function for node i.223 *224 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes)225 */226 227 /*Fetch number of nodes for this finite element*/228 int numnodes = element->GetNumberOfNodes();229 230 /*Get nodal functions derivatives*/231 IssmDouble* dbasis=xNew<IssmDouble>(2*numnodes);232 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss);233 234 /*Build B': */235 for(int i=0;i<numnodes;i++){236 B[numnodes*0+i] = dbasis[0*numnodes+i];237 B[numnodes*1+i] = dbasis[1*numnodes+i];238 }239 240 /*Clean-up*/241 xDelete<IssmDouble>(dbasis);242 243 }/*}}}*/244 195 void Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 245 196 _error_("not implemented yet"); … … 248 199 249 200 /*Intermediaries */ 250 IssmDouble vx,vy,v el,h,normdphi,dphi[2];201 IssmDouble vx,vy,vbar,nux,nuy,normdphi,dphi[2]; 251 202 IssmDouble* xyz_list = NULL; 252 203 int * doflist = NULL; … … 271 222 } 272 223 273 element->AddInput(EnthalpyEnum,values,element->GetElementType());//FIXME 274 275 /*Retrieve all inputs and parameters*/ 276 element->GetVerticesCoordinates(&xyz_list); 277 Input* potential_input = element->GetInput(EnthalpyEnum); _assert_(potential_input); 278 Input* vx_input = element->GetInput(VxEnum); _assert_(vx_input); 279 Input* vy_input = element->GetInput(VyEnum); _assert_(vy_input); 224 element->AddInput(PotentialEnum,values,element->GetElementType()); 225 226 /*Retrieve all inputs and parameters*/ 227 element->GetVerticesCoordinates(&xyz_list); 228 Input* potential_input = element->GetInput(PotentialEnum); _assert_(potential_input); 229 Input* vx_input = element->GetInput(BalancethicknessVxObsEnum); _assert_(vx_input); 230 Input* vy_input = element->GetInput(BalancethicknessVyObsEnum); _assert_(vy_input); 231 Input* nux_input = element->GetInput(BalancethicknessNuxEnum); _assert_(nux_input); 232 Input* nuy_input = element->GetInput(BalancethicknessNuyEnum); _assert_(nuy_input); 280 233 281 234 Gauss* gauss=element->NewGauss(); … … 285 238 vx_input->GetInputValue(&vx,gauss); 286 239 vy_input->GetInputValue(&vy,gauss); 240 nux_input->GetInputValue(&nux,gauss); 241 nuy_input->GetInputValue(&nuy,gauss); 287 242 potential_input->GetInputDerivativeValue(&dphi[0],xyz_list,gauss); 288 243 289 vel = sqrt(vx*vx + vy*vy) + 1.e-10; 244 vx = vx*nux; vy = vy*nuy; 245 vbar = sqrt(vx*vx + vy*vy) + 1.e-10; 290 246 normdphi = sqrt(dphi[0]*dphi[0] + dphi[1]*dphi[1]); 291 247 292 thickness_list[iv] = normdphi/v el;293 vx_list[iv] = 1./thickness_list[iv] * dphi[0];294 vy_list[iv] = 1./thickness_list[iv] * dphi[1];248 thickness_list[iv] = normdphi/vbar; 249 vx_list[iv] = -1./thickness_list[iv] * dphi[0]; 250 vy_list[iv] = -1./thickness_list[iv] * dphi[1]; 295 251 } 296 252 element->AddInput(ThicknessEnum,thickness_list,P1Enum); -
TabularUnified issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.h ¶
r17831 r17850 28 28 ElementVector* CreatePVectorVolume(Element* element); 29 29 ElementVector* CreatePVectorBoundary(Element* element); 30 void GetB(IssmDouble* B,Element* element,IssmDouble* xyz_list,Gauss* gauss);31 30 void GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element); 32 31 void InputUpdateFromSolution(IssmDouble* solution,Element* element); -
TabularUnified issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp ¶
r17700 r17850 10 10 }/*}}}*/ 11 11 void BalancethicknessAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 12 parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum)); 12 13 }/*}}}*/ 13 14 void BalancethicknessAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ -
TabularUnified issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp ¶
r17839 r17850 26 26 if(save_results){ 27 27 if(VerboseSolution()) _printf0_(" saving results\n"); 28 int outputs[4] = {ThicknessEnum, EnthalpyEnum,VxEnum,VyEnum};28 int outputs[4] = {ThicknessEnum,PotentialEnum,VxEnum,VyEnum}; 29 29 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],4); 30 30 } -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp ¶
r17757 r17850 57 57 parameters->AddObject(iomodel->CopyConstantObject(MeshAverageVertexConnectivityEnum)); 58 58 parameters->AddObject(iomodel->CopyConstantObject(ConstantsReferencetemperatureEnum)); 59 parameters->AddObject(iomodel->CopyConstantObject(BalancethicknessStabilizationEnum));60 59 parameters->AddObject(iomodel->CopyConstantObject(GroundinglineMeltingRateEnum)); 61 60 parameters->AddObject(iomodel->CopyConstantObject(SettingsWaitonlockEnum)); … … 219 218 /*}}}*/ 220 219 221 222 220 /*Before returning, create parameters in case we are running Qmu or control types runs: */ 223 221 CreateParametersControl(parameters,iomodel,solution_type); -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h ¶
r17839 r17850 288 288 TransientRequestedOutputsEnum, 289 289 PotentialEnum, 290 BalancethicknessSpcpotentialEnum, 291 BalancethicknessApparentMassbalanceEnum, 290 292 Balancethickness2MisfitEnum, 291 NuXEnum, 292 NuYEnum, 293 BalancethicknessNuxEnum, 294 BalancethicknessNuyEnum, 295 BalancethicknessVxObsEnum, 296 BalancethicknessVyObsEnum, 297 BalancethicknessThicknessObsEnum, 293 298 /*}}}*/ 294 299 /*Surfaceforcings{{{*/ -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp ¶
r17839 r17850 296 296 case TransientRequestedOutputsEnum : return "TransientRequestedOutputs"; 297 297 case PotentialEnum : return "Potential"; 298 case BalancethicknessSpcpotentialEnum : return "BalancethicknessSpcpotential"; 299 case BalancethicknessApparentMassbalanceEnum : return "BalancethicknessApparentMassbalance"; 298 300 case Balancethickness2MisfitEnum : return "Balancethickness2Misfit"; 299 case NuXEnum : return "NuX"; 300 case NuYEnum : return "NuY"; 301 case BalancethicknessNuxEnum : return "BalancethicknessNux"; 302 case BalancethicknessNuyEnum : return "BalancethicknessNuy"; 303 case BalancethicknessVxObsEnum : return "BalancethicknessVxObs"; 304 case BalancethicknessVyObsEnum : return "BalancethicknessVyObs"; 305 case BalancethicknessThicknessObsEnum : return "BalancethicknessThicknessObs"; 301 306 case SurfaceforcingsEnum : return "Surfaceforcings"; 302 307 case SMBEnum : return "SMB"; -
TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp ¶
r17839 r17850 302 302 else if (strcmp(name,"TransientRequestedOutputs")==0) return TransientRequestedOutputsEnum; 303 303 else if (strcmp(name,"Potential")==0) return PotentialEnum; 304 else if (strcmp(name,"BalancethicknessSpcpotential")==0) return BalancethicknessSpcpotentialEnum; 305 else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum; 304 306 else if (strcmp(name,"Balancethickness2Misfit")==0) return Balancethickness2MisfitEnum; 305 else if (strcmp(name,"NuX")==0) return NuXEnum; 306 else if (strcmp(name,"NuY")==0) return NuYEnum; 307 else if (strcmp(name,"BalancethicknessNux")==0) return BalancethicknessNuxEnum; 308 else if (strcmp(name,"BalancethicknessNuy")==0) return BalancethicknessNuyEnum; 309 else if (strcmp(name,"BalancethicknessVxObs")==0) return BalancethicknessVxObsEnum; 310 else if (strcmp(name,"BalancethicknessVyObs")==0) return BalancethicknessVyObsEnum; 311 else if (strcmp(name,"BalancethicknessThicknessObs")==0) return BalancethicknessThicknessObsEnum; 307 312 else if (strcmp(name,"Surfaceforcings")==0) return SurfaceforcingsEnum; 308 313 else if (strcmp(name,"SMB")==0) return SMBEnum; … … 378 383 else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum; 379 384 else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum; 380 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; 381 389 else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum; 382 390 else if (strcmp(name,"LsfReinitializationAnalysis")==0) return LsfReinitializationAnalysisEnum; 383 391 else if (strcmp(name,"Approximation")==0) return ApproximationEnum; 384 392 else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; 385 else stage=4; 386 } 387 if(stage==4){ 388 if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum; 393 else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum; 389 394 else if (strcmp(name,"SSAApproximation")==0) return SSAApproximationEnum; 390 395 else if (strcmp(name,"SSAHOApproximation")==0) return SSAHOApproximationEnum; … … 501 506 else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum; 502 507 else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum; 503 else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum; 504 512 else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum; 505 513 else if (strcmp(name,"SurfaceAverageVelMisfit")==0) return SurfaceAverageVelMisfitEnum; 506 514 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 507 515 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 508 else stage=5; 509 } 510 if(stage==5){ 511 if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; 516 else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; 512 517 else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum; 513 518 else if (strcmp(name,"SurfaceSlopeY")==0) return SurfaceSlopeYEnum; … … 624 629 else if (strcmp(name,"MinVz")==0) return MinVzEnum; 625 630 else if (strcmp(name,"MaxVz")==0) return MaxVzEnum; 626 else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; 627 635 else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum; 628 636 else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum; 629 637 else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum; 630 638 else if (strcmp(name,"Absolute")==0) return AbsoluteEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"Incremental")==0) return IncrementalEnum; 639 else if (strcmp(name,"Incremental")==0) return IncrementalEnum; 635 640 else if (strcmp(name,"AugmentedLagrangianR")==0) return AugmentedLagrangianREnum; 636 641 else if (strcmp(name,"AugmentedLagrangianTheta")==0) return AugmentedLagrangianThetaEnum; -
TabularUnified issm/trunk-jpl/src/m/enum/EnumDefinitions.py ¶
r17839 r17850 288 288 def TransientRequestedOutputsEnum(): return StringToEnum("TransientRequestedOutputs")[0] 289 289 def PotentialEnum(): return StringToEnum("Potential")[0] 290 def BalancethicknessSpcpotentialEnum(): return StringToEnum("BalancethicknessSpcpotential")[0] 291 def BalancethicknessApparentMassbalanceEnum(): return StringToEnum("BalancethicknessApparentMassbalance")[0] 290 292 def Balancethickness2MisfitEnum(): return StringToEnum("Balancethickness2Misfit")[0] 291 def NuXEnum(): return StringToEnum("NuX")[0] 292 def NuYEnum(): return StringToEnum("NuY")[0] 293 def BalancethicknessNuxEnum(): return StringToEnum("BalancethicknessNux")[0] 294 def BalancethicknessNuyEnum(): return StringToEnum("BalancethicknessNuy")[0] 295 def BalancethicknessVxObsEnum(): return StringToEnum("BalancethicknessVxObs")[0] 296 def BalancethicknessVyObsEnum(): return StringToEnum("BalancethicknessVyObs")[0] 297 def BalancethicknessThicknessObsEnum(): return StringToEnum("BalancethicknessThicknessObs")[0] 293 298 def SurfaceforcingsEnum(): return StringToEnum("Surfaceforcings")[0] 294 299 def SMBEnum(): return StringToEnum("SMB")[0]
Note:
See TracChangeset
for help on using the changeset viewer.