Changeset 15737


Ignore:
Timestamp:
08/07/13 10:02:53 (12 years ago)
Author:
Mathieu Morlighem
Message:

CHG: for higher order elements, SpawTria must provide more than three indices. For now, we only provide a location integer (0=base, 1=surface). Also removed Results->SpawnTriaResults as this function should never be used

Location:
issm/trunk-jpl/src/c/classes
Files:
34 edited

Legend:

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

    r15128 r15737  
    7575}
    7676/*}}}*/
    77 /*FUNCTION BoolElementResult::SpawnTriaElementResult{{{*/
    78 ElementResult* BoolElementResult::SpawnTriaElementResult(int* indices){
    79 
    80         /*output*/
    81         BoolElementResult* outresult=new BoolElementResult();
    82 
    83         /*copy fields: */
    84         outresult->enum_type=this->enum_type;
    85         outresult->value=this->value;
    86         outresult->time=this->time;
    87         outresult->step=this->step;
    88 
    89         /*Assign output*/
    90         return outresult;
    91 
    92 }
    93 /*}}}*/
    9477/*FUNCTION BoolElementResult::NumberOfNodalValues{{{*/
    9578int BoolElementResult::NumberOfNodalValues(void){
  • issm/trunk-jpl/src/c/classes/ElementResults/BoolElementResult.h

    r15128 r15737  
    3434                /*}}}*/
    3535                /*ElementResult virtual functions definitions: {{{*/
    36                 ElementResult* SpawnTriaElementResult(int* indices);
    3736                IssmDouble  GetTime(void){return time;};
    3837                int     GetStep(void){return step;};
  • issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.cpp

    r15128 r15737  
    7575}
    7676/*}}}*/
    77 /*FUNCTION DoubleElementResult::SpawnTriaElementResult{{{*/
    78 ElementResult* DoubleElementResult::SpawnTriaElementResult(int* indices){
    79 
    80         /*output*/
    81         DoubleElementResult* outresult=new DoubleElementResult();
    82 
    83         /*copy fields: */
    84         outresult->enum_type=this->enum_type;
    85         outresult->value=this->value;
    86         outresult->time=this->time;
    87         outresult->step=this->step;
    88 
    89         /*Assign output*/
    90         return outresult;
    91 
    92 }
    93 /*}}}*/
    9477/*FUNCTION DoubleElementResult::NumberOfNodalValues{{{*/
    9578int DoubleElementResult::NumberOfNodalValues(void){
  • issm/trunk-jpl/src/c/classes/ElementResults/DoubleElementResult.h

    r15128 r15737  
    1414
    1515        private:
    16                 int    enum_type;
     16                int        enum_type;
    1717                IssmDouble value;
    18                 int    step;
     18                int        step;
    1919                IssmDouble time;
    2020
    2121        public:
    2222
    23                 /*DoubleElementResult constructors, destructors: {{{*/
     23                /*DoubleElementResult constructors, destructors:*/
    2424                DoubleElementResult();
    2525                DoubleElementResult(int enum_type,IssmDouble value,int step,IssmDouble time);
    2626                ~DoubleElementResult();
    27                 /*}}}*/
    28                 /*Object virtual functions definitions:{{{ */
    29                 void  Echo();
    30                 void  DeepEcho();
    31                 int   Id();
    32                 int   ObjectEnum();
     27
     28                /*Object virtual functions definitions:*/
     29                void    Echo();
     30                void    DeepEcho();
     31                int     Id();
     32                int     ObjectEnum();
    3333                Object* copy();
    34                 /*}}}*/
     34
    3535                /*ElementResult virtual functions definitions: {{{*/
    36                 ElementResult* SpawnTriaElementResult(int* indices);
    3736                IssmDouble  GetTime(void){return time;};
    3837                int     GetStep(void){return step;};
    3938                int     NumberOfNodalValues(void);
    4039                void    PatchFill(int row, Patch* patch);
    41                 /*}}}*/
    42                 /*DoubleElementResult management: {{{*/
    43                 int   InstanceEnum();
     40
     41                /*DoubleElementResult management*/
     42                int  InstanceEnum();
    4443                void GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdofs);
    4544                void GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof);
    46                 /*}}}*/
    4745};
    4846#endif  /* _DOUBLEELEMENTRESULT_H */
  • issm/trunk-jpl/src/c/classes/ElementResults/ElementResult.h

    r15128 r15737  
    1515        public:
    1616
    17                 virtual        ~ElementResult(){};
    18                 virtual         ElementResult* SpawnTriaElementResult(int* indices)=0;
    19                 virtual IssmDouble  GetTime(void)=0;
    20                 virtual int     GetStep(void)=0;
    21                 virtual int     NumberOfNodalValues(void)=0;
    22                 virtual void    PatchFill(int row, Patch* patch)=0;
    23                 virtual int     InstanceEnum()=0;
    24                 virtual void    GetVectorFromResults(Vector<IssmDouble>* vector,int* doflist,int* connectivitylist,int numdof)=0;
    25                 virtual void    GetElementVectorFromResults(Vector<IssmDouble>* vector,int dof)=0;
     17                virtual ~ElementResult(){};
     18                virtual IssmDouble GetTime(void) = 0;
     19                virtual int        GetStep(void) = 0;
     20                virtual int        NumberOfNodalValues(void) = 0;
     21                virtual void       PatchFill(int row, Patch *patch)=0;
     22                virtual int        InstanceEnum() = 0;
     23                virtual void       GetVectorFromResults(Vector <IssmDouble> *vector,int*doflist,int*connectivitylist,int numdof)=0;
     24                virtual void       GetElementVectorFromResults(Vector <IssmDouble> *vector,int dof)=0;
    2625
    2726};
  • issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.cpp

    r15128 r15737  
    7878}
    7979/*}}}*/
    80 /*FUNCTION PentaP1ElementResult::SpawnTriaElementResult{{{*/
    81 ElementResult* PentaP1ElementResult::SpawnTriaElementResult(int* indices){
    82 
    83         /*output*/
    84         TriaP1ElementResult* outresult=NULL;
    85         IssmDouble newvalues[3];
    86 
    87         /*Loop over the new indices*/
    88         for(int i=0;i<3;i++){
    89 
    90                 /*Check index value*/
    91                 _assert_(indices[i]>=0 && indices[i]<6);
    92 
    93                 /*Assign value to new result*/
    94                 newvalues[i]=this->values[indices[i]];
    95         }
    96 
    97         /*Create new Tria result*/
    98         outresult=new TriaP1ElementResult(this->enum_type,&newvalues[0],this->step,this->time);
    99 
    100         /*Assign output*/
    101         return outresult;
    102 
    103 }
    104 /*}}}*/
    10580/*FUNCTION PentaP1ElementResult::NumberOfNodalValues{{{*/
    10681int PentaP1ElementResult::NumberOfNodalValues(void){
  • issm/trunk-jpl/src/c/classes/ElementResults/PentaP1ElementResult.h

    r15128 r15737  
    3333                /*}}}*/
    3434                /*ElementResult virtual functions definitions: {{{*/
    35                 ElementResult* SpawnTriaElementResult(int* indices);
    3635                IssmDouble  GetTime(void){return time;};
    3736                int     GetStep(void){return step;};
  • issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.cpp

    r15377 r15737  
    7777}
    7878/*}}}*/
    79 /*FUNCTION TriaP1ElementResult::SpawnTriaElementResult{{{*/
    80 ElementResult* TriaP1ElementResult::SpawnTriaElementResult(int* indices){
    81 
    82         /*output*/
    83         TriaP1ElementResult* outresult=NULL;
    84 
    85         /*Create new Tria result (copy of current result)*/
    86         outresult=new TriaP1ElementResult(this->enum_type,&this->values[0],this->step,this->time);
    87 
    88         /*Assign output*/
    89         return outresult;
    90 
    91 }
    92 /*}}}*/
    9379/*FUNCTION TriaP1ElementResult::NumberOfNodalValues{{{*/
    9480int TriaP1ElementResult::NumberOfNodalValues(void){
  • issm/trunk-jpl/src/c/classes/ElementResults/TriaP1ElementResult.h

    r15128 r15737  
    3232                /*}}}*/
    3333                /*ElementResult virtual functions definitions: {{{*/
    34                 ElementResult* SpawnTriaElementResult(int* indices);
    3534                IssmDouble  GetTime(void){return time;};
    3635                int     GetStep(void){return step;};
  • issm/trunk-jpl/src/c/classes/Elements/ElementHook.cpp

    r15450 r15737  
    8989/*}}}*/
    9090/*FUNCTION ElementHook::SpawnTriaHook{{{*/
    91 void ElementHook::SpawnTriaHook(ElementHook* triahook,int* indices){
     91void ElementHook::SpawnTriaHook(ElementHook* triahook,int location){
    9292
    93         int i;
    94         int zero=0;
     93        /*Create arrow of indices depending on location (0=base 1=surface)*/
     94        int indices[3];
     95        switch(location){
     96                case 0:
     97                        indices[0] = 0;
     98                        indices[1] = 1;
     99                        indices[2] = 2;
     100                        break;
     101                case 1:
     102                        indices[0] = 3;
     103                        indices[1] = 4;
     104                        indices[2] = 5;
     105                        break;
     106                default:
     107                        _error_("case "<<location<<" not supported");
     108        }
    95109
    96110        triahook->numanalyses=this->numanalyses;
     111
     112        /*Spawn nodes hook*/
    97113        triahook->hnodes=new Hook*[this->numanalyses];
    98 
    99         for(i=0;i<this->numanalyses;i++){
     114        for(int i=0;i<this->numanalyses;i++){
    100115                /*Do not do anything if Hook is empty*/
    101116                if (!this->hnodes[i] || this->hnodes[i]->GetNum()==0){
     
    103118                }
    104119                else{
    105                         /*Else, spawn Hook*/
    106120                        triahook->hnodes[i]=this->hnodes[i]->Spawn(indices,3);
    107121                }
    108122        }
    109         // do not spawn hmaterial. material will be taken care of by Penta
     123
     124        /*do not spawn hmaterial. material will be taken care of by Penta*/
    110125        triahook->hmaterial=NULL;
    111126        triahook->hvertices=(Hook*)this->hvertices->Spawn(indices,3);
  • issm/trunk-jpl/src/c/classes/Elements/ElementHook.h

    r15372 r15737  
    2525
    2626                void SetHookNodes(int* node_ids,int numnodes,int analysis_counter);
    27                 void SpawnTriaHook(ElementHook* triahook,int* indices);    //3d only
     27                void SpawnTriaHook(ElementHook* triahook,int location); //3d only
    2828                void InitHookNeighbors(int* element_ids);               //3d only
    2929};
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r15730 r15737  
    500500        this->InputDepthAverageAtBase(VyEnum,VyAverageEnum);
    501501
    502         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     502        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    503503        ElementMatrix* Ke=tria->CreateKMatrixPrognostic();
    504504        delete tria->material; delete tria;
     
    517517        if (!IsOnBed()) return NULL;
    518518
    519         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     519        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    520520        ElementMatrix* Ke=tria->CreateMassMatrix();
    521521        delete tria->material; delete tria;
     
    675675
    676676        /*Call Tria function*/
    677         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     677        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    678678        ElementVector* pe=tria->CreatePVectorPrognostic();
    679679        delete tria->material; delete tria;
     
    693693
    694694        /*Call Tria function*/
    695         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     695        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    696696        ElementVector* pe=tria->CreatePVectorSlope();
    697697        delete tria->material; delete tria;
     
    30603060/*}}}*/
    30613061/*FUNCTION Penta::SpawnTria {{{*/
    3062 Tria*  Penta::SpawnTria(int g0, int g1, int g2){
    3063 
    3064         int   analysis_counter;
    3065         int   indices[3];
    3066         int   zero=0;
    3067         Tria*       tria            = NULL;
    3068         Inputs*     tria_inputs     = NULL;
    3069         Results*    tria_results    = NULL;
    3070         Parameters* tria_parameters = NULL;
     3062Tria*  Penta::SpawnTria(int location){
     3063
     3064        int analysis_counter;
    30713065
    30723066        /*go into parameters and get the analysis_counter: */
    30733067        this->parameters->FindParam(&analysis_counter,AnalysisCounterEnum);
    30743068
    3075         indices[0]=g0;
    3076         indices[1]=g1;
    3077         indices[2]=g2;
    3078 
    3079         tria_parameters=this->parameters;
    3080         tria_inputs=(Inputs*)this->inputs->SpawnTriaInputs(indices);
    3081         tria_results=(Results*)this->results->SpawnTriaResults(indices);
    3082 
    3083         tria=new Tria();
     3069        /*Create Tria*/
     3070        Tria* tria=new Tria();
    30843071        tria->id=this->id;
    3085         tria->inputs=tria_inputs;
    3086         tria->results=tria_results;
    3087         tria->parameters=tria_parameters;
     3072        tria->inputs=(Inputs*)this->inputs->SpawnTriaInputs(location);
     3073        tria->parameters=this->parameters;
    30883074        tria->element_type=P1Enum; //Only P1 CG for now (TO BE CHANGED)
    3089         this->SpawnTriaHook(dynamic_cast<ElementHook*>(tria),&indices[0]);
     3075        this->SpawnTriaHook(dynamic_cast<ElementHook*>(tria),location);
    30903076
    30913077        /*Spawn material*/
     
    30933079        tria->material=(Material*)this->material->copy();
    30943080        delete tria->material->inputs;
    3095         tria->material->inputs=(Inputs*)this->material->inputs->SpawnTriaInputs(indices);
     3081        tria->material->inputs=(Inputs*)this->material->inputs->SpawnTriaInputs(location);
    30963082
    30973083        /*recover nodes, material and matpar: */
     
    31003086        tria->matpar=(Matpar*)tria->hmatpar->delivers();
    31013087
     3088        /*Return new Tria*/
    31023089        return tria;
    31033090}
     
    31723159                /*This element should be collapsed into a tria element at its base. Create this tria element,
    31733160                 * and compute SurfaceArea*/
    3174                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     3161                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    31753162                S=tria->SurfaceArea();
    31763163                delete tria->material; delete tria;
     
    31793166        else{
    31803167
    3181                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     3168                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    31823169                S=tria->SurfaceArea();
    31833170                delete tria->material; delete tria;
     
    36683655
    36693656        /*Spawn Tria element from the base of the Penta: */
    3670         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     3657        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    36713658        mass_flux=tria->MassFlux(segment);
    36723659        delete tria->material; delete tria;
     
    40514038        if (!IsOnBed()) return NULL;
    40524039
    4053         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     4040        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    40544041        ElementMatrix* Ke=tria->CreateKMatrixMelting();
    40554042
     
    50925079
    50935080        /*Call Tria function*/
    5094         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     5081        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    50955082        ElementMatrix* Ke=tria->CreateKMatrixAdjointSSA();
    50965083        delete tria->material; delete tria;
     
    52755262
    52765263        /*Call Tria function*/
    5277         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     5264        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    52785265        ElementVector* pe=tria->CreatePVectorAdjointHoriz();
    52795266        delete tria->material; delete tria;
     
    57625749                case DragCoefficientAbsGradientEnum:
    57635750                        if(IsOnBed()){
    5764                                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     5751                                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    57655752                                tria->GradjDragGradient(gradient,resp,control_index);
    57665753                                delete tria->material; delete tria;
     
    57695756                case RheologyBbarAbsGradientEnum:
    57705757                        if(IsOnBed()){
    5771                                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     5758                                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    57725759                                tria->GradjBGradient(gradient,resp,control_index);
    57735760                                delete tria->material; delete tria;
     
    57875774
    57885775        /*Spawn tria*/
    5789         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     5776        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    57905777        tria->GradjDragSSA(gradient,control_index);
    57915778        delete tria->material; delete tria;
     
    59655952
    59665953        /*Collapse element to the base*/
    5967         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     5954        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    59685955        tria->GradjBSSA(gradient,control_index);
    59695956        delete tria->material; delete tria;
     
    59835970
    59845971        /*Collapse element to the base*/
    5985         Tria* tria=(Tria*)SpawnTria(0,1,2);
     5972        Tria* tria=(Tria*)SpawnTria(0);
    59865973        tria->GradjBSSA(gradient,control_index);    //We use SSA as an estimate for now
    59875974        delete tria->material; delete tria;
     
    60005987
    60015988        /*Collapse element to the base*/
    6002         Tria* tria=(Tria*)SpawnTria(0,1,2);
     5989        Tria* tria=(Tria*)SpawnTria(0);
    60035990        tria->GradjBSSA(gradient,control_index);    //We use SSA as an estimate for now
    60045991        delete tria->material; delete tria;
     
    61756162                /*This element should be collapsed into a tria element at its base. Create this tria element,
    61766163                 * and compute SurfaceAverageVelMisfit*/
    6177                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     6164                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    61786165                J=tria->SurfaceAverageVelMisfit(weight_index);
    61796166                delete tria->material; delete tria;
     
    61826169        else{
    61836170
    6184                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     6171                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    61856172                J=tria->SurfaceAverageVelMisfit(weight_index);
    61866173                delete tria->material; delete tria;
     
    62126199                /*This element should be collapsed into a tria element at its base. Create this tria element,
    62136200                 * and compute SurfaceAbsVelMisfit*/
    6214                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     6201                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    62156202                J=tria->SurfaceAbsVelMisfit(weight_index);
    62166203                delete tria->material; delete tria;
     
    62196206        else{
    62206207
    6221                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     6208                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    62226209                J=tria->SurfaceAbsVelMisfit(weight_index);
    62236210                delete tria->material; delete tria;
     
    62496236                /*This element should be collapsed into a tria element at its base. Create this tria element,
    62506237                 * and compute SurfaceLogVelMisfit*/
    6251                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     6238                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    62526239                J=tria->SurfaceLogVelMisfit(weight_index);
    62536240                delete tria->material; delete tria;
     
    62566243        else{
    62576244
    6258                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     6245                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    62596246                J=tria->SurfaceLogVelMisfit(weight_index);
    62606247                delete tria->material; delete tria;
     
    62886275                /*This element should be collapsed into a tria element at its base. Create this tria element,
    62896276                 * and compute SurfaceLogVxVyMisfit*/
    6290                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     6277                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    62916278                J=tria->SurfaceLogVxVyMisfit(weight_index);
    62926279                delete tria->material; delete tria;
     
    62956282        else{
    62966283
    6297                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     6284                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    62986285                J=tria->SurfaceLogVxVyMisfit(weight_index);
    62996286                delete tria->material; delete tria;
     
    63256312                /*This element should be collapsed into a tria element at its base. Create this tria element,
    63266313                 * and compute SurfaceRelVelMisfit*/
    6327                 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria (lower face).
     6314                tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria (lower face).
    63286315                J=tria->SurfaceRelVelMisfit(weight_index);
    63296316                delete tria->material; delete tria;
     
    63326319        else{
    63336320
    6334                 tria=(Tria*)SpawnTria(3,4,5); //nodes 3, 4 and 5 make the new tria (upper face).
     6321                tria=(Tria*)SpawnTria(1); //nodes 3, 4 and 5 make the new tria (upper face).
    63356322                J=tria->SurfaceRelVelMisfit(weight_index);
    63366323                delete tria->material; delete tria;
     
    63596346        _error_("Not implemented yet");
    63606347
    6361         tria=(Tria*)SpawnTria(0,1,2);
     6348        tria=(Tria*)SpawnTria(0);
    63626349        J=tria->ThicknessAbsMisfit(weight_index);
    63636350        delete tria->material; delete tria;
     
    63746361        if(IsOnWater()|| IsFloating() || !IsOnBed()) return 0;
    63756362
    6376         tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria
     6363        tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria
    63776364        J=tria->DragCoefficientAbsGradient(weight_index);
    63786365        delete tria->material; delete tria;
     
    63896376        if(IsOnWater() || !IsOnBed()) return 0;
    63906377
    6391         tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria
     6378        tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria
    63926379        J=tria->RheologyBbarAbsGradient(weight_index);
    63936380        delete tria->material; delete tria;
     
    66936680        /*Find penta on bed as HO must be coupled to the dofs on the bed: */
    66946681        Penta* pentabase=GetBasalElement();
    6695         Tria*  tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     6682        Tria*  tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    66966683
    66976684        /*Prepare node list*/
     
    68906877        /*Find penta on bed as FS must be coupled to the dofs on the bed: */
    68916878        Penta* pentabase=GetBasalElement();
    6892         Tria* tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     6879        Tria* tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    68936880
    68946881        /*Prepare node list*/
     
    72477234
    72487235        /*Call Tria function*/
    7249         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     7236        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    72507237        ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSA();
    72517238        delete tria->material; delete tria;
     
    72987285        /*Find penta on bed as this is a SSA elements: */
    72997286        pentabase=GetBasalElement();
    7300         tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     7287        tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    73017288
    73027289        /*Initialize Element matrix*/
     
    73707357         * the tria functionality to build a friction stiffness matrix on these 3
    73717358         * nodes: */
    7372         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     7359        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    73737360        ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
    73747361        delete tria->material; delete tria;
     
    74467433        /*Find penta on bed as this is a SSA elements: */
    74477434        pentabase=GetBasalElement();
    7448         tria=pentabase->SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     7435        tria=pentabase->SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    74497436
    74507437        /*Initialize Element matrix*/
     
    75017488         * the tria functionality to build a friction stiffness matrix on these 3
    75027489         * nodes: */
    7503         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     7490        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    75047491        ElementMatrix* Ke=tria->CreateKMatrixDiagnosticSSAFriction();
    75057492        delete tria->material; delete tria;
     
    85288515
    85298516        /*Call Tria function*/
    8530         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     8517        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    85318518        ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
    85328519        delete tria->material; delete tria;
     
    85428529
    85438530        /*Call Tria function*/
    8544         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     8531        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    85458532        ElementVector* pe=tria->CreatePVectorDiagnosticSSA();
    85468533        delete tria->material; delete tria;
     
    92279214
    92289215        /*Call Tria function*/
    9229         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     9216        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    92309217        ElementMatrix* Ke=tria->CreateJacobianDiagnosticSSA();
    92319218        delete tria->material; delete tria;
     
    1045910446
    1046010447        /*Spawn Tria element from the base of the Penta: */
    10461         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10448        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1046210449        ElementMatrix* Ke=tria->CreateKMatrixBalancethickness();
    1046310450        delete tria->material; delete tria;
     
    1048110468
    1048210469        /*Call Tria function*/
    10483         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10470        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1048410471        ElementVector* pe=tria->CreatePVectorBalancethickness();
    1048510472        delete tria->material; delete tria;
     
    1050110488        if (!IsOnBed()) return NULL;
    1050210489
    10503         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10490        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1050410491        ElementMatrix* Ke=tria->CreateKMatrixHydrologyDCInefficient();
    1050510492        delete tria->material; delete tria;
     
    1051410501        if (!IsOnBed()) return NULL;
    1051510502
    10516         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10503        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1051710504        ElementMatrix* Ke=tria->CreateKMatrixHydrologyDCEfficient();
    1051810505        delete tria->material; delete tria;
     
    1052810515
    1052910516        /*Call Tria function*/
    10530         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10517        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1053110518        ElementVector* pe=tria->CreatePVectorHydrologyDCInefficient();
    1053210519        delete tria->material; delete tria;
     
    1054210529
    1054310530        /*Call Tria function*/
    10544         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10531        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1054510532        ElementVector* pe=tria->CreatePVectorHydrologyDCEfficient();
    1054610533        delete tria->material; delete tria;
     
    1055510542        if (!IsOnBed()) return;
    1055610543
    10557         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10544        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1055810545        tria->GetHydrologyDCInefficientHmax(ph_max,innode);
    1055910546        delete tria->material; delete tria;
     
    1056510552        if (!IsOnBed()) return;
    1056610553
    10567         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10554        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1056810555        tria->GetHydrologyTransfer(transfer);
    1056910556        delete tria->material; delete tria;
     
    1060610593        if (!IsOnBed())return;
    1060710594
    10608         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10595        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1060910596        tria->HydrologyEPLGetActive(active_vec);
    1061010597        delete tria->material; delete tria;
     
    1061710604        if (!IsOnBed())return;
    1061810605
    10619         Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.
     10606        Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.
    1062010607        tria->HydrologyEPLGetMask(vec_mask);
    1062110608        delete tria->material; delete tria;
     
    1065910646                kappa=kmax*pow(10.,penalty_factor);
    1066010647
    10661                 Tria* tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 make the new tria.       
     10648                Tria* tria=(Tria*)SpawnTria(0); //nodes 0, 1 and 2 make the new tria.   
    1066210649                for(int i=0;i<NUMVERTICES2D;i++){
    1066310650                        tria->GetHydrologyDCInefficientHmax(&h_max,nodes[i]);
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r15695 r15737  
    224224                void      ReduceVectorFS(IssmDouble* Pe_reduced, IssmDouble* Ke_temp, IssmDouble* Pe_temp);
    225225                void      SetClone(int* minranks);
    226                 Tria*     SpawnTria(int g0, int g1, int g2);
     226                Tria*     SpawnTria(int location);
    227227                void      SurfaceNormal(IssmDouble* surface_normal, IssmDouble xyz_list[3][3]);
    228228                void     UpdateConstraints(void);
  • issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp

    r15012 r15737  
    3434
    3535/*Object management*/
    36 /*FUNCTION Results::SpawnTriaResults{{{*/
    37 Results* Results::SpawnTriaResults(int* indices){
    38 
    39         /*Intermediary*/
    40         vector<Object*>::iterator object;
    41         ElementResult* resultin=NULL;
    42         ElementResult* resultout=NULL;
    43 
    44         /*Output*/
    45         Results* newresults=new Results();
    46 
    47         /*Go through results and call Spawn function*/
    48         for ( object=objects.begin() ; object < objects.end(); object++ ){
    49 
    50                 /*Create new result*/
    51                 resultin=(ElementResult*)(*object);
    52                 resultout=resultin->SpawnTriaElementResult(indices);
    53 
    54                 /*Add result to new results*/
    55                 newresults->AddObject((Object*)resultout);
    56         }
    57 
    58         /*Assign output pointer*/
    59         return newresults;
    60 }
    61 /*}}}*/
    6236/*FUNCTION Results::Write{{{*/
    6337void Results::Write(Parameters* parameters){
  • issm/trunk-jpl/src/c/classes/ExternalResults/Results.h

    r15067 r15737  
    11#ifndef _CONTAINER_RESULTS_H_
    2 #define  _CONTAINER_RESULTS_H_
     2#define _CONTAINER_RESULTS_H_
    33
    44#include "../../datastructures/datastructures.h"
     
    2020
    2121                /*numerics*/
    22                 Results* SpawnTriaResults(int* indices);
    23                 void     Write(Parameters* parameters);
     22                void Write(Parameters* parameters);
    2423};
    2524#endif //ifndef _RESULTS_H_
  • issm/trunk-jpl/src/c/classes/Inputs/BoolInput.cpp

    r15130 r15737  
    7272/*}}}*/
    7373/*FUNCTION BoolInput::SpawnTriaInput{{{*/
    74 Input* BoolInput::SpawnTriaInput(int* indices){
     74Input* BoolInput::SpawnTriaInput(int location){
    7575
    7676                /*output*/
  • issm/trunk-jpl/src/c/classes/Inputs/BoolInput.h

    r15564 r15737  
    3434                /*BoolInput management: {{{*/
    3535                int   InstanceEnum();
    36                 Input* SpawnTriaInput(int* indices);
     36                Input* SpawnTriaInput(int location);
    3737                Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
    3838                Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.cpp

    r15417 r15737  
    183183}/*}}}*/
    184184/*FUNCTION ControlInput::SpawnTriaInput{{{*/
    185 Input* ControlInput::SpawnTriaInput(int* indices){
    186         return values->SpawnTriaInput(indices);
     185Input* ControlInput::SpawnTriaInput(int location){
     186        return values->SpawnTriaInput(location);
    187187}/*}}}*/
    188188/*FUNCTION ControlInput::SpawnGradient{{{*/
  • issm/trunk-jpl/src/c/classes/Inputs/ControlInput.h

    r15564 r15737  
    3838                /*ControlInput management: {{{*/
    3939                int    InstanceEnum();
    40                 Input* SpawnTriaInput(int* indices);
     40                Input* SpawnTriaInput(int location);
    4141                Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
    4242                Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.cpp

    r15654 r15737  
    7070/*}}}*/
    7171/*FUNCTION DatasetInput::SpawnTriaInput{{{*/
    72 Input* DatasetInput::SpawnTriaInput(int* indices){
     72Input* DatasetInput::SpawnTriaInput(int location){
    7373
    7474        /*output*/
     
    7878        outinput=new DatasetInput();
    7979        outinput->enum_type=this->enum_type;
    80         outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(indices));
     80        outinput->inputs=dynamic_cast<Inputs*>(this->inputs->SpawnTriaInputs(location));
    8181
    8282        /*Assign output*/
  • issm/trunk-jpl/src/c/classes/Inputs/DatasetInput.h

    r15654 r15737  
    3333                /*DatasetInput management: {{{*/
    3434                int    InstanceEnum();
    35                 Input* SpawnTriaInput(int* indices);
     35                Input* SpawnTriaInput(int location);
    3636                Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
    3737                Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.cpp

    r15564 r15737  
    7272/*}}}*/
    7373/*FUNCTION DoubleInput::SpawnTriaInput{{{*/
    74 Input* DoubleInput::SpawnTriaInput(int* indices){
     74Input* DoubleInput::SpawnTriaInput(int location){
    7575
    7676        /*output*/
  • issm/trunk-jpl/src/c/classes/Inputs/DoubleInput.h

    r15564 r15737  
    3333                /*DoubleInput management: {{{*/
    3434                int   InstanceEnum();
    35                 Input* SpawnTriaInput(int* indices);
     35                Input* SpawnTriaInput(int location);
    3636                Input* PointwiseDivide(Input* inputB);
    3737                Input* PointwiseMin(Input* inputB);
  • issm/trunk-jpl/src/c/classes/Inputs/Input.h

    r15564 r15737  
    6464                virtual void   GetVectorFromInputs(Vector<IssmDouble>* vector,int* doflist)=0;
    6565
    66                 virtual Input* SpawnTriaInput(int* indices)=0;
     66                virtual Input* SpawnTriaInput(int location)=0;
    6767                virtual Input* PointwiseDivide(Input* inputB)=0;
    6868                virtual Input* PointwiseMax(Input* inputmax)=0;
  • issm/trunk-jpl/src/c/classes/Inputs/Inputs.cpp

    r15082 r15737  
    370370/*}}}*/
    371371/*FUNCTION Inputs::SpawnTriaInputs{{{*/
    372 Inputs* Inputs::SpawnTriaInputs(int* indices){
     372Inputs* Inputs::SpawnTriaInputs(int location){
    373373
    374374        /*Intermediary*/
     
    385385                /*Create new input*/
    386386                inputin=dynamic_cast<Input*>(*object);
    387                 inputout=inputin->SpawnTriaInput(indices);
     387                inputout=inputin->SpawnTriaInput(location);
    388388
    389389                /*Add input to new inputs*/
  • issm/trunk-jpl/src/c/classes/Inputs/Inputs.h

    r15082 r15737  
    2828                void       DuplicateInput(int original_enum,int new_enum);
    2929                Input*     GetInput(int enum_name);
    30                 Inputs*    SpawnTriaInputs(int* indices);
     30                Inputs*    SpawnTriaInputs(int position);
    3131                void       AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
    3232                IssmDouble  InfinityNorm(int enumtype);
  • issm/trunk-jpl/src/c/classes/Inputs/IntInput.cpp

    r15130 r15737  
    7272/*}}}*/
    7373/*FUNCTION IntInput::SpawnTriaInput{{{*/
    74 Input* IntInput::SpawnTriaInput(int* indices){
     74Input* IntInput::SpawnTriaInput(int location){
    7575
    7676        /*output*/
  • issm/trunk-jpl/src/c/classes/Inputs/IntInput.h

    r15564 r15737  
    3434                /*IntInput management: {{{*/
    3535                int   InstanceEnum();
    36                 Input* SpawnTriaInput(int* indices);
     36                Input* SpawnTriaInput(int location);
    3737                Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
    3838                Input* PointwiseMin(Input* inputB){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/PentaInput.cpp

    r15654 r15737  
    8484/*}}}*/
    8585/*FUNCTION PentaInput::SpawnTriaInput{{{*/
    86 Input* PentaInput::SpawnTriaInput(int* indices){
     86Input* PentaInput::SpawnTriaInput(int location){
    8787
    8888        /*output*/
     
    9090        IssmDouble newvalues[3]; //Assume P1 interpolation only for now
    9191
     92        /*Create arrow of indices depending on location (0=base 1=surface)*/
     93        int indices[3];
     94        switch(location){
     95                case 0:
     96                        indices[0] = 0;
     97                        indices[1] = 1;
     98                        indices[2] = 2;
     99                        break;
     100                case 1:
     101                        indices[0] = 3;
     102                        indices[1] = 4;
     103                        indices[2] = 5;
     104                        break;
     105                default:
     106                        _error_("case "<<location<<" not supported");
     107        }
     108
    92109        /*Loop over the new indices*/
    93110        for(int i=0;i<3;i++){
     
    105122        /*Assign output*/
    106123        return outinput;
    107 
    108124}
    109125/*}}}*/
  • issm/trunk-jpl/src/c/classes/Inputs/PentaInput.h

    r15564 r15737  
    3434                /*PentaInput management*/
    3535                int   InstanceEnum();
    36                 Input* SpawnTriaInput(int* indices);
     36                Input* SpawnTriaInput(int location);
    3737                Input* PointwiseDivide(Input* inputB);
    3838                Input* PointwiseMin(Input* inputB);
  • issm/trunk-jpl/src/c/classes/Inputs/TransientInput.cpp

    r15216 r15737  
    108108/*}}}*/
    109109/*FUNCTION TransientInput::SpawnTriaInput{{{*/
    110 Input* TransientInput::SpawnTriaInput(int* indices){
     110Input* TransientInput::SpawnTriaInput(int location){
    111111
    112112        /*output*/
     
    119119        outinput->timesteps=xNew<IssmDouble>(this->numtimesteps);
    120120        xMemCpy(outinput->timesteps,this->timesteps,this->numtimesteps);
    121         outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(indices);
     121        outinput->inputs=(Inputs*)this->inputs->SpawnTriaInputs(location);
    122122        outinput->parameters=this->parameters;
    123123
  • issm/trunk-jpl/src/c/classes/Inputs/TransientInput.h

    r15564 r15737  
    3838                /*TransientInput management: {{{*/
    3939                int    InstanceEnum();
    40                 Input* SpawnTriaInput(int* indices);
     40                Input* SpawnTriaInput(int location);
    4141                Input* PointwiseDivide(Input* forcingB){_error_("not implemented yet");};
    4242                Input* PointwiseMin(Input* forcingB){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Inputs/TriaInput.cpp

    r15567 r15737  
    8484/*}}}*/
    8585/*FUNCTION TriaInput::SpawnTriaInput{{{*/
    86 Input* TriaInput::SpawnTriaInput(int* indices){
     86Input* TriaInput::SpawnTriaInput(int location){
    8787
    8888        /*output*/
  • issm/trunk-jpl/src/c/classes/Inputs/TriaInput.h

    r15564 r15737  
    3434                /*TriaInput management:*/
    3535                int    InstanceEnum();
    36                 Input* SpawnTriaInput(int* indices);
     36                Input* SpawnTriaInput(int location);
    3737                Input* PointwiseDivide(Input* inputB){_error_("not implemented yet");};
    3838                Input* PointwiseMin(Input* inputB);
Note: See TracChangeset for help on using the changeset viewer.