replaces some 32 bit integer with 64 bit interger for allowing the use of large data set

This commit is contained in:
yoshiya-usui 2024-03-25 07:20:38 +09:00
parent a4602643c9
commit ceb670fc59
2 changed files with 23 additions and 25 deletions

View File

@ -162,7 +162,7 @@ static char programName[]="femtic";
// [MajorVersion#].[MinorVersion#].[Revision#] // [MajorVersion#].[MinorVersion#].[Revision#]
// x.x.xa -> alpha version // x.x.xa -> alpha version
// x.x.xb -> beta version // x.x.xb -> beta version
static char versionID[]="4.2"; static char versionID[]="4.2.5";
} }

View File

@ -506,7 +506,8 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethod() const{
if( myProcessID == 0 ){//---- Processs ID = 0 Only ----->>>>> if( myProcessID == 0 ){//---- Processs ID = 0 Only ----->>>>>
OutputFiles::m_logFile << "# Calculate coefficient matrix. " << ptrAnalysisControl->outputElapsedTime() << std::endl; OutputFiles::m_logFile << "# Calculate coefficient matrix. " << ptrAnalysisControl->outputElapsedTime() << std::endl;
double* matrix = new double[ static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal) ]; const long long int numDataTotal_64 = static_cast<long long int>(numDataTotal);
double* matrix = new double[numDataTotal_64 * numDataTotal_64];
#ifdef _DEBUG_WRITE #ifdef _DEBUG_WRITE
for( long long i = 0; i < static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal); ++i ){ for( long long i = 0; i < static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal); ++i ){
matrix[i] = -9999.999; matrix[i] = -9999.999;
@ -568,7 +569,7 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethod() const{
const long long row = irow + static_cast<long long>(offsetRows); const long long row = irow + static_cast<long long>(offsetRows);
for( long long icol = 0; icol < numDataThisFreqRight; ++icol ){ for( long long icol = 0; icol < numDataThisFreqRight; ++icol ){
const long long col = icol + static_cast<long long>(offsetCols); const long long col = icol + static_cast<long long>(offsetCols);
matrix[ row * static_cast<long long>(numDataTotal) + col ] = result[ irow * static_cast<long long>(numDataThisFreqRight) + icol ]; matrix[ row * numDataTotal_64 + col ] = result[ irow * static_cast<long long>(numDataThisFreqRight) + icol ];
} }
} }
delete [] result; delete [] result;
@ -583,7 +584,6 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethod() const{
const long long numDataThisFreqLeft_64 = static_cast<long long>(numDataThisFreqLeft); const long long numDataThisFreqLeft_64 = static_cast<long long>(numDataThisFreqLeft);
const long long numDataThisFreqRight_64 = static_cast<long long>(numDataThisFreqRight); const long long numDataThisFreqRight_64 = static_cast<long long>(numDataThisFreqRight);
const long long numModel_64 = static_cast<long long>(numModel); const long long numModel_64 = static_cast<long long>(numModel);
const long long numDataTotal_64 = static_cast<long long>(numDataTotal);
const long long offsetRows_64 = static_cast<long long>(offsetRows); const long long offsetRows_64 = static_cast<long long>(offsetRows);
const long long offsetCols_64 = static_cast<long long>(offsetCols); const long long offsetCols_64 = static_cast<long long>(offsetCols);
#ifdef _USE_OMP #ifdef _USE_OMP
@ -614,22 +614,22 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethod() const{
//---------------------------------------------- //----------------------------------------------
// Add unit matrix // Add unit matrix
//---------------------------------------------- //----------------------------------------------
for( int row = 0; row < numDataTotal; ++row ){ for( long long int row = 0; row < numDataTotal_64; ++row ){
const int col = row; const long long int col = row;
matrix[ row * numDataTotal + col ] += 1.0; matrix[ row * numDataTotal_64 + col ] += 1.0;
} }
const long long numElemsOfCoefficientMatrixTotal = static_cast<long long>(numDataTotal) * ( static_cast<long long>(numDataTotal) + 1 ) / 2; const long long int numElemsOfCoefficientMatrixTotal = numDataTotal_64 * ( numDataTotal_64 + 1 ) / 2;
OutputFiles::m_logFile << "# Total number of elements in coefficient matrix : " << numElemsOfCoefficientMatrixTotal << std::endl; OutputFiles::m_logFile << "# Total number of elements in coefficient matrix : " << numElemsOfCoefficientMatrixTotal << std::endl;
matrixToBeInverted = new double [numElemsOfCoefficientMatrixTotal]; matrixToBeInverted = new double [numElemsOfCoefficientMatrixTotal];
//---------------------------------------------- //----------------------------------------------
// Copy only upper triangle components // Copy only upper triangle components
//---------------------------------------------- //----------------------------------------------
int index(0); long long int index(0);
for( int row = 0; row < numDataTotal; ++row ){ for(long long int row = 0; row < numDataTotal_64; ++row ){
for( int col = row; col < numDataTotal; ++col ){ for(long long int col = row; col < numDataTotal_64; ++col ){
matrixToBeInverted[index] = matrix[ row * numDataTotal + col ]; matrixToBeInverted[index] = matrix[ row * numDataTotal_64 + col ];
++index; ++index;
} }
} }
@ -646,7 +646,6 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethod() const{
OutputFiles::m_logFile << "# Start numerical factorization for normal equation. " << ptrAnalysisControl->outputElapsedTime() << std::endl; OutputFiles::m_logFile << "# Start numerical factorization for normal equation. " << ptrAnalysisControl->outputElapsedTime() << std::endl;
const long long int numModel_64 = static_cast<long long int>(numModel); const long long int numModel_64 = static_cast<long long int>(numModel);
const long long int numDataTotal_64 = static_cast<long long int>(numDataTotal);
const bool positiveDefinite = ptrAnalysisControl->getPositiveDefiniteNormalEqMatrix(); const bool positiveDefinite = ptrAnalysisControl->getPositiveDefiniteNormalEqMatrix();
long long int* ipiv = NULL; long long int* ipiv = NULL;
if( !positiveDefinite ){ if( !positiveDefinite ){
@ -1316,7 +1315,8 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethodUsingInvRTRMa
if( myProcessID == 0 ){//---- Processs ID = 0 Only ----->>>>> if( myProcessID == 0 ){//---- Processs ID = 0 Only ----->>>>>
OutputFiles::m_logFile << "# Calculate coefficient matrix. " << ptrAnalysisControl->outputElapsedTime() << std::endl; OutputFiles::m_logFile << "# Calculate coefficient matrix. " << ptrAnalysisControl->outputElapsedTime() << std::endl;
double* matrix = new double[ static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal) ]; const long long int numDataTotal_64 = static_cast<long long int>(numDataTotal);
double* matrix = new double[numDataTotal_64 * numDataTotal_64];
#ifdef _DEBUG_WRITE #ifdef _DEBUG_WRITE
for( long long i = 0; i < static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal); ++i ){ for( long long i = 0; i < static_cast<long long>(numDataTotal) * static_cast<long long>(numDataTotal); ++i ){
matrix[i] = -9999.999; matrix[i] = -9999.999;
@ -1378,7 +1378,7 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethodUsingInvRTRMa
const long long row = irow + static_cast<long long>(offsetRows); const long long row = irow + static_cast<long long>(offsetRows);
for( long long icol = 0; icol < numDataThisFreqRight; ++icol ){ for( long long icol = 0; icol < numDataThisFreqRight; ++icol ){
const long long col = icol + static_cast<long long>(offsetCols); const long long col = icol + static_cast<long long>(offsetCols);
matrix[ row * static_cast<long long>(numDataTotal) + col ] = result[ irow * static_cast<long long>(numDataThisFreqRight) + icol ]; matrix[ row * numDataTotal_64 + col ] = result[ irow * static_cast<long long>(numDataThisFreqRight) + icol ];
} }
} }
delete [] result; delete [] result;
@ -1393,7 +1393,6 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethodUsingInvRTRMa
const long long numDataThisFreqLeft_64 = static_cast<long long>(numDataThisFreqLeft); const long long numDataThisFreqLeft_64 = static_cast<long long>(numDataThisFreqLeft);
const long long numDataThisFreqRight_64 = static_cast<long long>(numDataThisFreqRight); const long long numDataThisFreqRight_64 = static_cast<long long>(numDataThisFreqRight);
const long long numModel_64 = static_cast<long long>(numModel); const long long numModel_64 = static_cast<long long>(numModel);
const long long numDataTotal_64 = static_cast<long long>(numDataTotal);
const long long offsetRows_64 = static_cast<long long>(offsetRows); const long long offsetRows_64 = static_cast<long long>(offsetRows);
const long long offsetCols_64 = static_cast<long long>(offsetCols); const long long offsetCols_64 = static_cast<long long>(offsetCols);
#ifdef _USE_OMP #ifdef _USE_OMP
@ -1424,22 +1423,22 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethodUsingInvRTRMa
//---------------------------------------------- //----------------------------------------------
// Add unit matrix // Add unit matrix
//---------------------------------------------- //----------------------------------------------
for( int row = 0; row < numDataTotal; ++row ){ for( long long int row = 0; row < numDataTotal_64; ++row ){
const int col = row; const long long int col = row;
matrix[ row * numDataTotal + col ] += 1.0; matrix[ row * numDataTotal_64 + col ] += 1.0;
} }
const long long numElemsOfCoefficientMatrixTotal = static_cast<long long>(numDataTotal) * ( static_cast<long long>(numDataTotal) + 1 ) / 2; const long long numElemsOfCoefficientMatrixTotal = numDataTotal_64 * ( numDataTotal_64 + 1 ) / 2;
OutputFiles::m_logFile << "# Total number of elements in coefficient matrix : " << numElemsOfCoefficientMatrixTotal << std::endl; OutputFiles::m_logFile << "# Total number of elements in coefficient matrix : " << numElemsOfCoefficientMatrixTotal << std::endl;
matrixToBeInverted = new double [numElemsOfCoefficientMatrixTotal]; matrixToBeInverted = new double [numElemsOfCoefficientMatrixTotal];
//---------------------------------------------- //----------------------------------------------
// Copy only upper triangle components // Copy only upper triangle components
//---------------------------------------------- //----------------------------------------------
int index(0); long long int index(0);
for( int row = 0; row < numDataTotal; ++row ){ for( long long int row = 0; row < numDataTotal_64; ++row ){
for( int col = row; col < numDataTotal; ++col ){ for(long long int col = row; col < numDataTotal_64; ++col ){
matrixToBeInverted[index] = matrix[ row * numDataTotal + col ]; matrixToBeInverted[index] = matrix[ row * numDataTotal_64 + col ];
++index; ++index;
} }
} }
@ -1456,7 +1455,6 @@ void InversionGaussNewtonDataSpace::inversionCalculationByNewMethodUsingInvRTRMa
OutputFiles::m_logFile << "# Start numerical factorization for normal equation. " << ptrAnalysisControl->outputElapsedTime() << std::endl; OutputFiles::m_logFile << "# Start numerical factorization for normal equation. " << ptrAnalysisControl->outputElapsedTime() << std::endl;
const long long int numModel_64 = static_cast<long long int>(numModel); const long long int numModel_64 = static_cast<long long int>(numModel);
const long long int numDataTotal_64 = static_cast<long long int>(numDataTotal);
const bool positiveDefinite = ptrAnalysisControl->getPositiveDefiniteNormalEqMatrix(); const bool positiveDefinite = ptrAnalysisControl->getPositiveDefiniteNormalEqMatrix();
long long int* ipiv = NULL; long long int* ipiv = NULL;
if( !positiveDefinite ){ if( !positiveDefinite ){