Changeset 15533


Ignore:
Timestamp:
07/22/13 10:26:07 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: changed if to switch statements

Location:
issm/trunk-jpl/src/c
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Node.cpp

    r15464 r15533  
    2828        int k,l;
    2929        int gsize;
     30        int node_type;
    3031
    3132        /*id: */
     
    3940
    4041        /*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
    4244        gsize=this->indexing.gsize;
    4345
    44         if (analysis_type==DiagnosticHorizAnalysisEnum)
    45          this->approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
     46        if(analysis_type==DiagnosticHorizAnalysisEnum)
     47         this->approximation=reCast<int>(node_type);
    4648        else
    4749         this->approximation=0;
     
    4951        //intialize inputs, and add as many inputs per element as requested:
    5052        this->inputs=new Inputs();
    51         if (iomodel->Data(MaskVertexonfloatingiceEnum))
     53        if(iomodel->Data(MaskVertexonfloatingiceEnum))
    5254         this->inputs->AddInput(new BoolInput(MaskVertexonfloatingiceEnum,reCast<bool>(iomodel->Data(MaskVertexonfloatingiceEnum)[io_index])));
    53         if (iomodel->Data(MaskVertexongroundediceEnum))
     55        if(iomodel->Data(MaskVertexongroundediceEnum))
    5456          this->inputs->AddInput(new BoolInput(MaskVertexongroundediceEnum,reCast<bool>(iomodel->Data(MaskVertexongroundediceEnum)[io_index])));
    55         if (analysis_type==DiagnosticHorizAnalysisEnum)
    56          this->approximation=reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index]);
     57        if(analysis_type==DiagnosticHorizAnalysisEnum)
     58         this->approximation=reCast<int>(node_type);
    5759        /*set single point constraints: */
    5860
    5961        /*spc all nodes on water*/
    60         if (!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
    61         if (reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
     62        if(!iomodel->Data(MaskVertexonwaterEnum)) _error_("iomodel->nodeonwater is NULL");
     63        if(reCast<bool>(iomodel->Data(MaskVertexonwaterEnum)[io_index])){
    6264                this->Deactivate();
    6365        }
     
    6567        /*Diagnostic Horiz*/
    6668        #ifdef _HAVE_DIAGNOSTIC_
    67         if (analysis_type==DiagnosticHorizAnalysisEnum){
     69        if(analysis_type==DiagnosticHorizAnalysisEnum){
    6870
    6971                /*Coordinate system provided, convert to coord_system matrix*/
     
    7577                        _assert_(iomodel->Data(MeshVertexonbedEnum));
    7678                        _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])){
    7880                                this->Deactivate();
    7981                        }
    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])){
    8183                                this->Deactivate();
    8284                        }
    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])){
    8486                                if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
    8587                                        this->Deactivate();
    8688                                }
    8789                        }
    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])){
    8991                                if(!reCast<int>(iomodel->Data(MeshVertexonbedEnum)[io_index])){
    9092                                        for(k=1;k<=2;k++) this->FreezeDof(k);
     
    9395                }
    9496                /*spc all nodes on hutter*/
    95                 if (iomodel->Data(FlowequationVertexEquationEnum)[io_index]==HutterApproximationEnum){
     97                if(node_type==HutterApproximationEnum){
    9698                        this->Deactivate();
    9799                }
     
    100102
    101103        /*Diagnostic Hutter*/
    102         if (analysis_type==DiagnosticHutterAnalysisEnum){
     104        if(analysis_type==DiagnosticHutterAnalysisEnum){
    103105                _assert_(iomodel->Data(FlowequationVertexEquationEnum));
    104106                /*Constrain all nodes that are not Hutter*/
    105                 if (reCast<int>(iomodel->Data(FlowequationVertexEquationEnum)[io_index])!=HutterApproximationEnum){
     107                if(reCast<int>(node_type)!=HutterApproximationEnum){
    106108                        this->Deactivate();
    107109                }
     
    109111
    110112        /*Prognostic/ Melting/ Slopecompute/ Balancethickness*/
    111         if (
     113        if(
    112114                                analysis_type==PrognosticAnalysisEnum ||
    113115                                analysis_type==MeltingAnalysisEnum ||
     
    121123                        /*On a 3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
    122124                        _assert_(iomodel->Data(MeshVertexonbedEnum));
    123                         if (!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
     125                        if(!(reCast<bool>(iomodel->Data(MeshVertexonbedEnum)[io_index]))){
    124126                                this->Deactivate();
    125127                        }
     
    448450        /*Put dof for this node into the s set (ie, this dof will be constrained
    449451         * to a fixed value during computations. */
     452
     453        _assert_(dof<this->indexing.gsize);
    450454
    451455        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  
    5858                        break;
    5959
     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
    6075                default:
    6176                        _error_("Finite element "<<EnumToStringx(finite_element)<<" not supported yet");
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/DistributeNumDofs.cpp

    r14999 r15533  
    66#include "../../classes/classes.h"
    77
    8 void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type){
     8void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type){
    99
    1010        /*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: */
    1212
    13         int numdofs=2; //default numdofs
    14         int* doftype=NULL;
     13        int  numdofs = -1;  //default numdofs
     14        int *doftype = NULL;
    1515
    1616        /*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:
    1975                        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");
    65112        }
    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");
    103113
    104114        /*Now initialize the index*/
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/ModelProcessorx.h

    r15464 r15533  
    3434
    3535/*diagnostic vertical*/
    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);
     36void CreateNodesDiagnosticVert(Nodes** pnodes,IoModel* iomodel);
     37void CreateConstraintsDiagnosticVert(Constraints** pconstraints,IoModel* iomodel);
     38void CreateLoadsDiagnosticVert(Loads** ploads, IoModel* iomodel);
     39void UpdateElementsDiagnosticVert(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    4040
    4141/*diagnostic hutter*/
    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);
     42void CreateNodesDiagnosticHutter(Nodes** pnodes,IoModel* iomodel);
     43void CreateConstraintsDiagnosticHutter(Constraints** pconstraints,IoModel* iomodel);
     44void CreateLoadsDiagnosticHutter(Loads** ploads, IoModel* iomodel);
     45void UpdateElementsDiagnosticHutter(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    4646
    4747#ifdef _HAVE_GIA_
    4848/*gia*/
    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);
     49void CreateNodesGia(Nodes** pnodes,IoModel* iomodel);
     50void CreateConstraintsGia(Constraints** pconstraints,IoModel* iomodel);
     51void CreateLoadsGia(Loads** ploads, IoModel* iomodel);
     52void UpdateElementsGia(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    5353#endif
    5454
    5555/*bed slope*/
    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);
     56void CreateNodesBedSlope(Nodes** pnodes,IoModel* iomodel);
     57void CreateConstraintsBedSlope(Constraints** pconstraints,IoModel* iomodel);
     58void CreateLoadsBedSlope(Loads** ploads, IoModel* iomodel);
     59void UpdateElementsBedSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    6060
    6161/*surface slope*/
    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);
     62void CreateNodesSurfaceSlope(Nodes** pnodes,IoModel* iomodel);
     63void CreateConstraintsSurfaceSlope(Constraints** pconstraints,IoModel* iomodel);
     64void CreateLoadsSurfaceSlope(Loads** ploads, IoModel* iomodel);
     65void UpdateElementsSurfaceSlope(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    6666
    6767/*thermal:*/
    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);
     68void CreateNodesThermal(Nodes** pnodes,IoModel* iomodel);
     69void CreateConstraintsThermal(Constraints** pconstraints,IoModel* iomodel);
     70void CreateLoadsThermal(Loads** ploads, IoModel* iomodel);
     71void UpdateElementsThermal(Elements* elements,IoModel* iomodel,int analysis_counter,int analysis_type);
    7272
    7373/*enthalpy:*/
     
    126126
    127127/*Diverse: */
    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);
     128void SortDataSets(Elements** pelements,Nodes** pnodes,Vertices** pvertices, Loads** ploads, Materials** pmaterials, Constraints** pconstraints, Parameters** pparameters);
     129void UpdateCounters(IoModel* iomodel,Nodes** pnodes,Loads** ploads, Constraints** pconstraints);
    130130
    131131/*Distribution of dofs: */
    132 void DistributeNumDofs(DofIndexing* index,int analysis_type,IssmDouble* vertices_type);
     132void DistributeNumDofs(DofIndexing* index,int analysis_type,int node_type);
    133133
    134134#endif
Note: See TracChangeset for help on using the changeset viewer.