Index: sansmodels/src/c_models/DiamCyl.cpp
===================================================================
--- sansmodels/src/c_models/DiamCyl.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/DiamCyl.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -110,2 +110,5 @@
   return 0.0;
 }
+double DiamCylFunc :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/DiamEllip.cpp
===================================================================
--- sansmodels/src/c_models/DiamEllip.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/DiamEllip.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -108,2 +108,5 @@
   return 0.0;
 }
+double DiamEllipFunc :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/Hardsphere.cpp
===================================================================
--- sansmodels/src/c_models/Hardsphere.cpp	(revision 101065a9bd217be61773f8eba38d0c461efee3fd)
+++ sansmodels/src/c_models/Hardsphere.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -101,2 +101,5 @@
   return 0.0;
 }
+double HardsphereStructure :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/HayterMSA.cpp
===================================================================
--- sansmodels/src/c_models/HayterMSA.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/HayterMSA.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -111,2 +111,5 @@
   return 0.0;
 }
+double HayterMSAStructure :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/SquareWell.cpp
===================================================================
--- sansmodels/src/c_models/SquareWell.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/SquareWell.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -105,2 +105,5 @@
   return 0.0;
 }
+double SquareWellStructure :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/StickyHS.cpp
===================================================================
--- sansmodels/src/c_models/StickyHS.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/StickyHS.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -108,2 +108,5 @@
   return 0.0;
 }
+double StickyHSStructure :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/barbell.cpp
===================================================================
--- sansmodels/src/c_models/barbell.cpp	(revision ef93acb3321812486dc72fb560e6bc781d5e6b87)
+++ sansmodels/src/c_models/barbell.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -346,2 +346,9 @@
 	return 0.0;
 }
+/**
+ * Function to calculate volf_ratio for shell/tot
+ * @return: volf_ratio value
+ */
+double BarBellModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/bcc.cpp
===================================================================
--- sansmodels/src/c_models/bcc.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/bcc.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -330,2 +330,5 @@
 	return 0.0;
 }
+double BCCrystalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/binaryHS.cpp
===================================================================
--- sansmodels/src/c_models/binaryHS.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/binaryHS.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -123,3 +123,5 @@
   return 0.0;
 }
-
+double BinaryHSModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/binaryHS_PSF11.cpp
===================================================================
--- sansmodels/src/c_models/binaryHS_PSF11.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/binaryHS_PSF11.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -48,4 +48,5 @@
   double operator()(double qx , double qy);
   double calculate_ER();
+  double calculate_VR();
   double evaluate_rphi(double q, double phi);
 };
@@ -143,2 +144,5 @@
 	return 0.0;
 }
+double BinaryHSPSF11Model :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/capcyl.cpp
===================================================================
--- sansmodels/src/c_models/capcyl.cpp	(revision 0c2389e37de84233866b9c1d939767aaa933ec16)
+++ sansmodels/src/c_models/capcyl.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -403,2 +403,5 @@
 	return 0.0;
 }
+double CappedCylinderModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/corefourshell.cpp
===================================================================
--- sansmodels/src/c_models/corefourshell.cpp	(revision 011e0e4569d018a5f39b70032285911f67750383)
+++ sansmodels/src/c_models/corefourshell.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -253,2 +253,5 @@
 	return rad_out;
 }
+double CoreFourShellModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/coresecondmoment.cpp
===================================================================
--- sansmodels/src/c_models/coresecondmoment.cpp	(revision 7289627c1e08098ecdc843692314e929bbccca9b)
+++ sansmodels/src/c_models/coresecondmoment.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -129,2 +129,5 @@
 	return 0.0;
 }
+double Core2ndMomentModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/coreshellbicelle.cpp
===================================================================
--- sansmodels/src/c_models/coreshellbicelle.cpp	(revision 543d1bdf2522521f8b1cf13fbbdd48ab4631fe09)
+++ sansmodels/src/c_models/coreshellbicelle.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -428,2 +428,5 @@
   return rad_out;
 }
+double CoreShellBicelleModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/coreshellcylinder.cpp
===================================================================
--- sansmodels/src/c_models/coreshellcylinder.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/coreshellcylinder.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -387,2 +387,5 @@
   return rad_out;
 }
+double CoreShellCylinderModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/coreshellsphere.cpp
===================================================================
--- sansmodels/src/c_models/coreshellsphere.cpp	(revision 011e0e4569d018a5f39b70032285911f67750383)
+++ sansmodels/src/c_models/coreshellsphere.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -177,2 +177,5 @@
   return rad_out;
 }
+double CoreShellModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/csparallelepiped.cpp
===================================================================
--- sansmodels/src/c_models/csparallelepiped.cpp	(revision c637521b288a6e3976fc9c0d461b44f70bb58c10)
+++ sansmodels/src/c_models/csparallelepiped.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -552,2 +552,5 @@
 
 }
+double CSParallelepipedModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/cylinder.cpp
===================================================================
--- sansmodels/src/c_models/cylinder.cpp	(revision 0c2389e37de84233866b9c1d939767aaa933ec16)
+++ sansmodels/src/c_models/cylinder.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -339,2 +339,5 @@
 	return rad_out;
 }
+double CylinderModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/ellipsoid.cpp
===================================================================
--- sansmodels/src/c_models/ellipsoid.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/ellipsoid.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -340,2 +340,5 @@
   return rad_out;
 }
+double EllipsoidModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/ellipticalcylinder.cpp
===================================================================
--- sansmodels/src/c_models/ellipticalcylinder.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/ellipticalcylinder.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -459,2 +459,5 @@
   return rad_out;
 }
+double EllipticalCylinderModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/fcc.cpp
===================================================================
--- sansmodels/src/c_models/fcc.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/fcc.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -325,2 +325,5 @@
   return 0.0;
 }
+double FCCrystalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/flexcyl_ellipX.cpp
===================================================================
--- sansmodels/src/c_models/flexcyl_ellipX.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/flexcyl_ellipX.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -212,2 +212,5 @@
   return rad_out;
 }
+double FlexCylEllipXModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/flexiblecylinder.cpp
===================================================================
--- sansmodels/src/c_models/flexiblecylinder.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/flexiblecylinder.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -191,2 +191,5 @@
 	return rad_out;
 }
+double FlexibleCylinderModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/fractal.cpp
===================================================================
--- sansmodels/src/c_models/fractal.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/fractal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -119,2 +119,5 @@
   return 0.0;
 }
+double FractalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/fuzzysphere.cpp
===================================================================
--- sansmodels/src/c_models/fuzzysphere.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/fuzzysphere.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -180,2 +180,5 @@
 	return rad_out;
 }
+double FuzzySphereModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/gaussian.cpp
===================================================================
--- sansmodels/src/c_models/gaussian.cpp	(revision 101065a9bd217be61773f8eba38d0c461efee3fd)
+++ sansmodels/src/c_models/gaussian.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -78,2 +78,5 @@
   return 0.0;
 }
+double Gaussian :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/hollowcylinder.cpp
===================================================================
--- sansmodels/src/c_models/hollowcylinder.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/hollowcylinder.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -372,2 +372,52 @@
   return rad_out;
 }
+/**
+ * Function to calculate volf_ratio for shell
+ * @return: volf_ratio value
+ */
+double HollowCylinderModel :: calculate_VR() {
+  HollowCylinderParameters dp;
+  dp.core_radius = core_radius();
+  dp.radius  = radius();
+  dp.length  = length();
+
+  double rad_out = 0.0;
+
+  // Perform the computation, with all weight points
+  double sum_tot = 0.0;
+  double sum_shell = 0.0;
+
+  // Get the dispersion points for the major shell
+  vector<WeightPoint> weights_length;
+  length.get_weights(weights_length);
+
+  // Get the dispersion points for the minor shell
+  vector<WeightPoint> weights_radius ;
+  radius.get_weights(weights_radius);
+
+  // Get the dispersion points for the core radius
+  vector<WeightPoint> weights_core_radius;
+  core_radius.get_weights(weights_core_radius);
+
+  // Loop over major shell weight points
+  for(int i=0; i< (int)weights_length.size(); i++) {
+    dp.length = weights_length[i].value;
+    for(int k=0; k< (int)weights_radius.size(); k++) {
+      dp.radius = weights_radius[k].value;
+      for(int j=0; j<(int)weights_core_radius.size(); j++) {
+    	  dp.core_radius = weights_core_radius[j].value;
+		  sum_tot +=weights_length[i].weight* weights_core_radius[j].weight
+			  * weights_radius[k].weight*pow(dp.radius, 2);
+		  sum_shell += weights_length[i].weight* weights_core_radius[j].weight
+			  * weights_radius[k].weight*(pow(dp.radius, 2)-pow(dp.core_radius, 2));
+      }
+    }
+  }
+    if (sum_tot == 0.0){
+      //return the default value
+      rad_out =  1.0;}
+    else{
+      //return ratio value
+      return sum_shell/sum_tot;
+    }
+}
Index: sansmodels/src/c_models/lamellar.cpp
===================================================================
--- sansmodels/src/c_models/lamellar.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/lamellar.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -130,2 +130,5 @@
 	return 0.0;
 }
+double LamellarModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/lamellarFF_HG.cpp
===================================================================
--- sansmodels/src/c_models/lamellarFF_HG.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/lamellarFF_HG.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -119,2 +119,5 @@
   return 0.0;
 }
+double LamellarFFHGModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/lamellarPC.cpp
===================================================================
--- sansmodels/src/c_models/lamellarPC.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/lamellarPC.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -119,2 +119,5 @@
   return 0.0;
 }
+double LamellarPCrystalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/lamellarPS.cpp
===================================================================
--- sansmodels/src/c_models/lamellarPS.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/lamellarPS.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -182,3 +182,5 @@
   return 0.0;
 }
-
+double LamellarPSModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/lamellarPS_HG.cpp
===================================================================
--- sansmodels/src/c_models/lamellarPS_HG.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/lamellarPS_HG.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -135,2 +135,5 @@
 	return 0.0;
 }
+double LamellarPSHGModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/linearpearls.cpp
===================================================================
--- sansmodels/src/c_models/linearpearls.cpp	(revision d9547e786c812bc1eaab873b688362cb21ecc3d1)
+++ sansmodels/src/c_models/linearpearls.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -215,2 +215,5 @@
 
 }
+double LinearPearlsModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/logNormal.cpp
===================================================================
--- sansmodels/src/c_models/logNormal.cpp	(revision 101065a9bd217be61773f8eba38d0c461efee3fd)
+++ sansmodels/src/c_models/logNormal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -78,2 +78,5 @@
   return 0.0;
 }
+double LogNormal :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/lorentzian.cpp
===================================================================
--- sansmodels/src/c_models/lorentzian.cpp	(revision 101065a9bd217be61773f8eba38d0c461efee3fd)
+++ sansmodels/src/c_models/lorentzian.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -65,2 +65,5 @@
   return 0.0;
 }
+double Lorentzian :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/massfractal.cpp
===================================================================
--- sansmodels/src/c_models/massfractal.cpp	(revision 08648c055ed9beec9949b4b6563871b9101ac8a9)
+++ sansmodels/src/c_models/massfractal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -125,2 +125,5 @@
   return 0.0;
 }
+double MassFractalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/masssurfacefractal.cpp
===================================================================
--- sansmodels/src/c_models/masssurfacefractal.cpp	(revision 08648c055ed9beec9949b4b6563871b9101ac8a9)
+++ sansmodels/src/c_models/masssurfacefractal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -65,5 +65,5 @@
 	  return 0.0;
   }
-  
+
   //computation
   mass_dim /= 2.0;
@@ -156,2 +156,5 @@
   return 0.0;
 }
+double MassSurfaceFractal :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/multishell.cpp
===================================================================
--- sansmodels/src/c_models/multishell.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/multishell.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -195,2 +195,5 @@
   return rad_out;
 }
+double MultiShellModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/onion.cpp
===================================================================
--- sansmodels/src/c_models/onion.cpp	(revision c637521b288a6e3976fc9c0d461b44f70bb58c10)
+++ sansmodels/src/c_models/onion.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -664,2 +664,5 @@
   return rad_out;
 }
+double OnionModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/parallelepiped.cpp
===================================================================
--- sansmodels/src/c_models/parallelepiped.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/parallelepiped.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -460,2 +460,5 @@
 
 }
+double ParallelepipedModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/pearlnecklace.cpp
===================================================================
--- sansmodels/src/c_models/pearlnecklace.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/pearlnecklace.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -282,2 +282,5 @@
 
 }
+double PearlNecklaceModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/polygausscoil.cpp
===================================================================
--- sansmodels/src/c_models/polygausscoil.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/polygausscoil.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -140,2 +140,5 @@
 	return rad_out;
 }
+double Poly_GaussCoil :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/refl.cpp
===================================================================
--- sansmodels/src/c_models/refl.cpp	(revision 37805e993ee77aefcc3df740a88439050390d7ce)
+++ sansmodels/src/c_models/refl.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -299,2 +299,5 @@
   return 0.0;
 }
+double ReflModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/refl_adv.cpp
===================================================================
--- sansmodels/src/c_models/refl_adv.cpp	(revision dd60b455f137744c64501646f2107cdb72dab9c1)
+++ sansmodels/src/c_models/refl_adv.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -377,2 +377,5 @@
   return 0.0;
 }
+double ReflAdvModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/rpa.cpp
===================================================================
--- sansmodels/src/c_models/rpa.cpp	(revision 7ffa819613fbe742c39f7848cd58549d0a0af183)
+++ sansmodels/src/c_models/rpa.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -538,2 +538,5 @@
   return 0.0;
 }
+double RPAModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/sc.cpp
===================================================================
--- sansmodels/src/c_models/sc.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/sc.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -327,2 +327,5 @@
   return 0.0;
 }
+double SCCrystalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/schulz.cpp
===================================================================
--- sansmodels/src/c_models/schulz.cpp	(revision cd127d2445bcccbb9135e1c4dfeb28b324114a56)
+++ sansmodels/src/c_models/schulz.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -93,2 +93,5 @@
   return 0.0;
 }
+double Schulz :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/sld_cal.cpp
===================================================================
--- sansmodels/src/c_models/sld_cal.cpp	(revision 0ba3b08c35684feff124c0657dad569d13717a18)
+++ sansmodels/src/c_models/sld_cal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -105,2 +105,5 @@
 	return 0.0;
 }
+double SLDCalFunc :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/sphere.cpp
===================================================================
--- sansmodels/src/c_models/sphere.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/sphere.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -136,2 +136,5 @@
 	return rad_out;
 }
+double SphereModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/spheresld.cpp
===================================================================
--- sansmodels/src/c_models/spheresld.cpp	(revision 37805e993ee77aefcc3df740a88439050390d7ce)
+++ sansmodels/src/c_models/spheresld.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -630,2 +630,5 @@
 
 }
+double SphereSLDModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/spheroid.cpp
===================================================================
--- sansmodels/src/c_models/spheroid.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/spheroid.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -413,2 +413,5 @@
   return rad_out;
 }
+double CoreShellEllipsoidModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/stackeddisks.cpp
===================================================================
--- sansmodels/src/c_models/stackeddisks.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/stackeddisks.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -390,2 +390,5 @@
   return rad_out;
 }
+double StackedDisksModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/surfacefractal.cpp
===================================================================
--- sansmodels/src/c_models/surfacefractal.cpp	(revision 08648c055ed9beec9949b4b6563871b9101ac8a9)
+++ sansmodels/src/c_models/surfacefractal.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -124,2 +124,5 @@
   return 0.0;
 }
+double SurfaceFractalModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/triaxialellipsoid.cpp
===================================================================
--- sansmodels/src/c_models/triaxialellipsoid.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/triaxialellipsoid.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -441,2 +441,5 @@
   return rad_out;
 }
+double TriaxialEllipsoidModel :: calculate_VR() {
+  return 1.0;
+}
Index: sansmodels/src/c_models/vesicle.cpp
===================================================================
--- sansmodels/src/c_models/vesicle.cpp	(revision 82c11d354f0cffa7741bd2e74e0641e042eeb034)
+++ sansmodels/src/c_models/vesicle.cpp	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -167,2 +167,47 @@
   return rad_out;
 }
+/**
+ * Function to calculate volf_ratio for shell
+ * @return: volf_ratio value
+ */
+double VesicleModel :: calculate_VR() {
+  VesicleParameters dp;
+
+  dp.radius     = radius();
+  dp.thickness  = thickness();
+
+  double rad_out = 0.0;
+
+  // Perform the computation, with all weight points
+  double sum_tot = 0.0;
+  double sum_shell = 0.0;
+
+
+  // Get the dispersion points for the major shell
+  vector<WeightPoint> weights_thickness;
+  thickness.get_weights(weights_thickness);
+
+  // Get the dispersion points for the minor shell
+  vector<WeightPoint> weights_radius ;
+  radius.get_weights(weights_radius);
+
+  // Loop over major shell weight points
+  for(int j=0; j< (int)weights_thickness.size(); j++) {
+    dp.thickness = weights_thickness[j].value;
+    for(int k=0; k< (int)weights_radius.size(); k++) {
+      dp.radius = weights_radius[k].value;
+      sum_tot += weights_thickness[j].weight
+          * weights_radius[k].weight*pow((dp.radius+dp.thickness), 3);
+      sum_shell += weights_thickness[j].weight
+		  * weights_radius[k].weight*(pow((dp.radius+dp.thickness), 3)
+				  - pow((dp.radius), 3));
+    }
+  }
+  if (sum_tot == 0.0){
+    //return the default value
+    rad_out =  1.0;}
+  else{
+    //return ratio value
+    return sum_shell/sum_tot;
+  }
+}
Index: sansmodels/src/python_wrapper/classTemplate.txt
===================================================================
--- sansmodels/src/python_wrapper/classTemplate.txt	(revision e63a41198a7dd9d187e81430fb4bc23df390cfbe)
+++ sansmodels/src/python_wrapper/classTemplate.txt	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -331,4 +331,17 @@
 }
 /**
+ * Function to call to cal the ratio shell volume/ total volume
+ * @return: the ratio shell volume/ total volume 
+ */
+static PyObject * calculate_VR([PYTHONCLASS] *self) {
+
+	// Get parameters
+	
+	[READDICTIONARY]
+		
+	return Py_BuildValue("d",(*(self->model)).calculate_VR());
+
+}
+/**
  * Function to call to evaluate model in cartesian coordinates
  * @param args: input q or [qx, qy]]
@@ -416,5 +429,6 @@
     {"calculate_ER",      (PyCFunction)calculate_ER     , METH_VARARGS,
       "Evaluate the model at a given Q or Q, phi"},
-      
+    {"calculate_VR",      (PyCFunction)calculate_VR     , METH_VARARGS,
+      "Evaluate VR"},    
     {"evalDistribution",  (PyCFunction)evalDistribution , METH_VARARGS,
       "Evaluate the model at a given Q or Qx, Qy vector "},
Index: sansmodels/src/python_wrapper/modelTemplate.txt
===================================================================
--- sansmodels/src/python_wrapper/modelTemplate.txt	(revision 67424cdc019bde2f4cbc089828ff660e6f914c2c)
+++ sansmodels/src/python_wrapper/modelTemplate.txt	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -129,4 +129,13 @@
         return [CPYTHONCLASS].calculate_ER(self)
         
+    def calculate_VR(self):
+        """ 
+        Calculate the volf ratio for P(q)*S(q)
+        
+        :return: the value of the volf ratio
+        
+        """       
+        return [CPYTHONCLASS].calculate_VR(self)
+              
     def set_dispersion(self, parameter, dispersion):
         """
Index: sansmodels/src/sans/models/BaseComponent.py
===================================================================
--- sansmodels/src/sans/models/BaseComponent.py	(revision 0145a254b5b74a5d4a57c65d6bc02f7140b14fa3)
+++ sansmodels/src/sans/models/BaseComponent.py	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -69,4 +69,5 @@
     def runXY(self, x): return NotImplemented  
     def calculate_ER(self): return NotImplemented  
+    def calculate_VR(self): return NotImplemented 
     def evalDistribution(self, qdist):
         """
Index: sansmodels/src/sans/models/MultiplicationModel.py
===================================================================
--- sansmodels/src/sans/models/MultiplicationModel.py	(revision ccb7363b19b55881bdb6988e02a66c098fd5f8f0)
+++ sansmodels/src/sans/models/MultiplicationModel.py	(revision e08bd5b099f35eabce0c3e5a23f6752b42dad397)
@@ -157,5 +157,7 @@
         value = self.params['volfraction']
         if value != None: 
-            self.p_model.setParam( 'scale', value)
+            factor = self.p_model.calculate_VR()
+            val = factor * value
+            self.p_model.setParam( 'scale', val)
             
             
