Changeset 27273
- Timestamp:
- 09/08/22 16:26:25 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/branches/trunk-larour-SLPS2022/src/c/modules/QmuStatisticsx/QmuStatisticsx.cpp
r27268 r27273 657 657 xDelete<IssmDouble>(allhisto); 658 658 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)); 661 661 } 662 662 xDelete<IssmDouble>(maxxs[counter]); … … 684 684 xDelete<IssmDouble>(allhisto); 685 685 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)); 688 688 } 689 689 xDelete<IssmDouble>(maxxs[counter]); … … 763 763 int ComputeMeanVariance(Parameters* parameters,Results* results,int color, ISSM_MPI_Comm statcomm){ /*{{{*/ 764 764 765 /*variables: {{{*/ 765 766 int nsamples; 766 767 char* directory=NULL; … … 790 791 int* meantype=NULL; 791 792 int* meansize=NULL; 793 /*}}}*/ 792 794 793 795 /*only work on the statistical communicator: */ … … 810 812 GetOwnershipBoundariesFromRange(&lower_row,&upper_row,range,IssmComm::GetComm()); 811 813 812 /*Initialize arrays: */814 /*Initialize arrays:{{{*/ 813 815 xs=xNew<IssmDouble*>(nfields*nsteps); 814 816 xs2=xNew<IssmDouble*>(nfields*nsteps); … … 820 822 meanx=xNew<IssmDouble*>(nfields); 821 823 meanx2=xNew<IssmDouble*>(nfields); 824 /*}}}*/ 822 825 823 826 /*Start opening files:*/ 824 827 for (int i=(lower_row+1);i<=upper_row;i++){ 825 828 _printf0_("reading file #: " << i << "\n"); 829 /*open buffer linked to file: {{{*/ 826 830 char file[1000]; 827 831 long int length; … … 850 854 _printf0_(" processing file:\n"); 851 855 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:{{{*/ 854 858 for (int f=0;f<nfields;f++){ 855 859 char* field=fields[f]; … … 893 897 } 894 898 } 895 } 896 897 /*Deal with time mean: */ 899 }/*}}}*/ 900 /*Same but for time mean: {{{*/ 898 901 for (int f=0;f<nfields;f++){ 899 902 char* field=fields[f]; … … 910 913 meanx2[f]=xNewZeroInit<IssmDouble>(doublematsize); 911 914 meansize[f]=doublematsize; 912 } 913 } 914 fseek(fid,0,SEEK_SET); 915 xDelete<IssmDouble>(doublemat); 916 } 917 } 918 fseek(fid,0,SEEK_SET); 915 919 if(meantype[f]==1){ 916 920 IssmDouble sc=0; … … 935 939 timemean[k]+=doublemat[k]/nsteps; 936 940 } 941 xDelete<IssmDouble>(doublemat); 937 942 } 938 943 for (int k=0;k<doublematsize;k++){ … … 946 951 } 947 952 948 } 953 } /*}}}*/ 954 /*cleanup:{{{*/ 949 955 fclose(fid); 950 951 /*delete buffer:*/952 956 xDelete<char>(buffer); 957 /*}}}*/ 953 958 } 954 959 ISSM_MPI_Barrier(IssmComm::GetComm()); … … 972 977 ISSM_MPI_Reduce(&scalar,&sumscalar,1,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); 973 978 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 974 983 /*Build average and standard deviation. For standard deviation, use the 975 984 *following formula: sigma^2=E(x^2)-mu^2:*/ … … 982 991 983 992 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)); 985 994 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)); 987 996 } 988 997 … … 1008 1017 ISSM_MPI_Reduce(x,sumx,size,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); 1009 1018 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]); 1010 1022 1011 1023 /*Build average and standard deviation. For standard deviation, use the … … 1015 1027 stddev[k]=sqrt(sumx2[k]/nsamples-pow(mean[k],2.0)); 1016 1028 } 1029 xDelete<IssmDouble>(sumx); 1030 xDelete<IssmDouble>(sumx2); 1017 1031 1018 1032 /*add to results:*/ … … 1021 1035 1022 1036 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)); 1024 1038 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 1028 1046 } /*}}}*/ 1029 1047 } … … 1038 1056 IssmDouble sumscalar; 1039 1057 IssmDouble sumscalar2; 1058 1059 xDelete<IssmDouble>(meanx[f]); 1060 xDelete<IssmDouble>(meanx2[f]); 1040 1061 1041 1062 ISSM_MPI_Reduce(&scalar,&sumscalar,1,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); … … 1072 1093 ISSM_MPI_Reduce(x2,sumx2,size,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,0,IssmComm::GetComm()); 1073 1094 1095 xDelete<IssmDouble>(meanx[f]); 1096 xDelete<IssmDouble>(meanx2[f]); 1097 1074 1098 /*Build average and standard deviation. For standard deviation, use the 1075 1099 *following formula: sigma^2=E(x^2)-mu^2:*/ … … 1088 1112 results->AddResult(new GenericExternalResult<IssmPDouble*>(results->Size()+1,fieldname,stddev,size,1,steps[0],0)); 1089 1113 } 1114 /*Deallocate:*/ 1115 xDelete<IssmDouble>(sumx); 1116 xDelete<IssmDouble>(sumx2); 1117 xDelete<IssmDouble>(mean); 1118 xDelete<IssmDouble>(stddev); 1090 1119 } /*}}}*/ 1091 1120 } 1092 1093 1121 _printf0_("Done with MeanVariance:\n"); 1094 1122 IssmComm::SetComm(ISSM_MPI_COMM_WORLD); 1095 1096 1123 return 1; 1097 1124 } /*}}}*/
Note:
See TracChangeset
for help on using the changeset viewer.