- Timestamp:
- 10/24/13 10:12:44 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
r16534 r16539 6 6 7 7 /*Model processing*/ 8 int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/8 int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/ 9 9 return 1; 10 10 }/*}}}*/ 11 void HydrologyDCInefficientAnalysis::UpdateParameters(Parameters** pparameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ 12 13 Parameters *parameters = NULL; 14 int hydrology_model; 15 int sedimentlimit_flag; 16 int transfer_flag; 17 bool isefficientlayer; 18 IssmDouble sedimentlimit; 19 IssmDouble penalty_factor; 20 IssmDouble leakagefactor; 21 IssmDouble rel_tol; 22 23 /*Get parameters: */ 24 parameters=*pparameters; 25 26 /*retrieve some parameters: */ 27 iomodel->Constant(&hydrology_model,HydrologyModelEnum); 28 29 /*Now, do we really want DC?*/ 30 if(hydrology_model!=HydrologydcEnum){ 31 *pparameters=parameters; 32 return; 33 } 34 35 iomodel->FetchData(&isefficientlayer,HydrologydcIsefficientlayerEnum); 36 iomodel->FetchData(&sedimentlimit_flag,HydrologydcSedimentlimitFlagEnum); 37 iomodel->FetchData(&transfer_flag,HydrologydcTransferFlagEnum); 38 iomodel->FetchData(&penalty_factor,HydrologydcPenaltyFactorEnum); 39 iomodel->FetchData(&rel_tol,HydrologydcRelTolEnum); 40 41 if(sedimentlimit_flag==1){ 42 iomodel->FetchData(&sedimentlimit,HydrologydcSedimentlimitEnum); 43 parameters->AddObject(new DoubleParam(HydrologydcSedimentlimitEnum,sedimentlimit)); 44 } 45 46 if(transfer_flag==1){ 47 iomodel->FetchData(&leakagefactor,HydrologydcLeakageFactorEnum); 48 parameters->AddObject(new DoubleParam(HydrologydcLeakageFactorEnum,leakagefactor)); 49 } 50 51 parameters->AddObject(new DoubleParam(HydrologydcPenaltyFactorEnum,penalty_factor)); 52 parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model)); 53 parameters->AddObject(new BoolParam(HydrologydcIsefficientlayerEnum,isefficientlayer)); 54 parameters->AddObject(new IntParam(HydrologydcSedimentlimitFlagEnum,sedimentlimit_flag)); 55 parameters->AddObject(new IntParam(HydrologydcTransferFlagEnum,transfer_flag)); 56 parameters->AddObject(new DoubleParam(HydrologydcRelTolEnum,rel_tol)); 57 58 /*Assign output pointer: */ 59 *pparameters=parameters; 60 }/*}}}*/ 61 void HydrologyDCInefficientAnalysis::UpdateElements(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type){/*{{{*/ 62 63 bool isefficientlayer; 64 int hydrology_model; 65 66 /*Fetch data needed: */ 67 iomodel->Constant(&hydrology_model,HydrologyModelEnum); 68 69 /*Now, do we really want DC?*/ 70 if(hydrology_model!=HydrologydcEnum) return; 71 72 /*Fetch data needed: */ 73 iomodel->Constant(&isefficientlayer,HydrologydcIsefficientlayerEnum); 74 75 /*Update elements: */ 76 int counter=0; 77 for(int i=0;i<iomodel->numberofelements;i++){ 78 if(iomodel->my_elements[i]){ 79 Element* element=(Element*)elements->GetObjectByOffset(counter); 80 element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum); 81 counter++; 82 } 83 } 84 85 iomodel->FetchDataToInput(elements,ThicknessEnum); 86 iomodel->FetchDataToInput(elements,SurfaceEnum); 87 iomodel->FetchDataToInput(elements,BedEnum); 88 iomodel->FetchDataToInput(elements,MaskIceLevelsetEnum); 89 iomodel->FetchDataToInput(elements,MeshElementonbedEnum); 90 iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum); 91 iomodel->FetchDataToInput(elements,BasalforcingsMeltingRateEnum); 92 iomodel->FetchDataToInput(elements,SedimentHeadEnum); 93 if(isefficientlayer)iomodel->FetchDataToInput(elements,HydrologydcMaskEplactiveEnum); 94 }/*}}}*/ 95 void HydrologyDCInefficientAnalysis::CreateNodes(Nodes** pnodes,IoModel* iomodel){/*{{{*/ 96 97 /*Fetch parameters: */ 98 int hydrology_model; 99 iomodel->Constant(&hydrology_model,HydrologyModelEnum); 100 101 /*Now, do we really want DC?*/ 102 if(hydrology_model!=HydrologydcEnum) return; 103 104 if(iomodel->meshtype==Mesh3DEnum) iomodel->FetchData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum); 105 ::CreateNodes(pnodes,iomodel,HydrologyDCInefficientAnalysisEnum,P1Enum); 106 iomodel->DeleteData(2,MeshVertexonbedEnum,MeshVertexonsurfaceEnum); 107 }/*}}}*/ 108 void HydrologyDCInefficientAnalysis::CreateConstraints(Constraints** pconstraints,IoModel* iomodel){/*{{{*/ 109 110 /*Recover pointer: */ 111 Constraints* constraints=*pconstraints; 112 113 /*retrieve some parameters: */ 114 int hydrology_model; 115 iomodel->Constant(&hydrology_model,HydrologyModelEnum); 116 if(hydrology_model!=HydrologydcEnum) return; 117 118 IoModelToConstraintsx(constraints,iomodel,HydrologydcSpcsedimentHeadEnum,HydrologyDCInefficientAnalysisEnum,P1Enum); 119 120 /*Assign output pointer: */ 121 *pconstraints=constraints; 122 }/*}}}*/ 123 void HydrologyDCInefficientAnalysis::CreateLoads(Loads** ploads, IoModel* iomodel){/*{{{*/ 124 125 /*Recover pointer: */ 126 Loads* loads=*ploads; 127 128 /*Fetch parameters: */ 129 int hydrology_model; 130 iomodel->Constant(&hydrology_model,HydrologyModelEnum); 131 if(hydrology_model!=HydrologydcEnum) return; 132 133 iomodel->FetchData(1,MeshVertexonbedEnum); 134 135 //create penalties for nodes: no node can have a temperature over the melting point 136 CreateSingleNodeToElementConnectivity(iomodel); 137 for(int i=0;i<iomodel->numberofvertices;i++){ 138 if (iomodel->meshtype==Mesh3DEnum){ 139 /*keep only this partition's nodes:*/ 140 if(iomodel->my_vertices[i]){ 141 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum)); 142 } 143 } 144 else if(reCast<int>(iomodel->Data(MeshVertexonbedEnum)[i])){ 145 if(iomodel->my_vertices[i]){ 146 loads->AddObject(new Pengrid(iomodel->loadcounter+i+1,i,iomodel,HydrologyDCInefficientAnalysisEnum)); 147 } 148 } 149 } 150 /*Assign output pointer: */ 151 *ploads=loads; 152 iomodel->DeleteData(1,MeshVertexonbedEnum); 153 }/*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.