def get_free_energy_for_minimize(grid_points): """ Calculates total elastic energy for given radius and pressure. """ global free_energy_elastic_stretching, \ free_energy_elastic_bending, \ free_energy_elastic_tail, \ free_energy_external, \ current_volume u_coef = grid_points[:N_COEF_U] h_coef = grid_points[N_COEF_U:] u = Chebyshev(u_coef, domain=[0, radius]) h = Chebyshev(h_coef, domain=[0, radius]) r = Chebyshev([radius/2, radius/2], domain=[0, radius]) dh_dr = h.deriv(m=1) d2h_dr2 = h.deriv(m=2) du_dr = u.deriv(m=1) current_volume = get_volume_from_h_coefs(h, radius) psi_str_to_integrate = \ (du_dr ** 2 + du_dr * dh_dr ** 2 \ + 0.25 * dh_dr ** 4 \ + (u // r) ** 2) * r free_energy_elastic_stretching = np.pi * YOUNGS_MODULUS \ * (psi_str_to_integrate.integ()(radius) \ - psi_str_to_integrate.integ()(0.0)) free_energy_elastic_tail = np.pi * YOUNGS_MODULUS * u(radius) ** 2 psi_bend_to_integrate = \ (d2h_dr2 ** 2 + (dh_dr // r) ** 2) * r free_energy_elastic_bending = RIGIDITY * np.pi \ * (psi_bend_to_integrate.integ()(radius) \ - psi_bend_to_integrate.integ()(0.0)) # free_energy_elastic_bending = 0.0 free_energy_external = -current_volume * pressure return free_energy_elastic_stretching \ + free_energy_elastic_bending \ + free_energy_elastic_tail \ + free_energy_external
def h_constraint_der_zero(grid_points): """ Boundary condition h'(0) = 0. """ h_coef = grid_points[N_COEF_U:] h = Chebyshev(h_coef, domain=[0, radius]) return h.deriv(m=1)(0.0)
def _derivative(c, m): cheb = Chebyshev(c) dcheb = cheb.deriv(m=m) return dcheb.coef
def _derivative(c, m): cheb = Chebyshev(c) dcheb = cheb.deriv(m=m) return dcheb.coef