Changeset 16789
- Timestamp:
- 11/15/13 15:41:42 (11 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.h
r16787 r16789 11 11 /*{{{*/ 12 12 #include "../../datastructures/datastructures.h" 13 #include "../../toolkits/toolkits.h" 13 14 #include "../Update.h" 14 15 15 class DataSet; 16 16 class Parameters; … … 26 26 template <class doublematrix> class Matrix; 27 27 template <class doubletype> class Vector; 28 29 #include "../../toolkits/toolkits.h" 28 class ElementMatrix; 29 class ElementVector; 30 30 /*}}}*/ 31 31 … … 43 43 virtual void AddMaterialInput(int input_enum, IssmDouble* values, int interpolation_enum)=0; 44 44 virtual void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs)=0; 45 virtual ElementMatrix* CreateKMatrix(void)=0; 45 46 virtual void CreateDVector(Vector<IssmDouble>* df)=0; 46 47 virtual void CreatePVector(Vector<IssmDouble>* pf)=0; 48 virtual ElementVector* CreatePVector(void)=0; 47 49 virtual void CreateJacobianMatrix(Matrix<IssmDouble>* Jff)=0; 48 50 virtual void DeleteMaterials(void)=0; … … 110 112 virtual Element* SpawnBasalElement(void)=0; 111 113 virtual IssmDouble TMeltingPoint(IssmDouble pressure)=0; 114 virtual void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe)=0; 112 115 virtual void ResetCoordinateSystem()=0; 113 116 virtual int VelocityInterpolation()=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r16788 r16789 2652 2652 /*clean-up*/ 2653 2653 delete gauss; 2654 } 2655 /*}}}*/ 2656 /*FUNCTION Penta::ReduceMatrices) {{{*/ 2657 void Penta::ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){ 2658 2659 int analysis_type; 2660 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 2661 2662 if(pe){ 2663 if(analysis_type==StressbalanceAnalysisEnum){ 2664 if(this->element_type==MINIcondensedEnum){ 2665 int approximation; 2666 inputs->GetInputValue(&approximation,ApproximationEnum); 2667 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 2668 //Do nothing, condensation already done in PVectorCoupling 2669 } 2670 else{ 2671 int indices[3]={18,19,20}; 2672 pe->StaticCondensation(Ke,3,&indices[0]); 2673 } 2674 } 2675 else if(this->element_type==P1bubblecondensedEnum){ 2676 int size = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2677 int offset = 0; 2678 for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2679 int* indices=xNew<int>(size); 2680 for(int i=0;i<size;i++) indices[i] = offset+i; 2681 pe->StaticCondensation(Ke,size,indices); 2682 xDelete<int>(indices); 2683 delete Ke; 2684 } 2685 } 2686 } 2687 2688 if(Ke){ 2689 if(analysis_type==StressbalanceAnalysisEnum){ 2690 int approximation; 2691 inputs->GetInputValue(&approximation,ApproximationEnum); 2692 if(approximation==HOFSApproximationEnum || approximation==SSAFSApproximationEnum){ 2693 //Do nothing condensatino already done for Stokes part 2694 } 2695 else{ 2696 if(this->element_type==MINIcondensedEnum){ 2697 int indices[3]={18,19,20}; 2698 Ke->StaticCondensation(3,&indices[0]); 2699 } 2700 else if(this->element_type==P1bubblecondensedEnum){ 2701 int size = nodes[6]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2702 int offset = 0; 2703 for(int i=0;i<6;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2704 int* indices=xNew<int>(size); 2705 for(int i=0;i<size;i++) indices[i] = offset+i; 2706 Ke->StaticCondensation(size,indices); 2707 xDelete<int>(indices); 2708 } 2709 } 2710 } 2711 } 2712 2654 2713 } 2655 2714 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r16787 r16789 115 115 void ResultToVector(Vector<IssmDouble>* vector,int output_enum); 116 116 void PositiveDegreeDay(IssmDouble* pdds,IssmDouble* pds,IssmDouble signorm); 117 void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe); 117 118 void ResetCoordinateSystem(void); 118 119 void SmbGradients(); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r16787 r16789 78 78 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int set1_enum,int set2_enum){_error_("not implemented yet");}; 79 79 void CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs){_error_("not implemented yet");}; 80 ElementMatrix* CreateKMatrix(void){_error_("not implemented yet");}; 80 81 void CreateDVector(Vector<IssmDouble>* df){_error_("not implemented yet");}; 81 82 void CreatePVector(Vector<IssmDouble>* pf){_error_("not implemented yet");}; 83 ElementVector* CreatePVector(void){_error_("not implemented yet");}; 82 84 ElementVector* CreatePVectorL2Projection(void); 83 85 void CreateJacobianMatrix(Matrix<IssmDouble>* Jff){_error_("not implemented yet");}; … … 147 149 void ResultToVector(Vector<IssmDouble>* vector,int output_enum){_error_("not implemented");}; 148 150 void ResetCoordinateSystem(void){_error_("not implemented yet");}; 151 void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){_error_("not implemented yet");}; 149 152 void SmbGradients(){_error_("not implemented yet");}; 150 153 IssmDouble TMeltingPoint(IssmDouble pressure){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r16788 r16789 2349 2349 /*clean-up*/ 2350 2350 delete gauss; 2351 } 2352 /*}}}*/ 2353 /*FUNCTION Tria::ReduceMatrices {{{*/ 2354 void Tria::ReduceMatrices(ElementMatrix* Ke,ElementVector* pe){ 2355 2356 /*Static condensation if requested*/ 2357 if(pe){ 2358 if(this->element_type==MINIcondensedEnum){ 2359 int indices[2]={6,7}; 2360 pe->StaticCondensation(Ke,2,&indices[0]); 2361 } 2362 else if(this->element_type==P1bubblecondensedEnum){ 2363 int size = nodes[3]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2364 int offset = 0; 2365 for(int i=0;i<3;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2366 int* indices=xNew<int>(size); 2367 for(int i=0;i<size;i++) indices[i] = offset+i; 2368 pe->StaticCondensation(Ke,size,indices); 2369 xDelete<int>(indices); 2370 } 2371 } 2372 2373 if(Ke){ 2374 if(this->element_type==MINIcondensedEnum){ 2375 int indices[2]={6,7}; 2376 Ke->StaticCondensation(2,&indices[0]); 2377 } 2378 else if(this->element_type==P1bubblecondensedEnum){ 2379 int size = nodes[3]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2380 int offset = 0; 2381 for(int i=0;i<3;i++) offset+=nodes[i]->GetNumberOfDofs(NoneApproximationEnum,GsetEnum); 2382 int* indices=xNew<int>(size); 2383 for(int i=0;i<size;i++) indices[i] = offset+i; 2384 Ke->StaticCondensation(size,indices); 2385 xDelete<int>(indices); 2386 } 2387 } 2388 2389 2351 2390 } 2352 2391 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r16787 r16789 121 121 void ResultInterpolation(int* pinterpolation,int output_enum); 122 122 void ResultToVector(Vector<IssmDouble>* vector,int output_enum); 123 void ReduceMatrices(ElementMatrix* Ke,ElementVector* pe); 123 124 void ResetCoordinateSystem(void); 124 125 void SmbGradients(); -
issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
r16126 r16789 12 12 /*intermediary: */ 13 13 int i,M,N; 14 int configuration_type ;14 int configuration_type,analysisenum; 15 15 Element *element = NULL; 16 16 Load *load = NULL; … … 26 26 if(VerboseModule()) _printf0_(" Generating matrices"); 27 27 28 /*retri ve parameters: */28 /*retrieve parameters: */ 29 29 femmodel->parameters->FindParam(&configuration_type,ConfigurationTypeEnum); 30 femmodel->parameters->FindParam(&analysisenum,AnalysisTypeEnum); 31 Analysis* analysis = EnumToAnalysis(analysisenum); 30 32 31 33 /*First, we might need to do a dry run to get kmax if penalties are employed*/ … … 62 64 } 63 65 64 /*Fill stiffness matrix from elements and loads*/66 /*Fill stiffness matrix and load vector from elements*/ 65 67 for (i=0;i<femmodel->elements->Size();i++){ 66 68 element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 67 element->CreateKMatrix(Kff,Kfs); 69 element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 70 //ElementVector* pe = analysis->CreatePVector(element); 71 //ElementMatrix* Ke = analysis->CreateKMatrix(element); 72 ElementVector* pe = element->CreatePVector(); 73 ElementMatrix* Ke = element->CreateKMatrix(); 74 element->ReduceMatrices(Ke,pe); 75 if(Ke) Ke->AddToGlobal(Kff,Kfs); 76 if(pe) pe->AddToGlobal(pf); 77 delete Ke; 78 delete pe; 68 79 } 69 80 70 for (i=0;i<femmodel->loads->Size();i++){ 81 /*Fill stiffness matrix and load vector from loads*/ 82 for(i=0;i<femmodel->loads->Size();i++){ 71 83 load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i)); 72 if(load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs); 73 } 74 75 /*Fill right hand side vector, from elements and loads */ 76 for (i=0;i<femmodel->elements->Size();i++){ 77 element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 78 element->CreatePVector(pf); 79 } 80 for (i=0;i<femmodel->loads->Size();i++){ 81 load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i)); 82 if(load->InAnalysis(configuration_type)) load->CreatePVector(pf); 84 if(load->InAnalysis(configuration_type)){ 85 load->CreateKMatrix(Kff,Kfs); 86 load->CreatePVector(pf); 87 } 83 88 } 84 89 … … 87 92 for (i=0;i<femmodel->loads->Size();i++){ 88 93 load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i)); 89 if(load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax); 90 } 91 for (i=0;i<femmodel->loads->Size();i++){ 92 load=dynamic_cast<Load*>(femmodel->loads->GetObjectByOffset(i)); 93 if(load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax); 94 if(load->InAnalysis(configuration_type)){ 95 load->PenaltyCreateKMatrix(Kff,Kfs,kmax); 96 load->PenaltyCreatePVector(pf,kmax); 97 } 94 98 } 95 99 } … … 109 113 //Kfs->AllocationInfo(); 110 114 111 /*Assign output pointers: */ 115 /*cleanu up and assign output pointers: */ 116 delete analysis; 112 117 if(pKff) *pKff=Kff; 113 118 else delete Kff; -
issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.h
r16126 r16789 6 6 7 7 #include "../../classes/classes.h" 8 #include "../../analyses/analyses.h" 8 9 9 10 /* local prototypes: */
Note:
See TracChangeset
for help on using the changeset viewer.