Ignore:
Timestamp:
10/24/13 10:12:44 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: moving model processor stuff to analyses

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp

    r16534 r16539  
    66
    77/*Model processing*/
    8 int HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
     8int  HydrologyDCInefficientAnalysis::DofsPerNode(int** doflist,int meshtype,int approximation){/*{{{*/
    99        return 1;
    1010}/*}}}*/
     11void 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}/*}}}*/
     61void 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}/*}}}*/
     95void 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}/*}}}*/
     108void 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}/*}}}*/
     123void 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.