Changeset 16371
- Timestamp:
- 10/10/13 15:58:56 (11 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 8 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/m4/issm_options.m4
r16226 r16371 1766 1766 AC_MSG_RESULT($HAVE_SLOPE) 1767 1767 dnl }}} 1768 dnl with-meshdeformation{{{ 1769 AC_ARG_WITH([meshdeformation], 1770 AS_HELP_STRING([--with-meshdeformation = YES], [compile with meshdeformation capabilities (default is yes)]), 1771 [MESHDEFORMATION=$withval],[MESHDEFORMATION=yes]) 1772 AC_MSG_CHECKING(for meshdeformation capability compilation) 1773 1774 if test "x$MESHDEFORMATION" = "xyes"; then 1775 1776 dnl defaults 1777 HAVE_MESHDEFORMATION=yes 1778 1779 AC_DEFINE([_HAVE_MESHDEFORMATION_],[1],[with meshdeformation capability]) 1780 else 1781 HAVE_MESHDEFORMATION=no 1782 fi 1783 AM_CONDITIONAL([MESHDEFORMATION], [test x$HAVE_MESHDEFORMATION = xyes]) 1784 AC_MSG_RESULT($HAVE_MESHDEFORMATION) 1785 dnl }}} 1768 1786 dnl with-groundingline{{{ 1769 1787 AC_ARG_WITH([groundingline], -
issm/trunk-jpl/src/c/Makefile.am
r16343 r16371 528 528 ./analyses/bedslope_core.cpp 529 529 #}}} 530 #MeshDeformation sources {{{ 531 meshdeformation_sources = ./modules/ModelProcessorx/MeshDeformation/UpdateElementsMeshDeformation.cpp\ 532 ./modules/ModelProcessorx/MeshDeformation/CreateNodesMeshDeformation.cpp \ 533 ./modules/ModelProcessorx/MeshDeformation/CreateConstraintsMeshDeformation.cpp\ 534 ./modules/ModelProcessorx/MeshDeformation/CreateLoadsMeshDeformation.cpp\ 535 ./analyses/meshdeformation_core.cpp 536 #}}} 530 537 #Gia sources {{{ 531 538 gia_sources = ./analyses/gia_core.cpp\ … … 934 941 endif 935 942 943 if MESHDEFORMATION 944 issm_sources += $(meshdeformation_sources) 945 endif 946 936 947 if GROUNDINGLINE 937 948 issm_sources += $(groundingline_sources) -
issm/trunk-jpl/src/c/analyses/analyses.h
r16181 r16371 26 26 void surfaceslope_core(FemModel* femmodel); 27 27 void bedslope_core(FemModel* femmodel); 28 void meshdeformation_core(FemModel* femmodel); 28 29 void control_core(FemModel* femmodel); 29 30 void controltao_core(FemModel* femmodel); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16365 r16371 3209 3209 int i,j; 3210 3210 int analysis_type,approximation; 3211 IssmDouble alpha2,Jdet2d; 3211 int indices[2]; 3212 IssmDouble alpha2,Jdet; 3212 3213 IssmDouble FSreconditioning,viscosity; 3213 3214 IssmDouble epsilon[3]; /* epsilon=[exx,eyy,exy];*/ … … 3215 3216 IssmDouble xyz_list_seg[NUMVERTICES1D][3]; 3216 3217 Friction *friction = NULL; 3217 GaussTria *gauss = NULL;3218 3218 3219 3219 /*Initialize Element matrix and return if necessary*/ 3220 3220 if(IsFloating() || !HasEdgeOnBed()) return NULL; 3221 3221 3222 _error_("STOP"); 3222 /*Fetch number of nodes and dof for this finite element*/ 3223 int vnumnodes = this->NumberofNodesVelocity(); 3224 int pnumnodes = this->NumberofNodesPressure(); 3225 int numdof = vnumnodes*NDOF2 + pnumnodes*NDOF1; 3226 3227 /*Prepare coordinate system list*/ 3228 int* cs_list = xNew<int>(vnumnodes+pnumnodes); 3229 for(i=0;i<vnumnodes;i++) cs_list[i] = XYEnum; 3230 for(i=0;i<pnumnodes;i++) cs_list[vnumnodes+i] = PressureEnum; 3231 3232 /*Initialize Element matrix and vectors*/ 3233 ElementMatrix* Ke = new ElementMatrix(nodes,vnumnodes+pnumnodes,this->parameters,FSvelocityEnum); 3234 IssmDouble* BFriction = xNew<IssmDouble>(2*numdof); 3235 IssmDouble* D = xNewZeroInit<IssmDouble>(2*2); 3236 3237 /*Retrieve all inputs and parameters*/ 3238 GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES); 3239 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 3240 parameters->FindParam(&FSreconditioning,StressbalanceFSreconditioningEnum); 3241 Input* vx_input=inputs->GetInput(VxEnum); _assert_(vx_input); 3242 Input* vy_input=inputs->GetInput(VyEnum); _assert_(vy_input); 3243 3244 /*Get vertex indices that lie on bed*/ 3245 this->EdgeOnBedIndices(&indices[0],&indices[1]); 3246 for(i=0;i<NUMVERTICES1D;i++) for(j=0;j<2;j++) xyz_list_seg[i][j]=xyz_list[indices[i]][j]; 3247 3248 /*build friction object, used later on: */ 3249 friction=new Friction("1d",inputs,matpar,analysis_type); 3250 3251 /* Start looping on the number of gauss 1d (nodes on the bedrock) */ 3252 GaussTria* gauss=new GaussTria(indices[0],indices[1],2); 3253 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3254 3255 gauss->GaussPoint(ig); 3256 3257 GetSegmentJacobianDeterminant(&Jdet,&xyz_list_seg[0][0],gauss); 3258 3259 _error_("STOP"); 3260 } 3261 3262 /*DO NOT Transform Coordinate System: this stiffness matrix is already expressed in tangential coordinates*/ 3263 //TransformStiffnessMatrixCoord(Ke,nodes,(vnumnodes+pnumnodes),cs_list); 3264 3265 /*Clean up and return*/ 3266 delete gauss; 3267 delete friction; 3268 xDelete<IssmDouble>(BFriction); 3269 xDelete<IssmDouble>(D); 3270 xDelete<int>(cs_list); 3271 return Ke; 3223 3272 } 3224 3273 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
r16364 r16371 57 57 * Bi=[ dN/dx ] 58 58 * [ dN/dy ] 59 * where N is the interpolationfunction for node i.59 * where N is the finiteelement function for node i. 60 60 * 61 61 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes) … … 87 87 * [ 0 dN/dy ] 88 88 * [ 1/2*dN/dy 1/2*dN/dx ] 89 * where N is the interpolationfunction for node i.89 * where N is the finiteelement function for node i. 90 90 * 91 91 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes) … … 122 122 * [ 0 dN/dy ] 123 123 * [ 1/2*dN/dy 1/2*dN/dx ] 124 * where N is the interpolationfunction for node i.124 * where N is the finiteelement function for node i. 125 125 * 126 126 * We assume B has been allocated already, of size: 3x(NDOF2*numnodes) … … 215 215 * [ phi_p ] 216 216 * [ 0 ] 217 * where phi is the interpolationfunction for node i.217 * where phi is the finiteelement function for node i. 218 218 * Same thing for Bb except the last column that does not exist. 219 219 */ … … 271 271 * [ 0 ] 272 272 * [ phi ] 273 * where phi is the interpolationfunction for node i.273 * where phi is the finiteelement function for node i. 274 274 */ 275 275 … … 317 317 * Bi=[ N ] 318 318 * [ N ] 319 * where N is the interpolationfunction for node i.319 * where N is the finiteelement function for node i. 320 320 * 321 321 * We assume B_prog has been allocated already, of size: 2x(NDOF1*numnodes) … … 348 348 * [ dN/dx 2*dN/dy ] 349 349 * [ dN/dy dN/dx ] 350 * where hNis the interpolationfunction for node i.350 * where hNis the finiteelement function for node i. 351 351 * 352 352 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes) … … 383 383 * [ dN/dy dN/dx ] 384 384 N [ dN/dx dN/dy ] 385 * where N is the interpolationfunction for node i.385 * where N is the finiteelement function for node i. 386 386 * 387 387 * We assume Bprime has been allocated already, of size: 3x(NDOF2*numnodes) … … 418 418 * Bi_prime=[ dN/dx ] 419 419 * [ dN/dy ] 420 * where N is the interpolationfunction for node i.420 * where N is the finiteelement function for node i. 421 421 * 422 422 * We assume B' has been allocated already, of size: 3x(NDOF2*numnodes) … … 447 447 * Bi=[ N 0 ] 448 448 * [ 0 N ] 449 * where N is the interpolationfunction for node i.449 * where N is the finiteelement function for node i. 450 450 * 451 451 * We assume B has been allocated already, of size: 2 x (numdof*numnodes) … … 542 542 } 543 543 /*}}}*/ 544 /*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){{{*/545 void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation){544 /*FUNCTION TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){{{*/ 545 void TriaRef::GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement){ 546 546 /*This routine returns the values of the nodal functions at the gaussian point.*/ 547 547 548 548 _assert_(basis); 549 549 550 switch( interpolation){550 switch(finiteelement){ 551 551 case P1Enum: case P1DGEnum: 552 552 basis[0]=gauss->coord1; … … 687 687 } 688 688 /*}}}*/ 689 /*FUNCTION TriaRef::GetNodalFunctionsDerivatives {{{*/689 /*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){{{*/ 690 690 void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss){ 691 692 GetNodalFunctionsDerivatives(dbasis,xyz_list,gauss,this->element_type); 693 694 } 695 /*}}}*/ 696 /*FUNCTION TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){{{*/ 697 void TriaRef::GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement){ 691 698 692 699 /*This routine returns the values of the nodal functions derivatives (with respect to the … … 695 702 696 703 /*Fetch number of nodes for this finite element*/ 697 int numnodes = this->NumberofNodes( );704 int numnodes = this->NumberofNodes(finiteelement); 698 705 699 706 /*Get nodal functions derivatives in reference triangle*/ 700 707 IssmDouble* dbasis_ref=xNew<IssmDouble>(2*numnodes); 701 GetNodalFunctionsDerivativesReference(dbasis_ref,gauss );708 GetNodalFunctionsDerivativesReference(dbasis_ref,gauss,finiteelement); 702 709 703 710 /*Get Jacobian invert: */ … … 784 791 } 785 792 /*}}}*/ 786 /*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference {{{*/793 /*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){{{*/ 787 794 void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss){ 788 795 /*This routine returns the values of the nodal functions derivatives (with respect to the 789 796 * natural coordinate system) at the gaussian point. */ 790 797 798 GetNodalFunctionsDerivativesReference(dbasis,gauss,this->element_type); 799 800 } 801 /*}}}*/ 802 /*FUNCTION TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){{{*/ 803 void TriaRef::GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement){ 804 /*This routine returns the values of the nodal functions derivatives (with respect to the 805 * natural coordinate system) at the gaussian point. */ 806 791 807 _assert_(dbasis && gauss); 792 808 793 switch( this->element_type){809 switch(finiteelement){ 794 810 case P1Enum: case P1DGEnum: 795 811 /*Nodal function 1*/ … … 882 898 } 883 899 /*}}}*/ 884 /*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){{{*/885 void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int interpolation){900 /*FUNCTION TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){{{*/ 901 void TriaRef::GetInputValue(IssmDouble* p, IssmDouble* plist, GaussTria* gauss,int finiteelement){ 886 902 887 903 /*Output*/ … … 889 905 890 906 /*Fetch number of nodes for this finite element*/ 891 int numnodes = this->NumberofNodes( interpolation);907 int numnodes = this->NumberofNodes(finiteelement); 892 908 893 909 /*Get nodal functions*/ 894 910 IssmDouble* basis=xNew<IssmDouble>(numnodes); 895 GetNodalFunctions(basis, gauss, interpolation);911 GetNodalFunctions(basis, gauss,finiteelement); 896 912 897 913 /*Calculate parameter for this Gauss point*/ … … 909 925 } 910 926 /*}}}*/ 911 /*FUNCTION TriaRef::NumberofNodes(int interpolation){{{*/912 int TriaRef::NumberofNodes(int interpolation){913 914 switch( interpolation){927 /*FUNCTION TriaRef::NumberofNodes(int finiteelement){{{*/ 928 int TriaRef::NumberofNodes(int finiteelement){ 929 930 switch(finiteelement){ 915 931 case P1Enum: return NUMNODESP1; 916 932 case P1DGEnum: return NUMNODESP1; -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.h
r16364 r16371 38 38 void GetJacobianInvert(IssmDouble* Jinv, IssmDouble* xyz_list,GaussTria* gauss); 39 39 void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss); 40 void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int interpolation);40 void GetNodalFunctions(IssmDouble* basis,GaussTria* gauss,int finiteelement); 41 41 void GetNodalFunctionsVelocity(IssmDouble* basis, GaussTria* gauss); 42 42 void GetNodalFunctionsPressure(IssmDouble* basis, GaussTria* gauss); … … 45 45 void GetSegmentBprimeFlux(IssmDouble* Bprime,GaussTria* gauss, int index1,int index2); 46 46 void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss); 47 void GetNodalFunctionsDerivatives(IssmDouble* dbasis,IssmDouble* xyz_list, GaussTria* gauss,int finiteelement); 47 48 void GetNodalFunctionsDerivativesVelocity(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss); 48 49 void GetNodalFunctionsDerivativesPressure(IssmDouble* dbasis,IssmDouble* xyz_list,GaussTria* gauss); 49 50 void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss); 51 void GetNodalFunctionsDerivativesReference(IssmDouble* dbasis,GaussTria* gauss,int finiteelement); 50 52 void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss); 51 void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int interpolation);53 void GetInputValue(IssmDouble* pp, IssmDouble* plist, GaussTria* gauss,int finiteelement); 52 54 void GetInputDerivativeValue(IssmDouble* pp, IssmDouble* plist,IssmDouble* xyz_list, GaussTria* gauss); 53 55 54 56 int NumberofNodes(void); 55 int NumberofNodes(int interpolation);57 int NumberofNodes(int finiteelement); 56 58 int NumberofNodesVelocity(void); 57 59 int NumberofNodesPressure(void); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r16343 r16371 332 332 GiaSolutionEnum, 333 333 GiaAnalysisEnum, 334 MeshdeformationSolutionEnum, 335 MeshdeformationAnalysisEnum, 334 336 /*}}}*/ 335 337 /*Approximations {{{*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r16343 r16371 338 338 case GiaSolutionEnum : return "GiaSolution"; 339 339 case GiaAnalysisEnum : return "GiaAnalysis"; 340 case MeshdeformationSolutionEnum : return "MeshdeformationSolution"; 341 case MeshdeformationAnalysisEnum : return "MeshdeformationAnalysis"; 340 342 case ApproximationEnum : return "Approximation"; 341 343 case NoneApproximationEnum : return "NoneApproximation"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r16367 r16371 344 344 else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum; 345 345 else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum; 346 else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum; 347 else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum; 346 348 else if (strcmp(name,"Approximation")==0) return ApproximationEnum; 347 349 else if (strcmp(name,"NoneApproximation")==0) return NoneApproximationEnum; … … 381 383 else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum; 382 384 else if (strcmp(name,"FileParam")==0) return FileParamEnum; 383 else if (strcmp(name,"Input")==0) return InputEnum;384 else if (strcmp(name,"IntInput")==0) return IntInputEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"IntParam")==0) return IntParamEnum; 388 if (strcmp(name,"Input")==0) return InputEnum; 389 else if (strcmp(name,"IntInput")==0) return IntInputEnum; 390 else if (strcmp(name,"IntParam")==0) return IntParamEnum; 389 391 else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 390 392 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; … … 504 506 else if (strcmp(name,"StressTensor")==0) return StressTensorEnum; 505 507 else if (strcmp(name,"StressTensorxx")==0) return StressTensorxxEnum; 506 else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum;507 else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 511 if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; 512 else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum; 513 else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 512 514 else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum; 513 515 else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum; -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r16343 r16371 330 330 def GiaSolutionEnum(): return StringToEnum("GiaSolution")[0] 331 331 def GiaAnalysisEnum(): return StringToEnum("GiaAnalysis")[0] 332 def MeshdeformationSolutionEnum(): return StringToEnum("MeshdeformationSolution")[0] 333 def MeshdeformationAnalysisEnum(): return StringToEnum("MeshdeformationAnalysis")[0] 332 334 def ApproximationEnum(): return StringToEnum("Approximation")[0] 333 335 def NoneApproximationEnum(): return StringToEnum("NoneApproximation")[0]
Note:
See TracChangeset
for help on using the changeset viewer.