Changeset 15533
- Timestamp:
- 07/22/13 10:26:07 (12 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Node.cpp
r15464 r15533 28 28 int k,l; 29 29 int gsize; 30 int node_type; 30 31 31 32 /*id: */ … … 39 40 40 41 /*indexing:*/ 41 DistributeNumDofs(&this->indexing,analysis_type,iomodel->Data(FlowequationVertexEquationEnum)+io_index); //number of dofs per node 42 node_type = reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]); 43 DistributeNumDofs(&this->indexing,analysis_type,node_type); //number of dofs per node 42 44 gsize=this->indexing.gsize; 43 45 44 if 45 this->approximation=reCast<int>( iomodel->Data(FlowequationVertexEquationEnum)[io_index]);46 if(analysis_type==DiagnosticHorizAnalysisEnum) 47 this->approximation=reCast<int>(node_type); 46 48 else 47 49 this->approximation=0; … … 49 51 //intialize inputs, and add as many inputs per element as requested: 50 52 this->inputs=new Inputs(); 51 if 53 if(iomodel->Data(MaskVertexonfloatingiceEnum)) 52 54 this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index]))); 53 if 55 if(iomodel->Data(MaskVertexongroundediceEnum)) 54 56 this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index]))); 55 if 56 this->approximation=reCast<int>( iomodel->Data(FlowequationVertexEquationEnum)[io_index]);57 if(analysis_type==DiagnosticHorizAnalysisEnum) 58 this->approximation=reCast<int>(node_type); 57 59 /*set single point constraints: */ 58 60 59 61 /*spc all nodes on water*/ 60 if 61 if 62 if(!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL"); 63 if(reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){ 62 64 this->Deactivate(); 63 65 } … … 65 67 /*Diagnostic Horiz*/ 66 68 #ifdef _HAVE_DIAGNOSTIC_ 67 if 69 if(analysis_type==DiagnosticHorizAnalysisEnum){ 68 70 69 71 /*Coordinate system provided, convert to coord_system matrix*/ … … 75 77 _assert_(iomodel->Data(MeshVertexonbedEnum)); 76 78 _assert_(iomodel->Data(FlowequationVertexEquationEnum)); 77 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){79 if(node_type==MacAyealApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){ 78 80 this->Deactivate(); 79 81 } 80 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){82 if(node_type==L1L2ApproximationEnum && !reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){ 81 83 this->Deactivate(); 82 84 } 83 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){85 if(node_type==MacAyealPattynApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){ 84 86 if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){ 85 87 this->Deactivate(); 86 88 } 87 89 } 88 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){90 if(node_type==MacAyealStokesApproximationEnum && reCast<int>(iomodel->Data(FlowequationBordermacayealEnum)[io_index])){ 89 91 if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){ 90 92 for(k=1;k<=2;k++) this->FreezeDof(k); … … 93 95 } 94 96 /*spc all nodes on hutter*/ 95 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==HutterApproximationEnum){97 if(node_type==HutterApproximationEnum){ 96 98 this->Deactivate(); 97 99 } … … 100 102 101 103 /*Diagnostic Hutter*/ 102 if 104 if(analysis_type==DiagnosticHutterAnalysisEnum){ 103 105 _assert_(iomodel->Data(FlowequationVertexEquationEnum)); 104 106 /*Constrain all nodes that are not Hutter*/ 105 if (reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index])!=HutterApproximationEnum){107 if(reCast<int>(node_type)!=HutterApproximationEnum){ 106 108 this->Deactivate(); 107 109 } … … 109 111 110 112 /*Prognostic/ Melting/ Slopecompute/ Balancethickness*/ 111 if 113 if( 112 114 analysis_type==PrognosticAnalysisEnum || 113 115 analysis_type==MeltingAnalysisEnum || … … 121 123 /*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */ 122 124 _assert_(iomodel->Data(MeshVertexonbedEnum)); 123 if 125 if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){ 124 126 this->Deactivate(); 125 127 } … … 448 450 /*Put dof for this node into the s set (ie, this dof will be constrained 449 451 * to a fixed value during computations. */ 452 453 _assert_(dof<this->indexing.gsize); 450 454 451 455 this->indexing.f_set[dof]=0; //n splits into f (for which we solve) and s (single point constraints) -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateNodes.cpp
r15464 r15533 58 58 break; 59 59 60 case MINIcondensedEnum: 61 /*P1 velocity*/ 62 for(i=0;i<iomodel->numberofvertices;i++){ 63 if(iomodel->my_vertices[i]){ 64 nodes->AddObject(new Node(iomodel->nodecounter+i+1,i,i,iomodel,analysis)); 65 } 66 } 67 /*P1+ pressure statically condensed*/ 68 for(i=0;i<iomodel->numberofvertices;i++){ 69 if(iomodel->my_vertices[i]){ 70 nodes->AddObject(new Node(iomodel->nodecounter+iomodel->numberofvertices+i+1,i,i,iomodel,analysis)); 71 } 72 } 73 break; 74 60 75 default: 61 76 _error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet"); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp
r14999 r15533 6 6 #include "../../classes/classes.h" 7 7 8 void DistributeNumDofs(DofIndexing* index,int analysis_type, IssmDouble* vertices_type){8 void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type){ 9 9 10 10 /*For now, we distribute by analysis_type, later, we will distribute using the analysis_type, 11 * but also the vertices_type: */11 * but also the node_type: */ 12 12 13 int numdofs=2;//default numdofs14 int * doftype=NULL;13 int numdofs = -1; //default numdofs 14 int *doftype = NULL; 15 15 16 16 /*ok, according to analysis type: */ 17 if (analysis_type==DiagnosticHorizAnalysisEnum){ 18 if (vertices_type[0]==MacAyealApproximationEnum){ 17 switch(analysis_type){ 18 case DiagnosticHorizAnalysisEnum: 19 switch(node_type){ 20 case MacAyealApproximationEnum: 21 numdofs=2; 22 break; 23 case L1L2ApproximationEnum: 24 numdofs=2; 25 break; 26 case PattynApproximationEnum: 27 numdofs=2; 28 break; 29 case HutterApproximationEnum: 30 numdofs=2; 31 break; 32 case StokesApproximationEnum: 33 numdofs=4; 34 break; 35 case NoneApproximationEnum: 36 numdofs=4; 37 break; 38 case MacAyealPattynApproximationEnum: 39 numdofs=4; 40 doftype=xNew<int>(numdofs); 41 doftype[0]=MacAyealApproximationEnum; 42 doftype[1]=MacAyealApproximationEnum; 43 doftype[2]=PattynApproximationEnum; 44 doftype[3]=PattynApproximationEnum; 45 break; 46 case PattynStokesApproximationEnum: 47 numdofs=6; 48 doftype=xNew<int>(numdofs); 49 doftype[0]=PattynApproximationEnum; 50 doftype[1]=PattynApproximationEnum; 51 doftype[2]=StokesApproximationEnum; 52 doftype[3]=StokesApproximationEnum; 53 doftype[4]=StokesApproximationEnum; 54 doftype[5]=StokesApproximationEnum; 55 break; 56 case MacAyealStokesApproximationEnum: 57 numdofs=6; 58 doftype=xNew<int>(numdofs); 59 doftype[0]=MacAyealApproximationEnum; 60 doftype[1]=MacAyealApproximationEnum; 61 doftype[2]=StokesApproximationEnum; 62 doftype[3]=StokesApproximationEnum; 63 doftype[4]=StokesApproximationEnum; 64 doftype[5]=StokesApproximationEnum; 65 break; 66 default: 67 _error_("Approximationtype " << node_type << " (" << EnumToStringx(node_type) << ") not implemented yet for DiagnosticHoriz"); 68 69 } 70 break; 71 case DiagnosticVertAnalysisEnum: 72 numdofs=1; 73 break; 74 case DiagnosticHutterAnalysisEnum: 19 75 numdofs=2; 20 } 21 else if (vertices_type[0]==L1L2ApproximationEnum){ 22 numdofs=2; 23 } 24 else if (vertices_type[0]==PattynApproximationEnum){ 25 numdofs=2; 26 } 27 else if (vertices_type[0]==HutterApproximationEnum){ 28 numdofs=2; 29 } 30 else if (vertices_type[0]==StokesApproximationEnum){ 31 numdofs=4; 32 } 33 else if (vertices_type[0]==NoneApproximationEnum){ 34 numdofs=4; 35 } 36 else if (vertices_type[0]==MacAyealPattynApproximationEnum){ 37 numdofs=4; 38 doftype=xNew<int>(numdofs); 39 doftype[0]=MacAyealApproximationEnum; 40 doftype[1]=MacAyealApproximationEnum; 41 doftype[2]=PattynApproximationEnum; 42 doftype[3]=PattynApproximationEnum; 43 } 44 else if (vertices_type[0]==PattynStokesApproximationEnum){ 45 numdofs=6; 46 doftype=xNew<int>(numdofs); 47 doftype[0]=PattynApproximationEnum; 48 doftype[1]=PattynApproximationEnum; 49 doftype[2]=StokesApproximationEnum; 50 doftype[3]=StokesApproximationEnum; 51 doftype[4]=StokesApproximationEnum; 52 doftype[5]=StokesApproximationEnum; 53 } 54 else if (vertices_type[0]==MacAyealStokesApproximationEnum){ 55 numdofs=6; 56 doftype=xNew<int>(numdofs); 57 doftype[0]=MacAyealApproximationEnum; 58 doftype[1]=MacAyealApproximationEnum; 59 doftype[2]=StokesApproximationEnum; 60 doftype[3]=StokesApproximationEnum; 61 doftype[4]=StokesApproximationEnum; 62 doftype[5]=StokesApproximationEnum; 63 } 64 else _error_("Approximationtype " << reCast<int>(*vertices_type) << " (" << EnumToStringx(reCast<int>(*vertices_type)) << ") not implemented yet for DiagnosticHoriz"); 76 break; 77 case BedSlopeAnalysisEnum: 78 numdofs=1; 79 break; 80 case SurfaceSlopeAnalysisEnum: 81 numdofs=1; 82 break; 83 case ThermalAnalysisEnum: 84 numdofs=1; 85 break; 86 case EnthalpyAnalysisEnum: 87 numdofs=1; 88 break; 89 case HydrologyDCInefficientAnalysisEnum: 90 numdofs=1; 91 break; 92 case HydrologyDCEfficientAnalysisEnum: 93 numdofs=1; 94 break; 95 case HydrologyShreveAnalysisEnum: 96 numdofs=1; 97 break; 98 case MeltingAnalysisEnum: 99 numdofs=1; 100 break; 101 case PrognosticAnalysisEnum: 102 numdofs=1; 103 break; 104 case GiaAnalysisEnum: 105 numdofs=1; 106 break; 107 case BalancethicknessAnalysisEnum: 108 numdofs=1; 109 break; 110 default: 111 _error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet"); 65 112 } 66 else if (analysis_type==DiagnosticVertAnalysisEnum){67 numdofs=1;68 }69 else if (analysis_type==DiagnosticHutterAnalysisEnum){70 numdofs=2;71 }72 else if (analysis_type==BedSlopeAnalysisEnum || analysis_type==SurfaceSlopeAnalysisEnum){73 numdofs=1;74 }75 else if (analysis_type==ThermalAnalysisEnum){76 numdofs=1;77 }78 else if (analysis_type==EnthalpyAnalysisEnum){79 numdofs=1;80 }81 else if (analysis_type==HydrologyDCInefficientAnalysisEnum){82 numdofs=1;83 }84 else if (analysis_type==HydrologyDCEfficientAnalysisEnum){85 numdofs=1;86 }87 else if (analysis_type==HydrologyShreveAnalysisEnum){88 numdofs=1;89 }90 else if (analysis_type==MeltingAnalysisEnum){91 numdofs=1;92 }93 else if (analysis_type==PrognosticAnalysisEnum){94 numdofs=1;95 }96 else if (analysis_type==GiaAnalysisEnum){97 numdofs=1;98 }99 else if (analysis_type==BalancethicknessAnalysisEnum){100 numdofs=1;101 }102 else _error_("analysis type: " << analysis_type << " (" << EnumToStringx(analysis_type) << ") not implemented yet");103 113 104 114 /*Now initialize the index*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h
r15464 r15533 34 34 35 35 /*diagnostic vertical*/ 36 void 37 void 38 void 39 void 36 void CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel); 37 void CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel); 38 void CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel); 39 void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 40 40 41 41 /*diagnostic hutter*/ 42 void 43 void 44 void 45 void 42 void CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel); 43 void CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel); 44 void CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel); 45 void UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 46 46 47 47 #ifdef _HAVE_GIA_ 48 48 /*gia*/ 49 void 50 void 51 void 52 void 49 void CreateNodesGia(Nodes** pnodes,IoModel* iomodel); 50 void CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel); 51 void CreateLoadsGia(Loads** ploads, IoModel* iomodel); 52 void UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 53 53 #endif 54 54 55 55 /*bed slope*/ 56 void 57 void 58 void 59 void 56 void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel); 57 void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel); 58 void CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel); 59 void UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 60 60 61 61 /*surface slope*/ 62 void 63 void 64 void 65 void 62 void CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel); 63 void CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel); 64 void CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel); 65 void UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 66 66 67 67 /*thermal:*/ 68 void 69 void 70 void 71 void 68 void CreateNodesThermal(Nodes** pnodes,IoModel* iomodel); 69 void CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel); 70 void CreateLoadsThermal(Loads** ploads, IoModel* iomodel); 71 void UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type); 72 72 73 73 /*enthalpy:*/ … … 126 126 127 127 /*Diverse: */ 128 void 129 void 128 void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters); 129 void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints); 130 130 131 131 /*Distribution of dofs: */ 132 void DistributeNumDofs(DofIndexing* index,int analysis_type, IssmDouble* vertices_type);132 void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type); 133 133 134 134 #endif
Note:
See TracChangeset
for help on using the changeset viewer.