Changeset 4011


Ignore:
Timestamp:
06/03/10 10:16:36 (15 years ago)
Author:
Mathieu Morlighem
Message:

updated Tria and Penta constructors (iomodel->nodecounter) and removed iomodel constructors of Sing and Beam

Location:
issm/trunk/src/c/objects/Elements
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Beam.cpp

    r4004 r4011  
    2323        this->parameters=NULL;
    2424        return;
    25 }
    26 /*}}}*/
    27 /*FUNCTION Beam::Beam(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Parameters* beam_parameters, ElementProperties* properties){{{1*/
    28 Beam::Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs):
    29         hnodes(beam_hnodes),
    30         hmatice(beam_hmatice),
    31         hmatpar(beam_hmatpar)
    32 {
    33 
    34         /*all the initialization has been done by the initializer, just fill in the id: */
    35         this->id=beam_id;
    36         if(beam_inputs){
    37                 this->inputs=(Inputs*)beam_inputs->Copy();
    38         }
    39         else{
    40                 this->inputs=new Inputs();
    41         }
    42         /*point parameters: */
    43         this->parameters=beam_parameters;
    44 }
    45 /*}}}*/
    46 /*FUNCTION Beam::Beam(int id, int i, IoModel* iomodel){{{1*/
    47 Beam::Beam(int beam_id, int index,IoModel* iomodel){
    48 
    49         int i;
    50 
    51         /*beam constructor input: */
    52         int   beam_matice_id;
    53         int   beam_matpar_id;
    54         int   beam_node_ids[2];
    55         double nodeinputs[2];
    56 
    57         /*id: */
    58         this->id=beam_id;
    59 
    60         /*hooks: */
    61         ISSMASSERT(iomodel->uppernodes);
    62         beam_matice_id=index+1; //refers to the corresponding material property card
    63         beam_matpar_id=iomodel->numberofvertices2d*(iomodel->numlayers-1)+1;//refers to the corresponding matpar property card
    64         beam_node_ids[0]=index+1;
    65         beam_node_ids[1]=(int)iomodel->uppernodes[index]; //grid that lays right on top
    66        
    67         this->hnodes.Init(beam_node_ids,2);
    68         this->hmatice.Init(&beam_matice_id,1);
    69         this->hmatpar.Init(&beam_matpar_id,1);
    70 
    71         //intialize inputs, and add as many inputs per element as requested:
    72         this->inputs=new Inputs();
    73 
    74         if (iomodel->thickness) {
    75                 nodeinputs[0]=iomodel->thickness[index];
    76                 nodeinputs[1]=iomodel->thickness[(int)(iomodel->uppernodes[index]-1)];
    77                 this->inputs->AddInput(new BeamVertexInput(ThicknessEnum,nodeinputs));
    78         }
    79         if (iomodel->surface) {
    80                 nodeinputs[0]=iomodel->surface[index];
    81                 nodeinputs[1]=iomodel->surface[(int)(iomodel->uppernodes[index]-1)];
    82                 this->inputs->AddInput(new BeamVertexInput(SurfaceEnum,nodeinputs));
    83         }       
    84         if (iomodel->bed) {
    85                 nodeinputs[0]=iomodel->bed[index];
    86                 nodeinputs[1]=iomodel->bed[(int)(iomodel->uppernodes[index]-1)];
    87                 this->inputs->AddInput(new BeamVertexInput(BedEnum,nodeinputs));
    88         }       
    89         if (iomodel->drag_coefficient) {
    90                 nodeinputs[0]=iomodel->drag_coefficient[index];
    91                 nodeinputs[1]=iomodel->drag_coefficient[(int)(iomodel->uppernodes[index]-1)];
    92                 this->inputs->AddInput(new BeamVertexInput(DragCoefficientEnum,nodeinputs));
    93         }
    94        
    95         if (iomodel->vx) {
    96                 nodeinputs[0]=iomodel->vx[index];
    97                 nodeinputs[1]=iomodel->vx[(int)(iomodel->uppernodes[index]-1)];
    98                 this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
    99         }
    100         if (iomodel->vy) {
    101                 nodeinputs[0]=iomodel->vy[index];
    102                 nodeinputs[1]=iomodel->vy[(int)(iomodel->uppernodes[index]-1)];
    103                 this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
    104         }
    105         if (iomodel->vz) {
    106                 nodeinputs[0]=iomodel->vz[index];
    107                 nodeinputs[1]=iomodel->vz[(int)(iomodel->uppernodes[index]-1)];
    108                 this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
    109         }
    110         if (iomodel->vx_obs) {
    111                 nodeinputs[0]=iomodel->vx_obs[index];
    112                 nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];
    113                 this->inputs->AddInput(new BeamVertexInput(VxObsEnum,nodeinputs));
    114         }
    115         if (iomodel->vy_obs) {
    116                 nodeinputs[0]=iomodel->vy_obs[index];
    117                 nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];
    118                 this->inputs->AddInput(new BeamVertexInput(VyObsEnum,nodeinputs));
    119         }
    120         if (iomodel->vz_obs) {
    121                 nodeinputs[0]=iomodel->vz_obs[index];
    122                 nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];
    123                 this->inputs->AddInput(new BeamVertexInput(VzObsEnum,nodeinputs));
    124         }
    125         if (iomodel->weights) {
    126                 nodeinputs[0]=iomodel->weights[index];
    127                 nodeinputs[1]=iomodel->weights[(int)(iomodel->uppernodes[index]-1)];
    128                 this->inputs->AddInput(new BeamVertexInput(WeightsEnum,nodeinputs));
    129         }       
    130         if (iomodel->gridonbed) this->inputs->AddInput(new BoolInput(ElementOnBedEnum,(IssmBool)iomodel->gridonbed[index]));
    131 
    132         /*default vx,vy and vz: */
    133         if (!iomodel->vx && iomodel->vx_obs) {
    134                 nodeinputs[0]=iomodel->vx_obs[index];
    135                 nodeinputs[1]=iomodel->vx_obs[(int)(iomodel->uppernodes[index]-1)];
    136                 this->inputs->AddInput(new BeamVertexInput(VxEnum,nodeinputs));
    137                 this->inputs->AddInput(new BeamVertexInput(VxOldEnum,nodeinputs));
    138         }
    139         if (!iomodel->vy && iomodel->vy_obs) {
    140                 nodeinputs[0]=iomodel->vy_obs[index];
    141                 nodeinputs[1]=iomodel->vy_obs[(int)(iomodel->uppernodes[index]-1)];
    142                 this->inputs->AddInput(new BeamVertexInput(VyEnum,nodeinputs));
    143                 this->inputs->AddInput(new BeamVertexInput(VyOldEnum,nodeinputs));
    144         }
    145         if (!iomodel->vz && iomodel->vz_obs) {
    146                 nodeinputs[0]=iomodel->vz_obs[index];
    147                 nodeinputs[1]=iomodel->vz_obs[(int)(iomodel->uppernodes[index]-1)];
    148                 this->inputs->AddInput(new BeamVertexInput(VzEnum,nodeinputs));
    149                 this->inputs->AddInput(new BeamVertexInput(VzOldEnum,nodeinputs));
    150         }
    151 
    152         //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
    153         this->parameters=NULL;
    154 
    15525}
    15626/*}}}*/
  • issm/trunk/src/c/objects/Elements/Beam.h

    r4004 r4011  
    3636                /*constructors, destructors: {{{1*/
    3737                Beam();
    38                 Beam(int beam_id,Hook* beam_hnodes, Hook* beam_hmatice, Hook* beam_hmatpar, Parameters* beam_parameters, Inputs* beam_inputs);
    39                 Beam(int beam_id,int i, IoModel* iomodel);
    4038                ~Beam();
    4139                /*}}}*/
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r4003 r4011  
    8585Penta::Update(IoModel* iomodel,int analysis_counter){
    8686
     87        /*Intermediaries*/
    8788        IssmInt i;
    8889        int penta_node_ids[6];
     90        int penta_vertex_ids[6];
    8991        double nodeinputs[6];
    9092
     93        /*Checks if debuging*/
     94        /*{{{2*/
     95        ISSMASSERT(iomodel->elements);
     96        /*}}}*/
     97
     98        /*Recover vertices ids needed to initialize inputs*/
     99        for(i=0;i<6;i++){
     100                penta_vertex_ids[i]=(int)iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
     101        }
     102
     103        /*Recover nodes ids needed to initialize the node hook.*/
     104        for(i=0;i<6;i++){ //go recover node ids, needed to initialize the node hook.
     105                penta_node_ids[i]=(int)iomodel->elements[6*index+i]; //ids for vertices are in the elements array from Matlab
     106        }
     107
    91108        /*hooks: */
    92         for(i=0;i<6;i++){ //go recover node ids, needed to initialize the node hook.
    93                 penta_node_ids[i]=(int)*(iomodel->elements+6*index+i); //ids for vertices are in the elements array from Matlab
    94         }
    95 
    96109        this->SettHookNodes(penta_node_ids,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
    97110
     
    99112        this->inputs=new Inputs();
    100113        if (iomodel->thickness) {
    101                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->thickness[penta_node_ids[i]-1];
     114                for(i=0;i<6;i++)nodeinputs[i]=iomodel->thickness[penta_vertex_ids[i]-1];
    102115                this->inputs->AddInput(new PentaVertexInput(ThicknessEnum,nodeinputs));
    103116        }
    104117        if (iomodel->surface) {
    105                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->surface[penta_node_ids[i]-1];
     118                for(i=0;i<6;i++)nodeinputs[i]=iomodel->surface[penta_vertex_ids[i]-1];
    106119                this->inputs->AddInput(new PentaVertexInput(SurfaceEnum,nodeinputs));
    107120        }
    108121        if (iomodel->bed) {
    109                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->bed[penta_node_ids[i]-1];
     122                for(i=0;i<6;i++)nodeinputs[i]=iomodel->bed[penta_vertex_ids[i]-1];
    110123                this->inputs->AddInput(new PentaVertexInput(BedEnum,nodeinputs));
    111124        }
    112125        if (iomodel->drag_coefficient) {
    113                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->drag_coefficient[penta_node_ids[i]-1];
     126                for(i=0;i<6;i++)nodeinputs[i]=iomodel->drag_coefficient[penta_vertex_ids[i]-1];
    114127                this->inputs->AddInput(new PentaVertexInput(DragCoefficientEnum,nodeinputs));
    115128
     
    120133        }
    121134        if (iomodel->melting_rate) {
    122                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->melting_rate[penta_node_ids[i]-1]/iomodel->yts;
     135                for(i=0;i<6;i++)nodeinputs[i]=iomodel->melting_rate[penta_vertex_ids[i]-1]/iomodel->yts;
    123136                this->inputs->AddInput(new PentaVertexInput(MeltingRateEnum,nodeinputs));
    124137        }
    125138        if (iomodel->accumulation_rate) {
    126                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->accumulation_rate[penta_node_ids[i]-1]/iomodel->yts;
     139                for(i=0;i<6;i++)nodeinputs[i]=iomodel->accumulation_rate[penta_vertex_ids[i]-1]/iomodel->yts;
    127140                this->inputs->AddInput(new PentaVertexInput(AccumulationRateEnum,nodeinputs));
    128141        }
    129142        if (iomodel->geothermalflux) {
    130                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->geothermalflux[penta_node_ids[i]-1];
     143                for(i=0;i<6;i++)nodeinputs[i]=iomodel->geothermalflux[penta_vertex_ids[i]-1];
    131144                this->inputs->AddInput(new PentaVertexInput(GeothermalFluxEnum,nodeinputs));
    132145        }       
    133146        if (iomodel->pressure) {
    134                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->pressure[penta_node_ids[i]-1];
     147                for(i=0;i<6;i++)nodeinputs[i]=iomodel->pressure[penta_vertex_ids[i]-1];
    135148                this->inputs->AddInput(new PentaVertexInput(PressureEnum,nodeinputs));
    136149        }
    137150        if (iomodel->temperature) {
    138                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->temperature[penta_node_ids[i]-1];
     151                for(i=0;i<6;i++)nodeinputs[i]=iomodel->temperature[penta_vertex_ids[i]-1];
    139152                this->inputs->AddInput(new PentaVertexInput(TemperatureEnum,nodeinputs));
    140153        }
    141154        if (iomodel->dhdt) {
    142                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->dhdt[penta_node_ids[i]-1];
     155                for(i=0;i<6;i++)nodeinputs[i]=iomodel->dhdt[penta_vertex_ids[i]-1];
    143156                this->inputs->AddInput(new PentaVertexInput(DhDtEnum,nodeinputs));
    144157        }
    145158        /*vx,vy and vz: */
    146159        if (iomodel->vx) {
    147                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_node_ids[i]-1]/iomodel->yts;
     160                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx[penta_vertex_ids[i]-1]/iomodel->yts;
    148161                this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
    149162                this->inputs->AddInput(new PentaVertexInput(VxOldEnum,nodeinputs));
    150163        }
    151164        if (iomodel->vy) {
    152                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_node_ids[i]-1]/iomodel->yts;
     165                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy[penta_vertex_ids[i]-1]/iomodel->yts;
    153166                this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
    154167                this->inputs->AddInput(new PentaVertexInput(VyOldEnum,nodeinputs));
    155168        }
    156169        if (iomodel->vz) {
    157                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz[penta_node_ids[i]-1]/iomodel->yts;
     170                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz[penta_vertex_ids[i]-1]/iomodel->yts;
    158171                this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
    159172                this->inputs->AddInput(new PentaVertexInput(VzOldEnum,nodeinputs));
    160173        }
    161174        if (iomodel->vx_obs) {
    162                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
     175                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    163176                this->inputs->AddInput(new PentaVertexInput(VxObsEnum,nodeinputs));
    164177        }
    165178        if (iomodel->vy_obs) {
    166                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
     179                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    167180                this->inputs->AddInput(new PentaVertexInput(VyObsEnum,nodeinputs));
    168181        }
    169182        if (iomodel->vz_obs) {
    170                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
     183                for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    171184                this->inputs->AddInput(new PentaVertexInput(VzObsEnum,nodeinputs));
    172185        }
    173186        if (iomodel->weights) {
    174                 for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_node_ids[i]-1];
     187                for(i=0;i<6;i++)nodeinputs[i]=iomodel->weights[penta_vertex_ids[i]-1];
    175188                this->inputs->AddInput(new PentaVertexInput(WeightsEnum,nodeinputs));
    176189        }
     
    178191        /*default vx,vy and vz: either observation or 0 */
    179192        if (!iomodel->vx){
    180                 if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_node_ids[i]-1]/iomodel->yts;
     193                if (iomodel->vx_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vx_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    181194                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    182195                this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
     
    184197        }
    185198        if (!iomodel->vy){
    186                 if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_node_ids[i]-1]/iomodel->yts;
     199                if (iomodel->vy_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vy_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    187200                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    188201                this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
     
    190203        }
    191204        if (!iomodel->vz){
    192                 if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_node_ids[i]-1]/iomodel->yts;
     205                if (iomodel->vz_obs) for(i=0;i<6;i++)nodeinputs[i]=iomodel->vz_obs[penta_vertex_ids[i]-1]/iomodel->yts;
    193206                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    194207                this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
  • issm/trunk/src/c/objects/Elements/Sing.cpp

    r4004 r4011  
    2323        this->parameters=NULL;
    2424        return;
    25 }
    26 /*}}}*/
    27 /*FUNCTION Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Hook* sing_hnumpar, Inputs* sing_inputs) {{{1*/
    28 Sing::Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs):
    29         hnodes(sing_hnodes),
    30         hmatice(sing_hmatice),
    31         hmatpar(sing_hmatpar)
    32 {
    33 
    34         /*all the initialization has been done by the initializer, just fill in the id: */
    35         this->id=sing_id;
    36         if(sing_inputs){
    37                 this->inputs=(Inputs*)sing_inputs->Copy();
    38         }
    39         else{
    40                 this->inputs=new Inputs();
    41         }
    42         /*point parameters: */
    43         this->parameters=sing_parameters;
    44 }
    45 /*}}}*/
    46 /*FUNCTION Sing::Sing(int sing_id, int i, IoModel* iomodel) {{{1*/
    47 Sing::Sing(int sing_id, int i, IoModel* iomodel){
    48 
    49         int sing_matice_id;
    50         int sing_matpar_id;
    51        
    52         int sing_g;
    53         double sing_h;
    54         double sing_k;
    55 
    56         /*id: */
    57         this->id=sing_id;
    58 
    59         /*hooks: */
    60         sing_matice_id=i+1;                        //refers to the corresponding material property card
    61         sing_matpar_id=iomodel->numberofvertices+1;//refers to the corresponding matpar property card
    62         sing_g=i+1;
    63 
    64         this->hnodes.Init(&sing_g,1);
    65         this->hmatice.Init(&sing_matice_id,1);
    66         this->hmatpar.Init(&sing_matpar_id,1);
    67 
    68         //intialize inputs, and add as many inputs per element as requested:
    69         this->inputs=new Inputs();
    70 
    71         if (iomodel->thickness) this->inputs->AddInput(new SingVertexInput(ThicknessEnum,iomodel->thickness[i]));
    72         if (iomodel->drag_coefficient) this->inputs->AddInput(new SingVertexInput(DragCoefficientEnum,iomodel->drag_coefficient[i]));
    73         if (iomodel->vx) this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx[i]));
    74         if (iomodel->vy) this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy[i]));
    75         if (iomodel->vz) this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz[i]));
    76         if (iomodel->vx_obs) this->inputs->AddInput(new SingVertexInput(VxObsEnum,iomodel->vx_obs[i]));
    77         if (iomodel->vy_obs) this->inputs->AddInput(new SingVertexInput(VyObsEnum,iomodel->vy_obs[i]));
    78         if (iomodel->vz_obs) this->inputs->AddInput(new SingVertexInput(VzObsEnum,iomodel->vz_obs[i]));
    79         if (iomodel->weights) this->inputs->AddInput(new SingVertexInput(WeightsEnum,iomodel->weights[i]));
    80         if (!iomodel->vx && iomodel->vx_obs){
    81                 this->inputs->AddInput(new SingVertexInput(VxEnum,iomodel->vx_obs[i]));
    82                 this->inputs->AddInput(new SingVertexInput(VxOldEnum,iomodel->vx_obs[i]));
    83         }
    84         if (!iomodel->vy && iomodel->vy_obs){
    85                 this->inputs->AddInput(new SingVertexInput(VyEnum,iomodel->vy_obs[i]));
    86                 this->inputs->AddInput(new SingVertexInput(VyOldEnum,iomodel->vy_obs[i]));
    87         }
    88         if (!iomodel->vz && iomodel->vz_obs){
    89                 this->inputs->AddInput(new SingVertexInput(VzEnum,iomodel->vz_obs[i]));
    90                 this->inputs->AddInput(new SingVertexInput(VzOldEnum,iomodel->vz_obs[i]));
    91         }
    92 
    93         //this->parameters: we still can't point to it, it may not even exist. Configure will handle this.
    94         this->parameters=NULL;
    95 
    9625}
    9726/*}}}*/
  • issm/trunk/src/c/objects/Elements/Sing.h

    r4004 r4011  
    3636                /*constructors, destructors: {{{1*/
    3737                Sing();
    38                 Sing(int sing_id,Hook* sing_hnodes, Hook* sing_hmatice, Hook* sing_hmatpar, Parameters* sing_parameters,Inputs* sing_inputs);
    39                 Sing(int sing_id, int i, IoModel* iomodel);
    4038                ~Sing();
    4139                /*}}}*/
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r4003 r4011  
    6868Tria::Update(IoModel* iomodel,int analysis_counter,int analysis_type){ //i is the element index
    6969
     70        /*Intermediaries*/
    7071        int    i;
    7172        int    tria_node_ids[3];
     73        int    tria_vertex_ids[3];
    7274        double nodeinputs[3];
    7375
    74         /*hooks: */
    75         //go recover node ids, needed to initialize the node hook.
     76        /*Checks if debuging*/
     77        /*{{{2*/
     78        ISSMASSERT(iomodel->elements);
     79        /*}}}*/
     80
     81        /*Recover vertices ids needed to initialize inputs*/
     82        for(i=0;i<3;i++){
     83                tria_vertex_ids[i]=(int)iomodel->elements[3*index+i]; //ids for vertices are in the elements array from Matlab
     84        }
     85
     86        /*Recover nodes ids needed to initialize the node hook.*/
    7687        if (iomodel->analysis_type==Prognostic2AnalysisEnum || iomodel->analysis_type==Balancedthickness2AnalysisEnum){
    7788                /*Discontinuous Galerkin*/
    78                 tria_node_ids[0]=3*index+1;
    79                 tria_node_ids[1]=3*index+2;
    80                 tria_node_ids[2]=3*index+3;
     89                tria_node_ids[0]=iomodel->nodecounter+3*index+1;
     90                tria_node_ids[1]=iomodel->nodecounter+3*index+2;
     91                tria_node_ids[2]=iomodel->nodecounter+3*index+3;
    8192        }
    8293        else{
    8394                /*Continuous Galerkin*/
    84                 ISSMASSERT(iomodel->elements);
    8595                for(i=0;i<3;i++){
    86                         tria_node_ids[i]=(int)*(iomodel->elements+3*index+i); //ids for vertices are in the elements array from Matlab
     96                        tria_node_ids[i]=iomodel->nodecounter+(int)*(iomodel->elements+3*index+i); //ids for vertices are in the elements array from Matlab
    8797                }
    8898        }
    89        
     99
     100        /*hooks: */
    90101        this->SetHookNodes(tria_node_ids,analysis_counter); this->nodes=NULL; //set hook to nodes, for this analysis type
    91 
    92         //intialize inputs, and add as many inputs per element as requested:
     102       
     103        /*intialize inputs, and add as many inputs per element as requested:*/
    93104        this->inputs=new Inputs();
    94105       
    95106        if (iomodel->thickness) {
    96                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness[tria_node_ids[i]-1];
     107                for(i=0;i<3;i++)nodeinputs[i]=iomodel->thickness[tria_vertex_ids[i]-1];
    97108                this->inputs->AddInput(new TriaVertexInput(ThicknessEnum,nodeinputs));
    98109        }
    99110        if (iomodel->surface) {
    100                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface[tria_node_ids[i]-1];
     111                for(i=0;i<3;i++)nodeinputs[i]=iomodel->surface[tria_vertex_ids[i]-1];
    101112                this->inputs->AddInput(new TriaVertexInput(SurfaceEnum,nodeinputs));
    102113        }
    103114        if (iomodel->bed) {
    104                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->bed[tria_node_ids[i]-1];
     115                for(i=0;i<3;i++)nodeinputs[i]=iomodel->bed[tria_vertex_ids[i]-1];
    105116                this->inputs->AddInput(new TriaVertexInput(BedEnum,nodeinputs));
    106117        }
    107118        if (iomodel->drag_coefficient) {
    108                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_node_ids[i]-1];
     119                for(i=0;i<3;i++)nodeinputs[i]=iomodel->drag_coefficient[tria_vertex_ids[i]-1];
    109120                this->inputs->AddInput(new TriaVertexInput(DragCoefficientEnum,nodeinputs));
    110121
     
    114125        }
    115126        if (iomodel->melting_rate) {
    116                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_node_ids[i]-1]/iomodel->yts;
     127                for(i=0;i<3;i++)nodeinputs[i]=iomodel->melting_rate[tria_vertex_ids[i]-1]/iomodel->yts;
    117128                this->inputs->AddInput(new TriaVertexInput(MeltingRateEnum,nodeinputs));
    118129        }
    119130        if (iomodel->accumulation_rate) {
    120                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_node_ids[i]-1]/iomodel->yts;
     131                for(i=0;i<3;i++)nodeinputs[i]=iomodel->accumulation_rate[tria_vertex_ids[i]-1]/iomodel->yts;
    121132                this->inputs->AddInput(new TriaVertexInput(AccumulationRateEnum,nodeinputs));
    122133        }
    123134        if (iomodel->geothermalflux) {
    124                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_node_ids[i]-1];
     135                for(i=0;i<3;i++)nodeinputs[i]=iomodel->geothermalflux[tria_vertex_ids[i]-1];
    125136                this->inputs->AddInput(new TriaVertexInput(GeothermalFluxEnum,nodeinputs));
    126137        }
    127138        if (iomodel->dhdt) {
    128                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_node_ids[i]-1];
     139                for(i=0;i<3;i++)nodeinputs[i]=iomodel->dhdt[tria_vertex_ids[i]-1];
    129140                this->inputs->AddInput(new TriaVertexInput(DhDtEnum,nodeinputs));
    130141        }
    131142        if (iomodel->pressure) {
    132                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->pressure[tria_node_ids[i]-1];
     143                for(i=0;i<3;i++)nodeinputs[i]=iomodel->pressure[tria_vertex_ids[i]-1];
    133144                this->inputs->AddInput(new TriaVertexInput(PressureEnum,nodeinputs));
    134145        }
    135146        if (iomodel->temperature) {
    136                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->temperature[tria_node_ids[i]-1];
     147                for(i=0;i<3;i++)nodeinputs[i]=iomodel->temperature[tria_vertex_ids[i]-1];
    137148                this->inputs->AddInput(new TriaVertexInput(TemperatureEnum,nodeinputs));
    138149        }
    139150        /*vx,vy and vz: */
    140151        if (iomodel->vx) {
    141                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_node_ids[i]-1]/iomodel->yts;
     152                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx[tria_vertex_ids[i]-1]/iomodel->yts;
    142153                this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
    143154                this->inputs->AddInput(new TriaVertexInput(VxOldEnum,nodeinputs));
    144155        }
    145156        if (iomodel->vy) {
    146                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_node_ids[i]-1]/iomodel->yts;
     157                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy[tria_vertex_ids[i]-1]/iomodel->yts;
    147158                this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
    148159                this->inputs->AddInput(new TriaVertexInput(VyOldEnum,nodeinputs));
    149160        }
    150161        if (iomodel->vz) {
    151                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_node_ids[i]-1]/iomodel->yts;
     162                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz[tria_vertex_ids[i]-1]/iomodel->yts;
    152163                this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
    153164                this->inputs->AddInput(new TriaVertexInput(VzOldEnum,nodeinputs));
    154165        }
    155166        if (iomodel->vx_obs) {
    156                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_node_ids[i]-1]/iomodel->yts;
     167                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    157168                this->inputs->AddInput(new TriaVertexInput(VxObsEnum,nodeinputs));
    158169        }
    159170        if (iomodel->vy_obs) {
    160                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_node_ids[i]-1]/iomodel->yts;
     171                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    161172                this->inputs->AddInput(new TriaVertexInput(VyObsEnum,nodeinputs));
    162173        }
    163174        if (iomodel->vz_obs) {
    164                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_node_ids[i]-1]/iomodel->yts;
     175                for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    165176                this->inputs->AddInput(new TriaVertexInput(VzObsEnum,nodeinputs));
    166177        }
    167178        if (iomodel->weights) {
    168                 for(i=0;i<3;i++)nodeinputs[i]=iomodel->weights[tria_node_ids[i]-1];
     179                for(i=0;i<3;i++)nodeinputs[i]=iomodel->weights[tria_vertex_ids[i]-1];
    169180                this->inputs->AddInput(new TriaVertexInput(WeightsEnum,nodeinputs));
    170181        }
     
    172183        /*default vx,vy and vz: either observation or 0 */
    173184        if(!iomodel->vx){
    174                 if (iomodel->vx_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_node_ids[i]-1]/iomodel->yts;
     185                if (iomodel->vx_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vx_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    175186                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    176187                this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
     
    178189        }
    179190        if(!iomodel->vy){
    180                 if (iomodel->vy_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_node_ids[i]-1]/iomodel->yts;
     191                if (iomodel->vy_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vy_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    181192                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    182193                this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
     
    184195        }
    185196        if(!iomodel->vz){
    186                 if (iomodel->vz_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_node_ids[i]-1]/iomodel->yts;
     197                if (iomodel->vz_obs) for(i=0;i<3;i++)nodeinputs[i]=iomodel->vz_obs[tria_vertex_ids[i]-1]/iomodel->yts;
    187198                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    188199                this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
Note: See TracChangeset for help on using the changeset viewer.