Changeset 9880


Ignore:
Timestamp:
09/22/11 09:27:41 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added Ice Volume as output

Location:
issm/trunk/src/c
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r9734 r9880  
    475475        DragCoefficientAbsGradientEnum,
    476476        TransientInputEnum,
    477         /*Temporary*/
    478477        OutputfilenameEnum,
    479478        WaterfractionEnum,
     
    485484        HydrologyWaterVyEnum,
    486485        SpcDynamicEnum,
     486        IceVolumeEnum,
    487487        MaximumNumberOfEnums
    488488};
  • issm/trunk/src/c/Makefile.am

    r9813 r9880  
    544544                                        ./modules/SurfaceAreax/SurfaceAreax.h\
    545545                                        ./modules/SurfaceAreax/SurfaceAreax.cpp\
     546                                        ./modules/IceVolumex/IceVolumex.h\
     547                                        ./modules/IceVolumex/IceVolumex.cpp\
    546548                                        ./modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.h\
    547549                                        ./modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp\
     
    12411243                                          ./modules/MinVzx/MinVzx.h\
    12421244                                          ./modules/MinVzx/MinVzx.cpp\
     1245                                          ./modules/IceVolumex/IceVolumex.h\
     1246                                          ./modules/IceVolumex/IceVolumex.cpp\
    12431247                                          ./modules/RheologyBbarx/RheologyBbarx.cpp\
    12441248                                          ./modules/RheologyBbarx/RheologyBbarx.h\
  • issm/trunk/src/c/modules/EnumToStringx/EnumToStringx.cpp

    r9734 r9880  
    428428                case HydrologyWaterVyEnum : return "HydrologyWaterVy";
    429429                case SpcDynamicEnum : return "SpcDynamic";
     430                case IceVolumeEnum : return "IceVolume";
    430431                default : return "unknown";
    431432
  • issm/trunk/src/c/modules/RequestedOutputsx/RequestedOutputsx.cpp

    r9679 r9880  
    99#include "../../EnumDefinitions/EnumDefinitions.h"
    1010
    11 void RequestedOutputsx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step, double time){
     11void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step, double time){
    1212
    13         int  i,o;
     13        int  i,j;
    1414        int  output_enum;
     15        double output_value;
    1516        Element* element=NULL;
    1617
    1718        /*retrieve parameters: */
    1819        if(numoutputs){
    19                 for(o=0;o<numoutputs;o++){
    20                         output_enum=requested_outputs[o];
    21                         /*create this output in the element inputs, and then transfer to results: */
    22                         for(i=0;i<elements->Size();i++){
    23                                 element=(Element*)elements->GetObjectByOffset(i);
    24                                 element->RequestedOutput(output_enum,step,time);
     20                for(i=0;i<numoutputs;i++){
     21                        output_enum=requested_outputs[i];
     22
     23                        switch(output_enum){
     24
     25                                case IceVolumeEnum:
     26                                        Responsex(&output_value,elements,nodes,vertices,loads,materials,parameters,"IceVolume",false,0);
     27                                        results->AddObject(new DoubleExternalResult(results->Size()+1,IceVolumeEnum,output_value,step,time));
     28                                        break;
     29                                default:
     30                                        /*create this output in the element inputs, and then transfer to results:*/
     31                                        for(j=0;j<elements->Size();j++){
     32                                                element=(Element*)elements->GetObjectByOffset(j);
     33                                                element->RequestedOutput(output_enum,step,time);
     34                                        }
     35                                        break;
    2536                        }
    2637                }
  • issm/trunk/src/c/modules/RequestedOutputsx/RequestedOutputsx.h

    r9679 r9880  
    99
    1010/* local prototypes: */
    11 void RequestedOutputsx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step=1, double time=0);
     11void RequestedOutputsx(Results* results,Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters, int* requested_outputs, int numoutputs, int step=1, double time=0);
    1212
    1313#endif  /* _INPUTTORESULTX_H */
  • issm/trunk/src/c/modules/Responsex/Responsex.cpp

    r9775 r9880  
    2121
    2222                #ifdef _HAVE_RESPONSES_
     23                case IceVolumeEnum:              IceVolumex(               responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    2324                case MinVelEnum:                 MinVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
    2425                case MaxVelEnum:                 MaxVelx(                  responses, elements,nodes, vertices, loads, materials, parameters,process_units); break;
  • issm/trunk/src/c/modules/StringToEnumx/StringToEnumx.cpp

    r9734 r9880  
    426426        else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
    427427        else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
     428        else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum;
    428429        else _error_("Enum %s not found",name);
    429430
  • issm/trunk/src/c/modules/modules.h

    r9775 r9880  
    3333#include "./GroundingLineMigrationx/GroundingLineMigrationx.h"
    3434#include "./HoleFillerx/HoleFillerx.h"
     35#include "./IceVolumex/IceVolumex.h"
    3536#include "./InputControlUpdatex/InputControlUpdatex.h"
    3637#include "./InputConvergencex/InputConvergencex.h"
  • issm/trunk/src/c/objects/Elements/Element.h

    r9874 r9880  
    8888                virtual double MassFlux(double* segment,bool process_units)=0;
    8989                virtual double RheologyBbarx(void)=0;
     90                virtual double IceVolume(void)=0;
    9091                virtual int    NodalValue(double* pvalue, int index, int natureofdataenum,bool process_units)=0;
    9192                #endif
  • issm/trunk/src/c/objects/Elements/Penta.cpp

    r9878 r9880  
    26672667
    26682668#ifdef _HAVE_RESPONSES_
     2669/*FUNCTION Penta::IceVolume {{{1*/
     2670double Penta::IceVolume(void){
     2671
     2672        /*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
     2673        double base,height;
     2674        double xyz_list[NUMVERTICES][3];
     2675
     2676        if(IsOnWater())return 0;
     2677
     2678        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     2679
     2680        /*First calculate the area of the base (cross section triangle)
     2681         * http://en.wikipedia.org/wiki/Pentangle
     2682         * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
     2683        base = 1./2.*fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
     2684
     2685        /*Now get the average height*/
     2686        height = 1./3.*((xyz_list[3][2]-xyz_list[0][2])+(xyz_list[4][2]-xyz_list[1][2])+(xyz_list[5][2]-xyz_list[2][2]));
     2687
     2688        /*Return: */
     2689        return base*height;
     2690}
     2691/*}}}*/
    26692692/*FUNCTION Penta::RheologyBbarx{{{1*/
    26702693double Penta::RheologyBbarx(void){
  • issm/trunk/src/c/objects/Elements/Penta.h

    r9874 r9880  
    123123
    124124                 #ifdef _HAVE_RESPONSES_
     125                double IceVolume(void);
    125126                void   MinVel(double* pminvel, bool process_units);
    126127                void   MinVx(double* pminvx, bool process_units);
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r9878 r9880  
    26632663
    26642664#ifdef _HAVE_RESPONSES_
     2665/*FUNCTION Tria::IceVolume {{{1*/
     2666double Tria::IceVolume(void){
     2667
     2668        /*The volume of a troncated prism is base * 1/3 sum(length of edges)*/
     2669        double base,surface,bed;
     2670        double xyz_list[NUMVERTICES][3];
     2671
     2672        if(IsOnWater())return 0;
     2673
     2674        GetVerticesCoordinates(&xyz_list[0][0], nodes, NUMVERTICES);
     2675
     2676        /*First calculate the area of the base (cross section triangle)
     2677         * http://en.wikipedia.org/wiki/Triangle
     2678         * base = 1/2 abs((xA-xC)(yB-yA)-(xA-xB)(yC-yA))*/
     2679        base = 1./2. * fabs((xyz_list[0][0]-xyz_list[2][0])*(xyz_list[1][1]-xyz_list[0][1]) - (xyz_list[0][0]-xyz_list[1][0])*(xyz_list[2][1]-xyz_list[0][1]));
     2680
     2681        /*Now get the average height*/
     2682        Input* surface_input = inputs->GetInput(SurfaceEnum); _assert_(surface_input);
     2683        Input* bed_input     = inputs->GetInput(BedEnum);     _assert_(bed_input);
     2684        surface_input->GetParameterAverage(&surface);
     2685        bed_input->GetParameterAverage(&bed);
     2686
     2687        /*Return: */
     2688        return base*(surface-bed);
     2689}
     2690/*}}}*/
    26652691/*FUNCTION Tria::MassFlux {{{1*/
    26662692double Tria::MassFlux( double* segment,bool process_units){
  • issm/trunk/src/c/objects/Elements/Tria.h

    r9874 r9880  
    124124
    125125                #ifdef _HAVE_RESPONSES_
     126                double IceVolume(void);
    126127                void   MinVel(double* pminvel, bool process_units);
    127128                void   MinVx(double* pminvx, bool process_units);
  • issm/trunk/src/c/solutions/diagnostic_core.cpp

    r9761 r9880  
    9292                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,PressureEnum);
    9393                if(dim==3) InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,VzEnum);
    94                 RequestedOutputsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
     94                RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
    9595        }
    9696
  • issm/trunk/src/c/solutions/steadystate_core.cpp

    r9761 r9880  
    8484                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,TemperatureEnum);
    8585                InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,BasalforcingsMeltingRateEnum);
    86                 RequestedOutputsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
     86                RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
    8787        }
    8888
  • issm/trunk/src/c/solutions/transient_core.cpp

    r9775 r9880  
    122122                        InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,SurfaceforcingsMassBalanceEnum,step,time);
    123123                        InputToResultx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,MaskElementonfloatingiceEnum,step,time);
    124                         RequestedOutputsx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs);
     124                        RequestedOutputsx(femmodel->results,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,requested_outputs,numoutputs,step,time);
    125125
    126126                        /*unload results*/
Note: See TracChangeset for help on using the changeset viewer.