diff --git a/docs/source/physics/single_chain/fjc/thermodynamics/modified_canonical/example_asymptotic.ipynb b/docs/source/physics/single_chain/fjc/thermodynamics/modified_canonical/example_asymptotic.ipynb index 93b6aae8..7b39d7cc 100644 --- a/docs/source/physics/single_chain/fjc/thermodynamics/modified_canonical/example_asymptotic.ipynb +++ b/docs/source/physics/single_chain/fjc/thermodynamics/modified_canonical/example_asymptotic.ipynb @@ -27,17 +27,11 @@ }, { "cell_type": "markdown", - "id": "8abeab96", - "metadata": {}, - "source": [ - "## Strong potential" - ] - }, - { - "cell_type": "markdown", - "id": "8c7dadae", + "id": "1592d36b", "metadata": {}, "source": [ + "## Strong potential\n", + "\n", "For sufficiently strong potentials, the modified canonical ensemble can be accurately approximated using the reference system (the isometric ensemble) and an asymptotic correction. For example, the nondimensional force $\\eta$ as a function of the nondimensional potential distance $\\gamma$ is approximated as\n", "\n", "$$\n", @@ -68,11 +62,10 @@ "source": [ "gamma = np.linspace(1e-3, 99e-2, 256)\n", "for varpi in [1e0, 1e1, 1e2]:\n", - " w = varpi*fjc.number_of_links**2\n", - " eta = fjc.nondimensional_force(gamma, w)\n", + " eta = fjc.nondimensional_force(gamma, varpi)\n", " line = plt.plot(gamma, eta, label=r'$\\varpi=$' + str(varpi))\n", " eta_asymptotic = \\\n", - " fjc.asymptotic.strong_potential.nondimensional_force(gamma, w)\n", + " fjc.asymptotic.strong_potential.nondimensional_force(gamma, varpi)\n", " plt.plot(gamma, eta_asymptotic, ':', color=line[0].get_color())\n", "plt.legend()\n", "plt.xlim([0, 1])\n", @@ -84,17 +77,11 @@ }, { "cell_type": "markdown", - "id": "1d21a64d", - "metadata": {}, - "source": [ - "## Weak potential" - ] - }, - { - "cell_type": "markdown", - "id": "dce6f3d2", + "id": "8a77ab06", "metadata": {}, "source": [ + "## Weak potential\n", + "\n", "For sufficiently distant potentials, the modified canonical ensemble can be accurately approximated using the reference system (the isotensional ensemble) and an asymptotic correction. The potential is considered sufficiently distant when the length of center of the potential well to the end of the chain experiencing it is much larger than the expected end-to-end length of the chain. This disparity in length is only typically possible considering weak potentials. For example, if $\\eta/N_b\\varpi$ is the nondimensional potential distance, the nondimensional end-to-end length per link $\\gamma$ as a function of the effective nondimensional potential force $\\eta$ is approximated as\n", "\n", "$$\n", @@ -105,14 +92,9 @@ "\n", "$$\n", " \\gamma(\\eta) = \\frac{1}{N_b}\\frac{\\partial}{\\partial\\eta}\\,\\ln\\left[\\iiint Q_0(\\boldsymbol{\\gamma}') \\, e^{N_b\\boldsymbol{\\eta}\\cdot\\boldsymbol{\\gamma}'} e^{-\\tfrac{\\varpi}{2} N_b^2\\left(\\boldsymbol{\\gamma}'\\right)^2} d^3\\boldsymbol{\\gamma}'\\right].\n", - "$$\n" - ] - }, - { - "cell_type": "markdown", - "id": "8a77ab06", - "metadata": {}, - "source": [ + "$$\n", + "\n", + "\n", "This exact relation is plotted below along with the asymptotic relation while varying $\\varpi$, the nondimensional potential stiffness. As $\\varpi$ decreases and/or the nondimensional force $\\eta$ increases (the nondimensional potential distance $\\eta/N_b\\varpi$ increases), the asymptotic approach appears to do increasingly well. Notably, the asymptoic approach appears to succeed for sufficiently distance potentials for any value of $\\varpi$. This is because the freely-jointed chain model has inextensible links, so even a stiff potential that is distant ($\\eta/N_b\\varpi\\gg 1$) will not stretch the chain past $\\gamma=1$. For chain models which have extensible links, the link stiffness will compete with the potential stiffness, such that the potential would need to be weak ($\\varpi\\ll 1$) in addition to distant ($\\eta/N_b\\varpi\\gg 1$) in order for the asymptotic approach to become accurate." ] }, @@ -125,11 +107,10 @@ "source": [ "gamma_in = np.linspace(5e-1, 5, 256)\n", "for varpi in [1e0, 1e-1, 1e-2]:\n", - " w = varpi*fjc.number_of_links**2\n", - " gamma = fjc.nondimensional_end_to_end_length_per_link(gamma_in, w)\n", + " gamma = fjc.nondimensional_end_to_end_length_per_link(gamma_in, varpi)\n", " line = plt.plot(gamma, gamma_in, label=r'$\\varpi=$' + str(varpi))\n", " gamma_asymptotic = \\\n", - " fjc.asymptotic.weak_potential.nondimensional_end_to_end_length_per_link(gamma_in, w)\n", + " fjc.asymptotic.weak_potential.nondimensional_end_to_end_length_per_link(gamma_in, varpi)\n", " plt.plot(gamma_asymptotic, gamma_in, ':', color=line[0].get_color())\n", "plt.legend()\n", "plt.xlim([0, 1])\n", diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/mod.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/mod.rs index bbb5d171..3a579ac2 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/mod.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/mod.rs @@ -30,8 +30,7 @@ pub struct FJC /// The expected force as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links and link length. pub fn force(number_of_links: &u8, link_length: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature/link_length*nondimensional_force(number_of_links, &(*potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) + BOLTZMANN_CONSTANT*temperature/link_length*nondimensional_force(number_of_links, &(*potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) } /// The expected nondimensional force as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. @@ -46,21 +45,19 @@ pub fn nondimensional_force(number_of_links: &u8, nondimensional_potential_dista let sum_1: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p - 1)).sum(); let sum_2: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p - 2)).sum(); let sum_3: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p - 3)).sum(); - (1.0/nondimensional_potential_distance + (0.5*number_of_links_f64 - 1.0)*sum_1/sum_0)/number_of_links_f64 + 0.5/nondimensional_potential_stiffness/number_of_links_f64*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0*((number_of_links_f64 - 2.0)*(sum_1/sum_0).powi(2) - (number_of_links_f64 - 3.0)*sum_2/sum_0) - (0.5*number_of_links_f64 - 1.5)*((0.5*number_of_links_f64 - 1.0)*sum_1*sum_2/sum_0.powi(2) - (0.5*number_of_links_f64 - 2.0)*sum_3/sum_0)) + 2.0*nondimensional_potential_distance.powi(-3) - 2.0*((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0 + nondimensional_potential_distance.powi(-1))*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*(sum_1/sum_0).powi(2) - (0.5*number_of_links_f64 - 1.5)*sum_2/sum_0) - nondimensional_potential_distance.powi(-2))) + (1.0/nondimensional_potential_distance + (0.5*number_of_links_f64 - 1.0)*sum_1/sum_0)/number_of_links_f64 + 0.5/nondimensional_potential_stiffness/number_of_links_f64.powi(3)*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0*((number_of_links_f64 - 2.0)*(sum_1/sum_0).powi(2) - (number_of_links_f64 - 3.0)*sum_2/sum_0) - (0.5*number_of_links_f64 - 1.5)*((0.5*number_of_links_f64 - 1.0)*sum_1*sum_2/sum_0.powi(2) - (0.5*number_of_links_f64 - 2.0)*sum_3/sum_0)) + 2.0*nondimensional_potential_distance.powi(-3) - 2.0*((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0 + nondimensional_potential_distance.powi(-1))*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*(sum_1/sum_0).powi(2) - (0.5*number_of_links_f64 - 1.5)*sum_2/sum_0) - nondimensional_potential_distance.powi(-2))) } /// The Helmholtz free energy as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn helmholtz_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, &(potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature)*BOLTZMANN_CONSTANT*temperature + nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, &(potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature)*BOLTZMANN_CONSTANT*temperature } /// The Helmholtz free energy per link as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn helmholtz_free_energy_per_link(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, &(potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature)*BOLTZMANN_CONSTANT*temperature + nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, &(potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature)*BOLTZMANN_CONSTANT*temperature } /// The relative Helmholtz free energy as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links and link length. @@ -74,10 +71,12 @@ pub fn relative_helmholtz_free_energy_per_link(number_of_links: &u8, link_length { helmholtz_free_energy_per_link(number_of_links, link_length, &1.0, potential_distance, potential_stiffness, temperature) - helmholtz_free_energy_per_link(number_of_links, link_length, &1.0, &(ZERO*(*number_of_links as f64)*link_length), potential_stiffness, temperature) } + /// The nondimensional Helmholtz free energy as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_helmholtz_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { let number_of_links_f64 = *number_of_links as f64; + let number_of_links_squared = number_of_links_f64.powi(2); let contour_length = number_of_links_f64*link_length; let n = *number_of_links as u128; let p: i32 = (number_of_links - 2).into(); @@ -86,7 +85,7 @@ pub fn nondimensional_helmholtz_free_energy(number_of_links: &u8, link_length: & let sum_0: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p)).sum(); let sum_1: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p - 1)).sum(); let sum_2: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p - 2)).sum(); - -(0.125/PI/nondimensional_potential_distance*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum_0/contour_length.powi(3)).ln() - (number_of_links_f64 - 1.0)*(8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() - 1.5*(2.0*PI/nondimensional_potential_stiffness).ln() - 3.0*(contour_length).ln() + 0.5/nondimensional_potential_stiffness*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*(sum_1/sum_0).powi(2) - (0.5*number_of_links_f64 - 1.5)*sum_2/sum_0) - nondimensional_potential_distance.powi(-2) - ((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0 + nondimensional_potential_distance.powi(-1)).powi(2)) + -(0.125/PI/nondimensional_potential_distance*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum_0/contour_length.powi(3)).ln() - (number_of_links_f64 - 1.0)*(8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() - 1.5*(2.0*PI/nondimensional_potential_stiffness/number_of_links_squared).ln() - 3.0*(contour_length).ln() + 0.5/nondimensional_potential_stiffness/number_of_links_squared*((0.5*number_of_links_f64 - 1.0)*((0.5*number_of_links_f64 - 1.0)*(sum_1/sum_0).powi(2) - (0.5*number_of_links_f64 - 1.5)*sum_2/sum_0) - nondimensional_potential_distance.powi(-2) - ((0.5*number_of_links_f64 - 1.0)*sum_1/sum_0 + nondimensional_potential_distance.powi(-1)).powi(2)) } /// The nondimensional Helmholtz free energy per link as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.jl b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.jl index 7ffe540c..77f7d19e 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.jl +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.jl @@ -93,7 +93,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force = model.force(potential_distance, potential_stiffness, temperature) @@ -128,7 +128,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -169,7 +169,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link( @@ -209,7 +209,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy = model.relative_helmholtz_free_energy( @@ -249,7 +249,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_per_link = @@ -285,7 +285,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -325,7 +325,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy = model.relative_helmholtz_free_energy( @@ -438,7 +438,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -482,7 +482,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link( @@ -605,7 +605,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_0 = model.relative_helmholtz_free_energy( @@ -633,7 +633,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_per_link_0 = @@ -707,7 +707,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force = model.force(potential_distance, potential_stiffness, temperature) diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.py b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.py index cce9bea0..fcf675a2 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.py +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.py @@ -164,7 +164,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force = \ model.force( np.array(potential_distance), @@ -230,7 +230,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -296,7 +296,7 @@ def test_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy_per_link = \ model.helmholtz_free_energy_per_link( np.array(potential_distance), @@ -365,7 +365,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy = \ model.relative_helmholtz_free_energy( np.array(potential_distance), @@ -430,7 +430,7 @@ def test_relative_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_per_link = \ model.relative_helmholtz_free_energy_per_link( np.array(potential_distance), @@ -495,7 +495,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -561,7 +561,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy = \ model.relative_helmholtz_free_energy( np.array(potential_distance), @@ -745,7 +745,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -820,7 +820,7 @@ def test_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy_per_link = \ model.helmholtz_free_energy_per_link( np.array(potential_distance), @@ -1025,7 +1025,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_0 = \ model.relative_helmholtz_free_energy( np.array( @@ -1075,7 +1075,7 @@ def test_relative_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_per_link_0 = \ model.relative_helmholtz_free_energy_per_link( np.array( @@ -1220,7 +1220,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force = \ model.force( np.array(potential_distance), diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.rs index 208e0475..fe9c7692 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/strong_potential/test.rs @@ -81,7 +81,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_force = model.nondimensional_force(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force = model.force(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &force/BOLTZMANN_CONSTANT/temperature*link_length - &nondimensional_force; let residual_rel = &residual_abs/&nondimensional_force; @@ -104,7 +104,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_helmholtz_free_energy = model.nondimensional_helmholtz_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_helmholtz_free_energy; let residual_rel = residual_abs/nondimensional_helmholtz_free_energy; @@ -127,7 +127,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_helmholtz_free_energy_per_link = model.nondimensional_helmholtz_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_helmholtz_free_energy_per_link; let residual_rel = residual_abs/nondimensional_helmholtz_free_energy_per_link; @@ -150,7 +150,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_helmholtz_free_energy = model.nondimensional_relative_helmholtz_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_helmholtz_free_energy; let residual_rel = residual_abs/nondimensional_relative_helmholtz_free_energy; @@ -173,7 +173,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_helmholtz_free_energy_per_link = model.nondimensional_relative_helmholtz_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_helmholtz_free_energy_per_link; let residual_rel = residual_abs/nondimensional_relative_helmholtz_free_energy_per_link; @@ -200,7 +200,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy/(number_of_links as f64) - helmholtz_free_energy_per_link; @@ -224,7 +224,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy/(number_of_links as f64) - relative_helmholtz_free_energy_per_link; @@ -296,7 +296,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_0 = model.helmholtz_free_energy(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); @@ -320,7 +320,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_per_link_0 = model.helmholtz_free_energy_per_link(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); @@ -391,7 +391,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_0 = model.relative_helmholtz_free_energy(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); assert!(relative_helmholtz_free_energy_0.abs() <= BOLTZMANN_CONSTANT*temperature*(number_of_links as f64)*ZERO); } @@ -409,7 +409,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_per_link_0 = model.relative_helmholtz_free_energy_per_link(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); assert!(relative_helmholtz_free_energy_per_link_0.abs() <= BOLTZMANN_CONSTANT*temperature*ZERO); } @@ -466,7 +466,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference; let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force = model.force(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let force_from_derivative = (model.relative_helmholtz_free_energy(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/mod.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/mod.rs index 617ab255..422e4259 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/mod.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/mod.rs @@ -44,15 +44,15 @@ pub fn end_to_end_length_per_link(number_of_links: &u8, link_length: &f64, poten /// The expected nondimensional end-to-end length as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_end_to_end_length(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - let nondimensional_force = nondimensional_potential_stiffness*nondimensional_potential_distance/(*number_of_links as f64); - (*number_of_links as f64)*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force)*(1.0 - nondimensional_potential_stiffness/(*number_of_links as f64)*(nondimensional_force.powi(-2) - (nondimensional_force.sinh()).powi(-2))) + let nondimensional_force = (*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance; + (*number_of_links as f64)*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force)*(1.0 - (*number_of_links as f64)*nondimensional_potential_stiffness*(nondimensional_force.powi(-2) - (nondimensional_force.sinh()).powi(-2))) } /// The expected nondimensional end-to-end length per link as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_end_to_end_length_per_link(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - let nondimensional_force = nondimensional_potential_stiffness*nondimensional_potential_distance/(*number_of_links as f64); - (1.0/nondimensional_force.tanh() - 1.0/nondimensional_force)*(1.0 - nondimensional_potential_stiffness/(*number_of_links as f64)*(nondimensional_force.powi(-2) - (nondimensional_force.sinh()).powi(-2))) + let nondimensional_force = (*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance; + (1.0/nondimensional_force.tanh() - 1.0/nondimensional_force)*(1.0 - (*number_of_links as f64)*nondimensional_potential_stiffness*(nondimensional_force.powi(-2) - (nondimensional_force.sinh()).powi(-2))) } /// The expected force as a function of the applied potential distance, potential stiffness, and temperature. @@ -64,7 +64,7 @@ pub fn force(potential_distance: &f64, potential_stiffness: &f64) -> f64 /// The expected nondimensional force as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_force(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - nondimensional_potential_stiffness*nondimensional_potential_distance/(*number_of_links as f64) + (*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance } /// The Gibbs free energy as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. @@ -96,15 +96,15 @@ pub fn relative_gibbs_free_energy_per_link(number_of_links: &u8, link_length: &f /// The nondimensional Gibbs free energy as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_gibbs_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { - let nondimensional_force = nondimensional_potential_stiffness*nondimensional_potential_distance/(*number_of_links as f64); - -(*number_of_links as f64)*(nondimensional_force.sinh()/nondimensional_force).ln() + 0.5*nondimensional_potential_stiffness*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force).powi(2) - (*number_of_links as f64)*(8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() + let nondimensional_force = (*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance; + -(*number_of_links as f64)*(nondimensional_force.sinh()/nondimensional_force).ln() + 0.5*nondimensional_potential_stiffness*(*number_of_links as f64).powi(2)*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force).powi(2) - (*number_of_links as f64)*(8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() } /// The nondimensional Gibbs free energy per link as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_gibbs_free_energy_per_link(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { - let nondimensional_force = nondimensional_potential_stiffness*nondimensional_potential_distance/(*number_of_links as f64); - -(nondimensional_force.sinh()/nondimensional_force).ln() + 0.5*nondimensional_potential_stiffness/(*number_of_links as f64)*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force).powi(2) - (8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() + let nondimensional_force = (*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance; + -(nondimensional_force.sinh()/nondimensional_force).ln() + 0.5*nondimensional_potential_stiffness*(*number_of_links as f64)*(1.0/nondimensional_force.tanh() - 1.0/nondimensional_force).powi(2) - (8.0*PI.powi(2)*hinge_mass*link_length.powi(2)*BOLTZMANN_CONSTANT*temperature/PLANCK_CONSTANT.powi(2)).ln() } /// The nondimensional relative Gibbs free energy as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.jl b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.jl index 9091d523..a479b77f 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.jl +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.jl @@ -94,7 +94,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -131,7 +131,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length_per_link = model.end_to_end_length_per_link( @@ -172,7 +172,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force = model.force(potential_distance, potential_stiffness) @@ -209,7 +209,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -249,7 +249,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy_per_link = model.gibbs_free_energy_per_link( @@ -291,7 +291,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy = model.relative_gibbs_free_energy( @@ -333,7 +333,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link( @@ -370,7 +370,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -440,7 +440,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -477,7 +477,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy = model.relative_gibbs_free_energy( @@ -590,7 +590,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -632,7 +632,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy_per_link = model.gibbs_free_energy_per_link( @@ -759,7 +759,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force_0 = model.force(ZERO, potential_stiffness) @@ -781,7 +781,8 @@ end parameters.nondimensional_potential_stiffness_scale * (0.5 - rand()) nondimensional_force_0 = model.nondimensional_force(ZERO, nondimensional_potential_stiffness) - @test abs(nondimensional_force_0) <= nondimensional_potential_stiffness * ZERO + @test abs(nondimensional_force_0) <= + number_of_links * nondimensional_potential_stiffness * ZERO end end @@ -800,7 +801,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_0 = model.relative_gibbs_free_energy( @@ -827,7 +828,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_per_link_0 = model.relative_gibbs_free_energy_per_link( @@ -901,7 +902,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -945,7 +946,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length_per_link = model.end_to_end_length_per_link( @@ -994,7 +995,7 @@ end ) h = parameters.rel_tol nondimensional_end_to_end_length_from_derivative = - -1.0 * number_of_links / nondimensional_potential_stiffness * ( + -1.0 / nondimensional_potential_stiffness / number_of_links * ( model.nondimensional_relative_gibbs_free_energy( nondimensional_potential_distance + 0.5 * h, nondimensional_potential_stiffness, @@ -1033,7 +1034,7 @@ end ) h = parameters.rel_tol nondimensional_end_to_end_length_per_link_from_derivative = - -1.0 * number_of_links / nondimensional_potential_stiffness * ( + -1.0 / nondimensional_potential_stiffness / number_of_links * ( model.nondimensional_relative_gibbs_free_energy_per_link( nondimensional_potential_distance + 0.5 * h, nondimensional_potential_stiffness, diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.py b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.py index 94c903e8..f8bbe76f 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.py +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.py @@ -166,7 +166,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -237,7 +237,7 @@ def test_end_to_end_length_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length_per_link = \ model.end_to_end_length_per_link( np.array(potential_distance), @@ -308,7 +308,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force = \ model.force( np.array(potential_distance), @@ -379,7 +379,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -451,7 +451,7 @@ def test_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy_per_link = \ model.gibbs_free_energy_per_link( np.array(potential_distance), @@ -522,7 +522,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy = \ model.relative_gibbs_free_energy( np.array(potential_distance), @@ -593,7 +593,7 @@ def test_relative_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_per_link = \ model.relative_gibbs_free_energy_per_link( np.array(potential_distance), @@ -664,7 +664,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -796,7 +796,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -868,7 +868,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy = \ model.relative_gibbs_free_energy( np.array(potential_distance), @@ -1070,7 +1070,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -1150,7 +1150,7 @@ def test_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy_per_link = \ model.gibbs_free_energy_per_link( np.array(potential_distance), @@ -1232,9 +1232,7 @@ def test_nondimensional_gibbs_free_energy(self): ) nondimensional_gibbs_free_energy_0 = \ model.nondimensional_gibbs_free_energy( - np.array( - parameters.zero*number_of_links*link_length - ), + np.array(parameters.zero), nondimensional_potential_stiffness, temperature ) @@ -1304,9 +1302,7 @@ def test_nondimensional_gibbs_free_energy_per_link(self): ) nondimensional_gibbs_free_energy_per_link_0 = \ model.nondimensional_gibbs_free_energy_per_link( - np.array( - parameters.zero*number_of_links*link_length - ), + np.array(parameters.zero), nondimensional_potential_stiffness, temperature ) @@ -1370,7 +1366,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force_0 = \ model.force( np.array( @@ -1421,6 +1417,7 @@ def test_nondimensional_force(self): ) self.assertLessEqual( np.abs(nondimensional_force_0), + number_of_links * nondimensional_potential_stiffness * parameters.zero ) @@ -1459,7 +1456,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_0 = \ model.relative_gibbs_free_energy( np.array( @@ -1508,7 +1505,7 @@ def test_relative_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_per_link_0 = \ model.relative_gibbs_free_energy_per_link( np.array( @@ -1652,7 +1649,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -1730,7 +1727,7 @@ def test_end_to_end_length_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length_per_link = \ model.end_to_end_length_per_link( np.array(potential_distance), @@ -1806,7 +1803,7 @@ def test_nondimensional_end_to_end_length(self): ) h_step = parameters.rel_tol nondimensional_end_to_end_length_from_derivative = \ - -number_of_links/nondimensional_potential_stiffness*( + -1.0/nondimensional_potential_stiffness/number_of_links*( model.nondimensional_relative_gibbs_free_energy( np.array( nondimensional_potential_distance + 0.5*h_step @@ -1871,7 +1868,7 @@ def test_nondimensional_end_to_end_length_per_link(self): ) h_step = parameters.rel_tol nondimensional_end_to_end_length_per_link_from_derivative = \ - -number_of_links/nondimensional_potential_stiffness*( + -1.0/nondimensional_potential_stiffness/number_of_links*( model.nondimensional_relative_gibbs_free_energy_per_link( np.array( nondimensional_potential_distance + 0.5*h_step diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.rs index 1ce17666..4a92bbe5 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/asymptotic/weak_potential/test.rs @@ -81,7 +81,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &end_to_end_length/link_length - &nondimensional_end_to_end_length; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; @@ -105,7 +105,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &end_to_end_length/link_length - &nondimensional_end_to_end_length; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; @@ -129,7 +129,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_force = model.nondimensional_force(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force = model.force(&potential_distance, &potential_stiffness); let residual_abs = &force/BOLTZMANN_CONSTANT/temperature*link_length - &nondimensional_force; let residual_rel = &residual_abs/&nondimensional_force; @@ -153,7 +153,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_gibbs_free_energy = model.nondimensional_gibbs_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_gibbs_free_energy; let residual_rel = residual_abs/nondimensional_gibbs_free_energy; @@ -177,7 +177,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_gibbs_free_energy_per_link = model.nondimensional_gibbs_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_gibbs_free_energy_per_link; let residual_rel = residual_abs/nondimensional_gibbs_free_energy_per_link; @@ -201,7 +201,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_gibbs_free_energy = model.nondimensional_relative_gibbs_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_gibbs_free_energy; let residual_rel = residual_abs/nondimensional_relative_gibbs_free_energy; @@ -225,7 +225,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_gibbs_free_energy_per_link = model.nondimensional_relative_gibbs_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_gibbs_free_energy_per_link; let residual_rel = residual_abs/nondimensional_relative_gibbs_free_energy_per_link; @@ -253,7 +253,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let end_to_end_length_per_link = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = end_to_end_length/(number_of_links as f64) - end_to_end_length_per_link; @@ -298,7 +298,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy/(number_of_links as f64) - gibbs_free_energy_per_link; @@ -322,7 +322,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy/(number_of_links as f64) - relative_gibbs_free_energy_per_link; @@ -395,7 +395,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_0 = model.gibbs_free_energy(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); @@ -420,7 +420,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_per_link_0 = model.gibbs_free_energy_per_link(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); @@ -495,7 +495,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_0 = model.force(&ZERO, &potential_stiffness); assert!(force_0.abs() <= potential_stiffness*ZERO); } @@ -513,7 +513,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let nondimensional_force_0 = model.nondimensional_force(&ZERO, &nondimensional_potential_stiffness); - assert!(nondimensional_force_0.abs() <= nondimensional_potential_stiffness*ZERO); + assert!(nondimensional_force_0.abs() <= (number_of_links as f64)*nondimensional_potential_stiffness*ZERO); } } #[test] @@ -602,7 +602,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let end_to_end_length_from_derivative = -1.0/potential_stiffness*(model.relative_gibbs_free_energy(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_gibbs_free_energy(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; @@ -626,7 +626,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length_per_link = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let end_to_end_length_per_link_from_derivative = -1.0/potential_stiffness*(model.relative_gibbs_free_energy_per_link(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_gibbs_free_energy_per_link(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; @@ -650,7 +650,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let h = parameters.rel_tol; - let nondimensional_end_to_end_length_from_derivative = -(number_of_links as f64)/nondimensional_potential_stiffness*(model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; + let nondimensional_end_to_end_length_from_derivative = -1.0/nondimensional_potential_stiffness/(number_of_links as f64)*(model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; let residual_abs = &nondimensional_end_to_end_length - &nondimensional_end_to_end_length_from_derivative; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; assert!(residual_rel.abs() <= h); @@ -671,7 +671,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length_per_link = model.nondimensional_end_to_end_length_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let h = parameters.rel_tol; - let nondimensional_end_to_end_length_per_link_from_derivative = -(number_of_links as f64)/nondimensional_potential_stiffness*(model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; + let nondimensional_end_to_end_length_per_link_from_derivative = -1.0/nondimensional_potential_stiffness/(number_of_links as f64)*(model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; let residual_abs = &nondimensional_end_to_end_length_per_link - &nondimensional_end_to_end_length_per_link_from_derivative; let residual_rel = &residual_abs/&nondimensional_end_to_end_length_per_link; assert!(residual_rel.abs() <= h); diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/mod.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/mod.rs index c0397bb7..1510feba 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/mod.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/mod.rs @@ -53,26 +53,26 @@ pub fn end_to_end_length_per_link(number_of_links: &u8, link_length: &f64, poten /// The expected nondimensional end-to-end length as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_end_to_end_length(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - (*number_of_links as f64)*nondimensional_potential_distance - (*number_of_links as f64).powi(2)*nondimensional_force(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness)/nondimensional_potential_stiffness + (*number_of_links as f64)*nondimensional_potential_distance - nondimensional_force(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness)/nondimensional_potential_stiffness } /// The expected nondimensional end-to-end length per link as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_end_to_end_length_per_link(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - nondimensional_potential_distance - (*number_of_links as f64)*nondimensional_force(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness)/nondimensional_potential_stiffness + nondimensional_potential_distance - nondimensional_force(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness)/nondimensional_potential_stiffness/(*number_of_links as f64) } /// The expected force as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links and link length. pub fn force(number_of_links: &u8, link_length: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature/link_length*nondimensional_force(number_of_links, &(*potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) + BOLTZMANN_CONSTANT*temperature/link_length*nondimensional_force(number_of_links, &(*potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) } /// The expected nondimensional force as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_force(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { let number_of_links_f64 = *number_of_links as f64; + let number_of_links_squared_times_nondimensional_potential_stiffness = number_of_links_f64.powi(2)*nondimensional_potential_stiffness; let n = *number_of_links as u128; let p: i32 = (number_of_links - 2).into(); let integrand_numerator = |nondimensional_end_to_end_length_per_link: f64| @@ -80,14 +80,14 @@ pub fn nondimensional_force(number_of_links: &u8, nondimensional_potential_dista let m = -nondimensional_end_to_end_length_per_link*0.5 + 0.5; let k = (number_of_links_f64*m).ceil() as u128; let sum: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p)).sum(); - 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link)*(-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link)*(-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) + ((-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2)*nondimensional_end_to_end_length_per_link)) + 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link)*(-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link)*(-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*number_of_links_squared_times_nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) + ((-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*number_of_links_squared_times_nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2)*nondimensional_end_to_end_length_per_link)) }; let integrand_denominator = |nondimensional_end_to_end_length_per_link: f64| { let m = -nondimensional_end_to_end_length_per_link*0.5 + 0.5; let k = (number_of_links_f64*m).ceil() as u128; let sum: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p)).sum(); - 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) + 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*number_of_links_squared_times_nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) }; let dx = (ONE - ZERO)/(POINTS as f64); (0..=POINTS-1).collect::>().iter().map(|index| integrand_numerator(ZERO + (0.5 + *index as f64)*dx)).sum::()/(0..=POINTS-1).collect::>().iter().map(|index| integrand_denominator(ZERO + (0.5 + *index as f64)*dx)).sum::()/number_of_links_f64 @@ -96,34 +96,32 @@ pub fn nondimensional_force(number_of_links: &u8, nondimensional_potential_dista /// The Helmholtz free energy as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn helmholtz_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature*nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, &(potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature) + BOLTZMANN_CONSTANT*temperature*nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, &(potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature) } /// The Helmholtz free energy per link as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn helmholtz_free_energy_per_link(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature*nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, &(*potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature) + BOLTZMANN_CONSTANT*temperature*nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, &(*potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature), temperature) } /// The relative Helmholtz free energy as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links and link length. pub fn relative_helmholtz_free_energy(number_of_links: &u8, link_length: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature*nondimensional_relative_helmholtz_free_energy(number_of_links, &(*potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) + BOLTZMANN_CONSTANT*temperature*nondimensional_relative_helmholtz_free_energy(number_of_links, &(*potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) } /// The relative Helmholtz free energy per link as a function of the applied potential distance, potential stiffness, and temperature, parameterized by the number of links and link length. pub fn relative_helmholtz_free_energy_per_link(number_of_links: &u8, link_length: &f64, potential_distance: &f64, potential_stiffness: &f64, temperature: &f64) -> f64 { - let contour_length = (*number_of_links as f64)*link_length; - BOLTZMANN_CONSTANT*temperature*nondimensional_relative_helmholtz_free_energy_per_link(number_of_links, &(*potential_distance/contour_length), &(potential_stiffness*contour_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) + BOLTZMANN_CONSTANT*temperature*nondimensional_relative_helmholtz_free_energy_per_link(number_of_links, &(*potential_distance/((*number_of_links as f64)*link_length)), &(potential_stiffness*link_length.powi(2)/BOLTZMANN_CONSTANT/temperature)) } + /// The nondimensional Helmholtz free energy as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_helmholtz_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { let number_of_links_f64 = *number_of_links as f64; + let number_of_links_squared_times_nondimensional_potential_stiffness = number_of_links_f64.powi(2)*nondimensional_potential_stiffness; let n = *number_of_links as u128; let p: i32 = (number_of_links - 2).into(); let integrand = |nondimensional_end_to_end_length_per_link: f64| @@ -131,7 +129,7 @@ pub fn nondimensional_helmholtz_free_energy(number_of_links: &u8, link_length: & let m = -nondimensional_end_to_end_length_per_link*0.5 + 0.5; let k = (number_of_links_f64*m).ceil() as u128; let sum: f64 = (0..=k-1).collect::>().iter().map(|s| (-1.0_f64).powf(*s as f64)*(((1..=n).product::()/(1..=*s).product::()/(1..=n-s).product::()) as f64)*(m - (*s as f64)/number_of_links_f64).powi(p)).sum(); - 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) + 0.5*nondimensional_end_to_end_length_per_link*(n.pow(n as u32) as f64)/((1..=n-2).product::() as f64)*sum*((-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance - nondimensional_end_to_end_length_per_link).powi(2)).exp() - (-0.5*number_of_links_squared_times_nondimensional_potential_stiffness*(nondimensional_potential_distance + nondimensional_end_to_end_length_per_link).powi(2)).exp())/(2.0*number_of_links_squared_times_nondimensional_potential_stiffness*nondimensional_potential_distance*nondimensional_end_to_end_length_per_link) }; let dx = (ONE - ZERO)/(POINTS as f64); let nondimensional_configurational_partition_function = (0..=POINTS-1).collect::>().iter().map(|index| integrand(ZERO + (0.5 + *index as f64)*dx)).sum::()*dx; @@ -183,25 +181,25 @@ pub fn relative_gibbs_free_energy_per_link(number_of_links: &u8, link_length: &f /// The nondimensional Gibbs free energy as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_gibbs_free_energy(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { - nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, nondimensional_potential_distance, nondimensional_potential_stiffness, temperature) - 0.5*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) + nondimensional_helmholtz_free_energy(number_of_links, link_length, hinge_mass, nondimensional_potential_distance, nondimensional_potential_stiffness, temperature) - 0.5*(*number_of_links as f64).powi(2)*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) } /// The nondimensional Gibbs free energy per link as a function of the applied nondimensional potential distance, nondimensional potential stiffness, and temperature, parameterized by the number of links, link length, and hinge mass. pub fn nondimensional_gibbs_free_energy_per_link(number_of_links: &u8, link_length: &f64, hinge_mass: &f64, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64, temperature: &f64) -> f64 { - nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, nondimensional_potential_distance, nondimensional_potential_stiffness, temperature) - 0.5*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2)/(*number_of_links as f64) + nondimensional_helmholtz_free_energy_per_link(number_of_links, link_length, hinge_mass, nondimensional_potential_distance, nondimensional_potential_stiffness, temperature) - 0.5*(*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) } /// The nondimensional relative Gibbs free energy as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_relative_gibbs_free_energy(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - nondimensional_relative_helmholtz_free_energy(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness) - 0.5*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) + nondimensional_relative_helmholtz_free_energy(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness) - 0.5*(*number_of_links as f64).powi(2)*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) } /// The nondimensional relative Gibbs free energy per link as a function of the applied nondimensional potential distance and nondimensional potential stiffness, parameterized by the number of links. pub fn nondimensional_relative_gibbs_free_energy_per_link(number_of_links: &u8, nondimensional_potential_distance: &f64, nondimensional_potential_stiffness: &f64) -> f64 { - nondimensional_relative_helmholtz_free_energy_per_link(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness) - 0.5*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2)/(*number_of_links as f64) + nondimensional_relative_helmholtz_free_energy_per_link(number_of_links, nondimensional_potential_distance, nondimensional_potential_stiffness) - 0.5*(*number_of_links as f64)*nondimensional_potential_stiffness*nondimensional_potential_distance.powi(2) } /// The implemented functionality of the thermodynamics of the FJC model in the modified canonical ensemble. diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.jl b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.jl index 6ca2d04c..61f8eed8 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.jl +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.jl @@ -93,7 +93,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -130,7 +130,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length_per_link = model.end_to_end_length_per_link( @@ -170,7 +170,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force = model.force(potential_distance, potential_stiffness, temperature) @@ -206,7 +206,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -248,7 +248,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link( @@ -289,7 +289,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy = model.relative_helmholtz_free_energy( @@ -330,7 +330,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_per_link = @@ -373,7 +373,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -413,7 +413,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy_per_link = model.gibbs_free_energy_per_link( @@ -455,7 +455,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy = model.relative_gibbs_free_energy( @@ -497,7 +497,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link( @@ -534,7 +534,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -603,7 +603,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -643,7 +643,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy = model.relative_helmholtz_free_energy( @@ -757,7 +757,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -794,7 +794,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy = model.relative_gibbs_free_energy( @@ -906,7 +906,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy = model.helmholtz_free_energy( @@ -950,7 +950,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link( @@ -1078,7 +1078,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy = @@ -1119,7 +1119,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature gibbs_free_energy_per_link = model.gibbs_free_energy_per_link( @@ -1243,7 +1243,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_0 = model.relative_helmholtz_free_energy( @@ -1271,7 +1271,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_helmholtz_free_energy_per_link_0 = @@ -1342,7 +1342,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_0 = model.relative_gibbs_free_energy( @@ -1350,7 +1350,8 @@ end potential_stiffness, temperature, ) - @test abs(relative_gibbs_free_energy_0) <= ZERO + @test abs(relative_gibbs_free_energy_0) <= + ZERO * number_of_links * BOLTZMANN_CONSTANT * temperature end end @@ -1369,7 +1370,7 @@ end temperature = parameters.temperature_reference + parameters.temperature_scale * (0.5 - rand()) potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature relative_gibbs_free_energy_per_link_0 = model.relative_gibbs_free_energy_per_link( @@ -1377,7 +1378,8 @@ end potential_stiffness, temperature, ) - @test abs(relative_gibbs_free_energy_per_link_0) <= ZERO + @test abs(relative_gibbs_free_energy_per_link_0) <= + ZERO * BOLTZMANN_CONSTANT * temperature end end @@ -1398,7 +1400,7 @@ end ZERO, nondimensional_potential_stiffness, ) - @test abs(nondimensional_relative_gibbs_free_energy_0) <= ZERO + @test abs(nondimensional_relative_gibbs_free_energy_0) <= ZERO * number_of_links end end @@ -1441,7 +1443,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature force = model.force(potential_distance, potential_stiffness, temperature) @@ -1520,7 +1522,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length = @@ -1564,7 +1566,7 @@ end potential_distance = nondimensional_potential_distance * number_of_links * link_length potential_stiffness = - nondimensional_potential_stiffness / (number_of_links * link_length)^2 * + nondimensional_potential_stiffness / link_length^2 * BOLTZMANN_CONSTANT * temperature end_to_end_length_per_link = model.end_to_end_length_per_link( @@ -1613,7 +1615,7 @@ end ) h = parameters.rel_tol nondimensional_end_to_end_length_from_derivative = - -1.0 * number_of_links / nondimensional_potential_stiffness * ( + -1.0 / number_of_links / nondimensional_potential_stiffness * ( model.nondimensional_relative_gibbs_free_energy( nondimensional_potential_distance + 0.5 * h, nondimensional_potential_stiffness, @@ -1652,7 +1654,7 @@ end ) h = parameters.rel_tol nondimensional_end_to_end_length_per_link_from_derivative = - -1.0 * number_of_links / nondimensional_potential_stiffness * ( + -1.0 / number_of_links / nondimensional_potential_stiffness * ( model.nondimensional_relative_gibbs_free_energy_per_link( nondimensional_potential_distance + 0.5 * h, nondimensional_potential_stiffness, @@ -1682,7 +1684,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -1787,7 +1789,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -1869,7 +1871,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -1951,7 +1953,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2033,7 +2035,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2385,7 +2387,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2429,12 +2431,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2451,7 +2453,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2495,12 +2497,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2549,12 +2551,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2603,12 +2605,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2625,7 +2627,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2689,12 +2691,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2711,7 +2713,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2775,12 +2777,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2797,7 +2799,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2861,12 +2863,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -2883,7 +2885,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2948,12 +2950,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -3021,12 +3023,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -3101,12 +3103,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -3167,12 +3169,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end @@ -3233,12 +3235,12 @@ end residual_rel_2 = residual_rel( parameters.nondimensional_potential_stiffness_small * parameters.log_log_scale, ) - @test abs(residual_rel_1) <= - parameters.nondimensional_potential_stiffness_small^2 && + log_log_slope = + -log(residual_rel_2 / residual_rel_1) / log(parameters.log_log_scale) + @test abs(log_log_slope + 1.0) <= parameters.log_log_tol && + abs(residual_rel_1) <= parameters.nondimensional_potential_stiffness_small && abs(residual_rel_2) <= - ( - parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale - )^2 + parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale end end diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.py b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.py index 7334e957..36c6bbbe 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.py +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.py @@ -166,7 +166,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -237,7 +237,7 @@ def test_end_to_end_length_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length_per_link = \ model.end_to_end_length_per_link( np.array(potential_distance), @@ -306,7 +306,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force = \ model.force( np.array(potential_distance), @@ -372,7 +372,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -438,7 +438,7 @@ def test_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy_per_link = \ model.helmholtz_free_energy_per_link( np.array(potential_distance), @@ -507,7 +507,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy = \ model.relative_helmholtz_free_energy( np.array(potential_distance), @@ -572,7 +572,7 @@ def test_relative_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_per_link = \ model.relative_helmholtz_free_energy_per_link( np.array(potential_distance), @@ -640,7 +640,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -712,7 +712,7 @@ def test_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy_per_link = \ model.gibbs_free_energy_per_link( np.array(potential_distance), @@ -783,7 +783,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy = \ model.relative_gibbs_free_energy( np.array(potential_distance), @@ -854,7 +854,7 @@ def test_relative_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_per_link = \ model.relative_gibbs_free_energy_per_link( np.array(potential_distance), @@ -925,7 +925,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -1055,7 +1055,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -1121,7 +1121,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy = \ model.relative_helmholtz_free_energy( np.array(potential_distance), @@ -1302,7 +1302,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -1374,7 +1374,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy = \ model.relative_gibbs_free_energy( np.array(potential_distance), @@ -1574,7 +1574,7 @@ def test_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy = \ model.helmholtz_free_energy( np.array(potential_distance), @@ -1649,7 +1649,7 @@ def test_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 helmholtz_free_energy_per_link = \ model.helmholtz_free_energy_per_link( np.array(potential_distance), @@ -1858,7 +1858,7 @@ def test_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy = \ model.gibbs_free_energy( np.array(potential_distance), @@ -1934,7 +1934,7 @@ def test_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 gibbs_free_energy_per_link = \ model.gibbs_free_energy_per_link( np.array(potential_distance), @@ -2142,7 +2142,7 @@ def test_relative_helmholtz_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_0 = \ model.relative_helmholtz_free_energy( np.array( @@ -2191,7 +2191,7 @@ def test_relative_helmholtz_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_helmholtz_free_energy_per_link_0 = \ model.relative_helmholtz_free_energy_per_link( np.array( @@ -2325,7 +2325,7 @@ def test_relative_gibbs_free_energy(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_0 = \ model.relative_gibbs_free_energy( np.array( @@ -2374,7 +2374,7 @@ def test_relative_gibbs_free_energy_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 relative_gibbs_free_energy_per_link_0 = \ model.relative_gibbs_free_energy_per_link( np.array( @@ -2522,7 +2522,7 @@ def test_force(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 force = \ model.force( np.array(potential_distance), @@ -2663,7 +2663,7 @@ def test_end_to_end_length(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length = \ model.end_to_end_length( np.array(potential_distance), @@ -2741,7 +2741,7 @@ def test_end_to_end_length_per_link(self): potential_stiffness = \ nondimensional_potential_stiffness * \ parameters.boltzmann_constant*temperature / \ - (number_of_links*link_length)**2 + link_length**2 end_to_end_length_per_link = \ model.end_to_end_length_per_link( np.array(potential_distance), @@ -2817,7 +2817,7 @@ def test_nondimensional_end_to_end_length(self): ) h_step = parameters.rel_tol nondimensional_end_to_end_length_from_derivative = \ - -number_of_links/nondimensional_potential_stiffness*( + -1.0/nondimensional_potential_stiffness/number_of_links*( model.nondimensional_relative_gibbs_free_energy( np.array( nondimensional_potential_distance + 0.5*h_step @@ -2882,7 +2882,7 @@ def test_nondimensional_end_to_end_length_per_link(self): ) h_step = parameters.rel_tol nondimensional_end_to_end_length_per_link_from_derivative = \ - -number_of_links/nondimensional_potential_stiffness*( + -1.0/nondimensional_potential_stiffness/number_of_links*( model.nondimensional_relative_gibbs_free_energy_per_link( np.array( nondimensional_potential_distance + 0.5*h_step @@ -2938,7 +2938,7 @@ def test_force(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3097,7 +3097,7 @@ def test_helmholtz_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3210,7 +3210,7 @@ def test_helmholtz_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3323,7 +3323,7 @@ def test_relative_helmholtz_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3436,7 +3436,7 @@ def test_relative_helmholtz_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3973,7 +3973,7 @@ def test_end_to_end_length(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4025,8 +4025,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4036,10 +4036,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_end_to_end_length_per_link(self): """Function to test the behavior @@ -4067,7 +4067,7 @@ def test_end_to_end_length_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4119,8 +4119,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4130,10 +4130,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_end_to_end_length(self): """Function to test the behavior @@ -4200,8 +4200,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4211,10 +4211,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_end_to_end_length_per_link(self): """Function to test the behavior @@ -4281,8 +4281,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4292,10 +4292,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_gibbs_free_energy(self): """Function to test the behavior @@ -4327,7 +4327,7 @@ def test_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4397,8 +4397,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4408,10 +4408,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_gibbs_free_energy_per_link(self): """Function to test the behavior @@ -4443,7 +4443,7 @@ def test_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4513,8 +4513,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4524,10 +4524,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_relative_gibbs_free_energy(self): """Function to test the behavior @@ -4559,7 +4559,7 @@ def test_relative_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4629,8 +4629,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4640,10 +4640,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_relative_gibbs_free_energy_per_link(self): """Function to test the behavior @@ -4675,7 +4675,7 @@ def test_relative_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4745,8 +4745,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4756,10 +4756,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_gibbs_free_energy(self): """Function to test the behavior @@ -4854,8 +4854,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4865,10 +4865,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_gibbs_free_energy_per_link(self): """Function to test the behavior @@ -4963,8 +4963,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -4974,10 +4974,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_relative_gibbs_free_energy(self): """Function to test the behavior @@ -5063,8 +5063,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -5074,10 +5074,10 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) def test_nondimensional_relative_gibbs_free_energy_per_link(self): """Function to test the behavior @@ -5163,8 +5163,8 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ - # np.log(parameters.log_log_scale) + log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ + np.log(parameters.log_log_scale) self.assertLessEqual( np.abs(residual_rel_1), parameters.nondimensional_potential_stiffness_small @@ -5174,7 +5174,7 @@ def integrand_denominator(nondimensional_potential_distance): parameters.nondimensional_potential_stiffness_small / parameters.log_log_scale ) - # self.assertLessEqual( - # np.abs(log_log_slope/2.0 + 1.0), - # parameters.log_log_tol - # ) + self.assertLessEqual( + np.abs(log_log_slope + 1.0), + parameters.log_log_tol + ) diff --git a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.rs b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.rs index 82e74451..99366536 100644 --- a/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.rs +++ b/src/physics/single_chain/fjc/thermodynamics/modified_canonical/test.rs @@ -81,7 +81,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &end_to_end_length/link_length - &nondimensional_end_to_end_length; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; @@ -105,7 +105,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &end_to_end_length/link_length - &nondimensional_end_to_end_length; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; @@ -129,7 +129,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_force = model.nondimensional_force(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force = model.force(&potential_distance, &potential_stiffness, &temperature); let residual_abs = &force/BOLTZMANN_CONSTANT/temperature*link_length - &nondimensional_force; let residual_rel = &residual_abs/&nondimensional_force; @@ -153,7 +153,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_helmholtz_free_energy = model.nondimensional_helmholtz_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_helmholtz_free_energy; let residual_rel = residual_abs/nondimensional_helmholtz_free_energy; @@ -177,7 +177,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_helmholtz_free_energy_per_link = model.nondimensional_helmholtz_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_helmholtz_free_energy_per_link; let residual_rel = residual_abs/nondimensional_helmholtz_free_energy_per_link; @@ -201,7 +201,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_helmholtz_free_energy = model.nondimensional_relative_helmholtz_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_helmholtz_free_energy; let residual_rel = residual_abs/nondimensional_relative_helmholtz_free_energy; @@ -225,7 +225,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_helmholtz_free_energy_per_link = model.nondimensional_relative_helmholtz_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_helmholtz_free_energy_per_link; let residual_rel = residual_abs/nondimensional_relative_helmholtz_free_energy_per_link; @@ -249,7 +249,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_gibbs_free_energy = model.nondimensional_gibbs_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_gibbs_free_energy; let residual_rel = residual_abs/nondimensional_gibbs_free_energy; @@ -273,7 +273,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_gibbs_free_energy_per_link = model.nondimensional_gibbs_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness, &temperature); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_gibbs_free_energy_per_link; let residual_rel = residual_abs/nondimensional_gibbs_free_energy_per_link; @@ -297,7 +297,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_gibbs_free_energy = model.nondimensional_relative_gibbs_free_energy(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_gibbs_free_energy; let residual_rel = residual_abs/nondimensional_relative_gibbs_free_energy; @@ -321,7 +321,7 @@ mod nondimensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let nondimensional_relative_gibbs_free_energy_per_link = model.nondimensional_relative_gibbs_free_energy_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy_per_link/BOLTZMANN_CONSTANT/temperature - nondimensional_relative_gibbs_free_energy_per_link; let residual_rel = residual_abs/nondimensional_relative_gibbs_free_energy_per_link; @@ -349,7 +349,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let end_to_end_length_per_link = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = end_to_end_length/(number_of_links as f64) - end_to_end_length_per_link; @@ -394,7 +394,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = helmholtz_free_energy/(number_of_links as f64) - helmholtz_free_energy_per_link; @@ -418,7 +418,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_helmholtz_free_energy/(number_of_links as f64) - relative_helmholtz_free_energy_per_link; @@ -485,7 +485,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = gibbs_free_energy/(number_of_links as f64) - gibbs_free_energy_per_link; @@ -509,7 +509,7 @@ mod per_link let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let residual_abs = relative_gibbs_free_energy/(number_of_links as f64) - relative_gibbs_free_energy_per_link; @@ -581,7 +581,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy = model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_0 = model.helmholtz_free_energy(&ZERO, &potential_stiffness, &temperature); let relative_helmholtz_free_energy = model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature); @@ -605,7 +605,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let helmholtz_free_energy_per_link = model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let helmholtz_free_energy_per_link_0 = model.helmholtz_free_energy_per_link(&ZERO, &potential_stiffness, &temperature); let relative_helmholtz_free_energy_per_link = model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); @@ -673,7 +673,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy = model.gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_0 = model.gibbs_free_energy(&ZERO, &potential_stiffness, &temperature); let relative_gibbs_free_energy = model.relative_gibbs_free_energy(&potential_distance, &potential_stiffness, &temperature); @@ -697,7 +697,7 @@ mod relative let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let gibbs_free_energy_per_link = model.gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); let gibbs_free_energy_per_link_0 = model.gibbs_free_energy_per_link(&ZERO, &potential_stiffness, &temperature); let relative_gibbs_free_energy_per_link = model.relative_gibbs_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature); @@ -768,7 +768,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_0 = model.relative_helmholtz_free_energy(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); assert!(relative_helmholtz_free_energy_0.abs() <= BOLTZMANN_CONSTANT*temperature*(number_of_links as f64)*ZERO); } @@ -786,7 +786,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_helmholtz_free_energy_per_link_0 = model.relative_helmholtz_free_energy_per_link(&(ZERO*(number_of_links as f64)*link_length), &potential_stiffness, &temperature); assert!(relative_helmholtz_free_energy_per_link_0.abs() <= BOLTZMANN_CONSTANT*temperature*ZERO); } @@ -836,7 +836,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy_0 = model.relative_gibbs_free_energy(&ZERO, &potential_stiffness, &temperature); assert!(relative_gibbs_free_energy_0.abs() <= BOLTZMANN_CONSTANT*temperature*(number_of_links as f64)*ZERO); } @@ -854,7 +854,7 @@ mod zero let model = FJC::init(number_of_links, link_length, hinge_mass); let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let relative_gibbs_free_energy_per_link_0 = model.relative_gibbs_free_energy_per_link(&ZERO, &potential_stiffness, &temperature); assert!(relative_gibbs_free_energy_per_link_0.abs() <= BOLTZMANN_CONSTANT*temperature*ZERO); } @@ -911,7 +911,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force = model.force(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let force_from_derivative = (model.relative_helmholtz_free_energy(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; @@ -956,7 +956,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length = model.end_to_end_length(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let end_to_end_length_from_derivative = -1.0/potential_stiffness*(model.relative_gibbs_free_energy(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_gibbs_free_energy(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; @@ -980,7 +980,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let potential_distance = nondimensional_potential_distance*(number_of_links as f64)*link_length; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let end_to_end_length_per_link = model.end_to_end_length_per_link(&potential_distance, &potential_stiffness, &temperature); let h = parameters.rel_tol*(number_of_links as f64)*link_length; let end_to_end_length_per_link_from_derivative = -1.0/potential_stiffness*(model.relative_gibbs_free_energy_per_link(&(potential_distance + 0.5*h), &potential_stiffness, &temperature) - model.relative_gibbs_free_energy_per_link(&(potential_distance - 0.5*h), &potential_stiffness, &temperature))/h; @@ -1004,7 +1004,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length = model.nondimensional_end_to_end_length(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let h = parameters.rel_tol; - let nondimensional_end_to_end_length_from_derivative = -(number_of_links as f64)/nondimensional_potential_stiffness*(model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; + let nondimensional_end_to_end_length_from_derivative = -1.0/nondimensional_potential_stiffness/(number_of_links as f64)*(model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; let residual_abs = &nondimensional_end_to_end_length - &nondimensional_end_to_end_length_from_derivative; let residual_rel = &residual_abs/&nondimensional_end_to_end_length; assert!(residual_rel.abs() <= h); @@ -1025,7 +1025,7 @@ mod connection let nondimensional_potential_stiffness = parameters.nondimensional_potential_stiffness_reference + 0.5*parameters.nondimensional_potential_stiffness_scale*(0.5 - rng.gen::()); let nondimensional_end_to_end_length_per_link = model.nondimensional_end_to_end_length_per_link(&nondimensional_potential_distance, &nondimensional_potential_stiffness); let h = parameters.rel_tol; - let nondimensional_end_to_end_length_per_link_from_derivative = -(number_of_links as f64)/nondimensional_potential_stiffness*(model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; + let nondimensional_end_to_end_length_per_link_from_derivative = -1.0/nondimensional_potential_stiffness/(number_of_links as f64)*(model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance + 0.5*h), &nondimensional_potential_stiffness) - model.nondimensional_relative_gibbs_free_energy_per_link(&(nondimensional_potential_distance - 0.5*h), &nondimensional_potential_stiffness))/h; let residual_abs = &nondimensional_end_to_end_length_per_link - &nondimensional_end_to_end_length_per_link_from_derivative; let residual_rel = &residual_abs/&nondimensional_end_to_end_length_per_link; assert!(residual_rel.abs() <= h); @@ -1056,14 +1056,14 @@ mod strong_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |potential_distance: f64| { (model.force(&potential_distance, &potential_stiffness, &temperature) - model.asymptotic.strong_potential.force(&potential_distance, &potential_stiffness, &temperature)).powi(2) }; let integrand_denominator = |potential_distance: f64| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; (model.force(&potential_distance, &potential_stiffness, &temperature)).powi(2) }; let numerator = integrate(integrand_numerator, &(ZERO*(number_of_links as f64)*link_length), &(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &POINTS); @@ -1121,12 +1121,12 @@ mod strong_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |potential_distance: f64| { (model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) - model.helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature) - model.asymptotic.strong_potential.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) + model.asymptotic.strong_potential.helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) }; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_denominator = |potential_distance: f64| { (model.helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) - model.helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1155,12 +1155,12 @@ mod strong_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |potential_distance: f64| { (model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) - model.helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature) - model.asymptotic.strong_potential.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) + model.asymptotic.strong_potential.helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) }; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_denominator = |potential_distance: f64| { (model.helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) - model.helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1189,12 +1189,12 @@ mod strong_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |potential_distance: f64| { (model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature) - model.asymptotic.strong_potential.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) + model.asymptotic.strong_potential.relative_helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) }; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_denominator = |potential_distance: f64| { (model.relative_helmholtz_free_energy(&potential_distance, &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1223,12 +1223,12 @@ mod strong_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |potential_distance: f64| { (model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature) - model.asymptotic.strong_potential.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) + model.asymptotic.strong_potential.relative_helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) }; - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_denominator = |potential_distance: f64| { (model.relative_helmholtz_free_energy_per_link(&potential_distance, &potential_stiffness, &temperature) - model.relative_helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1389,7 +1389,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1406,8 +1406,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1424,7 +1426,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1441,8 +1443,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1472,8 +1476,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1503,8 +1509,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1521,7 +1529,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1538,8 +1546,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1556,7 +1566,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1573,8 +1583,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1591,7 +1603,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1608,8 +1620,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1626,7 +1640,7 @@ mod weak_potential let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1643,8 +1657,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1675,8 +1691,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1707,8 +1725,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1738,8 +1758,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } #[test] @@ -1769,8 +1791,10 @@ mod weak_potential }; let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); - assert!(residual_rel_1.abs() <= (parameters.nondimensional_potential_stiffness_small).powi(2)); - assert!(residual_rel_2.abs() <= (parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale).powi(2)); + let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); + assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); + assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); + assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } } diff --git a/src/physics/single_chain/fjc/thermodynamics/test.jl b/src/physics/single_chain/fjc/thermodynamics/test.jl index d6973fbc..2c671962 100644 --- a/src/physics/single_chain/fjc/thermodynamics/test.jl +++ b/src/physics/single_chain/fjc/thermodynamics/test.jl @@ -709,7 +709,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -816,7 +816,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -877,7 +877,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -1037,7 +1037,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -1101,7 +1101,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -1277,7 +1277,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness force_ref = model.modified_canonical.force( potential_distance_ref, @@ -1361,7 +1361,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness force_ref = model.modified_canonical.force( potential_distance_ref, @@ -1441,7 +1441,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -1505,7 +1505,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -1837,7 +1837,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -1941,7 +1941,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2017,7 +2017,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2097,7 +2097,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2158,7 +2158,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(end_to_end_length) return ( @@ -2451,7 +2451,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2514,7 +2514,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2691,7 +2691,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness force_ref = model.modified_canonical.asymptotic.weak_potential.force( potential_distance_ref, @@ -2775,7 +2775,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness force_ref = model.modified_canonical.asymptotic.weak_potential.force( potential_distance_ref, @@ -2855,7 +2855,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = @@ -2918,7 +2918,7 @@ end model = FJC(number_of_links, link_length, hinge_mass) function residual_rel(nondimensional_potential_stiffness) potential_stiffness = - BOLTZMANN_CONSTANT * temperature / (number_of_links * link_length)^2 * + BOLTZMANN_CONSTANT * temperature / link_length^2 * nondimensional_potential_stiffness function integrand_numerator(nondimensional_potential_distance) potential_distance = diff --git a/src/physics/single_chain/fjc/thermodynamics/test.py b/src/physics/single_chain/fjc/thermodynamics/test.py index 38e378af..d8e0ab80 100644 --- a/src/physics/single_chain/fjc/thermodynamics/test.py +++ b/src/physics/single_chain/fjc/thermodynamics/test.py @@ -1250,7 +1250,7 @@ def test_force(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -1407,7 +1407,7 @@ def test_relative_helmholtz_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -1489,7 +1489,7 @@ def test_relative_helmholtz_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -1727,7 +1727,7 @@ def test_end_to_end_length(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -1785,15 +1785,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -1825,7 +1816,7 @@ def test_end_to_end_length_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -1883,15 +1874,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -1968,15 +1950,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2053,15 +2026,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2097,7 +2061,7 @@ def test_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical.force( np.array(potential_distance_ref), @@ -2177,15 +2141,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2221,7 +2176,7 @@ def test_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical.force( np.array(potential_distance_ref), @@ -2301,15 +2256,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2345,7 +2291,7 @@ def test_relative_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical.force( np.array(potential_distance_ref), @@ -2425,15 +2371,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2469,7 +2406,7 @@ def test_relative_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical.force( np.array(potential_distance_ref), @@ -2549,15 +2486,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2666,15 +2594,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2783,15 +2702,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2891,15 +2801,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -2999,15 +2900,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -3045,7 +2937,7 @@ def test_force(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3200,7 +3092,7 @@ def test_helmholtz_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3309,7 +3201,7 @@ def test_helmholtz_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3418,7 +3310,7 @@ def test_relative_helmholtz_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -3527,7 +3419,7 @@ def test_relative_helmholtz_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(end_to_end_length): @@ -4044,7 +3936,7 @@ def test_end_to_end_length(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4103,15 +3995,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4143,7 +4026,7 @@ def test_end_to_end_length_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature def integrand_numerator(nondimensional_potential_distance): @@ -4202,15 +4085,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4288,15 +4162,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4374,15 +4239,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4418,7 +4274,7 @@ def test_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical. \ asymptotic.weak_potential. \ @@ -4500,15 +4356,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4544,7 +4391,7 @@ def test_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical. \ asymptotic.weak_potential. \ @@ -4626,15 +4473,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4670,7 +4508,7 @@ def test_relative_gibbs_free_energy(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical. \ asymptotic.weak_potential. \ @@ -4752,15 +4590,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4796,7 +4625,7 @@ def test_relative_gibbs_free_energy_per_link(self): def residual_rel(nondimensional_potential_stiffness): potential_stiffness = nondimensional_potential_stiffness / \ - (number_of_links*link_length)**2 * \ + link_length**2 * \ parameters.boltzmann_constant*temperature force_ref = model.modified_canonical. \ asymptotic.weak_potential. \ @@ -4878,15 +4707,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -4997,15 +4817,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -5116,15 +4927,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -5226,15 +5028,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol @@ -5336,15 +5129,6 @@ def integrand_denominator(nondimensional_potential_distance): ) log_log_slope = np.log(residual_rel_2/residual_rel_1) / \ np.log(parameters.log_log_scale) - self.assertLessEqual( - np.abs(residual_rel_1), - parameters.nondimensional_potential_stiffness_small - ) - self.assertLessEqual( - np.abs(residual_rel_2), - parameters.nondimensional_potential_stiffness_small / - parameters.log_log_scale - ) self.assertLessEqual( np.abs(log_log_slope + 1.0), parameters.log_log_tol diff --git a/src/physics/single_chain/fjc/thermodynamics/test.rs b/src/physics/single_chain/fjc/thermodynamics/test.rs index c0825cd9..1294285c 100644 --- a/src/physics/single_chain/fjc/thermodynamics/test.rs +++ b/src/physics/single_chain/fjc/thermodynamics/test.rs @@ -561,7 +561,7 @@ mod modified_canonical_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.modified_canonical.force(&end_to_end_length, &potential_stiffness, &temperature) - model.isometric.force(&end_to_end_length, &temperature)).powi(2) @@ -625,7 +625,7 @@ mod modified_canonical_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.modified_canonical.relative_helmholtz_free_energy(&end_to_end_length, &potential_stiffness, &temperature) - model.isometric.relative_helmholtz_free_energy(&end_to_end_length, &temperature)).powi(2) @@ -658,7 +658,7 @@ mod modified_canonical_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.modified_canonical.relative_helmholtz_free_energy_per_link(&end_to_end_length, &potential_stiffness, &temperature) - model.isometric.relative_helmholtz_free_energy_per_link(&end_to_end_length, &temperature)).powi(2) @@ -760,7 +760,7 @@ mod modified_canonical_weak_potential_isotensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -779,8 +779,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -798,7 +796,7 @@ mod modified_canonical_weak_potential_isotensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -817,8 +815,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -851,8 +847,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -885,8 +879,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -905,7 +897,7 @@ mod modified_canonical_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.force(&potential_distance_ref, &potential_stiffness, &temperature); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -925,8 +917,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -945,7 +935,7 @@ mod modified_canonical_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.force(&potential_distance_ref, &potential_stiffness, &temperature); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -965,8 +955,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -985,7 +973,7 @@ mod modified_canonical_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.force(&potential_distance_ref, &potential_stiffness, &temperature); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1005,8 +993,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1025,7 +1011,7 @@ mod modified_canonical_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.force(&potential_distance_ref, &potential_stiffness, &temperature); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1045,8 +1031,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1082,8 +1066,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1119,8 +1101,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1155,8 +1135,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1191,8 +1169,6 @@ mod modified_canonical_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1221,7 +1197,7 @@ mod modified_canonical_asymptotic_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.isometric.force(&end_to_end_length, &temperature) - model.modified_canonical.asymptotic.strong_potential.force(&end_to_end_length, &potential_stiffness, &temperature)).powi(2) @@ -1285,7 +1261,7 @@ mod modified_canonical_asymptotic_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.isometric.helmholtz_free_energy(&end_to_end_length, &temperature) - model.isometric.helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &temperature) - model.modified_canonical.asymptotic.strong_potential.helmholtz_free_energy(&end_to_end_length, &potential_stiffness, &temperature) + model.modified_canonical.asymptotic.strong_potential.helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1318,7 +1294,7 @@ mod modified_canonical_asymptotic_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.isometric.helmholtz_free_energy_per_link(&end_to_end_length, &temperature) - model.isometric.helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &temperature) - model.modified_canonical.asymptotic.strong_potential.helmholtz_free_energy_per_link(&end_to_end_length, &potential_stiffness, &temperature) + model.modified_canonical.asymptotic.strong_potential.helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1351,7 +1327,7 @@ mod modified_canonical_asymptotic_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.isometric.relative_helmholtz_free_energy(&end_to_end_length, &temperature) - model.isometric.relative_helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &temperature) - model.modified_canonical.asymptotic.strong_potential.relative_helmholtz_free_energy(&end_to_end_length, &potential_stiffness, &temperature) + model.modified_canonical.asymptotic.strong_potential.relative_helmholtz_free_energy(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1384,7 +1360,7 @@ mod modified_canonical_asymptotic_strong_potential_isometric let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |end_to_end_length: f64| { (model.isometric.relative_helmholtz_free_energy_per_link(&end_to_end_length, &temperature) - model.isometric.relative_helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &temperature) - model.modified_canonical.asymptotic.strong_potential.relative_helmholtz_free_energy_per_link(&end_to_end_length, &potential_stiffness, &temperature) + model.modified_canonical.asymptotic.strong_potential.relative_helmholtz_free_energy_per_link(&(parameters.nondimensional_potential_distance_small*(number_of_links as f64)*link_length), &potential_stiffness, &temperature)).powi(2) @@ -1550,7 +1526,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1569,8 +1545,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1588,7 +1562,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let temperature = parameters.temperature_reference + parameters.temperature_scale*(0.5 - rng.gen::()); let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let integrand_numerator = |nondimensional_potential_distance: f64| { let potential_distance = (number_of_links as f64)*link_length*nondimensional_potential_distance; @@ -1607,8 +1581,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1641,8 +1613,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1675,8 +1645,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1695,7 +1663,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.asymptotic.weak_potential.force(&potential_distance_ref, &potential_stiffness); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1716,8 +1684,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1736,7 +1702,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.asymptotic.weak_potential.force(&potential_distance_ref, &potential_stiffness); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1757,8 +1723,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1777,7 +1741,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.asymptotic.weak_potential.force(&potential_distance_ref, &potential_stiffness); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1798,8 +1762,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1818,7 +1780,7 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let potential_distance_ref = parameters.nondimensional_potential_distance_large_1*(number_of_links as f64)*link_length; let residual_rel = |nondimensional_potential_stiffness| { - let potential_stiffness = nondimensional_potential_stiffness/((number_of_links as f64)*link_length).powi(2)*BOLTZMANN_CONSTANT*temperature; + let potential_stiffness = nondimensional_potential_stiffness/link_length.powi(2)*BOLTZMANN_CONSTANT*temperature; let force_ref = model.modified_canonical.asymptotic.weak_potential.force(&potential_distance_ref, &potential_stiffness); let integrand_numerator = |nondimensional_potential_distance: f64| { @@ -1839,8 +1801,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1877,8 +1837,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1915,8 +1873,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1952,8 +1908,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } @@ -1989,8 +1943,6 @@ mod modified_canonical_asymptotic_weak_potential_isotensional let residual_rel_1 = residual_rel(parameters.nondimensional_potential_stiffness_small); let residual_rel_2 = residual_rel(parameters.nondimensional_potential_stiffness_small*parameters.log_log_scale); let log_log_slope = -(residual_rel_2/residual_rel_1).ln()/(parameters.log_log_scale).ln(); - assert!(residual_rel_1.abs() <= parameters.nondimensional_potential_stiffness_small); - assert!(residual_rel_2.abs() <= parameters.nondimensional_potential_stiffness_small/parameters.log_log_scale); assert!((log_log_slope + 1.0).abs() <= parameters.log_log_tol); } } diff --git a/src/physics/single_chain/mod.jl b/src/physics/single_chain/mod.jl index 7bb00708..923afc58 100644 --- a/src/physics/single_chain/mod.jl +++ b/src/physics/single_chain/mod.jl @@ -92,10 +92,10 @@ parameters = Parameters( 33e-2, 1e1, 1e1 + 25e-1, - 5e1, - 1e2, - 1e-2, - 1e2, + 1e0, + 2e0, + 1e-3, + 1e1, 3e2, 1e2, ) diff --git a/src/physics/single_chain/test.py b/src/physics/single_chain/test.py index d0aa6918..e06503a8 100644 --- a/src/physics/single_chain/test.py +++ b/src/physics/single_chain/test.py @@ -24,7 +24,7 @@ def __init__(self): self.abs_tol = 1e-7 self.rel_tol = 1e-5 self.rel_tol_thermodynamic_limit = 1e-1 - self.log_log_tol = 5e-2 + self.log_log_tol = 5e-1 self.log_log_scale = 12e-1 self.number_of_loops = 8 self.hinge_mass_reference = 1e0 @@ -50,10 +50,10 @@ def __init__(self): self.nondimensional_potential_distance_small = 33e-2 self.nondimensional_potential_distance_large_1 = 1e1 self.nondimensional_potential_distance_large_2 = 1e1 + 25e-1 - self.nondimensional_potential_stiffness_reference = 5e1 - self.nondimensional_potential_stiffness_scale = 1e2 - self.nondimensional_potential_stiffness_small = 1e-2 - self.nondimensional_potential_stiffness_large = 1e2 + self.nondimensional_potential_stiffness_reference = 1e0 + self.nondimensional_potential_stiffness_scale = 2e0 + self.nondimensional_potential_stiffness_small = 1e-3 + self.nondimensional_potential_stiffness_large = 1e1 self.nondimensional_well_width_small = 1e-2 self.temperature_reference = 3e2 self.temperature_scale = 1e2 diff --git a/src/physics/single_chain/test.rs b/src/physics/single_chain/test.rs index 29df5dfe..56d5ef3d 100644 --- a/src/physics/single_chain/test.rs +++ b/src/physics/single_chain/test.rs @@ -85,12 +85,12 @@ impl Default for Parameters nondimensional_potential_distance_reference: 1e0, nondimensional_potential_distance_scale: 2e0, nondimensional_potential_distance_small: 33e-2, - nondimensional_potential_distance_large_1: 1e1, - nondimensional_potential_distance_large_2: 1e1 + 25e-1, - nondimensional_potential_stiffness_reference: 5e1, - nondimensional_potential_stiffness_scale: 1e2, - nondimensional_potential_stiffness_small: 1e-2, - nondimensional_potential_stiffness_large: 1e2, + nondimensional_potential_distance_large_1: 1e0, + nondimensional_potential_distance_large_2: 1e0 + 25e-1, + nondimensional_potential_stiffness_reference: 1e0, + nondimensional_potential_stiffness_scale: 2e0, + nondimensional_potential_stiffness_small: 1e-3, + nondimensional_potential_stiffness_large: 1e1, temperature_reference: 3e2, temperature_scale: 1e2, }