Changeset 16469


Ignore:
Timestamp:
10/18/13 21:04:59 (11 years ago)
Author:
Mathieu Morlighem
Message:

BUG: make sure identical results are deleted before being added

Location:
issm/trunk-jpl/src/c
Files:
5 edited

Legend:

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

    r16461 r16469  
    226226                        /*Serialize and add to results*/
    227227                        vector_serial=vector->ToMPISerial();
     228                        results->DeleteResult(resultsenums[i],resultssteps[i]);
    228229                        if(my_rank==0){
    229230                                /*No need to add this vector for all cpus*/
     
    231232                                IssmPDouble* vector_serial_passive=xNew<IssmPDouble>(vectorsize);
    232233                                for(int k=0;k<vectorsize;k++)vector_serial_passive[k]=reCast<IssmPDouble>(vector_serial[k]);
    233                                 results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
     234                                results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial_passive,vectorsize,1,resultssteps[i],resultstimes[i]));
    234235                                xDelete<IssmPDouble>(vector_serial_passive);
    235236                                #else
    236                                 results->AddObject(new GenericExternalResult<double*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
     237                                results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,resultsenums[i],vector_serial,vectorsize,1,resultssteps[i],resultstimes[i]));
    237238                                #endif
    238239                        }
  • issm/trunk-jpl/src/c/classes/ExternalResults/GenericExternalResult.h

    r16461 r16469  
    371371template <> inline void GenericExternalResult<Vector<IssmPDouble>*>::Echo(void){ /*{{{*/
    372372
    373         _printf_("GenericExternalResult<IssmPDouble*>:\n");
     373        _printf_("GenericExternalResult<Vector<IssmPDouble>*>:\n");
    374374        this->GenericEcho();
    375375        this->value->Echo();
  • issm/trunk-jpl/src/c/classes/ExternalResults/Results.cpp

    r16461 r16469  
    5858         * object before adding this new one: */
    5959        vector<Object*>::iterator object;
    60         ElementResult* result=NULL;
    6160
    6261        /*In debugging mode, check that the input is not a NULL pointer*/
     
    6564        for(object=objects.begin() ; object<objects.end(); object++){
    6665
    67                 result=dynamic_cast<ElementResult*>(*object);
     66                ElementResult* result=dynamic_cast<ElementResult*>(*object);
    6867
    6968                if(result->InstanceEnum()==in_result->InstanceEnum()){
     
    7978}
    8079/*}}}*/
     80/*FUNCTION Results::AddResult(ExternalResult* in_result){{{*/
     81int Results::AddResult(ExternalResult* in_result){
     82
     83        /*First, go through dataset of inputs and check whether any input
     84         * with the same name is already in. If so, erase the corresponding
     85         * object before adding this new one: */
     86
     87        /*In debugging mode, check that the input is not a NULL pointer*/
     88        _assert_(in_result);
     89
     90        for(int i=0;i<this->Size();i++){
     91                ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
     92
     93                if(result->InstanceEnum()==in_result->InstanceEnum()){
     94                        if(result->GetStep()==in_result->GetStep()){
     95                                this->DeleteObject(result);
     96                                break;
     97                        }
     98                }
     99        }
     100        this->AddObject(in_result);
     101
     102        return 1;
     103}
     104/*}}}*/
     105/*FUNCTION Results::DeleteResult(ExternalResult* in_result){{{*/
     106int Results::DeleteResult(int result_enum,int result_step){
     107
     108        for(int i=0;i<this->Size();i++){
     109                ExternalResult* result=dynamic_cast<ExternalResult*>(this->GetObjectByOffset(i));
     110
     111                if(result->InstanceEnum()==result_enum){
     112                        if(result->GetStep()==result_step){
     113                                this->DeleteObject(result);
     114                                break;
     115                        }
     116                }
     117        }
     118
     119        return 1;
     120}
     121/*}}}*/
  • issm/trunk-jpl/src/c/classes/ExternalResults/Results.h

    r15898 r16469  
    77class Parameters;
    88class ElementResult;
     9class ExternalResult;
    910
    1011/*!\brief Declaration of Results class.
     
    2223                /*Mehthos*/
    2324                int AddResult(ElementResult* result);
     25                int AddResult(ExternalResult* result);
     26                int DeleteResult(int result_enum,int result_step);
    2427                void Write(Parameters* parameters);
    2528};
  • issm/trunk-jpl/src/c/modules/OutputResultsx/OutputResultsx.cpp

    r15559 r16469  
    4646                parameters->FindParam(&solutiontype,SolutionTypeEnum);
    4747                EnumToStringx(&solutiontypestring,solutiontype);
    48                 results->AddObject(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
     48                results->AddResult(new GenericExternalResult<char*>(results->Size()+1,SolutionTypeEnum,solutiontypestring,1,0));
    4949                xDelete<char>(solutiontypestring);
    5050        }
Note: See TracChangeset for help on using the changeset viewer.