Changeset 9376


Ignore:
Timestamp:
08/23/11 09:17:20 (14 years ago)
Author:
Mathieu Morlighem
Message:

OK, seems to be the final fix

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

Legend:

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

    r9374 r9376  
    51845184
    51855185        /*Control Inputs*/
    5186         if (control_analysis && iomodel->f(ControlTypeEnum)){
     5186        if (control_analysis && iomodel->IsLoaded(ControlTypeEnum)){
    51875187                for(i=0;i<num_control_type;i++){
    51885188                        switch((int)iomodel->f(ControlTypeEnum)[i]){
    51895189                                case DhdtEnum:
    5190                                         if (iomodel->f(DhdtEnum)){
     5190                                        if (iomodel->IsLoaded(DhdtEnum)){
    51915191                                                for(j=0;j<6;j++)nodeinputs[j]=iomodel->f(DhdtEnum)[penta_vertex_ids[j]-1]/yts;
    51925192                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    51965196                                        break;
    51975197                                case VxEnum:
    5198                                         if (iomodel->f(VxEnum)){
     5198                                        if (iomodel->IsLoaded(VxEnum)){
    51995199                                                for(j=0;j<6;j++)nodeinputs[j]=iomodel->f(VxEnum)[penta_vertex_ids[j]-1]/yts;
    52005200                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    52045204                                        break;
    52055205                                case VyEnum:
    5206                                         if (iomodel->f(VyEnum)){
     5206                                        if (iomodel->IsLoaded(VyEnum)){
    52075207                                                for(j=0;j<6;j++)nodeinputs[j]=iomodel->f(VyEnum)[penta_vertex_ids[j]-1]/yts;
    52085208                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    52125212                                        break;
    52135213                                case DragCoefficientEnum:
    5214                                         if (iomodel->f(DragCoefficientEnum)){
     5214                                        if (iomodel->IsLoaded(DragCoefficientEnum)){
    52155215                                                for(j=0;j<6;j++)nodeinputs[j]=iomodel->f(DragCoefficientEnum)[penta_vertex_ids[j]-1];
    52165216                                                for(j=0;j<6;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(penta_vertex_ids[j]-1)*num_control_type+i];
     
    52285228
    52295229        //Need to know the type of approximation for this element
    5230         if(iomodel->f(ElementsTypeEnum)){
     5230        if(iomodel->IsLoaded(ElementsTypeEnum)){
    52315231                if (*(iomodel->f(ElementsTypeEnum)+index)==MacAyealApproximationEnum){
    52325232                        this->inputs->AddInput(new IntInput(ApproximationEnum,MacAyealApproximationEnum));
     
    52595259
    52605260        /*DatasetInputs*/
    5261         if (iomodel->f(WeightsEnum)) {
     5261        if (iomodel->IsLoaded(WeightsEnum)) {
    52625262
    52635263                /*Create inputs and add to DataSetInput*/
     
    75697569                        /*default vx,vy and vz: either observation or 0 */
    75707570                        if(!iomodel->f(VxEnum)){
    7571                                 if (iomodel->f(VxObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VxObsEnum)[penta_vertex_ids[i]-1]/yts;
     7571                                if (iomodel->IsLoaded(VxObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VxObsEnum)[penta_vertex_ids[i]-1]/yts;
    75727572                                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    75737573                                this->inputs->AddInput(new PentaVertexInput(VxEnum,nodeinputs));
     
    75767576                        }
    75777577                        if(!iomodel->f(VyEnum)){
    7578                                 if (iomodel->f(VyObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VyObsEnum)[penta_vertex_ids[i]-1]/yts;
     7578                                if (iomodel->IsLoaded(VyObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VyObsEnum)[penta_vertex_ids[i]-1]/yts;
    75797579                                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    75807580                                this->inputs->AddInput(new PentaVertexInput(VyEnum,nodeinputs));
     
    75837583                        }
    75847584                        if(!iomodel->f(VzEnum)){
    7585                                 if (iomodel->f(VzObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VzObsEnum)[penta_vertex_ids[i]-1]/yts;
     7585                                if (iomodel->IsLoaded(VzObsEnum)) for(i=0;i<6;i++)nodeinputs[i]=iomodel->f(VzObsEnum)[penta_vertex_ids[i]-1]/yts;
    75867586                                else                 for(i=0;i<6;i++)nodeinputs[i]=0;
    75877587                                this->inputs->AddInput(new PentaVertexInput(VzEnum,nodeinputs));
     
    76027602                        if(*(iomodel->f(ElementsTypeEnum)+index)==PattynStokesApproximationEnum){
    76037603                                /*Create VzPattyn and VzStokes Enums*/
    7604                                 if(iomodel->f(VzEnum) && iomodel->f(NodeOnStokesEnum)){
     7604                                if(iomodel->IsLoaded(VzEnum) && iomodel->IsLoaded(NodeOnStokesEnum)){
    76057605                                        for(i=0;i<6;i++) nodeinputs[i]=iomodel->f(VzEnum)[penta_vertex_ids[i]-1]/yts*iomodel->f(NodeOnStokesEnum)[penta_vertex_ids[i]-1];
    76067606                                        this->inputs->AddInput(new PentaVertexInput(VzStokesEnum,nodeinputs));
     
    76167616                        if(*(iomodel->f(ElementsTypeEnum)+index)==MacAyealStokesApproximationEnum){
    76177617                                /*Create VzMacAyeal and VzStokes Enums*/
    7618                                 if(iomodel->f(VzEnum) && iomodel->f(NodeOnStokesEnum)){
     7618                                if(iomodel->IsLoaded(VzEnum) && iomodel->IsLoaded(NodeOnStokesEnum)){
    76197619                                        for(i=0;i<6;i++) nodeinputs[i]=iomodel->f(VzEnum)[penta_vertex_ids[i]-1]/yts*iomodel->f(NodeOnStokesEnum)[penta_vertex_ids[i]-1];
    76207620                                        this->inputs->AddInput(new PentaVertexInput(VzStokesEnum,nodeinputs));
     
    76447644                        this->inputs->AddInput(new PentaVertexInput(VyMeshEnum,nodeinputs));
    76457645                        this->inputs->AddInput(new PentaVertexInput(VzMeshEnum,nodeinputs));
    7646                         if (iomodel->f(TemperatureEnum) && iomodel->f(WaterfractionEnum)) {
     7646                        if (iomodel->IsLoaded(TemperatureEnum) && iomodel->IsLoaded(WaterfractionEnum)) {
    76477647                                for(i=0;i<6;i++){
    76487648                                        if(iomodel->f(TemperatureEnum)[penta_vertex_ids[i]-1] < meltingpoint-beta*iomodel->f(PressureEnum)[penta_vertex_ids[i]-1]){
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r9374 r9376  
    32883288
    32893289        /*Control Inputs*/
    3290         if (control_analysis && iomodel->f(ControlTypeEnum)){
     3290        if (control_analysis && iomodel->IsLoaded(ControlTypeEnum)){
    32913291                for(i=0;i<num_control_type;i++){
    32923292                        switch((int)iomodel->f(ControlTypeEnum)[i]){
    32933293                                case DhdtEnum:
    3294                                         if (iomodel->f(DhdtEnum)){
     3294                                        if (iomodel->IsLoaded(DhdtEnum)){
    32953295                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->f(DhdtEnum)[tria_vertex_ids[j]-1]/yts;
    32963296                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    33003300                                        break;
    33013301                                case VxEnum:
    3302                                         if (iomodel->f(VxEnum)){
     3302                                        if (iomodel->IsLoaded(VxEnum)){
    33033303                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->f(VxEnum)[tria_vertex_ids[j]-1]/yts;
    33043304                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    33083308                                        break;
    33093309                                case VyEnum:
    3310                                         if (iomodel->f(VyEnum)){
     3310                                        if (iomodel->IsLoaded(VyEnum)){
    33113311                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->f(VyEnum)[tria_vertex_ids[j]-1]/yts;
    33123312                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i]/yts;
     
    33163316                                        break;
    33173317                                case DragCoefficientEnum:
    3318                                         if (iomodel->f(DragCoefficientEnum)){
     3318                                        if (iomodel->IsLoaded(DragCoefficientEnum)){
    33193319                                                for(j=0;j<3;j++)nodeinputs[j]=iomodel->f(DragCoefficientEnum)[tria_vertex_ids[j]-1];
    33203320                                                for(j=0;j<3;j++)cmmininputs[j]=iomodel->f(CmMinEnum)[(tria_vertex_ids[j]-1)*num_control_type+i];
     
    33323332
    33333333        /*DatasetInputs*/
    3334         if (iomodel->f(WeightsEnum)) {
     3334        if (control_analysis) {
    33353335
    33363336                /*Create inputs and add to DataSetInput*/
     
    52725272                        /*default vx,vy and vz: either observation or 0 */
    52735273                        if(!iomodel->f(VxEnum)){
    5274                                 if (iomodel->f(VxObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VxObsEnum)[tria_vertex_ids[i]-1]/yts;
     5274                                if (iomodel->IsLoaded(VxObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VxObsEnum)[tria_vertex_ids[i]-1]/yts;
    52755275                                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    52765276                                this->inputs->AddInput(new TriaVertexInput(VxEnum,nodeinputs));
     
    52795279                        }
    52805280                        if(!iomodel->f(VyEnum)){
    5281                                 if (iomodel->f(VyObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VyObsEnum)[tria_vertex_ids[i]-1]/yts;
     5281                                if (iomodel->IsLoaded(VyObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VyObsEnum)[tria_vertex_ids[i]-1]/yts;
    52825282                                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    52835283                                this->inputs->AddInput(new TriaVertexInput(VyEnum,nodeinputs));
     
    52865286                        }
    52875287                        if(!iomodel->f(VzEnum)){
    5288                                 if (iomodel->f(VzObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VzObsEnum)[tria_vertex_ids[i]-1]/yts;
     5288                                if (iomodel->IsLoaded(VzObsEnum)) for(i=0;i<3;i++)nodeinputs[i]=iomodel->f(VzObsEnum)[tria_vertex_ids[i]-1]/yts;
    52895289                                else                 for(i=0;i<3;i++)nodeinputs[i]=0;
    52905290                                this->inputs->AddInput(new TriaVertexInput(VzEnum,nodeinputs));
  • issm/trunk/src/c/objects/IoModel.cpp

    r9374 r9376  
    534534               
    535535        parameter=(DoubleMatParam*)this->data->FindParamObject(dataenum);
    536         if (parameter==NULL) _error_("Field of enum %s has not been loaded in iomodel",EnumToStringx(dataenum));
     536        if (parameter==NULL){
     537                /*That might happen: initial velocity might be empty*/
     538                return NULL;
     539        }
    537540        return parameter->GetPointer();
     541}
     542/*}}}*/
     543/*FUNCTION IoModel::IsLoaded(int dataenum){{{1*/
     544bool IoModel::IsLoaded(int dataenum){
     545
     546        return this->data->Exist(dataenum);
    538547}
    539548/*}}}*/
  • issm/trunk/src/c/objects/IoModel.h

    r9370 r9376  
    1818        private:
    1919                FILE* fid; //pointer to input file
     20                Parameters *data;        //this dataset holds temporary data, memory intensive.
    2021
    2122        public:
    2223                Parameters *constants;   //this dataset holds all double, int, bool and char*parameters read in from the input file.*
    23                 Parameters *data;        //this dataset holds temporary data, memory intensive.
    2424
    2525                /*This data needs to stay memory resident at all time, even if it's memory intensive: */
     
    4141                /*}}}*/
    4242                /*Input/Output:{{{1*/
     43                bool  IsLoaded(int dataenum);
    4344                void  FetchData(bool*     pboolean,int data_enum);
    4445                void  FetchData(int*      pinteger,int data_enum);
  • issm/trunk/src/c/objects/Materials/Matice.cpp

    r9374 r9376  
    674674
    675675                /*Get B*/
    676                 if (iomodel->f(RheologyBEnum)) {
     676                if (iomodel->IsLoaded(RheologyBEnum)) {
    677677                        for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->f(RheologyBEnum)[int(iomodel->f(ElementsEnum)[num_vertices*index+i]-1)];
    678678                        this->inputs->AddInput(new TriaVertexInput(RheologyBbarEnum,nodeinputs));
     
    680680
    681681                /*Get n*/
    682                 if (iomodel->f(RheologyNEnum)) {
     682                if (iomodel->IsLoaded(RheologyNEnum)) {
    683683                        for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->f(RheologyNEnum)[index];
    684684                        this->inputs->AddInput(new TriaVertexInput(RheologyNEnum,nodeinputs));
     
    686686
    687687                /*Control Inputs*/
    688                 if (control_analysis && iomodel->f(ControlTypeEnum)){
     688                if (control_analysis && iomodel->IsLoaded(ControlTypeEnum)){
    689689                        for(i=0;i<num_control_type;i++){
    690690                                switch((int)iomodel->f(ControlTypeEnum)[i]){
    691691                                        case RheologyBbarEnum:
    692                                                 if (iomodel->f(RheologyBEnum)){
     692                                                if (iomodel->IsLoaded(RheologyBEnum)){
    693693                                                        _assert_(iomodel->f(RheologyBEnum));_assert_(iomodel->f(CmMinEnum)); _assert_(iomodel->f(CmMaxEnum));
    694694                                                        for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->f(RheologyBEnum)[int(iomodel->f(ElementsEnum)[num_vertices*index+j]-1)];
     
    713713
    714714                /*Get B*/
    715                 if (iomodel->f(RheologyBEnum)) {
     715                if (iomodel->IsLoaded(RheologyBEnum)) {
    716716                        for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->f(RheologyBEnum)[int(iomodel->f(ElementsEnum)[num_vertices*index+i]-1)];
    717717                        this->inputs->AddInput(new PentaVertexInput(RheologyBEnum,nodeinputs));
     
    719719
    720720                /*Get n*/
    721                 if (iomodel->f(RheologyNEnum)) {
     721                if (iomodel->IsLoaded(RheologyNEnum)) {
    722722                        for(i=0;i<num_vertices;i++) nodeinputs[i]=iomodel->f(RheologyNEnum)[index];
    723723                        this->inputs->AddInput(new PentaVertexInput(RheologyNEnum,nodeinputs));
     
    725725
    726726                /*Control Inputs*/
    727                 if (control_analysis && iomodel->f(ControlTypeEnum)){
     727                if (control_analysis && iomodel->IsLoaded(ControlTypeEnum)){
    728728                        for(i=0;i<num_control_type;i++){
    729729                                switch((int)iomodel->f(ControlTypeEnum)[i]){
    730730                                        case RheologyBbarEnum:
    731                                                 if (iomodel->f(RheologyBEnum)){
     731                                                if (iomodel->IsLoaded(RheologyBEnum)){
    732732                                                        _assert_(iomodel->f(RheologyBEnum));_assert_(iomodel->f(CmMinEnum)); _assert_(iomodel->f(CmMaxEnum));
    733733                                                        for(j=0;j<num_vertices;j++)nodeinputs[j]=iomodel->f(RheologyBEnum)[int(iomodel->f(ElementsEnum)[num_vertices*index+j]-1)];
  • issm/trunk/src/c/objects/Node.cpp

    r9362 r9376  
    5454        //intialize inputs, and add as many inputs per element as requested:
    5555        this->inputs=new Inputs();
    56         if (iomodel->f(NodeOnBedEnum))      this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->f(NodeOnBedEnum)[io_index]));
    57         if (iomodel->f(NodeOnSurfaceEnum))  this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->f(NodeOnSurfaceEnum)[io_index]));
    58         if (iomodel->f(NodeOnIceShelfEnum)) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->f(NodeOnIceShelfEnum)[io_index]));
    59         if (iomodel->f(NodeOnIceSheetEnum)) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->f(NodeOnIceSheetEnum)[io_index]));
     56        if (iomodel->IsLoaded(NodeOnBedEnum))      this->inputs->AddInput(new BoolInput(NodeOnBedEnum,(IssmBool)iomodel->f(NodeOnBedEnum)[io_index]));
     57        if (iomodel->IsLoaded(NodeOnSurfaceEnum))  this->inputs->AddInput(new BoolInput(NodeOnSurfaceEnum,(IssmBool)iomodel->f(NodeOnSurfaceEnum)[io_index]));
     58        if (iomodel->IsLoaded(NodeOnIceShelfEnum)) this->inputs->AddInput(new BoolInput(NodeOnIceShelfEnum,(IssmBool)iomodel->f(NodeOnIceShelfEnum)[io_index]));
     59        if (iomodel->IsLoaded(NodeOnIceSheetEnum)) this->inputs->AddInput(new BoolInput(NodeOnIceSheetEnum,(IssmBool)iomodel->f(NodeOnIceSheetEnum)[io_index]));
    6060        if (iomodel->numbernodetoelementconnectivity) this->inputs->AddInput(new IntInput(NumberNodeToElementConnectivityEnum,(IssmInt)iomodel->numbernodetoelementconnectivity[io_index]));
    6161        if (analysis_type==DiagnosticHorizAnalysisEnum) this->inputs->AddInput(new IntInput(ApproximationEnum,(IssmInt)iomodel->f(VerticesTypeEnum)[io_index]));
     
    6464
    6565        /*spc all nodes on water*/
    66         if (!iomodel->f(NodeOnWaterEnum)) _error_("iomodel->nodeonwater is NULL");
     66        if (!iomodel->IsLoaded(NodeOnWaterEnum)) _error_("iomodel->nodeonwater is NULL");
    6767        if (iomodel->f(NodeOnWaterEnum)[io_index]){
    6868                for(k=1;k<=gsize;k++){
     
    7575                if (dim==3){
    7676                        /*We have a  3d mesh, we may have collapsed elements, hence dead nodes. Freeze them out: */
    77                         if (!iomodel->f(NodeOnBedEnum)) _error_("iomodel->nodeonbed is NULL");
    78                         if (!iomodel->f(VerticesTypeEnum)) _error_("iomodel->vertices_type is NULL");
     77                        if (!iomodel->IsLoaded(NodeOnBedEnum)) _error_("iomodel->nodeonbed is NULL");
     78                        if (!iomodel->IsLoaded(VerticesTypeEnum)) _error_("iomodel->vertices_type is NULL");
    7979                        if (iomodel->f(VerticesTypeEnum)[io_index]==MacAyealApproximationEnum && !iomodel->f(NodeOnBedEnum)[io_index]){
    8080                                for(k=1;k<=gsize;k++) this->FreezeDof(k);
     
    9292                }
    9393                /*spc all nodes on hutter*/
    94                 if (!iomodel->f(NodeOnHutterEnum)) _error_("iomodel->nodeonhutter is NULL");
     94                if (!iomodel->IsLoaded(NodeOnHutterEnum)) _error_("iomodel->nodeonhutter is NULL");
    9595                if (iomodel->f(NodeOnHutterEnum)[io_index]){
    9696                        for(k=1;k<=gsize;k++){
     
    104104        if (analysis_type==DiagnosticHutterAnalysisEnum){
    105105                /*Constrain all nodes that are not Hutter*/
    106                 if (!iomodel->f(NodeOnHutterEnum)) _error_("iomodel->nodeonhutter is NULL");
     106                if (!iomodel->IsLoaded(NodeOnHutterEnum)) _error_("iomodel->nodeonhutter is NULL");
    107107                if (!iomodel->f(NodeOnHutterEnum)[io_index]){
    108108                        for(k=1;k<=gsize;k++){
Note: See TracChangeset for help on using the changeset viewer.