[us-commits] r2813 - trunk/programs/us_density_match
svn at svn.aucsolutions.com
svn at svn.aucsolutions.com
Wed Aug 14 12:27:09 MDT 2019
Author: gegorbet
Date: 2019-08-14 18:27:09 +0000 (Wed, 14 Aug 2019)
New Revision: 2813
Modified:
trunk/programs/us_density_match/us_density_match.cpp
trunk/programs/us_density_match/us_model_params.cpp
Log:
density_match fixes for D2O-percent zero not in the first row
Modified: trunk/programs/us_density_match/us_density_match.cpp
===================================================================
--- trunk/programs/us_density_match/us_density_match.cpp 2019-08-14 15:51:08 UTC (rev 2812)
+++ trunk/programs/us_density_match/us_density_match.cpp 2019-08-14 18:27:09 UTC (rev 2813)
@@ -1027,7 +1027,7 @@
// Remove distribution(s) from the models list
void US_Density_Match::remove_distro( void )
{
-qDebug() << "rmvdis:Remove Distros";
+DbgLv(1) << "rmvdis:Remove Distros";
US_RemoveModels rmvd( alldis );
if ( rmvd.exec() == QDialog::Accepted )
@@ -1041,24 +1041,25 @@
}
curr_distr = 0;
-qDebug() << "rmvdis:Accepted";
+DbgLv(1) << "rmvdis:Accepted";
}
-qDebug() << "rmvdis:plot_data";
+DbgLv(1) << "rmvdis:plot_data";
plot_data();
-qDebug() << "rmvdis:DONE";
+DbgLv(1) << "rmvdis:DONE";
}
// Set/modify model distribution parameters
void US_Density_Match::set_mparms( void )
{
-qDebug() << "mdlpar:Set Model Parameters";
+DbgLv(1) << "mdlpar:Set Model Parameters";
// Open Model Parameters dialog
US_ModelParams mpdiag( alldis, this );
// Use parameters returned
if ( mpdiag.exec() == QDialog::Accepted )
{ // Redo text box summarizing models; calculate vectors
+DbgLv(1) << "mdlpar: Accepted";
QString mdesc = mdescs[ 0 ].section( mdescs[ 0 ].left( 1 ), 1, 1 );
mdesc = QString( mdesc ).left( 50 );
QString dinfo = alldis[ 0 ].run_name.section( ".", 0, -2 ) + "\n\n"
@@ -1322,6 +1323,17 @@
}
DbgLv(1) << "BldVc: vb 0 1 k n" << v_vbars[0] << v_vbars[1]
<< v_vbars[npoints-2] << v_vbars[npoints-1];
+ // Determine the distribution index of zero-percent-D2O
+ int zx = 0;
+ for ( int ii = 0; ii < ndists; ii++ )
+ {
+ if ( alldis[ ii ].d2opct == 0.0 )
+ {
+ zx = ii;
+ break;
+ }
+ }
+DbgLv(1) << "BldVc: zx" << zx;
// Compute molar mass values and build the vector
v_mmass.clear();
@@ -1331,8 +1343,8 @@
// *** Mi = si*R*T/(Di_avg*(1-vbari*rho))
// double sedco = alldis[ 0 ].bf_distro[ jj ].s * 1.0e-13;
// double difco = alldis[ 0 ].bf_distro[ jj ].d * 1.0e-7;
- double sedco = v_sedcs[ 0 ][ jj ] * 1.0e-13;
- double difco = v_difcs[ 0 ][ jj ] * 1.0e-7;
+ double sedco = v_sedcs[ zx ][ jj ] * 1.0e-13;
+ double difco = v_difcs[ zx ][ jj ] * 1.0e-7;
double vbari = v_vbars[ jj ];
double mmass = sedco * R_GC * K20 / ( difco * ( 1.0 - vbari * DENS_20W ) );
mmass = qAbs( mmass );
@@ -1353,7 +1365,7 @@
// *** fi/f_0i
// *** ri = fi/(6 * pi * eta) <-- hydrodynamic radius
// double difco = alldis[ 0 ].bf_distro[ jj ].d * 1.0e-7;
- double difco = v_difcs[ 0 ][ jj ] * 1.0e-7;
+ double difco = v_difcs[ zx ][ jj ] * 1.0e-7;
double frico = R_GC * K20 / ( difco * AVOGADRO );
double hyrad = frico / ( 6.0 * M_PI * VISC_20W );
v_hrads << hyrad;
@@ -1375,7 +1387,7 @@
// *** fi/f_0i
// *** ri = fi/(6 * pi * eta) <-- hydrodynamic radius
// double difco = alldis[ 0 ].bf_distro[ jj ].d * 1.0e-7;
- double difco = v_difcs[ 0 ][ jj ] * 1.0e-7;
+ double difco = v_difcs[ zx ][ jj ] * 1.0e-7;
double vbari = v_vbars[ jj ];
// double rzero = pow( ( ( 0.75 / M_PI ) * vbari ), a_third );
double volum = v_mmass[ jj ] * vbari / AVOGADRO;
Modified: trunk/programs/us_density_match/us_model_params.cpp
===================================================================
--- trunk/programs/us_density_match/us_model_params.cpp 2019-08-14 15:51:08 UTC (rev 2812)
+++ trunk/programs/us_density_match/us_model_params.cpp 2019-08-14 18:27:09 UTC (rev 2813)
@@ -183,27 +183,37 @@
}
}
+DbgLv(1) << " acc: ACCEPT";
accept();
+DbgLv(1) << " acc: return";
}
-// Private slot to do the actual removal of distributions and close
+// Private slot to do close/reject without returning parameters
void US_ModelParams::canceled()
{
DbgLv(1) << "canceled";
reject();
}
+// Compute densities for all rows where D2O percent is not zero
void US_ModelParams::compute_densities()
{
const double dnslope = 0.00108766;
QList< QObject* > ochilds = this->children();
int nzd2pc = 0;
int npd2pc = 0;
+ int kk = -1;
bool misspc = false;
double d2opct = -1.0;
double denszpc = 0.0;
double density = 0.0;
+ QVector< double > m_dens;
+ QVector< double > m_d2op;
+ QVector< QLineEdit* > m_lned;
+ m_dens.fill( 0.0, nd_orig );
+ m_d2op.fill( 0.0, nd_orig );
DbgLv(1) << " cdn: ochilds size" << ochilds.size();
+
for ( int jj = 0; jj < ochilds.size(); jj++ )
{
QObject* ochild = ochilds[ jj ];
@@ -211,38 +221,65 @@
QString cname = ochild->objectName();
QString pname = cname.section( ":", 0, 0 );
if ( pname == "D2OP" )
- {
+ { // Handle D2O percent text
d2opct = lned->text().toDouble();
if ( d2opct == 0.0 )
- {
+ { // If zero, bump count and test if not 1st row
nzd2pc++;
if ( npd2pc > 0 )
misspc = true;
}
else
- {
+ { // For non-zero, bump count, test if follow zero row
npd2pc++;
if ( nzd2pc == 0 )
misspc = true;
}
+ // Save the D2O percent in a work vector
+ kk++;
+ m_d2op[ kk ] = d2opct;
}
else if ( pname == "DENS" )
- {
+ { // Handle Density text
density = lned->text().toDouble();
if ( d2opct == 0.0 )
- {
+ { // Save density following percent=0
denszpc = density;
}
- else
- {
+ else if ( nzd2pc > 0 )
+ { // Compute density where percent!=0; update text box
density = denszpc + d2opct * dnslope;
lned->setText( QString::number( density ) );
}
+ else
+ { // Flag percent>0 density when no z-density yet found
+ density = 0.0;
+ misspc = true;
+ }
+ // Save the density in a work vector; save pointer to textbox
+ m_dens[ kk ] = density;
+ m_lned << lned;
}
}
DbgLv(1) << " cdn: misspc" << misspc;
+
+ if ( misspc )
+ { // Fill in computed densities before first pct=0
+ for ( int ii = 0; ii < nd_orig; ii++ )
+ {
+ density = m_dens[ ii ];
+ if ( density == 0.0 )
+ { // Compute density when unable to do so during 1st pass
+ d2opct = m_d2op[ ii ];
+ density = denszpc + d2opct * dnslope;
+ m_lned[ ii ]->setText( QString::number( density ) );
+DbgLv(1) << " cdn: misspc ii" << ii << "density" << density;
+ }
+ }
+ }
}
+// Test if all needed values have been filled in; set Accept accordingly
bool US_ModelParams::values_filled()
{
QList< QObject* > ochilds = this->children();
More information about the us-commits
mailing list