DirichletBC(V, np.zeros(3), center, method="pointwise"), ] # Collect Boundary Conditions bcs = pulse.BoundaryConditions(dirichlet=(dirichlet_bc, )) # Create problem problem = pulse.MechanicsProblem(geometry, material, bcs) # Solve problem max_xi = [0.1, 0.15, 0.1] data = {} for i, sr in enumerate([2.05, 1.02, 0.48]): strain_ratio.assign(sr) Effs = [] Sffs = [] Esss = [] Ssss = [] for xi in np.linspace(0, max_xi[i], 10): try: pulse.iterate.iterate(problem, u0, Constant(xi), reinit_each_step=True) except pulse.mechanicsproblem.SolverDidNotConverge: continue S = problem.SecondPiolaStress() E = problem.GreenLagrangeStrain()
bcs = pulse.BoundaryConditions(dirichlet=dirichlet_bc, neumann=neumann_bc) fig, ax = plt.subplots() for material_model in ["neo_hookean", "guccione", "holzapfel_ogden"]: material = setup_material(material_model) problem = pulse.MechanicsProblem(geometry, material, bcs) pressures = [0.0] volumes = [geometry.cavity_volume()] for p in np.linspace(0, ED_pressure, 10)[1:]: pulse.iterate.iterate(problem, lvp, p) pressures.append(p) volumes.append(geometry.cavity_volume(u=problem.state.split()[0])) ax.plot(volumes, pressures, label=" ".join(material_model.split("_"))) # Reset pressure lvp.assign(Constant(0.0)) vs, ps = klotz_curve(ED_pressure) ax.plot(vs, ps, linestyle="--", label="Klotz curve") ax.legend(loc="best") ax.set_xlabel("Volume (ml)") ax.set_ylabel("Pressure (kPa)") plt.show() # plt.savefig("klotz_curve.png")