Changeset 3791


Ignore:
Timestamp:
05/17/10 17:02:57 (15 years ago)
Author:
Eric.Larour
Message:

New modules to extrude and depth average inputs + new TriaHook, sleeker interface to Tria

Location:
issm/trunk/src/c
Files:
8 added
8 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/Makefile.am

    r3775 r3791  
    6666                                        ./objects/Elements/Tria.h\
    6767                                        ./objects/Elements/Tria.cpp\
     68                                        ./objects/Elements/TriaHook.h\
     69                                        ./objects/Elements/TriaHook.cpp\
    6870                                        ./objects/Inputs/Input.h\
    6971                                        ./objects/Inputs/TriaVertexInput.h\
     
    377379                                        ./FieldDepthAveragex/FieldDepthAveragex.cpp\
    378380                                        ./FieldDepthAveragex/FieldDepthAveragex.h\
     381                                        ./DepthAverageInputx/DepthAverageInputx.cpp\
     382                                        ./DepthAverageInputx/DepthAverageInputx.h\
    379383                                        ./FieldExtrudex/FieldExtrudex.cpp\
    380384                                        ./FieldExtrudex/FieldExtrudex.h\
     385                                        ./ExtrudeInputx/ExtrudeInputx.cpp\
     386                                        ./ExtrudeInputx/ExtrudeInputx.h\
    381387                                        ./OutputRiftsx/OutputRiftsx.h\
    382388                                        ./OutputRiftsx/OutputRiftsx.cpp\
     
    499505                                        ./objects/Elements/Tria.h\
    500506                                        ./objects/Elements/Tria.cpp\
     507                                        ./objects/Elements/TriaHook.h\
     508                                        ./objects/Elements/TriaHook.cpp\
    501509                                        ./objects/Inputs/Input.h\
    502510                                        ./objects/Inputs/TriaVertexInput.h\
     
    800808                                        ./FieldDepthAveragex/FieldDepthAveragex.cpp\
    801809                                        ./FieldDepthAveragex/FieldDepthAveragex.h\
     810                                        ./DepthAverageInputx/DepthAverageInputx.cpp\
     811                                        ./DepthAverageInputx/DepthAverageInputx.h\
    802812                                        ./FieldExtrudex/FieldExtrudex.cpp\
    803813                                        ./FieldExtrudex/FieldExtrudex.h\
     814                                        ./ExtrudeInputx/ExtrudeInputx.cpp\
     815                                        ./ExtrudeInputx/ExtrudeInputx.h\
    804816                                        ./OutputRiftsx/OutputRiftsx.h\
    805817                                        ./OutputRiftsx/OutputRiftsx.cpp\
  • issm/trunk/src/c/modules.h

    r3773 r3791  
    5959#include "./BamgConvertMeshx/BamgConvertMeshx.h"
    6060#include "./SplitSolutionVectorx/SplitSolutionVectorx.h"
     61#include "./DepthAverageInputx/DepthAverageInputx.h"
     62#include "./ExtrudeInputx/ExtrudeInputx.h"
    6163#endif
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r3784 r3791  
    352352        tria_parameters=this->parameters;
    353353        tria_inputs=(Inputs*)this->inputs->Spawn(indices,3);
    354 
    355         tria=new Tria(this->id,tria_hnodes,tria_hmatice,tria_hmatpar,tria_parameters,tria_inputs);
     354       
     355        tria=new Tria();
     356        tria->id=this->id;
     357        tria->inputs=tria_inputs;
     358        tria->parameters=tria_parameters;
     359
     360        /*now deal with hooks and objects: */
     361        tria->hnodes.copy(tria_hnodes);
     362        tria->hmatice.copy(tria_hmatice);
     363        tria->hmatpar.copy(tria_hmatpar);
     364
     365        /*recover objects: */
     366        tria->nodes=(Node**)tria->hnodes.deliverp();
     367        tria->matice=(Matice*)tria->hmatice.delivers();
     368        tria->matpar=(Matpar*)tria->hmatpar.delivers();
    356369
    357370        delete tria_hnodes;
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r3784 r3791  
    2323/*FUNCTION Tria::Tria(){{{1*/
    2424Tria::Tria(){
     25        this->nodes=NULL;
     26        this->matice=NULL;
     27        this->matpar=NULL;
    2528        this->inputs=NULL;
    2629        this->parameters=NULL;
    2730}
    2831/*}}}*/
    29 /*FUNCTION Tria::Tria(int id, Hook* hnodes, Hook* hmatice, Hook* hmatpar, Parameters* parameters, Inputs* tria_inputs) {{{1*/
    30 Tria::Tria(int tria_id,Hook* tria_hnodes, Hook* tria_hmatice, Hook* tria_hmatpar, Parameters* tria_parameters, Inputs* tria_inputs):
    31         hnodes(tria_hnodes),
    32         hmatice(tria_hmatice),
    33         hmatpar(tria_hmatpar)
    34 {
    35 
    36         /*all the initialization has been done by the initializer, just fill in the id: */
    37         this->id=tria_id;
    38         if(tria_inputs){
    39                 this->inputs=(Inputs*)tria_inputs->Copy();
    40         }
    41         else{
    42                 this->inputs=new Inputs();
    43         }
    44         /*point parameters: */
    45         this->parameters=tria_parameters;
     32/*FUNCTION Tria::~Tria(){{{1*/
     33Tria::~Tria(){
     34        delete inputs;
     35        this->parameters=NULL;
    4636}
    4737/*}}}*/
     
    7666        tria_matpar_id=iomodel->numberofelements+1; //refers to the constant material parameters object
    7767
    78         this->hnodes.Init(tria_node_ids,3);
    79         this->hmatice.Init(&tria_matice_id,1);
    80         this->hmatpar.Init(&tria_matpar_id,1);
     68        this->InitHookNodes(tria_node_ids);
     69        this->InitHookMatice(tria_matice_id);
     70        this->InitHookMatpar(tria_matpar_id);
    8171
    8272        //intialize inputs, and add as many inputs per element as requested:
     
    187177}
    188178/*}}}*/
    189 /*FUNCTION Tria::~Tria(){{{1*/
    190 Tria::~Tria(){
    191         delete inputs;
    192         this->parameters=NULL;
     179/*FUNCTION Tria::copy {{{1*/
     180Object* Tria::copy() {
     181
     182        Tria* tria=NULL;
     183
     184        tria=new Tria();
     185
     186        /*copy fields: */
     187        tria->id=this->id;
     188        if(this->inputs){
     189                tria->inputs=(Inputs*)this->inputs->Copy();
     190        }
     191        else{
     192                tria->inputs=new Inputs();
     193        }
     194        /*point parameters: */
     195        tria->parameters=this->parameters;
     196
     197        /*now deal with hooks and objects: */
     198        tria->hnodes.copy(&this->hnodes);
     199        tria->hmatice.copy(&this->hmatice);
     200        tria->hmatpar.copy(&this->hmatpar);
     201
     202        /*recover objects: */
     203        tria->nodes=(Node**)tria->hnodes.deliverp();
     204        tria->matice=(Matice*)tria->hmatice.delivers();
     205        tria->matpar=(Matpar*)tria->hmatpar.delivers();
     206
     207        return tria;
    193208}
    194209/*}}}*/
     
    200215        /*Take care of hooking up all objects for this element, ie links the objects in the hooks to their respective
    201216         * datasets, using internal ids and offsets hidden in hooks: */
    202         hnodes.configure(nodesin);
    203         hmatice.configure(materialsin);
    204         hmatpar.configure(materialsin);
     217        this->hnodes.configure(nodesin);
     218        this->hmatice.configure(materialsin);
     219        this->hmatpar.configure(materialsin);
     220
     221        /*Now, go pick up the objects inside the hooks: */
     222        this->nodes=(Node**)this->hnodes.deliverp();
     223        this->matice=(Matice*)this->hmatice.delivers();
     224        this->matpar=(Matpar*)this->hmatpar.delivers();
    205225
    206226        /*point parameters to real dataset: */
     
    208228
    209229}
    210 /*}}}*/
    211 /*FUNCTION Tria::copy {{{1*/
    212 Object* Tria::copy() {
    213 
    214         return new Tria(this->id,&this->hnodes,&this->hmatice,&this->hmatpar,this->parameters,this->inputs);
    215 
    216 }
    217 
    218230/*}}}*/
    219231/*FUNCTION Tria::Demarshall {{{1*/
     
    235247        hmatice.Demarshall(&marshalled_dataset);
    236248        hmatpar.Demarshall(&marshalled_dataset);
     249
     250        /*pointers are garbabe, until configuration is carried out: */
     251        nodes=NULL;
     252        matice=NULL;
     253        matpar=NULL;
    237254       
    238255        /*demarshall inputs: */
     
    253270        printf("Tria:\n");
    254271        printf("   id: %i\n",id);
    255         hnodes.DeepEcho();
    256         hmatice.DeepEcho();
    257         hmatpar.DeepEcho();
     272        nodes[0]->DeepEcho();
     273        nodes[1]->DeepEcho();
     274        nodes[2]->DeepEcho();
     275        matice->DeepEcho();
     276        matpar->DeepEcho();
    258277        printf("   parameters\n");
    259278        parameters->DeepEcho();
     
    267286
    268287void Tria::Echo(void){
    269 
    270         printf("Tria:\n");
    271         printf("   id: %i\n",id);
    272         hnodes.Echo();
    273         hmatice.Echo();
    274         hmatpar.Echo();
    275         printf("   parameters\n");
    276         parameters->Echo();
    277         printf("   inputs\n");
    278         inputs->Echo();
     288        this->DeepEcho();
    279289}
    280290/*}}}*/
     
    341351        double  B_average;
    342352        double  new_h[3];
    343 
    344         /*dynamic objects pointed to by hooks: */
    345         Node**  nodes=NULL;
    346         Matpar* matpar=NULL;
    347         Matice* matice=NULL;
    348 
    349         /*recover objects from hooks: */
    350         nodes=(Node**)hnodes.deliverp();
    351         matpar=(Matpar*)hmatpar.delivers();
    352         matice=(Matice*)hmatice.delivers();
    353353
    354354        /*Update internal data if inputs holds new values: */
     
    500500        double value;
    501501
    502         /*dynamic objects pointed to by hooks: */
    503         Node**  nodes=NULL;
    504         Matpar* matpar=NULL;
    505         Matice* matice=NULL;
    506 
    507         /*recover objects from hooks: */
    508         nodes=(Node**)hnodes.deliverp();
    509         matpar=(Matpar*)hmatpar.delivers();
    510         matice=(Matice*)hmatice.delivers();
    511 
    512502        /*plug local pressure values into global pressure vector: */
    513503        ISSMERROR("Not Implemented yet");
     
    527517        double gauss[numvertices][numvertices]={{1,0,0},{0,1,0},{0,0,1}};
    528518       
    529         /*dynamic objects pointed to by hooks: */
    530         Node**  nodes=NULL;
    531         Matpar* matpar=NULL;
    532         Matice* matice=NULL;
    533 
    534         /*recover objects from hooks: */
    535         nodes=(Node**)hnodes.deliverp();
    536         matpar=(Matpar*)hmatpar.delivers();
    537         matice=(Matice*)hmatice.delivers();
    538 
    539519        /*Get dof list on which we will plug the pressure values: */
    540520        GetDofList1(&doflist[0]);
     
    563543        int doflist[numgrids];
    564544        double value;
    565 
    566         /*dynamic objects pointed to by hooks: */
    567         Node**  nodes=   NULL;
    568         Matpar* matpar    =NULL;
    569         Matice* matice= NULL;
    570 
    571         /*recover objects from hooks: */
    572         nodes=(Node**)hnodes.deliverp();
    573         matpar=(Matpar*)hmatpar.delivers();
    574         matice=(Matice*)hmatice.delivers();
    575545
    576546        /*plug local pressure values into global pressure vector: */
     
    619589        double Jdet;
    620590
    621         /*dynamic objects pointed to by hooks: */
    622         Node**  nodes=NULL;
    623         Matpar* matpar=NULL;
    624         Matice* matice=NULL;
    625 
    626591        /*inputs: */
    627592        bool onwater;
     
    634599        /*If on water, return 0: */
    635600        if(onwater)return 0;
    636 
    637         /*recover objects from hooks: */
    638         nodes=(Node**)hnodes.deliverp();
    639         matpar=(Matpar*)hmatpar.delivers();
    640         matice=(Matice*)hmatice.delivers();
    641601
    642602        /*retrieve some parameters: */
     
    794754        int     found=0;
    795755
    796         /*dynamic objects pointed to by hooks: */
    797         Node**  nodes=NULL;
    798         Matpar* matpar=NULL;
    799         Matice* matice=NULL;
    800 
    801756        /*parameters: */
    802757        double artdiff;
    803 
    804 
    805         /*recover objects from hooks: */
    806         nodes=(Node**)hnodes.deliverp();
    807         matpar=(Matpar*)hmatpar.delivers();
    808         matice=(Matice*)hmatice.delivers();
    809758
    810759        /* Get node coordinates and dof list: */
     
    952901        int     dofs[1]={0};
    953902        int     found;
    954 
    955         /*dynamic objects pointed to by hooks: */
    956         Node**  nodes=NULL;
    957         Matpar* matpar=NULL;
    958         Matice* matice=NULL;
    959 
    960 
    961         /*recover objects from hooks: */
    962         nodes=(Node**)   hnodes.deliverp();
    963         matpar=(Matpar*)hmatpar.delivers();
    964         matice=(Matice*)hmatice.delivers();
    965903
    966904        /* Get node coordinates and dof list: */
     
    10741012        double artdiff;
    10751013
    1076         /*dynamic objects pointed to by hooks: */
    1077         Node**  nodes=NULL;
    1078         Matpar* matpar=NULL;
    1079         Matice* matice=NULL;
    1080 
    1081         /*recover objects from hooks: */
    1082         nodes=(Node**)hnodes.deliverp();
    1083         matpar=(Matpar*)hmatpar.delivers();
    1084         matice=(Matice*)hmatice.delivers();
    1085 
    10861014        /*Recover velocity: */
    10871015        inputs->GetParameterValues(&vx_list[0],&gaussgrids[0][0],3,VxAverageEnum);
     
    12521180        int     dofs[2]={0,1};
    12531181
    1254         /*dynamic objects pointed to by hooks: */
    1255         Node**  nodes=NULL;
    1256         Matpar* matpar=NULL;
    1257         Matice* matice=NULL;
    1258 
    12591182        /*inputs: */
    12601183        bool onwater,shelf;
     
    12691192        /*First, if we are on water, return empty matrix: */
    12701193        if(onwater) return;
    1271 
    1272         /*recover objects from hooks: */
    1273         nodes =(Node**) hnodes.deliverp();
    1274         matpar=(Matpar*)hmatpar.delivers();
    1275         matice=(Matice*)hmatice.delivers();
    12761194
    12771195        /* Get node coordinates and dof list: */
     
    14021320        bool shelf;
    14031321        int  drag_type;
    1404 
    1405         /*dynamic objects pointed to by hooks: */
    1406         Node**  nodes=NULL;
    1407         Matpar* matpar=NULL;
    1408         Matice* matice=NULL;
    1409 
    1410 
    1411         /*recover objects from hooks: */
    1412         nodes=(Node**)hnodes.deliverp();
    1413         matpar=(Matpar*)hmatpar.delivers();
    1414         matice=(Matice*)hmatice.delivers();
    14151322
    14161323        /*retrieve inputs :*/
     
    15621469        double Ke_gg_gaussian[numdof][numdof]; //stiffness matrix evaluated at the gaussian point.
    15631470
    1564         /*dynamic objects pointed to by hooks: */
    1565         Node**  nodes=NULL;
    1566         Matpar* matpar=NULL;
    1567         Matice* matice=NULL;
    1568 
    1569         /*recover objects from hooks: */
    1570         nodes=(Node**)hnodes.deliverp();
    1571         matpar=(Matpar*)hmatpar.delivers();
    1572         matice=(Matice*)hmatice.delivers();
    1573 
    15741471        /* Get node coordinates and dof list: */
    15751472        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    16821579        double     tLD[3];
    16831580        double     Ke_gaussian[numdof][numdof]={0.0};
    1684 
    1685         /*dynamic objects pointed to by hooks: */
    1686         Node**  nodes=NULL;
    1687         Matpar* matpar=NULL;
    1688         Matice* matice=NULL;
    1689 
    1690         /*recover objects from hooks: */
    1691         nodes=(Node**)hnodes.deliverp();
    1692         matpar=(Matpar*)hmatpar.delivers();
    1693         matice=(Matice*)hmatice.delivers();
    16941581
    16951582        /*Recover constants of ice */
     
    17961683        double artdiff;
    17971684
    1798         /*dynamic objects pointed to by hooks: */
    1799         Node**  nodes=NULL;
    1800         Matpar* matpar=NULL;
    1801         Matice* matice=NULL;
    1802 
    1803         /*recover objects from hooks: */
    1804         nodes=(Node**)hnodes.deliverp();
    1805         matpar=(Matpar*)hmatpar.delivers();
    1806         matice=(Matice*)hmatice.delivers();
    1807 
    18081685        /*retrieve some parameters: */
    18091686        this->parameters->FindParam(&dt,DtEnum);
     
    19721849        double dt;
    19731850
    1974         /*dynamic objects pointed to by hooks: */
    1975         Node**  nodes=NULL;
    1976         Matpar* matpar=NULL;
    1977         Matice* matice=NULL;
    1978 
    1979         /*recover objects from hooks: */
    1980         nodes=(Node**)   hnodes.deliverp();
    1981         matpar=(Matpar*)hmatpar.delivers();
    1982         matice=(Matice*)hmatice.delivers();
    1983 
    19841851        /*retrieve some parameters: */
    19851852        this->parameters->FindParam(&dt,DtEnum);
     
    20871954        double Jdet;
    20881955
    2089         /*dynamic objects pointed to by hooks: */
    2090         Node**  nodes=NULL;
    2091         Matpar* matpar=NULL;
    2092         Matice* matice=NULL;
    2093 
    2094         /*recover objects from hooks: */
    2095         nodes=(Node**)hnodes.deliverp();
    2096         matpar=(Matpar*)hmatpar.delivers();
    2097         matice=(Matice*)hmatice.delivers();
    2098 
    20991956        /* Get node coordinates and dof list: */
    21001957        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    21792036        /*parameters: */
    21802037        double dt;
    2181 
    2182         /*dynamic objects pointed to by hooks: */
    2183         Node**  nodes=NULL;
    2184         Matpar* matpar=NULL;
    2185         Matice* matice=NULL;
    2186 
    2187         /*recover objects from hooks: */
    2188         nodes=(Node**)hnodes.deliverp();
    2189         matpar=(Matpar*)hmatpar.delivers();
    2190         matice=(Matice*)hmatice.delivers();
    21912038
    21922039        /*retrieve some parameters: */
     
    23272174        double  melting_g;
    23282175
    2329         /*dynamic objects pointed to by hooks: */
    2330         Node**  nodes=NULL;
    2331         Matpar* matpar=NULL;
    2332         Matice* matice=NULL;
    2333 
    2334         /*recover objects from hooks: */
    2335         nodes=(Node**)hnodes.deliverp();
    2336         matpar=(Matpar*)hmatpar.delivers();
    2337         matice=(Matice*)hmatice.delivers();
    2338 
    23392176        /* Get node coordinates and dof list: */
    23402177        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    24122249        double  dhdt_g;
    24132250
    2414         /*dynamic objects pointed to by hooks: */
    2415         Node**  nodes=NULL;
    2416         Matpar* matpar=NULL;
    2417         Matice* matice=NULL;
    2418 
    2419         /*recover objects from hooks: */
    2420         nodes=(Node**)   hnodes.deliverp();
    2421         matpar=(Matpar*)hmatpar.delivers();
    2422         matice=(Matice*)hmatice.delivers();
    2423 
    24242251        /* Get node coordinates and dof list: */
    24252252        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    24972324        double  melting_g;
    24982325
    2499         /*dynamic objects pointed to by hooks: */
    2500         Node**  nodes=NULL;
    2501         Matpar* matpar=NULL;
    2502         Matice* matice=NULL;
    2503 
    2504         /*recover objects from hooks: */
    2505         nodes=(Node**)hnodes.deliverp();
    2506         matpar=(Matpar*)hmatpar.delivers();
    2507         matice=(Matice*)hmatice.delivers();
    2508 
    25092326        /* Get node coordinates and dof list: */
    25102327        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    25892406        double  dbdx,dbdy;
    25902407
    2591         /*dynamic objects pointed to by hooks: */
    2592         Node**  nodes=NULL;
    2593         Matpar* matpar=NULL;
    2594         Matice* matice=NULL;
    2595 
    2596         /*recover objects from hooks: */
    2597         nodes=(Node**)hnodes.deliverp();
    2598         matpar=(Matpar*)hmatpar.delivers();
    2599         matice=(Matice*)hmatice.delivers();
    2600 
    26012408        /* Get node coordinates and dof list: */
    26022409        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    26962503        double  thickness;
    26972504
    2698         /*dynamic objects pointed to by hooks: */
    2699         Node**  nodes=NULL;
    2700         Matpar* matpar=NULL;
    2701         Matice* matice=NULL;
    2702 
    27032505        /*inputs: */
    27042506        bool onwater;
     
    27112513        /*First, if we are on water, return empty vector: */
    27122514        if(onwater)return;
    2713 
    2714         /*recover objects from hooks: */
    2715         nodes=(Node**)hnodes.deliverp();
    2716         matpar=(Matpar*)hmatpar.delivers();
    2717         matice=(Matice*)hmatice.delivers();
    27182515
    27192516        /* Get node coordinates and dof list: */
     
    28212618        double  dt;
    28222619
    2823         /*dynamic objects pointed to by hooks: */
    2824         Node**  nodes=NULL;
    2825         Matpar* matpar=NULL;
    2826         Matice* matice=NULL;
    2827 
    2828         /*recover objects from hooks: */
    2829         nodes=(Node**)hnodes.deliverp();
    2830         matpar=(Matpar*)hmatpar.delivers();
    2831         matice=(Matice*)hmatice.delivers();
    2832 
    28332620        /*retrieve some parameters: */
    28342621        this->parameters->FindParam(&dt,DtEnum);
     
    29102697        double  dt;
    29112698
    2912         /*dynamic objects pointed to by hooks: */
    2913         Node**  nodes=NULL;
    2914         Matpar* matpar=NULL;
    2915         Matice* matice=NULL;
    2916 
    2917         /*recover objects from hooks: */
    2918         nodes=(Node**)hnodes.deliverp();
    2919         matpar=(Matpar*)hmatpar.delivers();
    2920         matice=(Matice*)hmatice.delivers();
    2921 
    29222699        /*retrieve some parameters: */
    29232700        this->parameters->FindParam(&dt,DtEnum);
     
    29982775        double  pe_g_gaussian[numdof];
    29992776        double  slope[2];
    3000 
    3001         /*dynamic objects pointed to by hooks: */
    3002         Node**  nodes=NULL;
    3003         Matpar* matpar=NULL;
    3004         Matice* matice=NULL;
    3005 
    3006         /*recover objects from hooks: */
    3007         nodes=(Node**)hnodes.deliverp();
    3008         matpar=(Matpar*)hmatpar.delivers();
    3009         matice=(Matice*)hmatice.delivers();
    30102777
    30112778        /* Get node coordinates and dof list: */
     
    31052872        double  scalar_ocean;
    31062873
    3107         /*dynamic objects pointed to by hooks: */
    3108         Node**  nodes=NULL;
    3109         Matpar* matpar=NULL;
    3110         Matice* matice=NULL;
    3111 
    3112         /*recover objects from hooks: */
    3113         nodes=(Node**)hnodes.deliverp();
    3114         matpar=(Matpar*)hmatpar.delivers();
    3115         matice=(Matice*)hmatice.delivers();
    3116        
    31172874        /* Get node coordinates and dof list: */
    31182875        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    32222979        double  scalar;
    32232980
    3224 
    3225         /*dynamic objects pointed to by hooks: */
    3226         Node**  nodes=NULL;
    3227         Matpar* matpar=NULL;
    3228         Matice* matice=NULL;
    3229 
    3230         /*recover objects from hooks: */
    3231         nodes=(Node**)hnodes.deliverp();
    3232         matpar=(Matpar*)hmatpar.delivers();
    3233         matice=(Matice*)hmatice.delivers();
    32342981
    32352982        /*retrieve inputs :*/
     
    33833130        double S=0;
    33843131        double fit=-1;
    3385 
    3386         /*dynamic objects pointed to by hooks: */
    3387         Node**  nodes=NULL;
    3388         Matpar* matpar=NULL;
    3389         Matice* matice=NULL;
    3390 
    3391         /*recover objects from hooks: */
    3392         nodes=(Node**)hnodes.deliverp();
    3393         matpar=(Matpar*)hmatpar.delivers();
    3394         matice=(Matice*)hmatice.delivers();
    33953132
    33963133        /*retrieve some parameters: */
     
    35943331        double x1,y1,x2,y2,x3,y3;
    35953332
    3596         /*dynamic objects pointed to by hooks: */
    3597         Node**  nodes=NULL;
    3598 
    3599         /*recover objects from hooks: */
    3600         nodes=(Node**)hnodes.deliverp();
    3601 
    36023333        /*Get xyz list: */
    36033334        GetVerticesCoordinates(&xyz_list[0][0], nodes, numgrids);
     
    36163347        double xyz_list[numgrids][3];
    36173348        double x1,y1,x2,y2,x3,y3;
    3618 
    3619         /*dynamic objects pointed to by hooks: */
    3620         Node**  nodes=NULL;
    3621 
    3622         /*recover objects from hooks: */
    3623         nodes=(Node**)hnodes.deliverp();
    36243349
    36253350        /*Get area: */
     
    38003525        int numberofdofspernode;
    38013526
    3802         /*dynamic objects pointed to by hooks: */
    3803         Node**  nodes=NULL;
    3804 
    3805         /*recover objects from hooks: */
    3806         nodes=(Node**)hnodes.deliverp();
    3807        
    38083527        for(i=0;i<3;i++){
    38093528                nodes[i]->GetDofList(&doflist_per_node[0],&numberofdofspernode);
     
    38213540void  Tria::GetDofList1(int* doflist){
    38223541
    3823         /*dynamic objects pointed to by hooks: */
    3824         Node**  nodes=NULL;
    3825 
    3826         /*recover objects from hooks: */
    3827         nodes=(Node**)hnodes.deliverp();
    3828        
    38293542        int i;
    38303543        for(i=0;i<3;i++){
     
    39803693void* Tria::GetMatPar(){
    39813694
    3982         /*dynamic objects pointed to by hooks: */
    3983         Matpar* matpar=NULL;
    3984 
    3985         /*recover objects from hooks: */
    3986         matpar=(Matpar*)hmatpar.delivers();
    3987 
    39883695        return matpar;
    39893696}
     
    40663773        Node** pnodes=NULL;
    40673774
    4068         /*dynamic objects pointed to by hooks: */
    4069         Node**  nodes=NULL;
    4070        
    40713775        /*recover nodes: */
    40723776        pnodes=(Node**)vpnodes;
    40733777
    4074         /*recover objects from hooks: */
    4075         nodes=(Node**)hnodes.deliverp();
    4076        
    40773778        for(i=0;i<3;i++){
    40783779                pnodes[i]=nodes[i];
     
    42543955        double  cm_maxdmp_slope;
    42553956
    4256         /*dynamic objects pointed to by hooks: */
    4257         Node**  nodes=NULL;
    4258         Matpar* matpar=NULL;
    4259         Matice* matice=NULL;
    4260 
    4261         /*recover objects from hooks: */
    4262         nodes=(Node**)hnodes.deliverp();
    4263         matpar=(Matpar*)hmatpar.delivers();
    4264         matice=(Matice*)hmatice.delivers();
    4265 
    42663957        /*retrieve some parameters: */
    42673958        this->parameters->FindParam(&cm_noisedmp,CmNoiseDmpEnum);
     
    44184109        double  cm_maxdmp_value;
    44194110        double  cm_maxdmp_slope;
    4420 
    4421         /*dynamic objects pointed to by hooks: */
    4422         Node**  nodes=NULL;
    4423         Matpar* matpar=NULL;
    4424         Matice* matice=NULL;
    4425 
    4426         /*recover objects from hooks: */
    4427         nodes=(Node**)hnodes.deliverp();
    4428         matpar=(Matpar*)hmatpar.delivers();
    4429         matice=(Matice*)hmatice.delivers();
    44304111
    44314112        /*retrieve inputs :*/
     
    46304311        double  cm_maxdmp_slope;
    46314312
    4632         /*dynamic objects pointed to by hooks: */
    4633         Node**  nodes=NULL;
    4634         Matpar* matpar=NULL;
    4635         Matice* matice=NULL;
    4636 
    46374313        /*retrieve inputs :*/
    46384314        inputs->GetParameterValue(&shelf,ElementOnIceShelfEnum);
     
    46484324        /*Get out if shelf*/
    46494325        if(shelf)return;
    4650 
    4651         /*recover objects from hooks: */
    4652         nodes=(Node**)hnodes.deliverp();
    4653         matpar=(Matpar*)hmatpar.delivers();
    4654         matice=(Matice*)hmatice.delivers();
    46554326
    46564327        /* Get node coordinates and dof list: */
     
    48084479        double rho_ice;
    48094480
    4810         /*dynamic objects pointed to by hooks: */
    4811         Node**  nodes=NULL;
    4812         Matpar* matpar=NULL;
    4813 
    4814         /*recover objects from hooks: */
    4815         nodes=(Node**)hnodes.deliverp();
    4816         matpar=(Matpar*)hmatpar.delivers();
    4817 
    48184481        /*Get material parameters :*/
    48194482        rho_ice=matpar->GetRhoIce();
     
    49104573        double fit=-1;
    49114574
    4912         /*dynamic objects pointed to by hooks: */
    4913         Node**  nodes=NULL;
    4914         Matpar* matpar=NULL;
    4915         Matice* matice=NULL;
    4916 
    49174575        /*inputs: */
    49184576        bool onwater;
     
    49254583        /*If on water, return 0: */
    49264584        if(onwater)return 0;
    4927 
    4928         /*recover objects from hooks: */
    4929         nodes=(Node**)hnodes.deliverp();
    4930         matpar=(Matpar*)hmatpar.delivers();
    4931         matice=(Matice*)hmatice.delivers();
    49324585
    49334586        /* Get node coordinates and dof list: */
     
    51194772        double normal[3];
    51204773
    5121         /*dynamic objects pointed to by hooks: */
    5122         Node**  nodes=NULL;
    5123 
    51244774        /*inputs: */
    51254775        bool onwater;
     
    51334783        if(fit!=3)return 0;
    51344784
    5135         /*recover objects from hooks: */
    5136         nodes=(Node**)hnodes.deliverp();
    5137 
    51384785        /*If on water, return 0: */
    51394786        if(onwater)return 0;
  • issm/trunk/src/c/objects/Elements/Tria.h

    r3783 r3791  
    99/*{{{1*/
    1010#include "./Element.h"
    11 class Hook;
     11#include "./TriaHook.h"
    1212class Parameters;
    1313class Inputs;
    1414class IoModel;
     15class Node;
     16class Matice;
     17class Matpar;
    1518
    1619#include "../../include/include.h"
     
    1821/*}}}*/
    1922
    20 class Tria: public Element{
     23class Tria: public Element,public TriaHook{
    2124
    2225        public:
     
    2427                int  id;
    2528
    26                 Hook hnodes;  //hook to 3 nodes
    27                 Hook hmatice; //hook to 1 matice
    28                 Hook hmatpar; //hook to 1 matpar
     29                Node** nodes;
     30                Matice* matice;
     31                Matpar* matpar;
    2932
    3033                Parameters* parameters; //pointer to solution parameters
     
    3336                /*FUNCTION constructors, destructors {{{1*/
    3437                Tria();
    35                 Tria(int tria_id,Hook* tria_hnodes, Hook* tria_hmatice, Hook* tria_hmatpar, Parameters* parameters, Inputs* tria_inputs);
     38                Tria(int tria_id,Node* tria_nodes, Matice* tria_matice, Matpar* tria_matpar, Parameters* parameters, Inputs* tria_inputs);
    3639                Tria(int tria_id,int i, IoModel* iomodel);
    3740                ~Tria();
  • issm/trunk/src/c/objects/Hook.cpp

    r3784 r3791  
    6666/*FUNCTION Hook::Hook(Hook* input) {{{1*/
    6767Hook::Hook(Hook* input){
     68
     69        int i;
     70        Object** input_objects=NULL;
     71        int*     input_ids=NULL;
     72        int*     input_offsets=NULL;
     73
     74        /*get internals of input: */
     75        this->num=input->GetNum();
     76        input_objects=input->GetObjects();
     77        input_ids=input->Ids();
     78        input_offsets=input->GetOffsets();
     79
     80        if(this->num){
     81                this->objects=(Object**)xmalloc(this->num*sizeof(Object*));
     82                this->ids=(int*)xmalloc(this->num*sizeof(int));
     83                this->offsets=(int*)xmalloc(this->num*sizeof(int));
     84        }
     85       
     86
     87        for(i=0;i<this->num;i++){
     88                this->objects[i]=input_objects[i];
     89                this->offsets[i]=input_offsets[i];
     90                this->ids[i]=input_ids[i];
     91        }
     92}
     93/*}}}*/
     94/*FUNCTION Hook::Hook(Hook* input) {{{1*/
     95void Hook::copy(Hook* input){
    6896
    6997        int i;
  • issm/trunk/src/c/objects/Hook.h

    r3681 r3791  
    3131                Hook(Object** objects, int* ids, int* offsets,int num);
    3232                Hook(Hook* hook);
     33                void copy(Hook* hook);
    3334                ~Hook();
    3435                void       Marshall(char** pmarshalled_dataset);
  • issm/trunk/src/c/parallel/prognostic_core.cpp

    r3774 r3791  
    1717        Result* result=NULL;
    1818
    19         /*intermediary: */
    20         Vec u_g=NULL;
    21 
    2219        /*solutions: */
    2320        Vec h_g=NULL;
     
    2522        /*flags: */
    2623        int verbose=0;
    27         int numberofdofspernode;
    28         int numberofnodes;
    29         int dofs[2]={1,1};
    3024
    3125        /*fem prognostic model: */
     
    3832        //first recover parameters common to all solutions
    3933        model->FindParam(&verbose,VerboseEnum);
    40         model->FindParam(&numberofnodes,NumberOfNodesEnum);
    41         model->FindParam(&numberofdofspernode,NumberOfDofsPerNodeEnum);
    4234
    4335        _printf_("depth averaging velocity...\n");
    44         //u_g=inputs->Get("velocity",&dofs[0],2);
    45         ISSMERROR("not supported yet!");
    46         FieldDepthAveragex( u_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"velocity");
    47         //inputs->Add("velocity_average",u_g,2,numberofnodes);
     36        DepthAverageInputx(fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,VxEnum);
     37        DepthAverageInputx(fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,VyEnum);
    4838       
    4939        _printf_("call computational core:\n");
    5040        diagnostic_core_linear(&h_g,fem_p,PrognosticAnalysisEnum,NoneAnalysisEnum);
     41               
     42        _printf_("update inputs:\n");
     43        fem_p->UpdateInputsFromSolution(h_g,PrognosticAnalysisEnum,NoneAnalysisEnum);
    5144
    5245        _printf_("extrude computed thickness on all layers:\n");
    53         FieldExtrudex( h_g, fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,"thickness",0);
    54 
    55         /*Plug results into output dataset: */
    56         result=new Result(results->Size()+1,0,1,"h_g",h_g);
     46        ExtrudeInputx(fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,ThicknessEnum);
     47       
     48        _printf_("extract result from extruded inputs: \n");
     49        InputToResult(&result,fem_p->elements,fem_p->nodes, fem_p->vertices,fem_p->loads, fem_p->materials,fem_p->parameters,ThicknessEnum,results->Size()+1,0,1);
    5750        results->AddObject(result);
    5851
    5952        /*Free ressources:*/
    60         VecFree(&u_g);
    6153        VecFree(&h_g);
    6254}
Note: See TracChangeset for help on using the changeset viewer.