Changeset 27273


Ignore:
Timestamp:
09/08/22 16:26:25 (3 years ago)
Author:
Eric.Larour
Message:

CHG: fixing issues with time indexing of results. fixed lots of memory leaks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/branches/trunk-larour-SLPS2022/src/c/modules/QmuStatisticsx/QmuStatisticsx.cpp

    r27268 r27273  
    657657                                xDelete<IssmDouble>(allhisto);
    658658                                if(my_rank==0){
    659                                         sprintf(fieldname,"%s%s",fields[f],"Max"); results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,*maxxs[counter],j+1,0));
    660                                         sprintf(fieldname,"%s%s",fields[f],"Min"); results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,*minxs[counter],j+1,0));
     659                                        sprintf(fieldname,"%s%s",fields[f],"Max"); results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,*maxxs[counter],steps[j],0));
     660                                        sprintf(fieldname,"%s%s",fields[f],"Min"); results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,*minxs[counter],steps[j],0));
    661661                                }
    662662                                xDelete<IssmDouble>(maxxs[counter]);
     
    684684                                xDelete<IssmDouble>(allhisto);
    685685                                if(my_rank==0){
    686                                         sprintf(fieldname,"%s%s",fields[f],"Max"); results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,maxxs[counter],size,1,j+1,0));
    687                                         sprintf(fieldname,"%s%s",fields[f],"Min"); results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,minxs[counter],size,1,j+1,0));
     686                                        sprintf(fieldname,"%s%s",fields[f],"Max"); results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,maxxs[counter],size,1,steps[j],0));
     687                                        sprintf(fieldname,"%s%s",fields[f],"Min"); results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,minxs[counter],size,1,steps[j],0));
    688688                                }
    689689                                xDelete<IssmDouble>(maxxs[counter]);
     
    763763int ComputeMeanVariance(Parameters* parameters,Results* results,int color, ISSM_MPI_Comm statcomm){  /*{{{*/
    764764
     765        /*variables: {{{*/
    765766        int nsamples;
    766767        char* directory=NULL;
     
    790791        int*         meantype=NULL;
    791792        int*         meansize=NULL;
     793        /*}}}*/
    792794
    793795        /*only work on the statistical communicator: */
     
    810812        GetOwnershipBoundariesFromRange(&lower_row,&upper_row,range,IssmComm::GetComm());
    811813
    812         /*Initialize arrays:*/
     814        /*Initialize arrays:{{{*/
    813815        xs=xNew<IssmDouble*>(nfields*nsteps);
    814816        xs2=xNew<IssmDouble*>(nfields*nsteps);
     
    820822        meanx=xNew<IssmDouble*>(nfields);
    821823        meanx2=xNew<IssmDouble*>(nfields);
     824        /*}}}*/
    822825
    823826        /*Start opening files:*/
    824827        for (int i=(lower_row+1);i<=upper_row;i++){
    825828                _printf0_("reading file #: " << i << "\n");
     829                /*open buffer linked to file: {{{*/
    826830                char file[1000];
    827831                long int  length;
     
    850854                _printf0_("    processing file:\n");
    851855                fid=fmemopen(buffer, length, "rb");
    852 
    853                 /*start reading data from the buffer directly:*/
     856                /*}}}*/
     857                /*read x and x^2 values for each time step:{{{*/
    854858                for (int f=0;f<nfields;f++){
    855859                        char* field=fields[f];
     
    893897                                }
    894898                        }
    895                 }
    896 
    897                 /*Deal with time mean: */
     899                }/*}}}*/
     900                /*Same but for time mean: {{{*/
    898901                for (int f=0;f<nfields;f++){
    899902                        char* field=fields[f];
     
    910913                                        meanx2[f]=xNewZeroInit<IssmDouble>(doublematsize);
    911914                                        meansize[f]=doublematsize;
    912                                 }
    913                         }
    914                         fseek(fid,0,SEEK_SET);
     915                                        xDelete<IssmDouble>(doublemat);
     916                                }
     917                        }
     918                        fseek(fid,0,SEEK_SET);
    915919                        if(meantype[f]==1){
    916920                                IssmDouble sc=0;
     
    935939                                                timemean[k]+=doublemat[k]/nsteps;
    936940                                        }
     941                                        xDelete<IssmDouble>(doublemat);
    937942                                }
    938943                                for (int k=0;k<doublematsize;k++){
     
    946951                        }
    947952
    948                 }
     953                } /*}}}*/
     954                /*cleanup:{{{*/
    949955                fclose(fid);
    950 
    951                 /*delete buffer:*/
    952956                xDelete<char>(buffer);
     957                /*}}}*/
    953958        }
    954959        ISSM_MPI_Barrier(IssmComm::GetComm());
     
    972977                                ISSM_MPI_Reduce(&scalar,&sumscalar,1,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
    973978                                ISSM_MPI_Reduce(&scalar2,&sumscalar2,1,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
     979                               
     980                                xDelete<IssmDouble>(xs[counter]);
     981                                xDelete<IssmDouble>(xs2[counter]);
     982
    974983                                /*Build average and standard deviation. For standard deviation, use the
    975984                                 *following formula: sigma^2=E(x^2)-mu^2:*/
     
    982991
    983992                                        sprintf(fieldname,"%s%s",fields[f],"Mean");
    984                                         results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,mean,j+1,0));
     993                                        results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,mean,steps[j],0));
    985994                                        sprintf(fieldname,"%s%s",fields[f],"Stddev");
    986                                         results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,stddev,j+1,0));
     995                                        results->AddResult(new GenericExternalResult<IssmDouble>(results->Size()+1,fieldname,stddev,steps[j],0));
    987996                                }
    988997
     
    10081017                                ISSM_MPI_Reduce(x,sumx,size,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
    10091018                                ISSM_MPI_Reduce(x2,sumx2,size,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
     1019                               
     1020                                xDelete<IssmDouble>(xs[counter]);
     1021                                xDelete<IssmDouble>(xs2[counter]);
    10101022
    10111023                                /*Build average and standard deviation. For standard deviation, use the
     
    10151027                                        stddev[k]=sqrt(sumx2[k]/nsamples-pow(mean[k],2.0));
    10161028                                }
     1029                                xDelete<IssmDouble>(sumx);
     1030                                xDelete<IssmDouble>(sumx2);
    10171031
    10181032                                /*add to results:*/
     
    10211035
    10221036                                        sprintf(fieldname,"%s%s",fields[f],"Mean");
    1023                                         results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,mean,size,1,j+1,0));
     1037                                        results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,mean,size,1,steps[j],0));
    10241038                                        sprintf(fieldname,"%s%s",fields[f],"Stddev");
    1025                                         results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,stddev,size,1,j+1,0));
    1026                                 }
    1027                         }
     1039                                        results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,stddev,size,1,steps[j],0));
     1040                                }
     1041                        }
     1042                        /*Deallocate:*/
     1043                        xDelete<IssmDouble>(mean);
     1044                        xDelete<IssmDouble>(stddev);
     1045
    10281046                } /*}}}*/
    10291047        }
     
    10381056                        IssmDouble sumscalar;
    10391057                        IssmDouble sumscalar2;
     1058
     1059                        xDelete<IssmDouble>(meanx[f]);
     1060                        xDelete<IssmDouble>(meanx2[f]);
    10401061
    10411062                        ISSM_MPI_Reduce(&scalar,&sumscalar,1,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
     
    10721093                        ISSM_MPI_Reduce(x2,sumx2,size,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm());
    10731094
     1095                        xDelete<IssmDouble>(meanx[f]);
     1096                        xDelete<IssmDouble>(meanx2[f]);
     1097
    10741098                        /*Build average and standard deviation. For standard deviation, use the
    10751099                         *following formula: sigma^2=E(x^2)-mu^2:*/
     
    10881112                                results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,stddev,size,1,steps[0],0));
    10891113                        }
     1114                        /*Deallocate:*/
     1115                        xDelete<IssmDouble>(sumx);
     1116                        xDelete<IssmDouble>(sumx2);
     1117                        xDelete<IssmDouble>(mean);
     1118                        xDelete<IssmDouble>(stddev);
    10901119                } /*}}}*/
    10911120        }
    1092 
    10931121        _printf0_("Done with MeanVariance:\n");
    10941122        IssmComm::SetComm(ISSM_MPI_COMM_WORLD);
    1095 
    10961123        return 1;
    10971124} /*}}}*/
Note: See TracChangeset for help on using the changeset viewer.