Changeset 18551
- Timestamp:
- 09/30/14 11:03:47 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/Balancethickness2Analysis.cpp
r18545 r18551 34 34 iomodel->FetchDataToInput(elements,SurfaceforcingsMassBalanceEnum); 35 35 iomodel->FetchDataToInput(elements,BalancethicknessThickeningRateEnum); 36 iomodel->FetchDataToInput(elements,BalancethicknessCmuEnum); 36 37 }/*}}}*/ 37 38 void Balancethickness2Analysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ … … 144 145 for(int i=0;i<numnodes;i++) pe->values[i]+=Jdet*gauss->weight*( 145 146 (ms-mb-dhdt)*basis[i] 146 -D*db[0]*dbasis[0*numnodes+i] - D*db[1]*dbasis[1*numnodes+i]147 //-D*db[0]*dbasis[0*numnodes+i] - D*db[1]*dbasis[1*numnodes+i] 147 148 ); 148 149 } … … 155 156 }/*}}}*/ 156 157 void Balancethickness2Analysis::GetSolutionFromInputs(Vector<IssmDouble>* solution,Element* element){/*{{{*/ 157 _error_("not implemented yet");158 element->GetSolutionFromInputsOneDof(solution,SurfaceEnum); 158 159 }/*}}}*/ 159 160 void Balancethickness2Analysis::GradientJ(Vector<IssmDouble>* gradient,Element* element,int control_type,int control_index){/*{{{*/ … … 161 162 }/*}}}*/ 162 163 void Balancethickness2Analysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/ 163 element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum); 164 165 /*Intermediaries*/ 166 IssmDouble ds[2],s,b,D; 167 IssmDouble* xyz_list = NULL; 168 169 //element->InputUpdateFromSolutionOneDof(solution,ThicknessEnum); 170 element->InputUpdateFromSolutionOneDof(solution,SurfaceEnum); 171 172 /*Fetch number of vertices and allocate velocity vectors*/ 173 int numvertices = element->GetNumberOfVertices(); 174 IssmDouble* vel_list = xNew<IssmDouble>(numvertices); 175 IssmDouble* vx_list = xNew<IssmDouble>(numvertices); 176 IssmDouble* vy_list = xNew<IssmDouble>(numvertices); 177 178 /*Retrieve all inputs and parameters*/ 179 element->GetVerticesCoordinates(&xyz_list); 180 Input* D_input = element->GetInput(BalancethicknessDiffusionCoefficientEnum); 181 Input* H_input = element->GetInput(ThicknessEnum); _assert_(H_input); 182 Input* s_input = element->GetInput(SurfaceEnum); _assert_(s_input); 183 Input* b_input = element->GetInput(BaseEnum); _assert_(b_input); 184 185 /*Calculate velocities*/ 186 Gauss* gauss=element->NewGauss(); 187 for(int iv=0;iv<numvertices;iv++){ 188 gauss->GaussVertex(iv); 189 190 if(D_input){ 191 D_input->GetInputValue(&D,gauss); 192 } 193 else{ 194 D = 0.; 195 } 196 b_input->GetInputValue(&b,gauss); 197 s_input->GetInputValue(&s,gauss); 198 s_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss); 199 200 vx_list[iv] = -1./(s-b)*D*ds[0]; 201 vy_list[iv] = -1./(s-b)*D*ds[1]; 202 vel_list[iv] = sqrt(pow(vx_list[iv],2) + pow(vy_list[iv],2)); 203 } 204 205 /*Add vx and vy as inputs to the tria element: */ 206 element->AddInput(VxEnum,vx_list,P1Enum); 207 element->AddInput(VyEnum,vy_list,P1Enum); 208 element->AddInput(VelEnum,vel_list,P1Enum); 209 210 /*Free ressources:*/ 211 xDelete<IssmDouble>(vy_list); 212 xDelete<IssmDouble>(vx_list); 213 xDelete<IssmDouble>(vel_list); 214 xDelete<IssmDouble>(xyz_list); 164 215 }/*}}}*/ 165 216 void Balancethickness2Analysis::UpdateConstraints(FemModel* femmodel){/*{{{*/ … … 172 223 173 224 /*Intermediaries */ 174 IssmDouble Gamma,h,mu0,ds[2],Cmu,B,k ;225 IssmDouble Gamma,h,mu0,ds[2],Cmu,B,k,s,b; 175 226 const int n = 3; 176 227 const IssmDouble Hstar = 500.; … … 185 236 /*retrieve what we need: */ 186 237 element->GetVerticesCoordinates(&xyz_list); 187 Input* thickness_input = element->GetInput(ThicknessEnum); _assert_(thickness_input);238 Input* bed_input = element->GetInput(BaseEnum); _assert_(bed_input); 188 239 Input* surface_input = element->GetInput(SurfaceEnum); _assert_(surface_input); 189 240 Input* B_input = element->GetInput(MaterialsRheologyBEnum); _assert_(B_input); 190 241 Input* k_input = element->GetInput(FrictionCoefficientEnum);_assert_(k_input); 242 Input* Cmu_input = element->GetInput(BalancethicknessCmuEnum);_assert_(Cmu_input); 191 243 IssmDouble rhog = element->GetMaterialParameter(MaterialsRhoIceEnum)*element->GetMaterialParameter(ConstantsGEnum); 192 244 … … 198 250 B_input->GetInputValue(&B,gauss); 199 251 k_input->GetInputValue(&k,gauss); 200 thickness_input->GetInputValue(&h,gauss);252 //thickness_input->GetInputValue(&h,gauss); 201 253 surface_input->GetInputDerivativeValue(&ds[0],xyz_list,gauss); 254 surface_input->GetInputValue(&s,gauss); 255 bed_input->GetInputValue(&b,gauss); 256 h = s-b; 202 257 203 258 mu0 = pow(2.,(1-3*n)/(2.*n)) * B; 204 259 Gamma = pow(rhog,n) * pow(Hstar,2*(n+1)) * pow(Hstar/Lstar,2*(n+1)) * 1./pow(mu0,n); 205 Cmu = mu0/Hstar/(k*k); 206 207 D[i] = Gamma*pow(ds[0]*ds[0]+ds[1]*ds[1],(n-1)/2)*pow(h,n+1)*(1./(n+2.)*h - Cmu); 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); 208 264 } 209 265 -
issm/trunk-jpl/src/c/cores/balancethickness2_core.cpp
r18476 r18551 22 22 23 23 if(VerboseSolution()) _printf0_("call computational core:\n"); 24 solutionsequence_linear(femmodel); 24 //solutionsequence_linear(femmodel); 25 solutionsequence_nonlinear(femmodel,false); 25 26 26 27 if(save_results){ 27 28 if(VerboseSolution()) _printf0_(" saving results\n"); 28 int outputs[1] = {ThicknessEnum}; 29 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],1); 29 const int numoutputs = 5; 30 //int outputs[numoutputs] = {ThicknessEnum}; 31 int outputs[numoutputs] = {SurfaceEnum,VxEnum,VyEnum,VelEnum,BalancethicknessDiffusionCoefficientEnum}; 32 femmodel->RequestedOutputsx(&femmodel->results,&outputs[0],numoutputs); 30 33 } 31 34 -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r18528 r18551 305 305 Balancethickness2MisfitEnum, 306 306 BalancethicknessDiffusionCoefficientEnum, 307 BalancethicknessCmuEnum, 307 308 /*}}}*/ 308 309 /*Surfaceforcings{{{*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r18528 r18551 313 313 case Balancethickness2MisfitEnum : return "Balancethickness2Misfit"; 314 314 case BalancethicknessDiffusionCoefficientEnum : return "BalancethicknessDiffusionCoefficient"; 315 case BalancethicknessCmuEnum : return "BalancethicknessCmu"; 315 316 case SurfaceforcingsEnum : return "Surfaceforcings"; 316 317 case SMBEnum : return "SMB"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r18528 r18551 319 319 else if (strcmp(name,"Balancethickness2Misfit")==0) return Balancethickness2MisfitEnum; 320 320 else if (strcmp(name,"BalancethicknessDiffusionCoefficient")==0) return BalancethicknessDiffusionCoefficientEnum; 321 else if (strcmp(name,"BalancethicknessCmu")==0) return BalancethicknessCmuEnum; 321 322 else if (strcmp(name,"Surfaceforcings")==0) return SurfaceforcingsEnum; 322 323 else if (strcmp(name,"SMB")==0) return SMBEnum; … … 382 383 else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum; 383 384 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 384 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 388 if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 389 else if (strcmp(name,"FreeSurfaceBaseAnalysis")==0) return FreeSurfaceBaseAnalysisEnum; 389 390 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 390 391 else if (strcmp(name,"SurfaceNormalVelocity")==0) return SurfaceNormalVelocityEnum; … … 505 506 else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum; 506 507 else if (strcmp(name,"Friction")==0) return FrictionEnum; 507 else if (strcmp(name,"Internal")==0) return InternalEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"MassFlux")==0) return MassFluxEnum; 511 if (strcmp(name,"Internal")==0) return InternalEnum; 512 else if (strcmp(name,"MassFlux")==0) return MassFluxEnum; 512 513 else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum; 513 514 else if (strcmp(name,"Misfit")==0) return MisfitEnum; … … 628 629 else if (strcmp(name,"MisfitObservation")==0) return MisfitObservationEnum; 629 630 else if (strcmp(name,"MisfitObservationEnum")==0) return MisfitObservationEnumEnum; 630 else if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum; 634 if (strcmp(name,"MisfitTimeinterpolation")==0) return MisfitTimeinterpolationEnum; 635 else if (strcmp(name,"MisfitWeights")==0) return MisfitWeightsEnum; 635 636 else if (strcmp(name,"MisfitWeightsEnum")==0) return MisfitWeightsEnumEnum; 636 637 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; … … 751 752 else if (strcmp(name,"MaterialsYoungModulus")==0) return MaterialsYoungModulusEnum; 752 753 else if (strcmp(name,"MaterialsTimeRelaxationStress")==0) return MaterialsTimeRelaxationStressEnum; 753 else if (strcmp(name,"MaterialsTimeRelaxationDamage")==0) return MaterialsTimeRelaxationDamageEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"MaterialsRidgingExponent")==0) return MaterialsRidgingExponentEnum; 757 if (strcmp(name,"MaterialsTimeRelaxationDamage")==0) return MaterialsTimeRelaxationDamageEnum; 758 else if (strcmp(name,"MaterialsRidgingExponent")==0) return MaterialsRidgingExponentEnum; 758 759 else if (strcmp(name,"MaterialsCohesion")==0) return MaterialsCohesionEnum; 759 760 else if (strcmp(name,"MaterialsInternalFrictionCoef")==0) return MaterialsInternalFrictionCoefEnum; -
issm/trunk-jpl/src/m/classes/balancethickness.m
r17931 r18551 9 9 thickening_rate = NaN; 10 10 stabilization = 0; 11 12 Cmu = NaN; 11 13 end 12 14 methods 13 function createxml(obj,fid) % {{{14 fprintf(fid, '\n\n');15 fprintf(fid, '%s\n', '<!-- balancethickness -->');16 17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcthickness" type="', class(obj.spcthickness),'" default="', convert2str(obj.spcthickness),'">', ' <section name="balancethickness" />',' <help> thickness constraints (NaN means no constraint) [m] </help>','</parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="thickening_rate" type="', class(obj.thickening_rate),'" default="', convert2str(obj.thickening_rate),'">', ' <section name="balancethickness" />',' <help> ice thickening rate used in the mass conservation (dh/dt) [m/yr] </help>','</parameter>');19 20 % balancethickness drop-down (1,2, or 3)21 fprintf(fid,'%s\n%s\n%s\n', '<parameter key ="stabilization" type="alternative" optional="false">',' <section name="balancethickness" />',' <help> 0: None, 1: SU, 2: SSAs artificial diffusivity, 3:DG </help>');22 fprintf(fid,'%s\n',' <option value="1" type="string" default="true"> </option>');23 fprintf(fid,'%s\n',' <option value="2" type="string" default="false"> </option>');24 fprintf(fid,'%s\n%s\n',' <option value="3" type="string" default="false"> </option>','</parameter>');25 26 end % }}}27 15 function obj = balancethickness(varargin) % {{{ 28 16 switch nargin … … 46 34 md = checkfield(md,'fieldname','balancethickness.thickening_rate','size',[md.mesh.numberofvertices 1],'NaN',1); 47 35 md = checkfield(md,'fieldname','balancethickness.stabilization','size',[1 1],'values',[0 1 2 3]); 36 37 md = checkfield(md,'fieldname','balancethickness.Cmu','size',[md.mesh.numberofvertices 1],'NaN',1,'>=',0); 48 38 end % }}} 49 39 function disp(obj) % {{{ … … 62 52 WriteData(fid,'object',obj,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts); 63 53 WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer'); 54 55 WriteData(fid,'object',obj,'fieldname','Cmu','format','DoubleMat','mattype',1); 64 56 end % }}} 65 57 end -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r18528 r18551 305 305 def Balancethickness2MisfitEnum(): return StringToEnum("Balancethickness2Misfit")[0] 306 306 def BalancethicknessDiffusionCoefficientEnum(): return StringToEnum("BalancethicknessDiffusionCoefficient")[0] 307 def BalancethicknessCmuEnum(): return StringToEnum("BalancethicknessCmu")[0] 307 308 def SurfaceforcingsEnum(): return StringToEnum("Surfaceforcings")[0] 308 309 def SMBEnum(): return StringToEnum("SMB")[0] -
issm/trunk-jpl/src/m/plot/googlemaps.m
r15210 r18551 54 54 elseif strcmpi(md.mesh.hemisphere,'s'), 55 55 EPSGlocal = 'EPSG:3031'; % UPS Antarctica http://www.spatialreference.org/ref/epsg/3031/ 56 elseif strcmpi(md.mesh.hemisphere,'UTM18N'), 57 EPSGlocal = 'EPSG:32218'; % UTM 18 N Patagonia 56 58 else 57 59 error('field hemisphere should either be ''n'' or ''s'''); -
issm/trunk-jpl/src/m/plot/plot_googlemaps.m
r15172 r18551 36 36 -1,0,71); 37 37 else 38 latlist = md.mesh.lat; %That might work? 39 lonlist = md.mesh.long; 38 40 error('field hemisphere should either be ''n'' or ''s'''); 39 41 end
Note:
See TracChangeset
for help on using the changeset viewer.