[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