Changeset 18179
- Timestamp:
- 06/24/14 16:47:09 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 5 added
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r18135 r18179 354 354 ./analyses/EnumToAnalysis.cpp\ 355 355 ./analyses/Analysis.h\ 356 ./solutionsequences/solutionsequence_la.cpp\ 357 ./solutionsequences/solutionsequence_la_theta.cpp\ 356 358 ./solutionsequences/solutionsequence_linear.cpp\ 357 359 ./solutionsequences/solutionsequence_nonlinear.cpp\ 358 360 ./solutionsequences/solutionsequence_newton.cpp\ 359 ./solutionsequences/solutionsequence_la_theta.cpp\360 361 ./solutionsequences/convergence.cpp\ 361 362 ./classes/Options/Options.h\ … … 538 539 issm_sources += ./analyses/StressbalanceAnalysis.cpp 539 540 endif 541 if UZAWAPRESSURE 542 issm_sources += ./analyses/UzawaPressureAnalysis.cpp 543 endif 540 544 if STRESSBALANCESIA 541 545 issm_sources += ./analyses/StressbalanceSIAAnalysis.cpp -
issm/trunk-jpl/src/c/analyses/EnumToAnalysis.cpp
r17933 r18179 95 95 case ThermalAnalysisEnum : return new ThermalAnalysis(); 96 96 #endif 97 #ifdef _HAVE_UZAWAPRESSURE_ 98 case UzawaPressureAnalysisEnum : return new UzawaPressureAnalysis(); 99 #endif 97 100 #ifdef _HAVE_GIA_ 98 101 case GiaAnalysisEnum : return new GiaAnalysis(); -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r18173 r18179 867 867 if (fe_FS==XTaylorHoodEnum) 868 868 solutionsequence_la_theta(femmodel); 869 else if (fe_FS==LATaylorHoodEnum) 870 solutionsequence_la(femmodel); 869 871 else if(newton>0) 870 872 solutionsequence_newton(femmodel); … … 2852 2854 if(fe_FS==XTaylorHoodEnum) 2853 2855 Ke1=CreateKMatrixFSViscousXTH(element); 2856 else if(fe_FS==LATaylorHoodEnum) 2857 Ke1=CreateKMatrixFSViscousLATH(element); 2854 2858 else 2855 2859 Ke1=CreateKMatrixFSViscous(element); … … 2863 2867 delete Ke2; 2864 2868 delete Ke3; 2869 return Ke; 2870 }/*}}}*/ 2871 ElementMatrix* StressbalanceAnalysis::CreateKMatrixFSViscousLATH(Element* element){/*{{{*/ 2872 2873 /*Intermediaries*/ 2874 int i,dim,epssize; 2875 IssmDouble r,Jdet,viscosity,DU; 2876 IssmDouble *xyz_list = NULL; 2877 2878 /*Get problem dimension*/ 2879 element->FindParam(&dim,DomainDimensionEnum); 2880 element->FindParam(&r,AugmentedLagrangianREnum); 2881 if(dim==2) epssize = 3; 2882 else epssize = 6; 2883 2884 /*Fetch number of nodes and dof for this finite element*/ 2885 int vnumnodes = element->NumberofNodesVelocity(); 2886 int pnumnodes; 2887 if(dim==2) pnumnodes=3; 2888 else pnumnodes=6; 2889 //int pnumnodes = element->NumberofNodes(P1Enum); 2890 int numdof = vnumnodes*dim; 2891 int pnumdof = pnumnodes; 2892 2893 /*Prepare coordinate system list*/ 2894 int* cs_list = xNew<int>(vnumnodes); 2895 if(dim==2) for(i=0;i<vnumnodes;i++) cs_list[i] = XYEnum; 2896 else for(i=0;i<vnumnodes;i++) cs_list[i] = XYZEnum; 2897 2898 /*Initialize Element matrix and vectors*/ 2899 ElementMatrix* Ke = element->NewElementMatrix(FSvelocityEnum); 2900 IssmDouble* B = xNew<IssmDouble>(epssize*numdof); 2901 IssmDouble* Bprime = xNew<IssmDouble>(epssize*numdof); 2902 IssmDouble* BtBUzawa = xNew<IssmDouble>(numdof*pnumdof); 2903 IssmDouble* BU = xNew<IssmDouble>(pnumdof); 2904 IssmDouble* BprimeU = xNew<IssmDouble>(numdof); 2905 IssmDouble* D = xNewZeroInit<IssmDouble>(epssize*epssize); 2906 2907 /*Retrieve all inputs and parameters*/ 2908 element->GetVerticesCoordinates(&xyz_list); 2909 Input* vx_input=element->GetInput(VxEnum); _assert_(vx_input); 2910 Input* vy_input=element->GetInput(VyEnum); _assert_(vy_input); 2911 Input* vz_input; 2912 if(dim==3){vz_input=element->GetInput(VzEnum); _assert_(vz_input);} 2913 2914 /* Start looping on the number of gaussian points: */ 2915 Gauss* gauss = element->NewGauss(5); 2916 for(int ig=gauss->begin();ig<gauss->end();ig++){ 2917 gauss->GaussPoint(ig); 2918 2919 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 2920 this->GetBFS(B,element,dim,xyz_list,gauss); 2921 this->GetBFSprime(Bprime,element,dim,xyz_list,gauss); 2922 2923 element->ViscosityFS(&viscosity,dim,xyz_list,gauss,vx_input,vy_input,vz_input); 2924 for(i=0;i<epssize;i++) D[i*epssize+i] = 2*viscosity*gauss->weight*Jdet; 2925 2926 TripleMultiply(B,epssize,numdof,1, 2927 D,epssize,epssize,0, 2928 Bprime,epssize,numdof,0, 2929 &Ke->values[0],1); 2930 2931 this->GetBFSUzawa(BU,element,dim,xyz_list,gauss); 2932 this->GetBFSprimeUzawa(BprimeU,element,dim,xyz_list,gauss); 2933 2934 DU = gauss->weight*Jdet; 2935 2936 TripleMultiply(BU,1,pnumdof,1, 2937 &DU,1,1,0, 2938 BprimeU,1,numdof,0, 2939 BtBUzawa,1); 2940 2941 } 2942 2943 MatrixMultiply(BtBUzawa,pnumdof,numdof,1, 2944 BtBUzawa,pnumdof,numdof,0, 2945 &Ke->values[0],1); 2946 2947 /*Transform Coordinate System*/ 2948 element->TransformStiffnessMatrixCoord(Ke,cs_list); 2949 2950 /*Clean up and return*/ 2951 delete gauss; 2952 xDelete<IssmDouble>(xyz_list); 2953 xDelete<IssmDouble>(D); 2954 xDelete<IssmDouble>(Bprime); 2955 xDelete<IssmDouble>(B); 2956 xDelete<IssmDouble>(BprimeU); 2957 xDelete<IssmDouble>(BU); 2958 xDelete<IssmDouble>(BtBUzawa); 2959 xDelete<int>(cs_list); 2865 2960 return Ke; 2866 2961 }/*}}}*/ … … 3305 3400 ElementVector* petemp =new ElementVector(pe1,pe2,pe3); 3306 3401 ElementVector* pe4=CreatePVectorFSViscousXTH(element); 3402 pe = new ElementVector(petemp,pe4); 3403 delete pe1; 3404 delete pe2; 3405 delete pe3; 3406 delete petemp; 3407 delete pe4; 3408 } 3409 else if(fe_FS==LATaylorHoodEnum){ 3410 ElementVector* pe1=CreatePVectorFSViscous(element); 3411 ElementVector* pe2=CreatePVectorFSShelf(element); 3412 ElementVector* pe3=CreatePVectorFSFront(element); 3413 ElementVector* petemp =new ElementVector(pe1,pe2,pe3); 3414 ElementVector* pe4=CreatePVectorFSViscousLATH(element); 3307 3415 pe = new ElementVector(petemp,pe4); 3308 3416 delete pe1; … … 3565 3673 xDelete<IssmDouble>(vdbasis); 3566 3674 xDelete<IssmDouble>(tbasis); 3675 return pe; 3676 }/*}}}*/ 3677 ElementVector* StressbalanceAnalysis::CreatePVectorFSViscousLATH(Element* element){/*{{{*/ 3678 3679 int i,dim; 3680 IssmDouble Jdet,r,pressure; 3681 IssmDouble *xyz_list = NULL; 3682 Gauss* gauss = NULL; 3683 3684 /*Get problem dimension*/ 3685 element->FindParam(&dim,DomainDimensionEnum); 3686 3687 /*Fetch number of nodes and dof for this finite element*/ 3688 int numnodes = element->GetNumberOfNodes(); 3689 3690 /*Prepare coordinate system list*/ 3691 int* cs_list = xNew<int>(numnodes); 3692 if(dim==2) for(i=0;i<numnodes;i++) cs_list[i] = XYEnum; 3693 else for(i=0;i<numnodes;i++) cs_list[i] = XYZEnum; 3694 3695 /*Initialize vectors*/ 3696 ElementVector* pe = element->NewElementVector(FSvelocityEnum); 3697 IssmDouble* dbasis = xNew<IssmDouble>(3*numnodes); 3698 3699 /*Retrieve all inputs and parameters*/ 3700 element->FindParam(&r,AugmentedLagrangianREnum); 3701 element->GetVerticesCoordinates(&xyz_list); 3702 3703 /*Get d and tau*/ 3704 Input* pressure_input=element->GetInput(PressureEnum); _assert_(pressure_input); 3705 3706 gauss=element->NewGauss(5); 3707 for(int ig=gauss->begin();ig<gauss->end();ig++){ 3708 gauss->GaussPoint(ig); 3709 element->JacobianDeterminant(&Jdet,xyz_list,gauss); 3710 3711 pressure_input->GetInputValue(&pressure, gauss); 3712 element->NodalFunctionsDerivatives(dbasis,xyz_list,gauss); 3713 3714 for(i=0;i<numnodes;i++){ 3715 pe->values[i*dim+0] += r*pressure*gauss->weight*Jdet*dbasis[0*numnodes+i]; 3716 pe->values[i*dim+1] += r*pressure*gauss->weight*Jdet*dbasis[1*numnodes+i]; 3717 if(dim==3){ 3718 pe->values[i*dim+2]+=r*pressure*gauss->weight*Jdet*dbasis[2*numnodes+i]; 3719 } 3720 } 3721 } 3722 3723 /*Transform coordinate system*/ 3724 element->TransformLoadVectorCoord(pe,cs_list); 3725 3726 /*Clean up and return*/ 3727 delete gauss; 3728 xDelete<int>(cs_list); 3729 xDelete<IssmDouble>(xyz_list); 3730 xDelete<IssmDouble>(dbasis); 3567 3731 return pe; 3568 3732 }/*}}}*/ … … 3955 4119 xDelete<IssmDouble>(pbasis); 3956 4120 }/*}}}*/ 4121 void StressbalanceAnalysis::GetBFSUzawa(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4122 /*Compute B matrix. B=[Bp1 Bp2 ...] where Bpi=phi_pi. 4123 */ 4124 4125 /*Fetch number of nodes for this finite element*/ 4126 int pnumnodes; 4127 if(dim==2) pnumnodes=3; 4128 else pnumnodes=6; 4129 //int pnumnodes = element->NumberofNodes(P1Enum); 4130 4131 /*Get nodal functions derivatives*/ 4132 IssmDouble* basis =xNew<IssmDouble>(pnumnodes); 4133 element->NodalFunctionsP1(basis,gauss); 4134 4135 /*Build B: */ 4136 for(int i=0;i<pnumnodes;i++){ 4137 B[i] = basis[i]; 4138 } 4139 4140 /*Clean up*/ 4141 xDelete<IssmDouble>(basis); 4142 }/*}}}*/ 4143 void StressbalanceAnalysis::GetBFSprimeUzawa(IssmDouble* Bprime,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 4144 /* Compute B' matrix. B'=[B1' B2' B3' B4' B5' B6'] where Bi' is of size 3*NDOF2. 4145 * For node i, Bi' can be expressed in the actual coordinate system 4146 * by: 4147 * Bvi' = [ dphi/dx dphi/dy ] 4148 * 4149 * In 3d 4150 * Bvi=[ dh/dx dh/dy dh/dz ] 4151 * where phi is the finiteelement function for node i. 4152 */ 4153 4154 /*Fetch number of nodes for this finite element*/ 4155 int vnumnodes = element->NumberofNodesVelocity(); 4156 4157 /*Get nodal functions derivatives*/ 4158 IssmDouble* vdbasis=xNew<IssmDouble>(dim*vnumnodes); 4159 element->NodalFunctionsDerivativesVelocity(vdbasis,xyz_list,gauss); 4160 4161 /*Build B_prime: */ 4162 if(dim==2){ 4163 for(int i=0;i<vnumnodes;i++){ 4164 Bprime[dim*i+0] = vdbasis[0*vnumnodes+i]; 4165 Bprime[dim*i+1] = vdbasis[1*vnumnodes+i]; 4166 } 4167 } 4168 else{ 4169 for(int i=0;i<vnumnodes;i++){ 4170 Bprime[dim*i+0] = vdbasis[0*vnumnodes+i]; 4171 Bprime[dim*i+1] = vdbasis[1*vnumnodes+i]; 4172 Bprime[dim*i+2] = vdbasis[2*vnumnodes+i]; 4173 } 4174 } 4175 4176 /*Clean up*/ 4177 xDelete<IssmDouble>(vdbasis); 4178 }/*}}}*/ 3957 4179 void StressbalanceAnalysis::GetBFSFriction(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/ 3958 4180 /* Compute L matrix. L=[L1 L2 L3] where Li is square and of size numdof. -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h
r18057 r18179 68 68 ElementMatrix* CreateJacobianMatrixFS(Element* element); 69 69 ElementMatrix* CreateKMatrixFS(Element* element); 70 ElementMatrix* CreateKMatrixFSViscousLATH(Element* element); 70 71 ElementMatrix* CreateKMatrixFSViscousXTH(Element* element); 71 72 ElementMatrix* CreateKMatrixFSViscous(Element* element); … … 74 75 ElementVector* CreatePVectorFS(Element* element); 75 76 ElementVector* CreatePVectorFSViscous(Element* element); 77 ElementVector* CreatePVectorFSViscousLATH(Element* element); 76 78 ElementVector* CreatePVectorFSViscousXTH(Element* element); 77 79 ElementVector* CreatePVectorFSShelf(Element* element); … … 80 82 void GetBFSprime(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 81 83 void GetBFSFriction(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 84 void GetBFSUzawa(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 85 void GetBFSprimeUzawa(IssmDouble* B,Element* element,int dim,IssmDouble* xyz_list,Gauss* gauss); 82 86 void GetSolutionFromInputsFS(Vector<IssmDouble>* solution,Element* element); 83 87 void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element); -
issm/trunk-jpl/src/c/analyses/analyses.h
r17933 r18179 37 37 #include "./StressbalanceSIAAnalysis.h" 38 38 #include "./StressbalanceVerticalAnalysis.h" 39 #include "./UzawaPressureAnalysis.h" 39 40 #include "./L2ProjectionBaseAnalysis.h" 40 41 #include "./L2ProjectionEPLAnalysis.h" -
issm/trunk-jpl/src/c/classes/Elements/PentaRef.cpp
r18173 r18179 945 945 946 946 switch(finiteelement){ 947 case NoneEnum: return 0; 947 948 case P0Enum: return NUMNODESP0; 948 949 case P1Enum: return NUMNODESP1; … … 962 963 case MINIEnum: return NUMNODESP1b+NUMNODESP1; 963 964 case TaylorHoodEnum: return NUMNODESP2+NUMNODESP1; 965 case LATaylorHoodEnum: return NUMNODESP2; 964 966 case OneLayerP4zEnum: return NUMNODESP2xP4+NUMNODESP1; 965 967 case CrouzeixRaviartEnum: return NUMNODESP2b+NUMNODESP1; … … 978 980 case MINIEnum: return P1bubbleEnum; 979 981 case TaylorHoodEnum: return P2Enum; 982 case LATaylorHoodEnum: return P2Enum; 980 983 case OneLayerP4zEnum: return P2xP4Enum; 981 984 case CrouzeixRaviartEnum:return P2bubbleEnum; … … 994 997 case MINIEnum: return P1Enum; 995 998 case TaylorHoodEnum: return P1Enum; 999 case LATaylorHoodEnum: return P1Enum; 996 1000 case OneLayerP4zEnum: return P1Enum; 997 1001 case CrouzeixRaviartEnum:return P1DGEnum; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
r18163 r18179 863 863 tetra_node_ids[13]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[4*index+3]; 864 864 break; 865 case LATaylorHoodEnum: 866 numnodes = 10; 867 tetra_node_ids = xNew<int>(numnodes); 868 tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0]; 869 tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1]; 870 tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2]; 871 tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3]; 872 tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1; 873 tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1; 874 tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1; 875 tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1; 876 tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1; 877 tetra_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1; 878 break; 865 879 default: 866 880 _error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet"); -
issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp
r18143 r18179 354 354 case MINIEnum: return NUMNODESP1b+NUMNODESP1; 355 355 case TaylorHoodEnum: return NUMNODESP2+NUMNODESP1; 356 case LATaylorHoodEnum: return NUMNODESP2; 356 357 case XTaylorHoodEnum: return NUMNODESP2+NUMNODESP1; 357 358 default: _error_("Element type "<<EnumToStringx(finiteelement)<<" not supported yet"); … … 369 370 case MINIEnum: return P1bubbleEnum; 370 371 case TaylorHoodEnum: return P2Enum; 372 case LATaylorHoodEnum: return P2Enum; 371 373 case XTaylorHoodEnum: return P2Enum; 372 374 default: _error_("Element type "<<EnumToStringx(fe_stokes)<<" not supported yet"); … … 384 386 case MINIEnum: return P1Enum; 385 387 case TaylorHoodEnum: return P1Enum; 388 case LATaylorHoodEnum: return NoneEnum; 386 389 case XTaylorHoodEnum: return P1Enum; 387 390 default: _error_("Element type "<<EnumToStringx(fe_stokes)<<" not supported yet"); -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r18173 r18179 1975 1975 tria_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->numberofedges+iomodel->elements[3*index+2]; 1976 1976 break; 1977 case LATaylorHoodEnum: 1978 numnodes = 6; 1979 tria_node_ids = xNew<int>(numnodes); 1980 tria_node_ids[0]=iomodel->nodecounter+iomodel->elements[3*index+0]; 1981 tria_node_ids[1]=iomodel->nodecounter+iomodel->elements[3*index+1]; 1982 tria_node_ids[2]=iomodel->nodecounter+iomodel->elements[3*index+2]; 1983 tria_node_ids[3]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+0]+1; 1984 tria_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+1]+1; 1985 tria_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[3*index+2]+1; 1986 break; 1977 1987 case CrouzeixRaviartEnum: 1978 1988 numnodes = 10; -
issm/trunk-jpl/src/c/classes/Elements/TriaRef.cpp
r18173 r18179 406 406 407 407 switch(finiteelement){ 408 case NoneEnum: return 0; 408 409 case P0Enum: return NUMNODESP0; 409 410 case P1Enum: return NUMNODESP1; … … 419 420 case MINIEnum: return NUMNODESP1b+NUMNODESP1; 420 421 case TaylorHoodEnum: return NUMNODESP2+NUMNODESP1; 422 case LATaylorHoodEnum: return NUMNODESP2; 421 423 case XTaylorHoodEnum: return NUMNODESP2+NUMNODESP1; 422 424 case CrouzeixRaviartEnum: return NUMNODESP2b+NUMNODESP1; … … 435 437 case MINIEnum: return P1bubbleEnum; 436 438 case TaylorHoodEnum: return P2Enum; 439 case LATaylorHoodEnum: return P2Enum; 437 440 case XTaylorHoodEnum: return P2Enum; 438 441 case CrouzeixRaviartEnum:return P2bubbleEnum; … … 451 454 case MINIEnum: return P1Enum; 452 455 case TaylorHoodEnum: return P1Enum; 456 case LATaylorHoodEnum: return NoneEnum; 453 457 case XTaylorHoodEnum: return P1Enum; 454 458 case CrouzeixRaviartEnum: return P1DGEnum; -
issm/trunk-jpl/src/c/cores/AnalysisConfiguration.cpp
r17831 r18179 26 26 27 27 case StressbalanceSolutionEnum: 28 numanalyses= 6;28 numanalyses=7; 29 29 analyses=xNew<int>(numanalyses); 30 30 analyses[0]=StressbalanceAnalysisEnum; … … 34 34 analyses[4]=ExtrudeFromBaseAnalysisEnum; 35 35 analyses[5]=DepthAverageAnalysisEnum; 36 analyses[6]=UzawaPressureAnalysisEnum; 36 37 break; 37 38 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
r18173 r18179 378 378 } 379 379 break; 380 case LATaylorHoodEnum: 381 _assert_(approximation==FSApproximationEnum); 382 /*P2 velocity*/ 383 EdgesPartitioning(&my_edges,iomodel); 384 for(i=0;i<iomodel->numberofvertices;i++){ 385 if(iomodel->my_vertices[i]){ 386 nodes->AddObject(new Node(id0+i+1,i,lid++,i,iomodel,analysis,FSvelocityEnum)); 387 } 388 } 389 for(i=0;i<iomodel->numberofedges;i++){ 390 if(my_edges[i]){ 391 nodes->AddObject(new Node(id0+iomodel->numberofvertices+i+1,iomodel->numberofvertices+i,lid++,0,iomodel,analysis,FSvelocityEnum)); 392 } 393 } 394 id0 = id0+iomodel->numberofvertices+iomodel->numberofedges; 395 if(iomodel->meshelementtype==PentaEnum){ 396 FacesPartitioning(&my_faces,iomodel); 397 for(i=0;i<iomodel->numberoffaces;i++){ 398 if(iomodel->faces[i*iomodel->facescols+2]==2){/*Vertical quads*/ 399 if(my_faces[i]){ 400 node = new Node(id0+i+1,iomodel->numberofvertices+iomodel->numberofedges+i,lid++,0,iomodel,analysis,FSvelocityEnum); 401 nodes->AddObject(node); 402 } 403 } 404 else if(iomodel->faces[i*iomodel->facescols+2]==1){/*Triangular base/top*/ 405 /*Nothing*/ 406 } 407 else{ 408 _error_("not supported"); 409 } 410 } 411 } 412 413 /*No pressure*/ 414 break; 380 415 case OneLayerP4zEnum: 381 416 _assert_(approximation==FSApproximationEnum); -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r18173 r18179 390 390 ThermalSolutionEnum, 391 391 TransientSolutionEnum, 392 UzawaPressureAnalysisEnum, 392 393 GiaSolutionEnum, 393 394 GiaAnalysisEnum, … … 613 614 MINIcondensedEnum, 614 615 TaylorHoodEnum, 616 LATaylorHoodEnum, 615 617 XTaylorHoodEnum, 616 618 OneLayerP4zEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r18173 r18179 393 393 case ThermalSolutionEnum : return "ThermalSolution"; 394 394 case TransientSolutionEnum : return "TransientSolution"; 395 case UzawaPressureAnalysisEnum : return "UzawaPressureAnalysis"; 395 396 case GiaSolutionEnum : return "GiaSolution"; 396 397 case GiaAnalysisEnum : return "GiaAnalysis"; … … 602 603 case MINIcondensedEnum : return "MINIcondensed"; 603 604 case TaylorHoodEnum : return "TaylorHood"; 605 case LATaylorHoodEnum : return "LATaylorHood"; 604 606 case XTaylorHoodEnum : return "XTaylorHood"; 605 607 case OneLayerP4zEnum : return "OneLayerP4z"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r18173 r18179 402 402 else if (strcmp(name,"ThermalSolution")==0) return ThermalSolutionEnum; 403 403 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum; 404 else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum; 404 405 else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum; 405 406 else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum; … … 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; … … 614 615 else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum; 615 616 else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum; 617 else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum; 616 618 else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum; 617 619 else if (strcmp(name,"OneLayerP4z")==0) return OneLayerP4zEnum; … … 627 629 else if (strcmp(name,"Time")==0) return TimeEnum; 628 630 else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum; 629 else if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum;630 else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum; 634 if (strcmp(name,"Outputdefinition")==0) return OutputdefinitionEnum; 635 else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum; 636 else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum; 635 637 else if (strcmp(name,"MassfluxatgateName")==0) return MassfluxatgateNameEnum; 636 638 else if (strcmp(name,"MassfluxatgateSegments")==0) return MassfluxatgateSegmentsEnum; -
issm/trunk-jpl/src/c/solutionsequences/solutionsequences.h
r17525 r18179 18 18 void solutionsequence_FScoupling_nonlinear(FemModel* femmodel,bool conserve_loads); 19 19 void solutionsequence_linear(FemModel* femmodel); 20 void solutionsequence_la(FemModel* femmodel); 20 21 void solutionsequence_la_theta(FemModel* femmodel); 21 22 void solutionsequence_adjoint_linear(FemModel* femmodel); -
issm/trunk-jpl/src/m/classes/flowequation.m
r18173 r18179 134 134 md = checkfield(md,'fieldname','flowequation.fe_SSA','values',{'P1','P1bubble','P1bubblecondensed','P2','P2bubble'}); 135 135 md = checkfield(md,'fieldname','flowequation.fe_HO' ,'values',{'P1','P1bubble','P1bubblecondensed','P1xP2','P2xP1','P2','P2bubble','P1xP3','P2xP4'}); 136 md = checkfield(md,'fieldname','flowequation.fe_FS' ,'values',{'P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood',' XTaylorHood','OneLayerP4z','CrouzeixRaviart'});136 md = checkfield(md,'fieldname','flowequation.fe_FS' ,'values',{'P1P1','P1P1GLS','MINIcondensed','MINI','TaylorHood','LaTaylorHood','XTaylorHood','OneLayerP4z','CrouzeixRaviart'}); 137 137 md = checkfield(md,'fieldname','flowequation.XTH_r','numel',[1],'>',0.); 138 138 md = checkfield(md,'fieldname','flowequation.XTH_theta','numel',[1],'>=',0.,'<',0.5); -
issm/trunk-jpl/src/m/classes/flowequation.py
r18173 r18179 47 47 string="%s\n%s"%(string,fielddisplay(self,'fe_SSA',"Finite Element for SSA: 'P1', 'P1bubble' 'P1bubblecondensed' 'P2'")) 48 48 string="%s\n%s"%(string,fielddisplay(self,'fe_HO' ,"Finite Element for HO: 'P1' 'P1bubble' 'P1bubblecondensed' 'P1xP2' 'P2xP1' 'P2'")) 49 string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS: 'P1P1' (debugging only) 'P1P1GLS' 'MINIcondensed' 'MINI' 'TaylorHood' ' XTaylorHood'"))49 string="%s\n%s"%(string,fielddisplay(self,'fe_FS' ,"Finite Element for FS: 'P1P1' (debugging only) 'P1P1GLS' 'MINIcondensed' 'MINI' 'TaylorHood' 'LATaylorHood' 'XTaylorHood'")) 50 50 string="%s\n%s"%(string,fielddisplay(self,'vertex_equation',"flow equation for each vertex")) 51 51 string="%s\n%s"%(string,fielddisplay(self,'element_equation',"flow equation for each element")) -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r18170 r18179 385 385 def ThermalSolutionEnum(): return StringToEnum("ThermalSolution")[0] 386 386 def TransientSolutionEnum(): return StringToEnum("TransientSolution")[0] 387 def UzawaPressureAnalysisEnum(): return StringToEnum("UzawaPressureAnalysis")[0] 387 388 def GiaSolutionEnum(): return StringToEnum("GiaSolution")[0] 388 389 def GiaAnalysisEnum(): return StringToEnum("GiaAnalysis")[0] … … 594 595 def MINIcondensedEnum(): return StringToEnum("MINIcondensed")[0] 595 596 def TaylorHoodEnum(): return StringToEnum("TaylorHood")[0] 597 def LATaylorHoodEnum(): return StringToEnum("LATaylorHood")[0] 596 598 def XTaylorHoodEnum(): return StringToEnum("XTaylorHood")[0] 597 599 def OneLayerP4zEnum(): return StringToEnum("OneLayerP4z")[0] 600 def CrouzeixRaviartEnum(): return StringToEnum("CrouzeixRaviart")[0] 598 601 def SaveResultsEnum(): return StringToEnum("SaveResults")[0] 599 602 def BoolExternalResultEnum(): return StringToEnum("BoolExternalResult")[0]
Note:
See TracChangeset
for help on using the changeset viewer.